From eb54385dc1e255556cc5118b39a5ca2db737e69b Mon Sep 17 00:00:00 2001 From: tomvothecoder <tomvothecoder@gmail.com> Date: Thu, 7 Nov 2024 11:39:06 -0800 Subject: [PATCH] Update dask notebook --- .../parallel-computing-with-dask.ipynb | 1638 ++++++++++++++++- 1 file changed, 1620 insertions(+), 18 deletions(-) diff --git a/docs/examples/parallel-computing-with-dask.ipynb b/docs/examples/parallel-computing-with-dask.ipynb index 0b81bf46..0f591772 100644 --- a/docs/examples/parallel-computing-with-dask.ipynb +++ b/docs/examples/parallel-computing-with-dask.ipynb @@ -36,7 +36,7 @@ "Users can [install their own instance of xcdat](../getting-started-guide/installation.rst) and follow these examples using their own environment (e.g., with vscode, Jupyter, Spyder, iPython) or [enable xcdat with existing JupyterHub instances](../getting-started-guide/getting-started-hpc-jupyter.rst). The conda environment used in this notebook includes xcdat, xesmf, matplotlib, ipython, ipykernel, cartopy, and jupyter:\n", "\n", "```bash\n", - "conda create -n xcdat_notebook_dask -c conda-forge xcdat matplotlib ipython ipykernel cartopy nc-time-axis jupyter jupyter-server-proxy\n", + "conda create -n xcdat_notebook_dask -c conda-forge xcdat matplotlib ipython ipykernel cartopy nc-time-axis jupyter jupyter-server-proxy pooch\n", "```\n" ] }, @@ -303,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -345,9 +345,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-11-07 11:36:54,675 [INFO]: scheduler.py(__init__:1760) >> State start\n", + "2024-11-07 11:36:54,675 [INFO]: scheduler.py(__init__:1760) >> State start\n", + "2024-11-07 11:36:54,678 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-l7ftm53g', purging\n", + "2024-11-07 11:36:54,678 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-l7ftm53g', purging\n", + "2024-11-07 11:36:54,680 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-a_4k7kfp', purging\n", + "2024-11-07 11:36:54,680 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-a_4k7kfp', purging\n", + "2024-11-07 11:36:54,681 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/scheduler-n9nwbvdd', purging\n", + "2024-11-07 11:36:54,681 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/scheduler-n9nwbvdd', purging\n", + "2024-11-07 11:36:54,682 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-htp16phv', purging\n", + "2024-11-07 11:36:54,682 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-htp16phv', purging\n", + "2024-11-07 11:36:54,683 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-6i9eauc2', purging\n", + "2024-11-07 11:36:54,683 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/worker-6i9eauc2', purging\n", + "2024-11-07 11:36:54,684 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/scheduler-jglxxy3k', purging\n", + "2024-11-07 11:36:54,684 [INFO]: diskutils.py(_check_lock_or_purge:252) >> Found stale lock file and directory '/tmp/dask-scratch-space/scheduler-jglxxy3k', purging\n", + "2024-11-07 11:36:54,694 [INFO]: scheduler.py(start_unsafe:4222) >> Scheduler at: tcp://127.0.0.1:40291\n", + "2024-11-07 11:36:54,694 [INFO]: scheduler.py(start_unsafe:4222) >> Scheduler at: tcp://127.0.0.1:40291\n", + "2024-11-07 11:36:54,696 [INFO]: scheduler.py(start_unsafe:4237) >> dashboard at: http://127.0.0.1:8787/status\n", + "2024-11-07 11:36:54,696 [INFO]: scheduler.py(start_unsafe:4237) >> dashboard at: http://127.0.0.1:8787/status\n", + "2024-11-07 11:36:54,697 [INFO]: scheduler.py(register_worker_plugin:8063) >> Registering Worker plugin shuffle\n", + "2024-11-07 11:36:54,697 [INFO]: scheduler.py(register_worker_plugin:8063) >> Registering Worker plugin shuffle\n", + "2024-11-07 11:36:54,720 [INFO]: nanny.py(start_unsafe:368) >> Start Nanny at: 'tcp://127.0.0.1:42579'\n", + "2024-11-07 11:36:54,720 [INFO]: nanny.py(start_unsafe:368) >> Start Nanny at: 'tcp://127.0.0.1:42579'\n", + "2024-11-07 11:36:54,729 [INFO]: nanny.py(start_unsafe:368) >> Start Nanny at: 'tcp://127.0.0.1:45087'\n", + "2024-11-07 11:36:54,729 [INFO]: nanny.py(start_unsafe:368) >> Start Nanny at: 'tcp://127.0.0.1:45087'\n", + "2024-11-07 11:36:56,357 [INFO]: scheduler.py(add_worker:4576) >> Register worker <WorkerState 'tcp://127.0.0.1:44039', name: 0, status: init, memory: 0, processing: 0>\n", + "2024-11-07 11:36:56,357 [INFO]: scheduler.py(add_worker:4576) >> Register worker <WorkerState 'tcp://127.0.0.1:44039', name: 0, status: init, memory: 0, processing: 0>\n", + "2024-11-07 11:36:56,363 [INFO]: scheduler.py(handle_worker:6119) >> Starting worker compute stream, tcp://127.0.0.1:44039\n", + "2024-11-07 11:36:56,363 [INFO]: scheduler.py(handle_worker:6119) >> Starting worker compute stream, tcp://127.0.0.1:44039\n", + "2024-11-07 11:36:56,365 [INFO]: core.py(handle_stream:880) >> Starting established connection to tcp://127.0.0.1:60610\n", + "2024-11-07 11:36:56,365 [INFO]: core.py(handle_stream:880) >> Starting established connection to tcp://127.0.0.1:60610\n", + "2024-11-07 11:36:56,373 [INFO]: scheduler.py(add_worker:4576) >> Register worker <WorkerState 'tcp://127.0.0.1:39575', name: 1, status: init, memory: 0, processing: 0>\n", + "2024-11-07 11:36:56,373 [INFO]: scheduler.py(add_worker:4576) >> Register worker <WorkerState 'tcp://127.0.0.1:39575', name: 1, status: init, memory: 0, processing: 0>\n", + "2024-11-07 11:36:56,374 [INFO]: scheduler.py(handle_worker:6119) >> Starting worker compute stream, tcp://127.0.0.1:39575\n", + "2024-11-07 11:36:56,374 [INFO]: scheduler.py(handle_worker:6119) >> Starting worker compute stream, tcp://127.0.0.1:39575\n", + "2024-11-07 11:36:56,376 [INFO]: core.py(handle_stream:880) >> Starting established connection to tcp://127.0.0.1:60598\n", + "2024-11-07 11:36:56,376 [INFO]: core.py(handle_stream:880) >> Starting established connection to tcp://127.0.0.1:60598\n", + "2024-11-07 11:36:56,425 [INFO]: scheduler.py(add_client:5874) >> Receive client connection: Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:36:56,425 [INFO]: scheduler.py(add_client:5874) >> Receive client connection: Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:36:56,426 [INFO]: core.py(handle_stream:880) >> Starting established connection to tcp://127.0.0.1:60620\n", + "2024-11-07 11:36:56,426 [INFO]: core.py(handle_stream:880) >> Starting established connection to tcp://127.0.0.1:60620\n" + ] + } + ], "source": [ "from dask.distributed import Client, LocalCluster\n", "\n", @@ -360,9 +407,201 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5f1028ef99ef4397a8255625088e2677", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "<div class=\"jp-RenderedHTMLCommon jp-RenderedHTML jp-mod-trusted jp-OutputArea-output\">\n", + " <div style=\"width: 24px; height: 24px; background-color: #e1e1e1; border: 3px solid #9D9D9D; border-radius: 5px; position: absolute;\">\n", + " </div>\n", + " <div style=\"margin-left: 48px;\">\n", + " <h3 style=\"margin-bottom: 0px; margin-top: 0px;\">LocalCluster</h3>\n", + " <p style=\"color: #9D9D9D; margin-bottom: 0px;\">d1cd0b8b</p>\n", + " <table style=\"width: 100%; text-align: left;\">\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Dashboard:</strong> <a href=\"http://127.0.0.1:8787/status\" target=\"_blank\">http://127.0.0.1:8787/status</a>\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Workers:</strong> 2\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Total threads:</strong> 2\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Total memory:</strong> 7.45 GiB\n", + " </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <td style=\"text-align: left;\"><strong>Status:</strong> running</td>\n", + " <td style=\"text-align: left;\"><strong>Using processes:</strong> True</td>\n", + "</tr>\n", + "\n", + " \n", + " </table>\n", + "\n", + " <details>\n", + " <summary style=\"margin-bottom: 20px;\">\n", + " <h3 style=\"display: inline;\">Scheduler Info</h3>\n", + " </summary>\n", + "\n", + " <div style=\"\">\n", + " <div>\n", + " <div style=\"width: 24px; height: 24px; background-color: #FFF7E5; border: 3px solid #FF6132; border-radius: 5px; position: absolute;\"> </div>\n", + " <div style=\"margin-left: 48px;\">\n", + " <h3 style=\"margin-bottom: 0px;\">Scheduler</h3>\n", + " <p style=\"color: #9D9D9D; margin-bottom: 0px;\">Scheduler-fd19ca10-a8ad-40d8-adaa-0982602d0dc7</p>\n", + " <table style=\"width: 100%; text-align: left;\">\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Comm:</strong> tcp://127.0.0.1:40291\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Workers:</strong> 2\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Dashboard:</strong> <a href=\"http://127.0.0.1:8787/status\" target=\"_blank\">http://127.0.0.1:8787/status</a>\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Total threads:</strong> 2\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Started:</strong> Just now\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Total memory:</strong> 7.45 GiB\n", + " </td>\n", + " </tr>\n", + " </table>\n", + " </div>\n", + " </div>\n", + "\n", + " <details style=\"margin-left: 48px;\">\n", + " <summary style=\"margin-bottom: 20px;\">\n", + " <h3 style=\"display: inline;\">Workers</h3>\n", + " </summary>\n", + "\n", + " \n", + " <div style=\"margin-bottom: 20px;\">\n", + " <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n", + " <div style=\"margin-left: 48px;\">\n", + " <details>\n", + " <summary>\n", + " <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 0</h4>\n", + " </summary>\n", + " <table style=\"width: 100%; text-align: left;\">\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Comm: </strong> tcp://127.0.0.1:44039\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Total threads: </strong> 1\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:44557/status\" target=\"_blank\">http://127.0.0.1:44557/status</a>\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Memory: </strong> 3.73 GiB\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Nanny: </strong> tcp://127.0.0.1:42579\n", + " </td>\n", + " <td style=\"text-align: left;\"></td>\n", + " </tr>\n", + " <tr>\n", + " <td colspan=\"2\" style=\"text-align: left;\">\n", + " <strong>Local directory: </strong> /tmp/dask-scratch-space/worker-4_1tplq6\n", + " </td>\n", + " </tr>\n", + "\n", + " \n", + "\n", + " \n", + "\n", + " </table>\n", + " </details>\n", + " </div>\n", + " </div>\n", + " \n", + " <div style=\"margin-bottom: 20px;\">\n", + " <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n", + " <div style=\"margin-left: 48px;\">\n", + " <details>\n", + " <summary>\n", + " <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 1</h4>\n", + " </summary>\n", + " <table style=\"width: 100%; text-align: left;\">\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Comm: </strong> tcp://127.0.0.1:39575\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Total threads: </strong> 1\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:42253/status\" target=\"_blank\">http://127.0.0.1:42253/status</a>\n", + " </td>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Memory: </strong> 3.73 GiB\n", + " </td>\n", + " </tr>\n", + " <tr>\n", + " <td style=\"text-align: left;\">\n", + " <strong>Nanny: </strong> tcp://127.0.0.1:45087\n", + " </td>\n", + " <td style=\"text-align: left;\"></td>\n", + " </tr>\n", + " <tr>\n", + " <td colspan=\"2\" style=\"text-align: left;\">\n", + " <strong>Local directory: </strong> /tmp/dask-scratch-space/worker-ermlv8xf\n", + " </td>\n", + " </tr>\n", + "\n", + " \n", + "\n", + " \n", + "\n", + " </table>\n", + " </details>\n", + " </div>\n", + " </div>\n", + " \n", + "\n", + " </details>\n", + "</div>\n", + "\n", + " </details>\n", + " </div>\n", + "</div>" + ], + "text/plain": [ + "LocalCluster(d1cd0b8b, 'tcp://127.0.0.1:40291', workers=2, threads=2, memory=7.45 GiB)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "client.cluster" ] @@ -394,9 +633,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'http://127.0.0.1:8787/status'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "client.dashboard_link" ] @@ -411,9 +661,651 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "html[data-theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: inline-block;\n", + " opacity: 0;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:focus + label {\n", + " border: 2px solid var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.Dataset> Size: 40MB\n", + "Dimensions: (lat: 89, lon: 180, time: 624, bnds: 2)\n", + "Coordinates:\n", + " * lat (lat) float32 356B 88.0 86.0 84.0 82.0 ... -84.0 -86.0 -88.0\n", + " * lon (lon) float32 720B 0.0 2.0 4.0 6.0 ... 352.0 354.0 356.0 358.0\n", + " * time (time) datetime64[ns] 5kB 1970-01-01 1970-02-01 ... 2021-12-01\n", + "Dimensions without coordinates: bnds\n", + "Data variables:\n", + " time_bnds (time, bnds) datetime64[ns] 10kB 1970-01-01 ... 2022-01-01\n", + " sst (time, lat, lon) float32 40MB dask.array<chunksize=(624, 89, 180), meta=np.ndarray>\n", + " lon_bnds (lon, bnds) float32 1kB -1.0 1.0 1.0 3.0 ... 357.0 357.0 359.0\n", + " lat_bnds (lat, bnds) float32 712B 89.0 87.0 87.0 ... -87.0 -87.0 -89.0\n", + "Attributes: (12/37)\n", + " climatology: Climatology is based on 1971-2000 SST, Xue, Y....\n", + " description: In situ data: ICOADS2.5 before 2007 and NCEP i...\n", + " keywords_vocabulary: NASA Global Change Master Directory (GCMD) Sci...\n", + " keywords: Earth Science > Oceans > Ocean Temperature > S...\n", + " instrument: Conventional thermometers\n", + " source_comment: SSTs were observed by conventional thermometer...\n", + " ... ...\n", + " creator_url_original: https://www.ncei.noaa.gov\n", + " license: No constraints on data access or use\n", + " comment: SSTs were observed by conventional thermometer...\n", + " summary: ERSST.v5 is developed based on v4 after revisi...\n", + " dataset_title: NOAA Extended Reconstructed SST V5\n", + " data_modified: 2022-06-07</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-85c20307-6383-4e54-893a-bd0654c042a5' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-85c20307-6383-4e54-893a-bd0654c042a5' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>lat</span>: 89</li><li><span class='xr-has-index'>lon</span>: 180</li><li><span class='xr-has-index'>time</span>: 624</li><li><span>bnds</span>: 2</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-c91c5550-7383-4656-9c5c-7eca69a1d081' class='xr-section-summary-in' type='checkbox' checked><label for='section-c91c5550-7383-4656-9c5c-7eca69a1d081' class='xr-section-summary' >Coordinates: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>88.0 86.0 84.0 ... -86.0 -88.0</div><input id='attrs-83416f16-1034-4cfb-b18e-ae3a77266c82' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-83416f16-1034-4cfb-b18e-ae3a77266c82' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7a5ec36f-cf66-4674-8965-499c6899c39f' class='xr-var-data-in' type='checkbox'><label for='data-7a5ec36f-cf66-4674-8965-499c6899c39f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>long_name :</span></dt><dd>Latitude</dd><dt><span>actual_range :</span></dt><dd>[ 88. -88.]</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>axis :</span></dt><dd>Y</dd><dt><span>coordinate_defines :</span></dt><dd>center</dd><dt><span>bounds :</span></dt><dd>lat_bnds</dd></dl></div><div class='xr-var-data'><pre>array([ 88., 86., 84., 82., 80., 78., 76., 74., 72., 70., 68., 66.,\n", + " 64., 62., 60., 58., 56., 54., 52., 50., 48., 46., 44., 42.,\n", + " 40., 38., 36., 34., 32., 30., 28., 26., 24., 22., 20., 18.,\n", + " 16., 14., 12., 10., 8., 6., 4., 2., 0., -2., -4., -6.,\n", + " -8., -10., -12., -14., -16., -18., -20., -22., -24., -26., -28., -30.,\n", + " -32., -34., -36., -38., -40., -42., -44., -46., -48., -50., -52., -54.,\n", + " -56., -58., -60., -62., -64., -66., -68., -70., -72., -74., -76., -78.,\n", + " -80., -82., -84., -86., -88.], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>0.0 2.0 4.0 ... 354.0 356.0 358.0</div><input id='attrs-902b42db-35d4-409a-94d9-928b91815059' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-902b42db-35d4-409a-94d9-928b91815059' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1fe44bb6-f7ff-4a77-82d6-23eb317d762f' class='xr-var-data-in' type='checkbox'><label for='data-1fe44bb6-f7ff-4a77-82d6-23eb317d762f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>long_name :</span></dt><dd>Longitude</dd><dt><span>actual_range :</span></dt><dd>[ 0. 358.]</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>axis :</span></dt><dd>X</dd><dt><span>coordinate_defines :</span></dt><dd>center</dd><dt><span>bounds :</span></dt><dd>lon_bnds</dd></dl></div><div class='xr-var-data'><pre>array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22.,\n", + " 24., 26., 28., 30., 32., 34., 36., 38., 40., 42., 44., 46.,\n", + " 48., 50., 52., 54., 56., 58., 60., 62., 64., 66., 68., 70.,\n", + " 72., 74., 76., 78., 80., 82., 84., 86., 88., 90., 92., 94.,\n", + " 96., 98., 100., 102., 104., 106., 108., 110., 112., 114., 116., 118.,\n", + " 120., 122., 124., 126., 128., 130., 132., 134., 136., 138., 140., 142.,\n", + " 144., 146., 148., 150., 152., 154., 156., 158., 160., 162., 164., 166.,\n", + " 168., 170., 172., 174., 176., 178., 180., 182., 184., 186., 188., 190.,\n", + " 192., 194., 196., 198., 200., 202., 204., 206., 208., 210., 212., 214.,\n", + " 216., 218., 220., 222., 224., 226., 228., 230., 232., 234., 236., 238.,\n", + " 240., 242., 244., 246., 248., 250., 252., 254., 256., 258., 260., 262.,\n", + " 264., 266., 268., 270., 272., 274., 276., 278., 280., 282., 284., 286.,\n", + " 288., 290., 292., 294., 296., 298., 300., 302., 304., 306., 308., 310.,\n", + " 312., 314., 316., 318., 320., 322., 324., 326., 328., 330., 332., 334.,\n", + " 336., 338., 340., 342., 344., 346., 348., 350., 352., 354., 356., 358.],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1970-01-01 ... 2021-12-01</div><input id='attrs-e4516ce4-e230-4662-b552-7ad64a8ab342' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-e4516ce4-e230-4662-b552-7ad64a8ab342' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-139e33b0-3346-4615-9404-b4d1ae2bd056' class='xr-var-data-in' type='checkbox'><label for='data-139e33b0-3346-4615-9404-b4d1ae2bd056' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Time</dd><dt><span>delta_t :</span></dt><dd>0000-01-00 00:00:00</dd><dt><span>avg_period :</span></dt><dd>0000-01-00 00:00:00</dd><dt><span>prev_avg_period :</span></dt><dd>0000-00-07 00:00:00</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>axis :</span></dt><dd>T</dd><dt><span>actual_range :</span></dt><dd>[19723. 81204.]</dd><dt><span>bounds :</span></dt><dd>time_bnds</dd></dl></div><div class='xr-var-data'><pre>array(['1970-01-01T00:00:00.000000000', '1970-02-01T00:00:00.000000000',\n", + " '1970-03-01T00:00:00.000000000', ..., '2021-10-01T00:00:00.000000000',\n", + " '2021-11-01T00:00:00.000000000', '2021-12-01T00:00:00.000000000'],\n", + " dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-b1e19898-c476-496e-909e-a6227c5db27c' class='xr-section-summary-in' type='checkbox' checked><label for='section-b1e19898-c476-496e-909e-a6227c5db27c' class='xr-section-summary' >Data variables: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>time_bnds</span></div><div class='xr-var-dims'>(time, bnds)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1970-01-01 ... 2022-01-01</div><input id='attrs-1a7a15e5-b7ea-43f1-87bf-15ae01d8c2c6' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1a7a15e5-b7ea-43f1-87bf-15ae01d8c2c6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-14cf5ccc-e000-48b8-9e5f-9f4797bdd355' class='xr-var-data-in' type='checkbox'><label for='data-14cf5ccc-e000-48b8-9e5f-9f4797bdd355' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>xcdat_bounds :</span></dt><dd>True</dd></dl></div><div class='xr-var-data'><pre>array([['1970-01-01T00:00:00.000000000', '1970-02-01T00:00:00.000000000'],\n", + " ['1970-02-01T00:00:00.000000000', '1970-03-01T00:00:00.000000000'],\n", + " ['1970-03-01T00:00:00.000000000', '1970-04-01T00:00:00.000000000'],\n", + " ...,\n", + " ['2021-10-01T00:00:00.000000000', '2021-11-01T00:00:00.000000000'],\n", + " ['2021-11-01T00:00:00.000000000', '2021-12-01T00:00:00.000000000'],\n", + " ['2021-12-01T00:00:00.000000000', '2022-01-01T00:00:00.000000000']],\n", + " dtype='datetime64[ns]')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>sst</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(624, 89, 180), meta=np.ndarray></div><input id='attrs-08f7ea1a-fd27-4994-bb69-704278b4c3bc' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-08f7ea1a-fd27-4994-bb69-704278b4c3bc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-898d838f-3b01-4d90-b112-e6ebd860a01c' class='xr-var-data-in' type='checkbox'><label for='data-898d838f-3b01-4d90-b112-e6ebd860a01c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Monthly Means of Sea Surface Temperature</dd><dt><span>units :</span></dt><dd>degC</dd><dt><span>var_desc :</span></dt><dd>Sea Surface Temperature</dd><dt><span>level_desc :</span></dt><dd>Surface</dd><dt><span>statistic :</span></dt><dd>Mean</dd><dt><span>dataset :</span></dt><dd>NOAA Extended Reconstructed SST V5</dd><dt><span>parent_stat :</span></dt><dd>Individual Values</dd><dt><span>actual_range :</span></dt><dd>[-1.8 42.32636]</dd><dt><span>valid_range :</span></dt><dd>[-1.8 45. ]</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 38.13 MiB </td>\n", + " <td> 38.13 MiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (624, 89, 180) </td>\n", + " <td> (624, 89, 180) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 1 chunks in 2 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float32 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"174\" height=\"161\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"40\" x2=\"80\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"40\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,111.04878326244568 10.0,40.46054796832803\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"53\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"124\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"53\" y1=\"0\" x2=\"124\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 53.411877305308934,0.0 124.00011259942659,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"124\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"111\" x2=\"124\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"111\" style=\"stroke-width:2\" />\n", + " <line x1=\"124\" y1=\"70\" x2=\"124\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 124.00011259942659,70.58823529411765 124.00011259942659,111.04878326244568 80.58823529411765,111.04878326244568\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"102.294174\" y=\"131.048783\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >180</text>\n", + " <text x=\"144.000113\" y=\"90.818509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,144.000113,90.818509)\">89</text>\n", + " <text x=\"35.294118\" y=\"95.754666\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,95.754666)\">624</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon_bnds</span></div><div class='xr-var-dims'>(lon, bnds)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-1.0 1.0 1.0 ... 357.0 357.0 359.0</div><input id='attrs-94af746d-2c2b-4208-be81-f12938a158f2' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-94af746d-2c2b-4208-be81-f12938a158f2' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ec04599f-70ed-4d09-aa5d-d6b33cf8a021' class='xr-var-data-in' type='checkbox'><label for='data-ec04599f-70ed-4d09-aa5d-d6b33cf8a021' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>xcdat_bounds :</span></dt><dd>True</dd></dl></div><div class='xr-var-data'><pre>array([[ -1., 1.],\n", + " [ 1., 3.],\n", + " [ 3., 5.],\n", + " [ 5., 7.],\n", + " [ 7., 9.],\n", + " [ 9., 11.],\n", + " [ 11., 13.],\n", + " [ 13., 15.],\n", + " [ 15., 17.],\n", + " [ 17., 19.],\n", + " [ 19., 21.],\n", + " [ 21., 23.],\n", + " [ 23., 25.],\n", + " [ 25., 27.],\n", + " [ 27., 29.],\n", + " [ 29., 31.],\n", + " [ 31., 33.],\n", + " [ 33., 35.],\n", + " [ 35., 37.],\n", + " [ 37., 39.],\n", + "...\n", + " [319., 321.],\n", + " [321., 323.],\n", + " [323., 325.],\n", + " [325., 327.],\n", + " [327., 329.],\n", + " [329., 331.],\n", + " [331., 333.],\n", + " [333., 335.],\n", + " [335., 337.],\n", + " [337., 339.],\n", + " [339., 341.],\n", + " [341., 343.],\n", + " [343., 345.],\n", + " [345., 347.],\n", + " [347., 349.],\n", + " [349., 351.],\n", + " [351., 353.],\n", + " [353., 355.],\n", + " [355., 357.],\n", + " [357., 359.]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lat_bnds</span></div><div class='xr-var-dims'>(lat, bnds)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>89.0 87.0 87.0 ... -87.0 -89.0</div><input id='attrs-f9ba148c-e8b1-46af-90f2-a9ad9990260c' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-f9ba148c-e8b1-46af-90f2-a9ad9990260c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ae125bb3-a2ac-4057-9660-1d2007c581e2' class='xr-var-data-in' type='checkbox'><label for='data-ae125bb3-a2ac-4057-9660-1d2007c581e2' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>xcdat_bounds :</span></dt><dd>True</dd></dl></div><div class='xr-var-data'><pre>array([[ 89., 87.],\n", + " [ 87., 85.],\n", + " [ 85., 83.],\n", + " [ 83., 81.],\n", + " [ 81., 79.],\n", + " [ 79., 77.],\n", + " [ 77., 75.],\n", + " [ 75., 73.],\n", + " [ 73., 71.],\n", + " [ 71., 69.],\n", + " [ 69., 67.],\n", + " [ 67., 65.],\n", + " [ 65., 63.],\n", + " [ 63., 61.],\n", + " [ 61., 59.],\n", + " [ 59., 57.],\n", + " [ 57., 55.],\n", + " [ 55., 53.],\n", + " [ 53., 51.],\n", + " [ 51., 49.],\n", + "...\n", + " [-49., -51.],\n", + " [-51., -53.],\n", + " [-53., -55.],\n", + " [-55., -57.],\n", + " [-57., -59.],\n", + " [-59., -61.],\n", + " [-61., -63.],\n", + " [-63., -65.],\n", + " [-65., -67.],\n", + " [-67., -69.],\n", + " [-69., -71.],\n", + " [-71., -73.],\n", + " [-73., -75.],\n", + " [-75., -77.],\n", + " [-77., -79.],\n", + " [-79., -81.],\n", + " [-81., -83.],\n", + " [-83., -85.],\n", + " [-85., -87.],\n", + " [-87., -89.]], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-34f482b8-3f84-4988-b795-6e7104c9af6a' class='xr-section-summary-in' type='checkbox' ><label for='section-34f482b8-3f84-4988-b795-6e7104c9af6a' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-36750c44-800e-4ba7-9dc6-9b2311a52a57' class='xr-index-data-in' type='checkbox'/><label for='index-36750c44-800e-4ba7-9dc6-9b2311a52a57' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 88.0, 86.0, 84.0, 82.0, 80.0, 78.0, 76.0, 74.0, 72.0, 70.0,\n", + " 68.0, 66.0, 64.0, 62.0, 60.0, 58.0, 56.0, 54.0, 52.0, 50.0,\n", + " 48.0, 46.0, 44.0, 42.0, 40.0, 38.0, 36.0, 34.0, 32.0, 30.0,\n", + " 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0, 14.0, 12.0, 10.0,\n", + " 8.0, 6.0, 4.0, 2.0, 0.0, -2.0, -4.0, -6.0, -8.0, -10.0,\n", + " -12.0, -14.0, -16.0, -18.0, -20.0, -22.0, -24.0, -26.0, -28.0, -30.0,\n", + " -32.0, -34.0, -36.0, -38.0, -40.0, -42.0, -44.0, -46.0, -48.0, -50.0,\n", + " -52.0, -54.0, -56.0, -58.0, -60.0, -62.0, -64.0, -66.0, -68.0, -70.0,\n", + " -72.0, -74.0, -76.0, -78.0, -80.0, -82.0, -84.0, -86.0, -88.0],\n", + " dtype='float32', name='lat'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-9e32c34a-ccf8-463a-a711-e1c081d5b745' class='xr-index-data-in' type='checkbox'/><label for='index-9e32c34a-ccf8-463a-a711-e1c081d5b745' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0,\n", + " ...\n", + " 340.0, 342.0, 344.0, 346.0, 348.0, 350.0, 352.0, 354.0, 356.0, 358.0],\n", + " dtype='float32', name='lon', length=180))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-e311bf12-306d-4979-8989-74ad5867ca07' class='xr-index-data-in' type='checkbox'/><label for='index-e311bf12-306d-4979-8989-74ad5867ca07' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex(['1970-01-01', '1970-02-01', '1970-03-01', '1970-04-01',\n", + " '1970-05-01', '1970-06-01', '1970-07-01', '1970-08-01',\n", + " '1970-09-01', '1970-10-01',\n", + " ...\n", + " '2021-03-01', '2021-04-01', '2021-05-01', '2021-06-01',\n", + " '2021-07-01', '2021-08-01', '2021-09-01', '2021-10-01',\n", + " '2021-11-01', '2021-12-01'],\n", + " dtype='datetime64[ns]', name='time', length=624, freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-867982ec-4c39-4481-9b52-2d64b8bc0a92' class='xr-section-summary-in' type='checkbox' ><label for='section-867982ec-4c39-4481-9b52-2d64b8bc0a92' class='xr-section-summary' >Attributes: <span>(37)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>climatology :</span></dt><dd>Climatology is based on 1971-2000 SST, Xue, Y., T. M. Smith, and R. W. Reynolds, 2003: Interdecadal changes of 30-yr SST normals during 1871.2000. Journal of Climate, 16, 1601-1612.</dd><dt><span>description :</span></dt><dd>In situ data: ICOADS2.5 before 2007 and NCEP in situ data from 2008 to present. Ice data: HadISST ice before 2010 and NCEP ice after 2010.</dd><dt><span>keywords_vocabulary :</span></dt><dd>NASA Global Change Master Directory (GCMD) Science Keywords</dd><dt><span>keywords :</span></dt><dd>Earth Science > Oceans > Ocean Temperature > Sea Surface Temperature ></dd><dt><span>instrument :</span></dt><dd>Conventional thermometers</dd><dt><span>source_comment :</span></dt><dd>SSTs were observed by conventional thermometers in Buckets (insulated or un-insulated canvas and wooded buckets) or Engine Room Intaker</dd><dt><span>geospatial_lon_min :</span></dt><dd>-1.0</dd><dt><span>geospatial_lon_max :</span></dt><dd>359.0</dd><dt><span>geospatial_laty_max :</span></dt><dd>89.0</dd><dt><span>geospatial_laty_min :</span></dt><dd>-89.0</dd><dt><span>geospatial_lat_max :</span></dt><dd>89.0</dd><dt><span>geospatial_lat_min :</span></dt><dd>-89.0</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees_north</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees_east</dd><dt><span>cdm_data_type :</span></dt><dd>Grid</dd><dt><span>project :</span></dt><dd>NOAA Extended Reconstructed Sea Surface Temperature (ERSST)</dd><dt><span>original_publisher_url :</span></dt><dd>http://www.ncdc.noaa.gov</dd><dt><span>References :</span></dt><dd>https://www.ncdc.noaa.gov/data-access/marineocean-data/extended-reconstructed-sea-surface-temperature-ersst-v5 at NCEI and http://www.esrl.noaa.gov/psd/data/gridded/data.noaa.ersst.v5.html</dd><dt><span>source :</span></dt><dd>In situ data: ICOADS R3.0 before 2015, NCEP in situ GTS from 2016 to present, and Argo SST from 1999 to present. Ice data: HadISST2 ice before 2015, and NCEP ice after 2015</dd><dt><span>title :</span></dt><dd>NOAA ERSSTv5 (in situ only)</dd><dt><span>history :</span></dt><dd>created 07/2017 by PSD data using NCEI's ERSST V5 NetCDF values</dd><dt><span>institution :</span></dt><dd>This version written at NOAA/ESRL PSD: obtained from NOAA/NESDIS/National Centers for Environmental Information and time aggregated. Original Full Source: NOAA/NESDIS/NCEI/CCOG</dd><dt><span>citation :</span></dt><dd>Huang et al, 2017: Extended Reconstructed Sea Surface Temperatures Version 5 (ERSSTv5): Upgrades, Validations, and Intercomparisons. Journal of Climate, https://doi.org/10.1175/JCLI-D-16-0836.1</dd><dt><span>platform :</span></dt><dd>Ship and Buoy SSTs from ICOADS R3.0 and NCEP GTS</dd><dt><span>standard_name_vocabulary :</span></dt><dd>CF Standard Name Table (v40, 25 January 2017)</dd><dt><span>processing_level :</span></dt><dd>NOAA Level 4</dd><dt><span>Conventions :</span></dt><dd>CF-1.6, ACDD-1.3</dd><dt><span>metadata_link :</span></dt><dd>:metadata_link = https://doi.org/10.7289/V5T72FNM (original format)</dd><dt><span>creator_name :</span></dt><dd>Boyin Huang (original)</dd><dt><span>date_created :</span></dt><dd>2017-06-30T12:18:00Z (original)</dd><dt><span>product_version :</span></dt><dd>Version 5</dd><dt><span>creator_url_original :</span></dt><dd>https://www.ncei.noaa.gov</dd><dt><span>license :</span></dt><dd>No constraints on data access or use</dd><dt><span>comment :</span></dt><dd>SSTs were observed by conventional thermometers in Buckets (insulated or un-insulated canvas and wooded buckets), Engine Room Intakers, or floats and drifters</dd><dt><span>summary :</span></dt><dd>ERSST.v5 is developed based on v4 after revisions of 8 parameters using updated data sets and advanced knowledge of ERSST analysis</dd><dt><span>dataset_title :</span></dt><dd>NOAA Extended Reconstructed SST V5</dd><dt><span>data_modified :</span></dt><dd>2022-06-07</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.Dataset> Size: 40MB\n", + "Dimensions: (lat: 89, lon: 180, time: 624, bnds: 2)\n", + "Coordinates:\n", + " * lat (lat) float32 356B 88.0 86.0 84.0 82.0 ... -84.0 -86.0 -88.0\n", + " * lon (lon) float32 720B 0.0 2.0 4.0 6.0 ... 352.0 354.0 356.0 358.0\n", + " * time (time) datetime64[ns] 5kB 1970-01-01 1970-02-01 ... 2021-12-01\n", + "Dimensions without coordinates: bnds\n", + "Data variables:\n", + " time_bnds (time, bnds) datetime64[ns] 10kB 1970-01-01 ... 2022-01-01\n", + " sst (time, lat, lon) float32 40MB dask.array<chunksize=(624, 89, 180), meta=np.ndarray>\n", + " lon_bnds (lon, bnds) float32 1kB -1.0 1.0 1.0 3.0 ... 357.0 357.0 359.0\n", + " lat_bnds (lat, bnds) float32 712B 89.0 87.0 87.0 ... -87.0 -87.0 -89.0\n", + "Attributes: (12/37)\n", + " climatology: Climatology is based on 1971-2000 SST, Xue, Y....\n", + " description: In situ data: ICOADS2.5 before 2007 and NCEP i...\n", + " keywords_vocabulary: NASA Global Change Master Directory (GCMD) Sci...\n", + " keywords: Earth Science > Oceans > Ocean Temperature > S...\n", + " instrument: Conventional thermometers\n", + " source_comment: SSTs were observed by conventional thermometer...\n", + " ... ...\n", + " creator_url_original: https://www.ncei.noaa.gov\n", + " license: No constraints on data access or use\n", + " comment: SSTs were observed by conventional thermometer...\n", + " summary: ERSST.v5 is developed based on v4 after revisi...\n", + " dataset_title: NOAA Extended Reconstructed SST V5\n", + " data_modified: 2022-06-07" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "ds = xc.tutorial.open_dataset(\"ersstv5\", chunks=\"auto\")\n", "\n", @@ -468,9 +1360,687 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", + "<defs>\n", + "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", + "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", + "</symbol>\n", + "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", + "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", + "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", + "</symbol>\n", + "</defs>\n", + "</svg>\n", + "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", + " *\n", + " */\n", + "\n", + ":root {\n", + " --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", + " --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", + " --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", + " --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", + " --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", + " --xr-background-color: var(--jp-layout-color0, white);\n", + " --xr-background-color-row-even: var(--jp-layout-color1, white);\n", + " --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", + "}\n", + "\n", + "html[theme=dark],\n", + "html[data-theme=dark],\n", + "body[data-theme=dark],\n", + "body.vscode-dark {\n", + " --xr-font-color0: rgba(255, 255, 255, 1);\n", + " --xr-font-color2: rgba(255, 255, 255, 0.54);\n", + " --xr-font-color3: rgba(255, 255, 255, 0.38);\n", + " --xr-border-color: #1F1F1F;\n", + " --xr-disabled-color: #515151;\n", + " --xr-background-color: #111111;\n", + " --xr-background-color-row-even: #111111;\n", + " --xr-background-color-row-odd: #313131;\n", + "}\n", + "\n", + ".xr-wrap {\n", + " display: block !important;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", + "\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", + "\n", + ".xr-header {\n", + " padding-top: 6px;\n", + " padding-bottom: 6px;\n", + " margin-bottom: 4px;\n", + " border-bottom: solid 1px var(--xr-border-color);\n", + "}\n", + "\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", + "\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n", + "}\n", + "\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-section-item input {\n", + " display: inline-block;\n", + " opacity: 0;\n", + "}\n", + "\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-item input:focus + label {\n", + " border: 2px solid var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", + "\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", + "\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-section-summary-in + label:before {\n", + " display: inline-block;\n", + " content: '►';\n", + " font-size: 11px;\n", + " width: 15px;\n", + " text-align: center;\n", + "}\n", + "\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label:before {\n", + " content: '▼';\n", + "}\n", + "\n", + ".xr-section-summary-in:checked + label > span {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-section-summary,\n", + ".xr-section-inline-details {\n", + " padding-top: 4px;\n", + " padding-bottom: 4px;\n", + "}\n", + "\n", + ".xr-section-inline-details {\n", + " grid-column: 2 / -1;\n", + "}\n", + "\n", + ".xr-section-details {\n", + " display: none;\n", + " grid-column: 1 / -1;\n", + " margin-bottom: 5px;\n", + "}\n", + "\n", + ".xr-section-summary-in:checked ~ .xr-section-details {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-array-wrap {\n", + " grid-column: 1 / -1;\n", + " display: grid;\n", + " grid-template-columns: 20px auto;\n", + "}\n", + "\n", + ".xr-array-wrap > label {\n", + " grid-column: 1;\n", + " vertical-align: top;\n", + "}\n", + "\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", + "\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", + "\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", + "\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", + "\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", + "\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", + "\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", + "\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", + "\n", + ".xr-var-item > div,\n", + ".xr-var-item label,\n", + ".xr-var-item > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-even);\n", + " margin-bottom: 0;\n", + "}\n", + "\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", + "\n", + ".xr-var-list > li:nth-child(odd) > div,\n", + ".xr-var-list > li:nth-child(odd) > label,\n", + ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", + " background-color: var(--xr-background-color-row-odd);\n", + "}\n", + "\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", + "\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", + "\n", + ".xr-index-preview {\n", + " grid-column: 2 / 5;\n", + " color: var(--xr-font-color2);\n", + "}\n", + "\n", + ".xr-var-name,\n", + ".xr-var-dims,\n", + ".xr-var-dtype,\n", + ".xr-preview,\n", + ".xr-attrs dt {\n", + " white-space: nowrap;\n", + " overflow: hidden;\n", + " text-overflow: ellipsis;\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-var-name:hover,\n", + ".xr-var-dims:hover,\n", + ".xr-var-dtype:hover,\n", + ".xr-attrs dt:hover {\n", + " overflow: visible;\n", + " width: auto;\n", + " z-index: 1;\n", + "}\n", + "\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " display: none;\n", + " background-color: var(--xr-background-color) !important;\n", + " padding-bottom: 5px !important;\n", + "}\n", + "\n", + ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", + ".xr-var-data-in:checked ~ .xr-var-data,\n", + ".xr-index-data-in:checked ~ .xr-index-data {\n", + " display: block;\n", + "}\n", + "\n", + ".xr-var-data > table {\n", + " float: right;\n", + "}\n", + "\n", + ".xr-var-name span,\n", + ".xr-var-data,\n", + ".xr-index-name div,\n", + ".xr-index-data,\n", + ".xr-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-data,\n", + ".xr-index-data {\n", + " grid-column: 1 / -1;\n", + "}\n", + "\n", + "dl.xr-attrs {\n", + " padding: 0;\n", + " margin: 0;\n", + " display: grid;\n", + " grid-template-columns: 125px auto;\n", + "}\n", + "\n", + ".xr-attrs dt,\n", + ".xr-attrs dd {\n", + " padding: 0;\n", + " margin: 0;\n", + " float: left;\n", + " padding-right: 10px;\n", + " width: auto;\n", + "}\n", + "\n", + ".xr-attrs dt {\n", + " font-weight: normal;\n", + " grid-column: 1;\n", + "}\n", + "\n", + ".xr-attrs dt:hover span {\n", + " display: inline-block;\n", + " background: var(--xr-background-color);\n", + " padding-right: 10px;\n", + "}\n", + "\n", + ".xr-attrs dd {\n", + " grid-column: 2;\n", + " white-space: pre-wrap;\n", + " word-break: break-all;\n", + "}\n", + "\n", + ".xr-icon-database,\n", + ".xr-icon-file-text2,\n", + ".xr-no-icon {\n", + " display: inline-block;\n", + " vertical-align: middle;\n", + " width: 1em;\n", + " height: 1.5em !important;\n", + " stroke-width: 0;\n", + " stroke: currentColor;\n", + " fill: currentColor;\n", + "}\n", + "</style><pre class='xr-text-repr-fallback'><xarray.Dataset> Size: 80MB\n", + "Dimensions: (lat: 89, lon: 180, bnds: 2, time: 624)\n", + "Coordinates:\n", + " * lat (lat) float32 356B 88.0 86.0 84.0 82.0 ... -82.0 -84.0 -86.0 -88.0\n", + " * lon (lon) float32 720B 0.0 2.0 4.0 6.0 8.0 ... 352.0 354.0 356.0 358.0\n", + " * time (time) object 5kB 1970-01-01 00:00:00 ... 2021-12-01 00:00:00\n", + "Dimensions without coordinates: bnds\n", + "Data variables:\n", + " lon_bnds (lon, bnds) float32 1kB -1.0 1.0 1.0 3.0 ... 357.0 357.0 359.0\n", + " lat_bnds (lat, bnds) float32 712B 89.0 87.0 87.0 85.0 ... -87.0 -87.0 -89.0\n", + " sst (time, lat, lon) float64 80MB dask.array<chunksize=(1, 89, 180), meta=np.ndarray>\n", + "Attributes: (12/37)\n", + " climatology: Climatology is based on 1971-2000 SST, Xue, Y....\n", + " description: In situ data: ICOADS2.5 before 2007 and NCEP i...\n", + " keywords_vocabulary: NASA Global Change Master Directory (GCMD) Sci...\n", + " keywords: Earth Science > Oceans > Ocean Temperature > S...\n", + " instrument: Conventional thermometers\n", + " source_comment: SSTs were observed by conventional thermometer...\n", + " ... ...\n", + " creator_url_original: https://www.ncei.noaa.gov\n", + " license: No constraints on data access or use\n", + " comment: SSTs were observed by conventional thermometer...\n", + " summary: ERSST.v5 is developed based on v4 after revisi...\n", + " dataset_title: NOAA Extended Reconstructed SST V5\n", + " data_modified: 2022-06-07</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-2f54c256-2e5c-4cc5-a097-bc891d6d892f' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-2f54c256-2e5c-4cc5-a097-bc891d6d892f' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>lat</span>: 89</li><li><span class='xr-has-index'>lon</span>: 180</li><li><span>bnds</span>: 2</li><li><span class='xr-has-index'>time</span>: 624</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-a5696254-5ce3-4e8e-8e2a-e2a148adfd7a' class='xr-section-summary-in' type='checkbox' checked><label for='section-a5696254-5ce3-4e8e-8e2a-e2a148adfd7a' class='xr-section-summary' >Coordinates: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>88.0 86.0 84.0 ... -86.0 -88.0</div><input id='attrs-6fed684a-207e-4a69-91dd-fa01bc2229d2' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-6fed684a-207e-4a69-91dd-fa01bc2229d2' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-383d4a2d-da81-4513-8577-a669e7c794ff' class='xr-var-data-in' type='checkbox'><label for='data-383d4a2d-da81-4513-8577-a669e7c794ff' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>long_name :</span></dt><dd>Latitude</dd><dt><span>actual_range :</span></dt><dd>[ 88. -88.]</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>axis :</span></dt><dd>Y</dd><dt><span>coordinate_defines :</span></dt><dd>center</dd><dt><span>bounds :</span></dt><dd>lat_bnds</dd></dl></div><div class='xr-var-data'><pre>array([ 88., 86., 84., 82., 80., 78., 76., 74., 72., 70., 68., 66.,\n", + " 64., 62., 60., 58., 56., 54., 52., 50., 48., 46., 44., 42.,\n", + " 40., 38., 36., 34., 32., 30., 28., 26., 24., 22., 20., 18.,\n", + " 16., 14., 12., 10., 8., 6., 4., 2., 0., -2., -4., -6.,\n", + " -8., -10., -12., -14., -16., -18., -20., -22., -24., -26., -28., -30.,\n", + " -32., -34., -36., -38., -40., -42., -44., -46., -48., -50., -52., -54.,\n", + " -56., -58., -60., -62., -64., -66., -68., -70., -72., -74., -76., -78.,\n", + " -80., -82., -84., -86., -88.], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>0.0 2.0 4.0 ... 354.0 356.0 358.0</div><input id='attrs-bf846f79-8795-438c-b970-5e67d23d2107' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-bf846f79-8795-438c-b970-5e67d23d2107' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-884e8085-1f58-4bbc-8366-4e8767338837' class='xr-var-data-in' type='checkbox'><label for='data-884e8085-1f58-4bbc-8366-4e8767338837' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>long_name :</span></dt><dd>Longitude</dd><dt><span>actual_range :</span></dt><dd>[ 0. 358.]</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>axis :</span></dt><dd>X</dd><dt><span>coordinate_defines :</span></dt><dd>center</dd><dt><span>bounds :</span></dt><dd>lon_bnds</dd></dl></div><div class='xr-var-data'><pre>array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20., 22.,\n", + " 24., 26., 28., 30., 32., 34., 36., 38., 40., 42., 44., 46.,\n", + " 48., 50., 52., 54., 56., 58., 60., 62., 64., 66., 68., 70.,\n", + " 72., 74., 76., 78., 80., 82., 84., 86., 88., 90., 92., 94.,\n", + " 96., 98., 100., 102., 104., 106., 108., 110., 112., 114., 116., 118.,\n", + " 120., 122., 124., 126., 128., 130., 132., 134., 136., 138., 140., 142.,\n", + " 144., 146., 148., 150., 152., 154., 156., 158., 160., 162., 164., 166.,\n", + " 168., 170., 172., 174., 176., 178., 180., 182., 184., 186., 188., 190.,\n", + " 192., 194., 196., 198., 200., 202., 204., 206., 208., 210., 212., 214.,\n", + " 216., 218., 220., 222., 224., 226., 228., 230., 232., 234., 236., 238.,\n", + " 240., 242., 244., 246., 248., 250., 252., 254., 256., 258., 260., 262.,\n", + " 264., 266., 268., 270., 272., 274., 276., 278., 280., 282., 284., 286.,\n", + " 288., 290., 292., 294., 296., 298., 300., 302., 304., 306., 308., 310.,\n", + " 312., 314., 316., 318., 320., 322., 324., 326., 328., 330., 332., 334.,\n", + " 336., 338., 340., 342., 344., 346., 348., 350., 352., 354., 356., 358.],\n", + " dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>object</div><div class='xr-var-preview xr-preview'>1970-01-01 00:00:00 ... 2021-12-...</div><input id='attrs-dc5804df-d6f3-4768-9504-390431599c71' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-dc5804df-d6f3-4768-9504-390431599c71' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bf73d305-999a-4564-b6ef-5f453bef40b2' class='xr-var-data-in' type='checkbox'><label for='data-bf73d305-999a-4564-b6ef-5f453bef40b2' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Time</dd><dt><span>delta_t :</span></dt><dd>0000-01-00 00:00:00</dd><dt><span>avg_period :</span></dt><dd>0000-01-00 00:00:00</dd><dt><span>prev_avg_period :</span></dt><dd>0000-00-07 00:00:00</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>axis :</span></dt><dd>T</dd><dt><span>actual_range :</span></dt><dd>[19723. 81204.]</dd><dt><span>bounds :</span></dt><dd>time_bnds</dd></dl></div><div class='xr-var-data'><pre>array([cftime.DatetimeProlepticGregorian(1970, 1, 1, 0, 0, 0, 0, has_year_zero=True),\n", + " cftime.DatetimeProlepticGregorian(1970, 2, 1, 0, 0, 0, 0, has_year_zero=True),\n", + " cftime.DatetimeProlepticGregorian(1970, 3, 1, 0, 0, 0, 0, has_year_zero=True),\n", + " ...,\n", + " cftime.DatetimeProlepticGregorian(2021, 10, 1, 0, 0, 0, 0, has_year_zero=True),\n", + " cftime.DatetimeProlepticGregorian(2021, 11, 1, 0, 0, 0, 0, has_year_zero=True),\n", + " cftime.DatetimeProlepticGregorian(2021, 12, 1, 0, 0, 0, 0, has_year_zero=True)],\n", + " dtype=object)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-205e6aa7-7216-4538-9c83-21ae8ae2d9f4' class='xr-section-summary-in' type='checkbox' checked><label for='section-205e6aa7-7216-4538-9c83-21ae8ae2d9f4' class='xr-section-summary' >Data variables: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>lon_bnds</span></div><div class='xr-var-dims'>(lon, bnds)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-1.0 1.0 1.0 ... 357.0 357.0 359.0</div><input id='attrs-b9fa3ea6-3752-4a9b-9653-eb85213574e7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b9fa3ea6-3752-4a9b-9653-eb85213574e7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3912016b-5866-4992-a1b2-9708a53ffa4f' class='xr-var-data-in' type='checkbox'><label for='data-3912016b-5866-4992-a1b2-9708a53ffa4f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>xcdat_bounds :</span></dt><dd>True</dd></dl></div><div class='xr-var-data'><pre>array([[ -1., 1.],\n", + " [ 1., 3.],\n", + " [ 3., 5.],\n", + " [ 5., 7.],\n", + " [ 7., 9.],\n", + " [ 9., 11.],\n", + " [ 11., 13.],\n", + " [ 13., 15.],\n", + " [ 15., 17.],\n", + " [ 17., 19.],\n", + " [ 19., 21.],\n", + " [ 21., 23.],\n", + " [ 23., 25.],\n", + " [ 25., 27.],\n", + " [ 27., 29.],\n", + " [ 29., 31.],\n", + " [ 31., 33.],\n", + " [ 33., 35.],\n", + " [ 35., 37.],\n", + " [ 37., 39.],\n", + "...\n", + " [319., 321.],\n", + " [321., 323.],\n", + " [323., 325.],\n", + " [325., 327.],\n", + " [327., 329.],\n", + " [329., 331.],\n", + " [331., 333.],\n", + " [333., 335.],\n", + " [335., 337.],\n", + " [337., 339.],\n", + " [339., 341.],\n", + " [341., 343.],\n", + " [343., 345.],\n", + " [345., 347.],\n", + " [347., 349.],\n", + " [349., 351.],\n", + " [351., 353.],\n", + " [353., 355.],\n", + " [355., 357.],\n", + " [357., 359.]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lat_bnds</span></div><div class='xr-var-dims'>(lat, bnds)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>89.0 87.0 87.0 ... -87.0 -89.0</div><input id='attrs-c98fd4a9-3d9b-4a4d-bb13-fa640f4a2416' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-c98fd4a9-3d9b-4a4d-bb13-fa640f4a2416' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-061f0096-d87f-46b6-b7ea-58d5dd03f2fb' class='xr-var-data-in' type='checkbox'><label for='data-061f0096-d87f-46b6-b7ea-58d5dd03f2fb' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>xcdat_bounds :</span></dt><dd>True</dd></dl></div><div class='xr-var-data'><pre>array([[ 89., 87.],\n", + " [ 87., 85.],\n", + " [ 85., 83.],\n", + " [ 83., 81.],\n", + " [ 81., 79.],\n", + " [ 79., 77.],\n", + " [ 77., 75.],\n", + " [ 75., 73.],\n", + " [ 73., 71.],\n", + " [ 71., 69.],\n", + " [ 69., 67.],\n", + " [ 67., 65.],\n", + " [ 65., 63.],\n", + " [ 63., 61.],\n", + " [ 61., 59.],\n", + " [ 59., 57.],\n", + " [ 57., 55.],\n", + " [ 55., 53.],\n", + " [ 53., 51.],\n", + " [ 51., 49.],\n", + "...\n", + " [-49., -51.],\n", + " [-51., -53.],\n", + " [-53., -55.],\n", + " [-55., -57.],\n", + " [-57., -59.],\n", + " [-59., -61.],\n", + " [-61., -63.],\n", + " [-63., -65.],\n", + " [-65., -67.],\n", + " [-67., -69.],\n", + " [-69., -71.],\n", + " [-71., -73.],\n", + " [-73., -75.],\n", + " [-75., -77.],\n", + " [-77., -79.],\n", + " [-79., -81.],\n", + " [-81., -83.],\n", + " [-83., -85.],\n", + " [-85., -87.],\n", + " [-87., -89.]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>sst</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1, 89, 180), meta=np.ndarray></div><input id='attrs-b3c5113f-53dd-434c-abbf-6e9a29a7bd60' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-b3c5113f-53dd-434c-abbf-6e9a29a7bd60' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b9d5e026-22e4-4f01-a7c4-38b349814f64' class='xr-var-data-in' type='checkbox'><label for='data-b9d5e026-22e4-4f01-a7c4-38b349814f64' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>Monthly Means of Sea Surface Temperature</dd><dt><span>units :</span></dt><dd>degC</dd><dt><span>var_desc :</span></dt><dd>Sea Surface Temperature</dd><dt><span>level_desc :</span></dt><dd>Surface</dd><dt><span>statistic :</span></dt><dd>Mean</dd><dt><span>dataset :</span></dt><dd>NOAA Extended Reconstructed SST V5</dd><dt><span>parent_stat :</span></dt><dd>Individual Values</dd><dt><span>actual_range :</span></dt><dd>[-1.8 42.32636]</dd><dt><span>valid_range :</span></dt><dd>[-1.8 45. ]</dd><dt><span>operation :</span></dt><dd>temporal_avg</dd><dt><span>mode :</span></dt><dd>group_average</dd><dt><span>freq :</span></dt><dd>month</dd><dt><span>weighted :</span></dt><dd>True</dd></dl></div><div class='xr-var-data'><table>\n", + " <tr>\n", + " <td>\n", + " <table style=\"border-collapse: collapse;\">\n", + " <thead>\n", + " <tr>\n", + " <td> </td>\n", + " <th> Array </th>\n", + " <th> Chunk </th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " \n", + " <tr>\n", + " <th> Bytes </th>\n", + " <td> 76.27 MiB </td>\n", + " <td> 125.16 kiB </td>\n", + " </tr>\n", + " \n", + " <tr>\n", + " <th> Shape </th>\n", + " <td> (624, 89, 180) </td>\n", + " <td> (1, 89, 180) </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Dask graph </th>\n", + " <td colspan=\"2\"> 624 chunks in 6251 graph layers </td>\n", + " </tr>\n", + " <tr>\n", + " <th> Data type </th>\n", + " <td colspan=\"2\"> float64 numpy.ndarray </td>\n", + " </tr>\n", + " </tbody>\n", + " </table>\n", + " </td>\n", + " <td>\n", + " <svg width=\"174\" height=\"161\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"10\" y1=\"40\" x2=\"80\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"40\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"44\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"47\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"51\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"55\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"28\" y2=\"59\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"32\" y2=\"62\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"35\" y2=\"66\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"39\" y2=\"70\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"43\" y2=\"73\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"47\" y2=\"77\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"50\" y2=\"81\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"54\" y2=\"85\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"58\" y2=\"88\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"61\" y2=\"92\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"65\" y2=\"96\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"69\" y2=\"99\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"73\" y2=\"103\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"76\" y2=\"107\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 80.58823529411765,70.58823529411765 80.58823529411765,111.04878326244568 10.0,40.46054796832803\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"53\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"13\" y1=\"3\" x2=\"57\" y2=\"3\" />\n", + " <line x1=\"17\" y1=\"7\" x2=\"60\" y2=\"7\" />\n", + " <line x1=\"21\" y1=\"11\" x2=\"64\" y2=\"11\" />\n", + " <line x1=\"24\" y1=\"14\" x2=\"68\" y2=\"14\" />\n", + " <line x1=\"28\" y1=\"18\" x2=\"71\" y2=\"18\" />\n", + " <line x1=\"32\" y1=\"22\" x2=\"75\" y2=\"22\" />\n", + " <line x1=\"35\" y1=\"25\" x2=\"79\" y2=\"25\" />\n", + " <line x1=\"39\" y1=\"29\" x2=\"83\" y2=\"29\" />\n", + " <line x1=\"43\" y1=\"33\" x2=\"86\" y2=\"33\" />\n", + " <line x1=\"47\" y1=\"37\" x2=\"90\" y2=\"37\" />\n", + " <line x1=\"50\" y1=\"40\" x2=\"94\" y2=\"40\" />\n", + " <line x1=\"54\" y1=\"44\" x2=\"97\" y2=\"44\" />\n", + " <line x1=\"58\" y1=\"48\" x2=\"101\" y2=\"48\" />\n", + " <line x1=\"61\" y1=\"51\" x2=\"105\" y2=\"51\" />\n", + " <line x1=\"65\" y1=\"55\" x2=\"109\" y2=\"55\" />\n", + " <line x1=\"69\" y1=\"59\" x2=\"112\" y2=\"59\" />\n", + " <line x1=\"73\" y1=\"63\" x2=\"116\" y2=\"63\" />\n", + " <line x1=\"76\" y1=\"66\" x2=\"120\" y2=\"66\" />\n", + " <line x1=\"80\" y1=\"70\" x2=\"124\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"10\" y1=\"0\" x2=\"80\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"53\" y1=\"0\" x2=\"124\" y2=\"70\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"10.0,0.0 53.411877305308934,0.0 124.00011259942659,70.58823529411765 80.58823529411765,70.58823529411765\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"124\" y2=\"70\" style=\"stroke-width:2\" />\n", + " <line x1=\"80\" y1=\"111\" x2=\"124\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"80\" y1=\"70\" x2=\"80\" y2=\"111\" style=\"stroke-width:2\" />\n", + " <line x1=\"124\" y1=\"70\" x2=\"124\" y2=\"111\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"80.58823529411765,70.58823529411765 124.00011259942659,70.58823529411765 124.00011259942659,111.04878326244568 80.58823529411765,111.04878326244568\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"102.294174\" y=\"131.048783\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >180</text>\n", + " <text x=\"144.000113\" y=\"90.818509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,144.000113,90.818509)\">89</text>\n", + " <text x=\"35.294118\" y=\"95.754666\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,35.294118,95.754666)\">624</text>\n", + "</svg>\n", + " </td>\n", + " </tr>\n", + "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-832c3d4f-1f8e-46cd-bacf-f72d99701813' class='xr-section-summary-in' type='checkbox' ><label for='section-832c3d4f-1f8e-46cd-bacf-f72d99701813' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>lat</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-8a3a160b-bc36-4e3a-8972-ce110ba30923' class='xr-index-data-in' type='checkbox'/><label for='index-8a3a160b-bc36-4e3a-8972-ce110ba30923' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 88.0, 86.0, 84.0, 82.0, 80.0, 78.0, 76.0, 74.0, 72.0, 70.0,\n", + " 68.0, 66.0, 64.0, 62.0, 60.0, 58.0, 56.0, 54.0, 52.0, 50.0,\n", + " 48.0, 46.0, 44.0, 42.0, 40.0, 38.0, 36.0, 34.0, 32.0, 30.0,\n", + " 28.0, 26.0, 24.0, 22.0, 20.0, 18.0, 16.0, 14.0, 12.0, 10.0,\n", + " 8.0, 6.0, 4.0, 2.0, 0.0, -2.0, -4.0, -6.0, -8.0, -10.0,\n", + " -12.0, -14.0, -16.0, -18.0, -20.0, -22.0, -24.0, -26.0, -28.0, -30.0,\n", + " -32.0, -34.0, -36.0, -38.0, -40.0, -42.0, -44.0, -46.0, -48.0, -50.0,\n", + " -52.0, -54.0, -56.0, -58.0, -60.0, -62.0, -64.0, -66.0, -68.0, -70.0,\n", + " -72.0, -74.0, -76.0, -78.0, -80.0, -82.0, -84.0, -86.0, -88.0],\n", + " dtype='float32', name='lat'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-5441da58-2031-4d00-9531-0aa446b9156d' class='xr-index-data-in' type='checkbox'/><label for='index-5441da58-2031-4d00-9531-0aa446b9156d' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0,\n", + " ...\n", + " 340.0, 342.0, 344.0, 346.0, 348.0, 350.0, 352.0, 354.0, 356.0, 358.0],\n", + " dtype='float32', name='lon', length=180))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-f4d61b78-2b29-4a75-91c5-da54c7b8def2' class='xr-index-data-in' type='checkbox'/><label for='index-f4d61b78-2b29-4a75-91c5-da54c7b8def2' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(CFTimeIndex([1970-01-01 00:00:00, 1970-02-01 00:00:00, 1970-03-01 00:00:00,\n", + " 1970-04-01 00:00:00, 1970-05-01 00:00:00, 1970-06-01 00:00:00,\n", + " 1970-07-01 00:00:00, 1970-08-01 00:00:00, 1970-09-01 00:00:00,\n", + " 1970-10-01 00:00:00,\n", + " ...\n", + " 2021-03-01 00:00:00, 2021-04-01 00:00:00, 2021-05-01 00:00:00,\n", + " 2021-06-01 00:00:00, 2021-07-01 00:00:00, 2021-08-01 00:00:00,\n", + " 2021-09-01 00:00:00, 2021-10-01 00:00:00, 2021-11-01 00:00:00,\n", + " 2021-12-01 00:00:00],\n", + " dtype='object',\n", + " length=624,\n", + " calendar='proleptic_gregorian',\n", + " freq='MS'))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-0e4e9a40-6c10-497b-856d-3d895108b774' class='xr-section-summary-in' type='checkbox' ><label for='section-0e4e9a40-6c10-497b-856d-3d895108b774' class='xr-section-summary' >Attributes: <span>(37)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>climatology :</span></dt><dd>Climatology is based on 1971-2000 SST, Xue, Y., T. M. Smith, and R. W. Reynolds, 2003: Interdecadal changes of 30-yr SST normals during 1871.2000. Journal of Climate, 16, 1601-1612.</dd><dt><span>description :</span></dt><dd>In situ data: ICOADS2.5 before 2007 and NCEP in situ data from 2008 to present. Ice data: HadISST ice before 2010 and NCEP ice after 2010.</dd><dt><span>keywords_vocabulary :</span></dt><dd>NASA Global Change Master Directory (GCMD) Science Keywords</dd><dt><span>keywords :</span></dt><dd>Earth Science > Oceans > Ocean Temperature > Sea Surface Temperature ></dd><dt><span>instrument :</span></dt><dd>Conventional thermometers</dd><dt><span>source_comment :</span></dt><dd>SSTs were observed by conventional thermometers in Buckets (insulated or un-insulated canvas and wooded buckets) or Engine Room Intaker</dd><dt><span>geospatial_lon_min :</span></dt><dd>-1.0</dd><dt><span>geospatial_lon_max :</span></dt><dd>359.0</dd><dt><span>geospatial_laty_max :</span></dt><dd>89.0</dd><dt><span>geospatial_laty_min :</span></dt><dd>-89.0</dd><dt><span>geospatial_lat_max :</span></dt><dd>89.0</dd><dt><span>geospatial_lat_min :</span></dt><dd>-89.0</dd><dt><span>geospatial_lat_units :</span></dt><dd>degrees_north</dd><dt><span>geospatial_lon_units :</span></dt><dd>degrees_east</dd><dt><span>cdm_data_type :</span></dt><dd>Grid</dd><dt><span>project :</span></dt><dd>NOAA Extended Reconstructed Sea Surface Temperature (ERSST)</dd><dt><span>original_publisher_url :</span></dt><dd>http://www.ncdc.noaa.gov</dd><dt><span>References :</span></dt><dd>https://www.ncdc.noaa.gov/data-access/marineocean-data/extended-reconstructed-sea-surface-temperature-ersst-v5 at NCEI and http://www.esrl.noaa.gov/psd/data/gridded/data.noaa.ersst.v5.html</dd><dt><span>source :</span></dt><dd>In situ data: ICOADS R3.0 before 2015, NCEP in situ GTS from 2016 to present, and Argo SST from 1999 to present. Ice data: HadISST2 ice before 2015, and NCEP ice after 2015</dd><dt><span>title :</span></dt><dd>NOAA ERSSTv5 (in situ only)</dd><dt><span>history :</span></dt><dd>created 07/2017 by PSD data using NCEI's ERSST V5 NetCDF values</dd><dt><span>institution :</span></dt><dd>This version written at NOAA/ESRL PSD: obtained from NOAA/NESDIS/National Centers for Environmental Information and time aggregated. Original Full Source: NOAA/NESDIS/NCEI/CCOG</dd><dt><span>citation :</span></dt><dd>Huang et al, 2017: Extended Reconstructed Sea Surface Temperatures Version 5 (ERSSTv5): Upgrades, Validations, and Intercomparisons. Journal of Climate, https://doi.org/10.1175/JCLI-D-16-0836.1</dd><dt><span>platform :</span></dt><dd>Ship and Buoy SSTs from ICOADS R3.0 and NCEP GTS</dd><dt><span>standard_name_vocabulary :</span></dt><dd>CF Standard Name Table (v40, 25 January 2017)</dd><dt><span>processing_level :</span></dt><dd>NOAA Level 4</dd><dt><span>Conventions :</span></dt><dd>CF-1.6, ACDD-1.3</dd><dt><span>metadata_link :</span></dt><dd>:metadata_link = https://doi.org/10.7289/V5T72FNM (original format)</dd><dt><span>creator_name :</span></dt><dd>Boyin Huang (original)</dd><dt><span>date_created :</span></dt><dd>2017-06-30T12:18:00Z (original)</dd><dt><span>product_version :</span></dt><dd>Version 5</dd><dt><span>creator_url_original :</span></dt><dd>https://www.ncei.noaa.gov</dd><dt><span>license :</span></dt><dd>No constraints on data access or use</dd><dt><span>comment :</span></dt><dd>SSTs were observed by conventional thermometers in Buckets (insulated or un-insulated canvas and wooded buckets), Engine Room Intakers, or floats and drifters</dd><dt><span>summary :</span></dt><dd>ERSST.v5 is developed based on v4 after revisions of 8 parameters using updated data sets and advanced knowledge of ERSST analysis</dd><dt><span>dataset_title :</span></dt><dd>NOAA Extended Reconstructed SST V5</dd><dt><span>data_modified :</span></dt><dd>2022-06-07</dd></dl></div></li></ul></div></div>" + ], + "text/plain": [ + "<xarray.Dataset> Size: 80MB\n", + "Dimensions: (lat: 89, lon: 180, bnds: 2, time: 624)\n", + "Coordinates:\n", + " * lat (lat) float32 356B 88.0 86.0 84.0 82.0 ... -82.0 -84.0 -86.0 -88.0\n", + " * lon (lon) float32 720B 0.0 2.0 4.0 6.0 8.0 ... 352.0 354.0 356.0 358.0\n", + " * time (time) object 5kB 1970-01-01 00:00:00 ... 2021-12-01 00:00:00\n", + "Dimensions without coordinates: bnds\n", + "Data variables:\n", + " lon_bnds (lon, bnds) float32 1kB -1.0 1.0 1.0 3.0 ... 357.0 357.0 359.0\n", + " lat_bnds (lat, bnds) float32 712B 89.0 87.0 87.0 85.0 ... -87.0 -87.0 -89.0\n", + " sst (time, lat, lon) float64 80MB dask.array<chunksize=(1, 89, 180), meta=np.ndarray>\n", + "Attributes: (12/37)\n", + " climatology: Climatology is based on 1971-2000 SST, Xue, Y....\n", + " description: In situ data: ICOADS2.5 before 2007 and NCEP i...\n", + " keywords_vocabulary: NASA Global Change Master Directory (GCMD) Sci...\n", + " keywords: Earth Science > Oceans > Ocean Temperature > S...\n", + " instrument: Conventional thermometers\n", + " source_comment: SSTs were observed by conventional thermometer...\n", + " ... ...\n", + " creator_url_original: https://www.ncei.noaa.gov\n", + " license: No constraints on data access or use\n", + " comment: SSTs were observed by conventional thermometer...\n", + " summary: ERSST.v5 is developed based on v4 after revisi...\n", + " dataset_title: NOAA Extended Reconstructed SST V5\n", + " data_modified: 2022-06-07" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "sst_avg = ds.temporal.group_average(\"sst\", freq=\"month\")\n", "\n", @@ -489,9 +2059,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/global/u2/v/vo13/mambaforge/envs/xcdat_notebook_dask/lib/python3.12/site-packages/distributed/client.py:3361: UserWarning: Sending large graph of size 77.20 MiB.\n", + "This may cause some slowdown.\n", + "Consider loading the data with Dask directly\n", + " or using futures or delayed objects to embed the data into the graph without repetition.\n", + "See also https://docs.dask.org/en/stable/best-practices.html#load-data-with-dask for more information.\n", + " warnings.warn(\n", + "/global/u2/v/vo13/mambaforge/envs/xcdat_notebook_dask/lib/python3.12/site-packages/dask/core.py:133: RuntimeWarning: invalid value encountered in divide\n", + " return func(*(_execute_task(a, cache) for a in args))\n", + "/global/u2/v/vo13/mambaforge/envs/xcdat_notebook_dask/lib/python3.12/site-packages/dask/core.py:133: RuntimeWarning: invalid value encountered in divide\n", + " return func(*(_execute_task(a, cache) for a in args))\n" + ] + } + ], "source": [ "# NOTE: You might see `UserWarning: Sending large graph of size 420.59 MiB.`\n", "# which indicates that the Dask configuration might not be optimal for the\n", @@ -511,9 +2098,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-11-07 11:37:29,320 [INFO]: scheduler.py(remove_client:5919) >> Remove client Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:37:29,320 [INFO]: scheduler.py(remove_client:5919) >> Remove client Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:37:29,322 [INFO]: core.py(handle_stream:905) >> Received 'close-stream' from tcp://127.0.0.1:60620; closing.\n", + "2024-11-07 11:37:29,322 [INFO]: core.py(handle_stream:905) >> Received 'close-stream' from tcp://127.0.0.1:60620; closing.\n", + "2024-11-07 11:37:29,323 [INFO]: scheduler.py(remove_client:5919) >> Remove client Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:37:29,323 [INFO]: scheduler.py(remove_client:5919) >> Remove client Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:37:29,326 [INFO]: scheduler.py(add_client:5911) >> Close client connection: Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n", + "2024-11-07 11:37:29,326 [INFO]: scheduler.py(add_client:5911) >> Close client connection: Client-a5ef60f6-9d3f-11ef-b315-73ffea27fb16\n" + ] + } + ], "source": [ "client.close()" ] @@ -671,7 +2273,7 @@ "metadata": {}, "outputs": [], "source": [ - "ds_hpc = xc.open_dataset(filepath, chunks=\"auto\")\n", + "ds_hpc = xc.tutorial.open_dataset(\"ersstv5\", chunks=\"auto\")\n", "\n", "sst_avg_hpc = ds.temporal.group_average(\"sst\", freq=\"month\")" ] @@ -770,7 +2372,7 @@ ], "metadata": { "kernelspec": { - "display_name": "xcdat_notebook_0.7.3", + "display_name": "Python 3", "language": "python", "name": "python3" },