From 2fbfe7d6397c27a1a5415665b4422ebfc8b923c3 Mon Sep 17 00:00:00 2001 From: Pascal Bourgault Date: Mon, 9 Oct 2023 16:51:12 -0400 Subject: [PATCH] Rewrite warming_level stuff for vectorization - upd doc - upd hist --- docs/notebooks/1_catalog.ipynb | 2821 +---------- docs/notebooks/2_getting_started.ipynb | 5473 +-------------------- docs/notebooks/3_diagnostics.ipynb | 2061 +------- docs/notebooks/4_ensemble_reduction.ipynb | 903 +--- docs/notebooks/5_warminglevels.ipynb | 4470 +---------------- xscen/catalog.py | 4 +- xscen/extract.py | 136 +- 7 files changed, 303 insertions(+), 15565 deletions(-) diff --git a/docs/notebooks/1_catalog.ipynb b/docs/notebooks/1_catalog.ipynb index fcddb70d..15dc8a68 100644 --- a/docs/notebooks/1_catalog.ipynb +++ b/docs/notebooks/1_catalog.ipynb @@ -60,121 +60,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "f25ee70d", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "

pangeo-cmip6 catalog with 21 dataset(s) from 47 asset(s):

\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique
activity2
institution2
source3
experiment3
member3
frequency3
xrfreq3
variable4
domain3
path47
date_start2
date_end2
version6
id13
processing_level1
format1
mip_era1
derived_variable0
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from pathlib import Path\n", "\n", @@ -198,147 +89,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "3b3840b5", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
activityinstitutionsourceexperimentmemberfrequencyxrfreqvariabledomainpathdate_startdate_endversionidprocessing_levelformatmip_era
0CMIPNOAA-GFDLGFDL-CM4historicalr1i1p1f13hr3H(pr,)gr2gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo...1985-01-012014-12-3120180701CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr2rawzarrCMIP6
1CMIPNOAA-GFDLGFDL-CM4historicalr1i1p1f13hr3H(pr,)gr1gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo...1985-01-012014-12-3120180701CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr1rawzarrCMIP6
2CMIPNOAA-GFDLGFDL-CM4historicalr1i1p1f1dayD(pr,)gr2gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo...1985-01-012014-12-3120180701CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr2rawzarrCMIP6
\n", - "
" - ], - "text/plain": [ - " activity institution source experiment member frequency xrfreq \\\n", - "0 CMIP NOAA-GFDL GFDL-CM4 historical r1i1p1f1 3hr 3H \n", - "1 CMIP NOAA-GFDL GFDL-CM4 historical r1i1p1f1 3hr 3H \n", - "2 CMIP NOAA-GFDL GFDL-CM4 historical r1i1p1f1 day D \n", - "\n", - " variable domain path \\\n", - "0 (pr,) gr2 gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo... \n", - "1 (pr,) gr1 gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo... \n", - "2 (pr,) gr2 gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo... \n", - "\n", - " date_start date_end version \\\n", - "0 1985-01-01 2014-12-31 20180701 \n", - "1 1985-01-01 2014-12-31 20180701 \n", - "2 1985-01-01 2014-12-31 20180701 \n", - "\n", - " id processing_level format \\\n", - "0 CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr2 raw zarr \n", - "1 CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr1 raw zarr \n", - "2 CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr2 raw zarr \n", - "\n", - " mip_era \n", - "0 CMIP6 \n", - "1 CMIP6 \n", - "2 CMIP6 " - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Access the catalog\n", "DC.df[0:3]" @@ -354,38 +108,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "3d04a455", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "activity [CMIP, ScenarioMIP]\n", - "institution [NOAA-GFDL, NCC]\n", - "source [GFDL-CM4, NorESM2-LM, NorESM2-MM]\n", - "experiment [historical, ssp126, ssp585]\n", - "member [r1i1p1f1, r3i1p1f1, r2i1p1f1]\n", - "frequency [3hr, day, fx]\n", - "xrfreq [3H, D, fx]\n", - "variable [pr, tasmin, tasmax, sftlf]\n", - "domain [gr2, gr1, gn]\n", - "path [gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/hist...\n", - "date_start [1985-01-01 00:00:00, 2015-01-01 00:00:00]\n", - "date_end [2014-12-31 00:00:00, 2100-12-31 00:00:00]\n", - "version [20180701, 20190815, 20190920, 20191108, 20200...\n", - "id [CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_g...\n", - "processing_level [raw]\n", - "format [zarr]\n", - "mip_era [CMIP6]\n", - "dtype: object" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# List all unique elements in the catalog, returns a pandas.Series\n", "DC.unique()" @@ -393,23 +119,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "28f67f2d", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "variable [pr, tasmin, tasmax, sftlf]\n", - "frequency [3hr, day, fx]\n", - "dtype: object" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# List all unique elements in a subset of columns, returns a pandas.Series\n", "DC.unique([\"variable\", \"frequency\"])" @@ -417,25 +130,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "4ef86a5e", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr2',\n", - " 'CMIP_NOAA-GFDL_GFDL-CM4_historical_r1i1p1f1_gr1',\n", - " 'CMIP_NCC_NorESM2-LM_historical_r1i1p1f1_gn',\n", - " 'CMIP_NCC_NorESM2-LM_historical_r3i1p1f1_gn',\n", - " 'CMIP_NCC_NorESM2-LM_historical_r2i1p1f1_gn']" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# List all unique elements in a single columns, returns a list\n", "DC.unique(\"id\")[0:5]" @@ -469,18 +167,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "67815ad2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['ssp126', 'ssp585']\n" - ] - } - ], + "outputs": [], "source": [ "# Regex: Find all entries that start with \"ssp\"\n", "print(DC.search(experiment=\"^ssp\").unique(\"experiment\"))" @@ -488,18 +178,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "4b7b426f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['historical']\n" - ] - } - ], + "outputs": [], "source": [ "# Regex: Exclude all entries that start with \"ssp\"\n", "print(DC.search(experiment=\"^(?!ssp).*$\").unique(\"experiment\"))" @@ -507,18 +189,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "b45af639", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['historical', 'ssp585']\n" - ] - } - ], + "outputs": [], "source": [ "# Regex: Find all experiments except the exact string \"ssp126\"\n", "print(DC.search(experiment=\"^(?!ssp126$).*$\").unique(\"experiment\"))" @@ -526,18 +200,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "9aa5aa22", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['NorESM2-LM', 'NorESM2-MM']\n" - ] - } - ], + "outputs": [], "source": [ "# Wildcard: Find all entries that start with NorESM2\n", "print(DC.search(source=\"NorESM2.*\").unique(\"source\"))" @@ -553,142 +219,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "29bd4010", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
activityinstitutionsourceexperimentmemberfrequencyxrfreqvariabledomainpathdate_startdate_endversionidprocessing_levelformatmip_era
0CMIPNCCNorESM2-MMhistoricalr1i1p1f1dayD(pr,)gngs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica...1985-01-012014-12-3120191108CMIP_NCC_NorESM2-MM_historical_r1i1p1f1_gnrawzarrCMIP6
1CMIPNCCNorESM2-MMhistoricalr2i1p1f1dayD(pr,)gngs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica...1985-01-012014-12-3120200218CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gnrawzarrCMIP6
2CMIPNCCNorESM2-MMhistoricalr2i1p1f1fxfx(sftlf,)gngs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica...1985-01-012014-12-3120200218CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gnrawzarrCMIP6
\n", - "
" - ], - "text/plain": [ - " activity institution source experiment member frequency xrfreq \\\n", - "0 CMIP NCC NorESM2-MM historical r1i1p1f1 day D \n", - "1 CMIP NCC NorESM2-MM historical r2i1p1f1 day D \n", - "2 CMIP NCC NorESM2-MM historical r2i1p1f1 fx fx \n", - "\n", - " variable domain path \\\n", - "0 (pr,) gn gs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica... \n", - "1 (pr,) gn gs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica... \n", - "2 (sftlf,) gn gs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica... \n", - "\n", - " date_start date_end version id \\\n", - "0 1985-01-01 2014-12-31 20191108 CMIP_NCC_NorESM2-MM_historical_r1i1p1f1_gn \n", - "1 1985-01-01 2014-12-31 20200218 CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gn \n", - "2 1985-01-01 2014-12-31 20200218 CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gn \n", - "\n", - " processing_level format mip_era \n", - "0 raw zarr CMIP6 \n", - "1 raw zarr CMIP6 \n", - "2 raw zarr CMIP6 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# r1i1p1f1 sftlf is not available\n", "DC.search(\n", @@ -709,118 +243,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "253d4868", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
activityinstitutionsourceexperimentmemberfrequencyxrfreqvariabledomainpathdate_startdate_endversionidprocessing_levelformatmip_era
0CMIPNCCNorESM2-MMhistoricalr1i1p1f1dayD(pr,)gngs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica...1985-01-012014-12-3120191108CMIP_NCC_NorESM2-MM_historical_r1i1p1f1_gnrawzarrCMIP6
1CMIPNCCNorESM2-MMhistoricalr2i1p1f1dayD(pr,)gngs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica...1985-01-012014-12-3120200218CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gnrawzarrCMIP6
\n", - "
" - ], - "text/plain": [ - " activity institution source experiment member frequency xrfreq \\\n", - "0 CMIP NCC NorESM2-MM historical r1i1p1f1 day D \n", - "1 CMIP NCC NorESM2-MM historical r2i1p1f1 day D \n", - "\n", - " variable domain path \\\n", - "0 (pr,) gn gs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica... \n", - "1 (pr,) gn gs://cmip6/CMIP6/CMIP/NCC/NorESM2-MM/historica... \n", - "\n", - " date_start date_end version id \\\n", - "0 1985-01-01 2014-12-31 20191108 CMIP_NCC_NorESM2-MM_historical_r1i1p1f1_gn \n", - "1 1985-01-01 2014-12-31 20200218 CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gn \n", - "\n", - " processing_level format mip_era \n", - "0 raw zarr CMIP6 \n", - "1 raw zarr CMIP6 " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Only returns variables that have all members, source and experiment asked for. In this case, pr, but not sftlf.\n", "DC.search(\n", @@ -842,25 +268,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "ecda16b2-2d87-495d-b1e1-c2894b83fb1d", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "date_start [2015-01-01 00:00:00]\n", - "date_end [2100-12-31 00:00:00]\n", - "dtype: object" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "DC.search(periods=[[\"2016\", \"2017\"]]).unique([\"date_start\", \"date_end\"])" ] @@ -902,35 +315,12 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "97d91cce", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:Dispatching historical dataset to future experiments.\n", - "INFO:xscen.extract:16 assets matched the criteria : {'institution': ['NOAA-GFDL']}.\n", - "INFO:xscen.extract:Iterating over 2 potential datasets.\n", - "INFO:xscen.extract:Found 2 with all variables requested and corresponding to the criteria.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr2': ,\n", - " 'ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr1': }" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import xscen as xs\n", "\n", @@ -957,174 +347,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "a6e5bd7e", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
activityinstitutionsourceexperimentmemberfrequencyxrfreqvariabledomainpathdate_startdate_endversionidprocessing_levelformatmip_era
0ScenarioMIPNOAA-GFDLGFDL-CM4ssp585r1i1p1f1dayD(tasmin,)gr1gs://cmip6/CMIP6/ScenarioMIP/NOAA-GFDL/GFDL-CM...2015-01-012100-12-3120180701ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1...rawzarrCMIP6
1ScenarioMIPNOAA-GFDLGFDL-CM4ssp585r1i1p1f1dayD(tasmin,)gr1gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo...1985-01-012014-12-3120180701ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1...rawzarrCMIP6
2ScenarioMIPNOAA-GFDLGFDL-CM4ssp585r1i1p1f13hr3H(pr,)gr1gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo...1985-01-012014-12-3120180701ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1...rawzarrCMIP6
3ScenarioMIPNOAA-GFDLGFDL-CM4ssp585r1i1p1f1fxfx(sftlf,)gr1gs://cmip6/CMIP6/ScenarioMIP/NOAA-GFDL/GFDL-CM...2015-01-012100-12-3120180701ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1...rawzarrCMIP6
\n", - "
" - ], - "text/plain": [ - " activity institution source experiment member frequency xrfreq \\\n", - "0 ScenarioMIP NOAA-GFDL GFDL-CM4 ssp585 r1i1p1f1 day D \n", - "1 ScenarioMIP NOAA-GFDL GFDL-CM4 ssp585 r1i1p1f1 day D \n", - "2 ScenarioMIP NOAA-GFDL GFDL-CM4 ssp585 r1i1p1f1 3hr 3H \n", - "3 ScenarioMIP NOAA-GFDL GFDL-CM4 ssp585 r1i1p1f1 fx fx \n", - "\n", - " variable domain path \\\n", - "0 (tasmin,) gr1 gs://cmip6/CMIP6/ScenarioMIP/NOAA-GFDL/GFDL-CM... \n", - "1 (tasmin,) gr1 gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo... \n", - "2 (pr,) gr1 gs://cmip6/CMIP6/CMIP/NOAA-GFDL/GFDL-CM4/histo... \n", - "3 (sftlf,) gr1 gs://cmip6/CMIP6/ScenarioMIP/NOAA-GFDL/GFDL-CM... \n", - "\n", - " date_start date_end version \\\n", - "0 2015-01-01 2100-12-31 20180701 \n", - "1 1985-01-01 2014-12-31 20180701 \n", - "2 1985-01-01 2014-12-31 20180701 \n", - "3 2015-01-01 2100-12-31 20180701 \n", - "\n", - " id processing_level format \\\n", - "0 ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1... raw zarr \n", - "1 ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1... raw zarr \n", - "2 ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1... raw zarr \n", - "3 ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1... raw zarr \n", - "\n", - " mip_era \n", - "0 CMIP6 \n", - "1 CMIP6 \n", - "2 CMIP6 \n", - "3 CMIP6 " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cat_sim[\"ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr1\"].df" ] @@ -1141,36 +369,12 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "1958d406", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:Dispatching historical dataset to future experiments.\n", - "INFO:xscen.extract:16 assets matched the criteria : {'institution': ['NOAA-GFDL'], 'experiment': ['ssp585']}.\n", - "INFO:xscen.extract:Iterating over 2 potential datasets.\n", - "INFO:xscen.extract:Found 2 with all variables requested and corresponding to the criteria.\n", - "INFO:xscen.extract:Dataset r1i1p1f1_ScenarioMIP_GFDL-CM4_CMIP6_NOAA-GFDL_ssp585 appears to have multiple resolutions.\n", - "INFO:xscen.extract:Removing ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr2 from the results.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr1': }" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "variables_and_freqs = {\"tasmin\": \"D\", \"pr\": \"3H\", \"sftlf\": \"fx\"}\n", "other_search_criteria = {\"institution\": [\"NOAA-GFDL\"], \"experiment\": [\"ssp585\"]}\n", @@ -1196,34 +400,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "6c5ce0fc-2f25-4b55-bf65-5f140f07e331", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:11 assets matched the criteria : {'source': ['NorESM2-MM'], 'experiment': ['historical']}.\n", - "INFO:xscen.extract:Iterating over 3 potential datasets.\n", - "INFO:xscen.extract:Found 3 with all variables requested and corresponding to the criteria.\n", - "INFO:xscen.extract:Dataset CMIP_NorESM2-MM_CMIP6_NCC_gn_historical has 3 valid members. Restricting as per requested.\n", - "INFO:xscen.extract:Removing CMIP_NCC_NorESM2-MM_historical_r3i1p1f1_gn from the results.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'CMIP_NCC_NorESM2-MM_historical_r1i1p1f1_gn': ,\n", - " 'CMIP_NCC_NorESM2-MM_historical_r2i1p1f1_gn': }" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "variables_and_freqs = {\"tasmin\": \"D\"}\n", "other_search_criteria = {\"source\": [\"NorESM2-MM\"], \"experiment\": [\"historical\"]}\n", @@ -1248,41 +428,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "3300b1d7-e37b-4aa4-991e-99609bb1adea", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:Dispatching historical dataset to future experiments.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Removing the following datasets because of the restriction for warming levels: ['ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_gn']\n", - "INFO:xscen.extract:Iterating over 4 potential datasets.\n", - "INFO:xscen.extract:Found 4 with all variables requested and corresponding to the criteria.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr2': ,\n", - " 'ScenarioMIP_NOAA-GFDL_GFDL-CM4_ssp585_r1i1p1f1_gr1': ,\n", - " 'ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn': ,\n", - " 'ScenarioMIP_NCC_NorESM2-LM_ssp585_r1i1p1f1_gn': }" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "variables_and_freqs = {\"tasmin\": \"D\"}\n", "\n", @@ -1310,47 +459,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "9e30951b", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:Dispatching historical dataset to future experiments.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.WIND_SPEED_FROM_VECTOR already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.WIND_VECTOR_FROM_SPEED already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.TAS_MIDPOINT already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.RELATIVE_HUMIDITY_FROM_DEWPOINT already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.SPECIFIC_HUMIDITY already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.SNOWFALL_APPROXIMATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.RAIN_APPROXIMATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.PRECIPITATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.POTENTIAL_EVAPOTRANSPIRATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.DTR already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.TASMIN_FROM_DTR already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.TASMAX_FROM_DTR already exists and will be overwritten.\n", - "INFO:xscen.extract:12 assets matched the criteria : {'source': ['NorESM2-MM'], 'processing_level': ['raw']}.\n", - "INFO:xscen.extract:Iterating over 2 potential datasets.\n", - "INFO:xscen.extract:Found 2 with all variables requested and corresponding to the criteria.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_gn': ,\n", - " 'ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn': }" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cat_sim_adv = xs.search_data_catalogs(\n", " data_catalogs=[f\"{Path().absolute()}/samples/pangeo-cmip6.json\"],\n", @@ -1373,40 +487,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "29b2d3c5", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "activity [ScenarioMIP]\n", - "institution [NCC]\n", - "source [NorESM2-MM]\n", - "experiment [ssp585]\n", - "member [r1i1p1f1]\n", - "frequency [day]\n", - "xrfreq [D]\n", - "variable [tasmax, tasmin]\n", - "domain [gn]\n", - "path [gs://cmip6/CMIP6/ScenarioMIP/NCC/NorESM2-MM/s...\n", - "date_start [2015-01-01 00:00:00, 1985-01-01 00:00:00]\n", - "date_end [2100-12-31 00:00:00, 2014-12-31 00:00:00]\n", - "version [20191108]\n", - "id [ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn]\n", - "processing_level [raw]\n", - "format [zarr]\n", - "mip_era [CMIP6]\n", - "dtype: object" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cat_sim_adv[\"ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn\"].unique()" ] @@ -1421,43 +507,12 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "7f79d33d-4687-416a-91e6-d4f37ea5efef", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:Dispatching historical dataset to future experiments.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.WIND_SPEED_FROM_VECTOR already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.WIND_VECTOR_FROM_SPEED already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.TAS_MIDPOINT already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.RELATIVE_HUMIDITY_FROM_DEWPOINT already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.SPECIFIC_HUMIDITY already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.SNOWFALL_APPROXIMATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.RAIN_APPROXIMATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.PRECIPITATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.POTENTIAL_EVAPOTRANSPIRATION already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.DTR already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.TASMIN_FROM_DTR already exists and will be overwritten.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xclim/core/indicator.py:250: UserWarning: Class conversions.TASMAX_FROM_DTR already exists and will be overwritten.\n", - "INFO:xscen.extract:6 assets matched the criteria : {'source': ['NorESM2-MM'], 'processing_level': ['raw'], 'experiment': ['ssp585']}.\n", - "INFO:xscen.extract:Iterating over 1 potential datasets.\n", - "INFO:xscen.extract:Found 1 with all variables requested and corresponding to the criteria.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['D', 'MS', 'YS']\n" - ] - } - ], + "outputs": [], "source": [ "cat_sim_adv_multifreq = xs.search_data_catalogs(\n", " data_catalogs=[f\"{Path().absolute()}/samples/pangeo-cmip6.json\"],\n", @@ -1503,43 +558,22 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "9ee75ffb", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "DerivedVariableRegistry({'evspsblpot': DerivedVariable(func=functools.partial(.func at 0x7f93aced49d0>, ind=, nout=0), variable='evspsblpot', query={'variable': ['tasmin', 'tasmax']}, prefer_derived=False), 'tas': DerivedVariable(func=functools.partial(.func at 0x7f93aced69e0>, ind=, nout=0), variable='tas', query={'variable': ['tasmin', 'tasmax']}, prefer_derived=False)})" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cat_sim_adv[\"ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn\"].derivedcat" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "c235a0f7", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['tasmin', 'evspsblpot', 'tasmax', 'tas', 'tasmin', 'tasmax']\n", - "Requested: ['evspsblpot', 'tas']\n", - "Dependent: ['tasmin', 'tasmax', 'tasmin', 'tasmax']\n" - ] - } - ], + "outputs": [], "source": [ "print(cat_sim_adv[\"ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn\"]._requested_variables)\n", "print(\n", @@ -1590,18 +624,10 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "a00a0e85", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Successfully wrote ESM catalog json file to: file:///home/pbourg/xscen/docs/notebooks/_data/tutorial-catalog.json\n" - ] - } - ], + "outputs": [], "source": [ "project = {\n", " \"title\": \"tutorial-catalog\",\n", @@ -1618,21 +644,10 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "830e119e", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ESMCatalogModel(esmcat_version='0.1.0', attributes=[], assets=Assets(column_name='path', format=None, format_column_name='format'), aggregation_control=AggregationControl(variable_column_name='variable', groupby_attrs=['id', 'domain', 'processing_level', 'xrfreq'], aggregations=[Aggregation(type=, attribute_name='date_start', options={'dim': 'time'}), Aggregation(type=, attribute_name='variable', options={})]), id='tutorial-catalog', catalog_dict=None, catalog_file='/home/pbourg/xscen/docs/notebooks/_data/tutorial-catalog.csv', description='Catalog for the tutorial NetCDFs.', title='tutorial-catalog', last_updated=datetime.datetime(2023, 10, 9, 19, 39, 9, tzinfo=TzInfo(UTC)))" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# The metadata is stored in PC.esmcat\n", "PC.esmcat" @@ -1674,386 +689,10 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "837b89c6", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp126/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp126/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r2i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r2i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp370/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp370/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Parsing attributes with netCDF4 from /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn_raw.nc.\n", - "INFO:xscen.catutils:Found and parsed 10 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1Dday(tas,)example-region2001-01-012002-12-31Nonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
1CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1fxfx(sftlf,)example-regionNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
2CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1Dday(tas,)example-region2001-01-012002-12-31Nonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
3CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1fxfx(sftlf,)example-regionNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
4CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r2i1p1f1Dday(tas,)example-region2001-01-012002-12-31Nonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
5CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r2i1p1f1fxfx(sftlf,)example-regionNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
6CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1Dday(tas,)example-region2001-01-012002-12-31Nonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
7CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1fxfx(sftlf,)example-regionNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
8CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1Dday(tas,)example-region2001-01-012002-12-31Nonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
9CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1...simulationrawNoneNoneCMIP6ScenarioMIPNoneNCCNorESM2-MM...r1i1p1f1fxfx(sftlf,)example-regionNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/samples/tuto...
\n", - "

10 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type \\\n", - "0 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1... simulation \n", - "1 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1... simulation \n", - "2 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... simulation \n", - "3 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... simulation \n", - "4 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1... simulation \n", - "5 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1... simulation \n", - "6 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1... simulation \n", - "7 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1... simulation \n", - "8 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1... simulation \n", - "9 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1... simulation \n", - "\n", - " processing_level bias_adjust_institution bias_adjust_project mip_era \\\n", - "0 raw None None CMIP6 \n", - "1 raw None None CMIP6 \n", - "2 raw None None CMIP6 \n", - "3 raw None None CMIP6 \n", - "4 raw None None CMIP6 \n", - "5 raw None None CMIP6 \n", - "6 raw None None CMIP6 \n", - "7 raw None None CMIP6 \n", - "8 raw None None CMIP6 \n", - "9 raw None None CMIP6 \n", - "\n", - " activity driving_model institution source ... member xrfreq \\\n", - "0 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 D \n", - "1 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 fx \n", - "2 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 D \n", - "3 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 fx \n", - "4 ScenarioMIP None NCC NorESM2-MM ... r2i1p1f1 D \n", - "5 ScenarioMIP None NCC NorESM2-MM ... r2i1p1f1 fx \n", - "6 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 D \n", - "7 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 fx \n", - "8 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 D \n", - "9 ScenarioMIP None NCC NorESM2-MM ... r1i1p1f1 fx \n", - "\n", - " frequency variable domain date_start date_end version format \\\n", - "0 day (tas,) example-region 2001-01-01 2002-12-31 None nc \n", - "1 fx (sftlf,) example-region NaT NaT None nc \n", - "2 day (tas,) example-region 2001-01-01 2002-12-31 None nc \n", - "3 fx (sftlf,) example-region NaT NaT None nc \n", - "4 day (tas,) example-region 2001-01-01 2002-12-31 None nc \n", - "5 fx (sftlf,) example-region NaT NaT None nc \n", - "6 day (tas,) example-region 2001-01-01 2002-12-31 None nc \n", - "7 fx (sftlf,) example-region NaT NaT None nc \n", - "8 day (tas,) example-region 2001-01-01 2002-12-31 None nc \n", - "9 fx (sftlf,) example-region NaT NaT None nc \n", - "\n", - " path \n", - "0 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "1 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "2 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "3 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "4 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "5 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "6 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "7 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "8 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "9 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "\n", - "[10 rows x 21 columns]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from xscen.catutils import parse_directory\n", "\n", @@ -2093,21 +732,10 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "933fa4d2", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_example-region'" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df.iloc[0][\"id\"]" ] @@ -2124,135 +752,10 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "e8954662", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

tutorial-catalog catalog with 10 dataset(s) from 10 asset(s):

\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
unique
id5
type1
processing_level1
bias_adjust_institution0
bias_adjust_project0
mip_era1
activity1
driving_model0
institution1
source1
experiment4
member2
xrfreq2
frequency2
variable2
domain1
date_start1
date_end1
version0
format1
path10
derived_variable0
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "PC.update(df)\n", "\n", @@ -2276,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "6a40a6ff", "metadata": {}, "outputs": [], @@ -2314,140 +817,10 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "ece5f91f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Found and parsed 2 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CCCma_CanESM-2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM-2...NonefxfxsftlfNoneNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
1MIROC_MIROC6NoneNoneNoneNoneNoneNoneNoneMIROCMIROC6...NoneMSmonuasNone1999-01-012000-11-30 23:59:59Nonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
\n", - "

2 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type processing_level bias_adjust_institution \\\n", - "0 CCCma_CanESM-2 None None None \n", - "1 MIROC_MIROC6 None None None \n", - "\n", - " bias_adjust_project mip_era activity driving_model institution source \\\n", - "0 None None None None CCCma CanESM-2 \n", - "1 None None None None MIROC MIROC6 \n", - "\n", - " ... member xrfreq frequency variable domain date_start date_end \\\n", - "0 ... None fx fx sftlf None NaT NaT \n", - "1 ... None MS mon uas None 1999-01-01 2000-11-30 23:59:59 \n", - "\n", - " version format path \n", - "0 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "1 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "\n", - "[2 rows x 21 columns]" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "patt = \"{institution}/{source}/{frequency}/{variable}/{?var}_{DATES}.nc\"\n", "parse_directory(directories=[root], patterns=[patt])" @@ -2468,168 +841,10 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "2c73298d", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Found and parsed 3 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CCCma_CanESM2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM2...NoneDdaytg_meanNone1950-01-011950-12-31 23:59:59Nonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
1CCCma_CanESM-2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM-2...NonefxfxsftlfNoneNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
2MIROC_MIROC6NoneNoneNoneNoneNoneNoneNoneMIROCMIROC6...NoneMSmonuasNone1999-01-012000-11-30 23:59:59Nonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
\n", - "

3 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type processing_level bias_adjust_institution \\\n", - "0 CCCma_CanESM2 None None None \n", - "1 CCCma_CanESM-2 None None None \n", - "2 MIROC_MIROC6 None None None \n", - "\n", - " bias_adjust_project mip_era activity driving_model institution source \\\n", - "0 None None None None CCCma CanESM2 \n", - "1 None None None None CCCma CanESM-2 \n", - "2 None None None None MIROC MIROC6 \n", - "\n", - " ... member xrfreq frequency variable domain date_start date_end \\\n", - "0 ... None D day tg_mean None 1950-01-01 1950-12-31 23:59:59 \n", - "1 ... None fx fx sftlf None NaT NaT \n", - "2 ... None MS mon uas None 1999-01-01 2000-11-30 23:59:59 \n", - "\n", - " version format path \n", - "0 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "1 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "2 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "\n", - "[3 rows x 21 columns]" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "patt = \"{institution}/{source}/{frequency}/{variable:_}/{?:_}_{DATES}.nc\"\n", "parse_directory(directories=[root], patterns=[patt])" @@ -2646,202 +861,10 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "id": "d2de72a7", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Found and parsed 4 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CCCma_CanESM2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM2...NoneDdaytg_meanNone1950-01-011950-12-31 23:59:59NaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
1CCCma_CanESM-2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM-2...NonefxfxsftlfNoneNaTNaTNaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
2MIROC_MIROC6NoneNoneNoneNoneNoneNoneNoneMIROCMIROC6...NoneMSmonuasNone1999-01-012000-11-30 23:59:59NaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
3ERA_ERA5NoneNoneNoneNoneNoneNoneNoneERAERA5...NoneYSyrheat_wave_frequencyNone2100-01-012399-12-31 23:59:59v2nc/home/pbourg/xscen/docs/notebooks/_data/parser...
\n", - "

4 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type processing_level bias_adjust_institution \\\n", - "0 CCCma_CanESM2 None None None \n", - "1 CCCma_CanESM-2 None None None \n", - "2 MIROC_MIROC6 None None None \n", - "3 ERA_ERA5 None None None \n", - "\n", - " bias_adjust_project mip_era activity driving_model institution source \\\n", - "0 None None None None CCCma CanESM2 \n", - "1 None None None None CCCma CanESM-2 \n", - "2 None None None None MIROC MIROC6 \n", - "3 None None None None ERA ERA5 \n", - "\n", - " ... member xrfreq frequency variable domain date_start \\\n", - "0 ... None D day tg_mean None 1950-01-01 \n", - "1 ... None fx fx sftlf None NaT \n", - "2 ... None MS mon uas None 1999-01-01 \n", - "3 ... None YS yr heat_wave_frequency None 2100-01-01 \n", - "\n", - " date_end version format \\\n", - "0 1950-12-31 23:59:59 NaN nc \n", - "1 NaT NaN nc \n", - "2 2000-11-30 23:59:59 NaN nc \n", - "3 2399-12-31 23:59:59 v2 nc \n", - "\n", - " path \n", - "0 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "1 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "2 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "3 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "\n", - "[4 rows x 21 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "patts = [\n", " \"{institution}/{source}_{version}/{frequency}/{variable:_}/{?:_}_{DATES}.nc\",\n", @@ -2861,140 +884,10 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "id": "503d7709", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Found and parsed 2 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CCCma_CanESM2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM2...NoneDdaytg_meanNone1950-01-011950-12-31 23:59:59Nonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
1CCCma_CanESM-2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM-2...NonefxfxsftlfNoneNaTNaTNonenc/home/pbourg/xscen/docs/notebooks/_data/parser...
\n", - "

2 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type processing_level bias_adjust_institution \\\n", - "0 CCCma_CanESM2 None None None \n", - "1 CCCma_CanESM-2 None None None \n", - "\n", - " bias_adjust_project mip_era activity driving_model institution source \\\n", - "0 None None None None CCCma CanESM2 \n", - "1 None None None None CCCma CanESM-2 \n", - "\n", - " ... member xrfreq frequency variable domain date_start date_end \\\n", - "0 ... None D day tg_mean None 1950-01-01 1950-12-31 23:59:59 \n", - "1 ... None fx fx sftlf None NaT NaT \n", - "\n", - " version format path \n", - "0 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "1 None nc /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "\n", - "[2 rows x 21 columns]" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "parse_directory(directories=[root], patterns=patts, dirglob=\"*/CanESM*\")" ] @@ -3014,202 +907,10 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "d905dbcf", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Found and parsed 4 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CCCma_CanESM2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM2...NoneDdaytg_meanNone1950-01-011950-12-31 23:59:59NaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
1CCCma_CanESM2NoneNoneNoneNoneNoneNoneNoneCCCmaCanESM2...NonefxfxsftlfNoneNaTNaTNaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
2MIROC_MIROC6_globalNoneNoneNoneNoneNoneNoneNoneMIROCMIROC6...NoneMSmonuasglobal1999-01-012000-11-30 23:59:59NaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
3ERA_ERA5NoneNoneNoneNoneNoneNoneNoneERAERA5...NoneYSyrheat_wave_frequencyNone2100-01-012399-12-31 23:59:59v2nc/home/pbourg/xscen/docs/notebooks/_data/parser...
\n", - "

4 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type processing_level bias_adjust_institution \\\n", - "0 CCCma_CanESM2 None None None \n", - "1 CCCma_CanESM2 None None None \n", - "2 MIROC_MIROC6_global None None None \n", - "3 ERA_ERA5 None None None \n", - "\n", - " bias_adjust_project mip_era activity driving_model institution source \\\n", - "0 None None None None CCCma CanESM2 \n", - "1 None None None None CCCma CanESM2 \n", - "2 None None None None MIROC MIROC6 \n", - "3 None None None None ERA ERA5 \n", - "\n", - " ... member xrfreq frequency variable domain date_start \\\n", - "0 ... None D day tg_mean None 1950-01-01 \n", - "1 ... None fx fx sftlf None NaT \n", - "2 ... None MS mon uas global 1999-01-01 \n", - "3 ... None YS yr heat_wave_frequency None 2100-01-01 \n", - "\n", - " date_end version format \\\n", - "0 1950-12-31 23:59:59 NaN nc \n", - "1 NaT NaN nc \n", - "2 2000-11-30 23:59:59 NaN nc \n", - "3 2399-12-31 23:59:59 v2 nc \n", - "\n", - " path \n", - "0 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "1 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "2 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "3 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "\n", - "[4 rows x 21 columns]" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "parse_directory(\n", " directories=[root],\n", @@ -3232,202 +933,10 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "039f912f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catutils:Found and parsed 4 files.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0amCCC_CanESM2NoneNoneNoneNoneNoneNoneNoneamCCCCanESM2...NoneDdaytg_meanNone1950-01-011950-12-31 23:59:59NaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
1amCCC_CanESM-2NoneNoneNoneNoneNoneNoneNoneamCCCCanESM-2...NonefxfxsftlfNoneNaTNaTNaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
2CORIM_MIROC6NoneNoneNoneNoneNoneNoneNoneCORIMMIROC6...NoneMSmonuasNone1999-01-012000-11-30 23:59:59NaNnc/home/pbourg/xscen/docs/notebooks/_data/parser...
3ARE_ERA5NoneNoneNoneNoneNoneNoneNoneAREERA5...NoneYSyrheat_wave_frequencyNone2100-01-012399-12-31 23:59:59v2nc/home/pbourg/xscen/docs/notebooks/_data/parser...
\n", - "

4 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type processing_level bias_adjust_institution \\\n", - "0 amCCC_CanESM2 None None None \n", - "1 amCCC_CanESM-2 None None None \n", - "2 CORIM_MIROC6 None None None \n", - "3 ARE_ERA5 None None None \n", - "\n", - " bias_adjust_project mip_era activity driving_model institution source \\\n", - "0 None None None None amCCC CanESM2 \n", - "1 None None None None amCCC CanESM-2 \n", - "2 None None None None CORIM MIROC6 \n", - "3 None None None None ARE ERA5 \n", - "\n", - " ... member xrfreq frequency variable domain date_start \\\n", - "0 ... None D day tg_mean None 1950-01-01 \n", - "1 ... None fx fx sftlf None NaT \n", - "2 ... None MS mon uas None 1999-01-01 \n", - "3 ... None YS yr heat_wave_frequency None 2100-01-01 \n", - "\n", - " date_end version format \\\n", - "0 1950-12-31 23:59:59 NaN nc \n", - "1 NaT NaN nc \n", - "2 2000-11-30 23:59:59 NaN nc \n", - "3 2399-12-31 23:59:59 v2 nc \n", - "\n", - " path \n", - "0 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "1 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "2 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "3 /home/pbourg/xscen/docs/notebooks/_data/parser... \n", - "\n", - "[4 rows x 21 columns]" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from xscen.catutils import register_parse_type\n", "\n", @@ -3459,18 +968,10 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "1eb19f5b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NCC/NorESM2-MM/ssp585_day.nc\n" - ] - } - ], + "outputs": [], "source": [ "# Open\n", "ds = PC.search(variable=\"tas\", experiment=\"ssp585\").to_dataset()\n", @@ -3495,21 +996,10 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "id": "6b10e67b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "PosixPath('simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/day/tas/tas_day_v20191108_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp585_r1i1p1f1_2001-2002')" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "xs.catutils.build_path(ds)" ] @@ -3528,21 +1018,10 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "id": "76bc0f37", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "PosixPath('simulation/NCC/NorESM2-MM/ssp585/tas_2001-2002')" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "custom_schema = {\n", " \"folders\": [\"type\", \"institution\", \"source\", \"experiment\"],\n", @@ -3564,21 +1043,10 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "id": "c3758eda", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "PosixPath('/tmp/simulation/raw/CMIP6/ScenarioMIP/REG/NCC/NorESM2-MM/ssp585/r1i1p1f1/day/tas/tas_day_v20191108_CMIP6_ScenarioMIP_REG_NCC_NorESM2-MM_ssp585_r1i1p1f1_2001-2002')" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "xs.catutils.build_path(ds, root=Path(\"/tmp\"), domain=\"REG\")" ] @@ -3600,21 +1068,10 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "id": "d65c8a07", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "PosixPath('simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/day/tas/tas_day_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp585_r1i1p1f1_2001-2002.nc')" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "xs.catutils.build_path(PC.search(variable=\"tas\", experiment=\"ssp585\").df.iloc[0])" ] @@ -3629,99 +1086,10 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "id": "5ad9f477", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idpathnew_path
0CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1.../home/pbourg/xscen/docs/notebooks/samples/tuto...simulation/raw/CMIP6/ScenarioMIP/example-regio...
1CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1.../home/pbourg/xscen/docs/notebooks/samples/tuto...simulation/raw/CMIP6/ScenarioMIP/example-regio...
2CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1.../home/pbourg/xscen/docs/notebooks/samples/tuto...simulation/raw/CMIP6/ScenarioMIP/example-regio...
3CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1.../home/pbourg/xscen/docs/notebooks/samples/tuto...simulation/raw/CMIP6/ScenarioMIP/example-regio...
4CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1.../home/pbourg/xscen/docs/notebooks/samples/tuto...simulation/raw/CMIP6/ScenarioMIP/example-regio...
\n", - "
" - ], - "text/plain": [ - " id \\\n", - "0 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1... \n", - "1 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... \n", - "2 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1... \n", - "3 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1... \n", - "4 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1... \n", - "\n", - " path \\\n", - "0 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "1 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "2 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "3 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "4 /home/pbourg/xscen/docs/notebooks/samples/tuto... \n", - "\n", - " new_path \n", - "0 simulation/raw/CMIP6/ScenarioMIP/example-regio... \n", - "1 simulation/raw/CMIP6/ScenarioMIP/example-regio... \n", - "2 simulation/raw/CMIP6/ScenarioMIP/example-regio... \n", - "3 simulation/raw/CMIP6/ScenarioMIP/example-regio... \n", - "4 simulation/raw/CMIP6/ScenarioMIP/example-regio... " - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# We show only three columns of the output catalog\n", "xs.catutils.build_path(PC.search(variable=\"tas\"))[[\"id\", \"path\", \"new_path\"]]" @@ -3737,37 +1105,10 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "id": "3296422d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp126/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp126/r1i1p1f1/day/tas/tas_day_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp126_r1i1p1f1_2001-2002.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp126/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp126/r1i1p1f1/fx/sftlf/sftlf_fx_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp126_r1i1p1f1_fx.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r1i1p1f1/day/tas/tas_day_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp245_r1i1p1f1_2001-2002.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r1i1p1f1/fx/sftlf/sftlf_fx_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp245_r1i1p1f1_fx.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r2i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r2i1p1f1/day/tas/tas_day_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp245_r2i1p1f1_2001-2002.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r2i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp245/r2i1p1f1/fx/sftlf/sftlf_fx_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp245_r2i1p1f1_fx.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp370/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp370/r1i1p1f1/day/tas/tas_day_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp370_r1i1p1f1_2001-2002.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp370/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp370_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp370/r1i1p1f1/fx/sftlf/sftlf_fx_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp370_r1i1p1f1_fx.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/day/ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/day/tas/tas_day_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp585_r1i1p1f1_2001-2002.nc\n", - "Copied /home/pbourg/xscen/docs/notebooks/samples/tutorial/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/fx/ScenarioMIP_NCC_NorESM2-MM_ssp585_r1i1p1f1_gn_raw.nc\n", - "\tto /home/pbourg/xscen/docs/notebooks/_data/path_builder_examples/simulation/raw/CMIP6/ScenarioMIP/example-region/NCC/NorESM2-MM/ssp585/r1i1p1f1/fx/sftlf/sftlf_fx_CMIP6_ScenarioMIP_example-region_NCC_NorESM2-MM_ssp585_r1i1p1f1_fx.nc\n" - ] - } - ], + "outputs": [], "source": [ "import shutil as sh\n", "\n", diff --git a/docs/notebooks/2_getting_started.ipynb b/docs/notebooks/2_getting_started.ipynb index 970e840a..f382f7a6 100644 --- a/docs/notebooks/2_getting_started.ipynb +++ b/docs/notebooks/2_getting_started.ipynb @@ -27,20 +27,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "892473e9", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Successfully wrote ESM catalog json file to: file:///home/pbourg/xscen/docs/notebooks/_data/example-gettingstarted.json\n" - ] - } - ], + "outputs": [], "source": [ "from pathlib import Path\n", "\n", @@ -86,37 +78,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "eb36f6c9", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:Dispatching historical dataset to future experiments.\n", - "INFO:xscen.extract:4 assets matched the criteria : {'source': ['NorESM2-MM'], 'processing_level': ['raw'], 'experiment': 'ssp245'}.\n", - "INFO:xscen.extract:Iterating over 2 potential datasets.\n", - "/home/pbourg/xscen/xscen/extract.py:850: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.\n", - "/home/pbourg/xscen/xscen/extract.py:850: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.\n", - "INFO:xscen.extract:Found 2 with all variables requested and corresponding to the criteria.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_example-region': ,\n", - " 'CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1_example-region': }" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "variables_and_freqs = {\"tas\": \"D\", \"sftlf\": \"fx\"}\n", "other_search_criteria = {\n", @@ -146,139 +113,12 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "9d15968c", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1...simulationrawNaNNaNCMIP6ScenarioMIPNaNNCCNorESM2-MM...r1i1p1f1Dday(tas,)example-region2001-01-012002-12-31NaNnc/home/pbourg/xscen/docs/notebooks/_data/path_b...
1CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1...simulationrawNaNNaNCMIP6ScenarioMIPNaNNCCNorESM2-MM...r1i1p1f1fxfx(sftlf,)example-regionNaTNaTNaNnc/home/pbourg/xscen/docs/notebooks/_data/path_b...
\n", - "

2 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type \\\n", - "0 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... simulation \n", - "1 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... simulation \n", - "\n", - " processing_level bias_adjust_institution bias_adjust_project mip_era \\\n", - "0 raw NaN NaN CMIP6 \n", - "1 raw NaN NaN CMIP6 \n", - "\n", - " activity driving_model institution source ... member xrfreq \\\n", - "0 ScenarioMIP NaN NCC NorESM2-MM ... r1i1p1f1 D \n", - "1 ScenarioMIP NaN NCC NorESM2-MM ... r1i1p1f1 fx \n", - "\n", - " frequency variable domain date_start date_end version format \\\n", - "0 day (tas,) example-region 2001-01-01 2002-12-31 NaN nc \n", - "1 fx (sftlf,) example-region NaT NaT NaN nc \n", - "\n", - " path \n", - "0 /home/pbourg/xscen/docs/notebooks/_data/path_b... \n", - "1 /home/pbourg/xscen/docs/notebooks/_data/path_b... \n", - "\n", - "[2 rows x 21 columns]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cat_sim[\"CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_example-region\"].df" ] @@ -318,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "d273c24f", "metadata": { "tags": [] @@ -354,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "b781fcbf", "metadata": { "tags": [] @@ -393,125 +233,12 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "ab465a36", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n" - ] - }, - { - "data": { - "text/plain": [ - "{'D': \n", - " Dimensions: (time: 730, lat: 3, lon: 2)\n", - " Coordinates:\n", - " * time (time) datetime64[ns] 2001-01-01 2001-01-02 ... 2002-12-31\n", - " * lat (lat) float64 45.0 46.5 48.0\n", - " * lon (lon) int64 -75 -74\n", - " Data variables:\n", - " tas (time, lat, lon) float64 dask.array\n", - " Attributes: (12/22)\n", - " comment: This is a test file created for the xscen tutori...\n", - " version: v20191108\n", - " intake_esm_vars: ['tas']\n", - " cat:id: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1...\n", - " cat:type: simulation\n", - " cat:processing_level: extracted\n", - " ... ...\n", - " cat:date_start: 2001-01-01 00:00:00\n", - " cat:date_end: 2002-12-31 00:00:00\n", - " cat:_data_format_: nc\n", - " cat:path: /home/pbourg/xscen/docs/notebooks/_data/path_bui...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1...\n", - " history: [2023-10-09 15:40:53] bbox spatial subsetting wi...,\n", - " 'fx': \n", - " Dimensions: (lat: 3, lon: 2)\n", - " Coordinates:\n", - " * lat (lat) float64 45.0 46.5 48.0\n", - " * lon (lon) int64 -75 -74\n", - " Data variables:\n", - " sftlf (lat, lon) float64 dask.array\n", - " Attributes: (12/20)\n", - " comment: This is a test file created for the xscen tutori...\n", - " version: v20200702\n", - " intake_esm_vars: ['sftlf']\n", - " cat:id: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1...\n", - " cat:type: simulation\n", - " cat:processing_level: extracted\n", - " ... ...\n", - " cat:variable: sftlf\n", - " cat:domain: example-region\n", - " cat:_data_format_: nc\n", - " cat:path: /home/pbourg/xscen/docs/notebooks/_data/path_bui...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1...\n", - " history: [2023-10-09 15:40:53] bbox spatial subsetting wi...}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Example with a single simulation\n", "ds_dict = xs.extract_dataset(\n", @@ -555,143 +282,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "dd283230", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idtypeprocessing_levelbias_adjust_institutionbias_adjust_projectmip_eraactivitydriving_modelinstitutionsource...memberxrfreqfrequencyvariabledomaindate_startdate_endversionformatpath
0CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1...simulationextractedNaNNaNCMIP6ScenarioMIPNaNNCCNorESM2-MM...r1i1p1f1Dday(tas,)example-region2001-01-01 00:00:002002-12-31 00:00:00NaNzarr/home/pbourg/xscen/docs/notebooks/_data/CMIP6_...
1CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1...simulationextractedNaNNaNCMIP6ScenarioMIPNaNNCCNorESM2-MM...r1i1p1f1fxfx(sftlf,)example-regionNaNNaNNaNzarr/home/pbourg/xscen/docs/notebooks/_data/CMIP6_...
\n", - "

2 rows × 21 columns

\n", - "
" - ], - "text/plain": [ - " id type \\\n", - "0 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... simulation \n", - "1 CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1... simulation \n", - "\n", - " processing_level bias_adjust_institution bias_adjust_project mip_era \\\n", - "0 extracted NaN NaN CMIP6 \n", - "1 extracted NaN NaN CMIP6 \n", - "\n", - " activity driving_model institution source ... member xrfreq \\\n", - "0 ScenarioMIP NaN NCC NorESM2-MM ... r1i1p1f1 D \n", - "1 ScenarioMIP NaN NCC NorESM2-MM ... r1i1p1f1 fx \n", - "\n", - " frequency variable domain date_start \\\n", - "0 day (tas,) example-region 2001-01-01 00:00:00 \n", - "1 fx (sftlf,) example-region NaN \n", - "\n", - " date_end version format \\\n", - "0 2002-12-31 00:00:00 NaN zarr \n", - "1 NaN NaN zarr \n", - "\n", - " path \n", - "0 /home/pbourg/xscen/docs/notebooks/_data/CMIP6_... \n", - "1 /home/pbourg/xscen/docs/notebooks/_data/CMIP6_... \n", - "\n", - "[2 rows x 21 columns]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "for ds in ds_dict.values():\n", " filename = str(\n", @@ -719,23 +315,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "90f1ab0a", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "[['2001', '2002']]" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cat_sim[\n", " \"CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_example-region\"\n", @@ -744,21 +329,12 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "d29f08c1", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['tas', 'sftlf']\n", - "['D', 'fx']\n" - ] - } - ], + "outputs": [], "source": [ "print(\n", " cat_sim[\n", @@ -782,80 +358,12 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "bf5900f3", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.catalog:An entry exists for: {'id': 'CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1_example-region', 'processing_level': 'extracted'}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n" - ] - } - ], + "outputs": [], "source": [ "for key, dc in cat_sim.items():\n", " if not pcat.exists_in_cat(id=key, processing_level=\"extracted\"):\n", @@ -880,66 +388,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "113b9cfa-d237-43d2-9c4e-9ecd5969372e", "metadata": { "nbsphinx": "hidden" }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# This is a hidden cell. Since the sample files are very small, we'll create fake data covering a longer time period and highjack the previously saved files.\n", "\n", @@ -1042,420 +496,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "745e751a", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:             (lon: 4, bound: 2, lat: 5)\n",
-       "Coordinates:\n",
-       "  * lon                 (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * lat                 (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "    latitude_longitude  float64 nan\n",
-       "Dimensions without coordinates: bound\n",
-       "Data variables:\n",
-       "    lon_bounds          (lon, bound) float64 -75.0 -74.75 ... -74.25 -74.0\n",
-       "    lat_bounds          (lat, bound) float64 45.0 45.55 45.55 ... 47.2 47.75\n",
-       "Attributes:\n",
-       "    cat:domain:  finer-grid
" - ], - "text/plain": [ - "\n", - "Dimensions: (lon: 4, bound: 2, lat: 5)\n", - "Coordinates:\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " latitude_longitude float64 nan\n", - "Dimensions without coordinates: bound\n", - "Data variables:\n", - " lon_bounds (lon, bound) float64 -75.0 -74.75 ... -74.25 -74.0\n", - " lat_bounds (lat, bound) float64 45.0 45.55 45.55 ... 47.2 47.75\n", - "Attributes:\n", - " cat:domain: finer-grid" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import xesmf\n", "\n", @@ -1490,7 +536,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "1c9ad4ac", "metadata": { "tags": [] @@ -1518,33 +564,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "081ba5f1", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'mask')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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7bffFvfv3xdpaWnitddeE66ursLW1lZ4eHiITz75ROTl5RX6PehzXcuWLROurq7qvzfbt2/XmHD77rvvirp16wqlUileeuklMWLECHHnzh318fPmzRMuLi5CoVCIkSNHanw2ODnXrDBvaMe8URDzhmVTCGHAxAMyGZVKhUaNGuHNN9/UWGXbnHl6eiIwMLBEHg9z+vRpdO7cGVeuXNGY9Ez/UigU2Ldvn9GPtqHSg3mjaMwbxWPekB8XhpXZjRs3sHHjRly+fBlJSUl45513cO3aNQwbNkzu0PQya9YsVKxYEffv35f0vPv27UNUVBSuX7+O48ePY/z48ejUqROTqhYTJ07kEISFYN4oGvOG7pg3zAd7yGSWkpKCt956C7/++iuEEPD29sbixYvVE2hLgxs3bqjv8qlTp456wqkUtm/fjvnz5yMlJQXVqlVDr1698Pnnn6Nq1aqSfYa+mjRpUujK2+vXry90QrCppaenIzMzE8CzZRKev4OMyhbmjaIxb+iOecN8sCAj0tPz/yN5kbOzc4E1ioiImDeoOCzIiIiIiGTGOWREREREMmNBRkRERCQzFmREREREMmNBRkRERCQzFmREREREMmNBRkRERCQzFmREREREMmNBRkRERCSz/wehorcx2SKTUwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.patches as patches\n", "import matplotlib.pyplot as plt\n", @@ -1615,7 +640,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "a1176ecd", "metadata": { "tags": [] @@ -1641,66 +666,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "461ba262", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# to_dataset_dict() is called to cast the search results as xr.Dataset objects\n", "# frequency=\"^(?!fx$).*$\" is used to exclude fixed fields from the results\n", @@ -1744,23 +715,12 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "8413e56a", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABdIAAAHqCAYAAAAAkLx0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAADEPklEQVR4nOzdeXgT1eLG8TeltIXSVrZS1rIIlKXsyFZZZBUQKKJcRVkVvIKyCCICsggWcAERpBdUFr0KKrsgggIFBK7I7hULVrColIoIpVUKNPP7g19zCd2SNiFJ+/08zzySk5kzZ9KYNzkzc47JMAxDAAAAAAAAAAAgU16ubgAAAAAAAAAAAO6MjnQAAAAAAAAAALJBRzoAAAAAAAAAANmgIx0AAAAAAAAAgGzQkQ4AAAAAAAAAQDboSAcAAAAAAAAAIBt0pAMAAAAAAAAAkA060gEAAAAAAAAAyAYd6QAAAAAAAAAAZIOOdLjM3r17NXXqVF26dMnVTXGotm3bqm3btrnadurUqTKZTI5tUCZMJpOmTp3q9P1I0sCBA1W5cmWb1r2T7QKAgojszSg/Zq87atu2rerWrevqZgBwgvyaLY7gjN9CzsitvORoTnbu3CmTyaSdO3dayjZv3pzlsZpMJo0YMcIpbbnT8tOx3OqVV17RunXrXN0Mmy1btkwmk0lnzpyxe9vsPt+c+f8N3Bcd6XCZvXv3atq0afnuC9fbb7+tt99+O1fbPvHEE9q3b5+DW+RakydP1tq1a13dDACAyN7M5MfsBYA7Kb9miyPwW0hq1KiR9u3bp0aNGlnKNm/erGnTprmwVcgLT+tIz4vsPt/y8v0Tnsvb1Q0A8ou//vpLRYsWVe3atXNdR4UKFVShQgUHtsp10l+PatWqubopAIB8qiBk77JlyzRo0CAZhuHqpgCAR/v7779VpEiRO7Ivfgv9T2BgoJo3b+7qZni8nTt3ql27djp9+rTNdzm4g7///lt+fn535O6/Oy0v3z/hubgiHS4xdepUjRs3TpJUpUoVmUwmq9u9Vq1apU6dOqls2bIqUqSIatWqpRdeeEEpKSlW9fz000/6xz/+oXLlysnX11dlypRR+/btdeTIkVy1y2w2a86cOQoLC5Ovr6+Cg4PVv39//fLLL1brpd+evGvXLrVs2VJFixbV4MGDLc/dfnvPL7/8oj59+iggIEB33XWX+vXrpwMHDshkMmnZsmVWr8vtAVO5cmV1795dW7ZsUaNGjVSkSBGFhYXpvffes1rv999/19NPP63atWurWLFiCg4O1n333afdu3fn6rWwp90DBw5UsWLFdPz4cXXq1EkBAQFq37695bnbgz4pKUlPPvmkSpYsqWLFiqlLly46efJkrtsJAMgZ2esZ2etI6beUL126VDVr1lSRIkXUpEkT7d+/X4Zh6NVXX1WVKlVUrFgx3Xffffrxxx+ttt+2bZt69uypChUqyM/PT3fffbeGDRumCxcuWK33+++/a+jQoapYsaJ8fX1VunRptWrVSl9++WW27Vu7dq2KFi2qJ554Qjdu3HD48QNwPnfNlvTP8TVr1qhhw4by8/OzXAGdkJCgYcOGqUKFCvLx8VGVKlU0bdq0DJ9D7vBbaNOmTWrQoIF8fX1VpUoVvfbaa5muZxiG3n77bTVo0EBFihRR8eLF1adPH/30008Z1pszZ45CQ0Pl5+enRo0a6fPPP7fpNX3ooYdUp04dq7IHHnhAJpNJn3zyiaXs0KFDMplM2rhxo6SMQ7sMHDhQCxculCTL+yWzYTfef/991apVS0WLFlX9+vX12Wef5djG9H19+OGHGj9+vMqWLatixYrpgQce0Pnz53XlyhUNHTpUpUqVUqlSpTRo0CAlJydb1bFw4UK1bt1awcHB8vf3V3h4uObMmaPr169brXf48GF1795dwcHB8vX1Vbly5dStW7cM319uZRiGXnzxRRUuXFhLlizJ8XgcadWqVWrRooX8/f1VrFgxde7cWYcPH7Y8v2fPHhUuXFhjx4612i59WJR3331X0s2/WUpKipYvX27526V/B0tfd+vWrRo8eLBKly6tokWLKjU1VT/++KMGDRqk6tWrq2jRoipfvrweeOABHT9+3Gp/6X/DDz74QGPGjFFISIiKFCmiNm3aWLU33YYNG9SiRQsVLVpUAQEB6tixo013GtryHSenz7fMvn9evHhRTz/9tMqXLy8fHx9VrVpVEydOVGpqqtV66d/RcvM+h2txRTpc4oknntDFixf11ltvac2aNSpbtqyk/53RO3XqlLp27apRo0bJ399fP/zwg2bPnq1vvvlG27dvt9TTtWtXpaWlac6cOapUqZIuXLigvXv3Wt12k34l19KlSzVw4MBs2/XPf/5Tixcv1ogRI9S9e3edOXNGkydP1s6dO3Xo0CGVKlXKsu65c+f02GOP6fnnn9crr7wiL6/Mz0ulpKSoXbt2unjxombPnq27775bW7ZsUd++fW1+vY4eParnnntOL7zwgsqUKaN33nlHQ4YM0d13363WrVtLuvmBLUlTpkxRSEiIkpOTtXbtWrVt21ZfffWV3WN32dvua9euqUePHho2bJheeOGFLH8QG4ahXr16ae/evXrppZfUtGlTff3117r//vvtah8AwD5kr/tnrzN89tlnOnz4sGbNmiWTyaTx48erW7duGjBggH766SctWLBAly9f1pgxY/Tggw/qyJEjlhMLcXFxatGihZ544gkFBQXpzJkzeuONNxQREaHjx4+rcOHCkqTHH39chw4d0syZM1WjRg1dunRJhw4d0h9//JFlu+bOnatx48Zp6tSpmjRp0h15LQA4nrtmi3SzQ/fEiROaNGmSqlSpIn9/fyUkJOiee+6Rl5eXXnrpJVWrVk379u3TjBkzdObMGS1dulSSe/wW+uqrr9SzZ0+1aNFCK1eutLw+58+fz7DusGHDtGzZMj377LOaPXu2Ll68qOnTp6tly5Y6evSoypQpI0maNm2apk2bpiFDhqhPnz46e/asnnzySaWlpalmzZrZvp4dOnTQp59+qnPnzqls2bK6ceOGYmJiVKRIEW3btk0PPfSQJOnLL7+Ut7d3lhk4efJkpaSk6NNPP7Xq8Ex/70g3TyAcOHBA06dPV7FixTRnzhxFRkYqNjZWVatWzbadkvTiiy+qXbt2WrZsmc6cOaOxY8fqkUcekbe3t+rXr6+PPvpIhw8f1osvvqiAgADNnz/fsm1cXJweffRRValSRT4+Pjp69KhmzpypH374wXJCPSUlRR07dlSVKlW0cOFClSlTRgkJCdqxY4euXLmSaZtSU1M1cOBAbdq0SRs3blSXLl1yPA5HeeWVVzRp0iQNGjRIkyZN0rVr1/Tqq6/q3nvv1TfffKPatWsrIiJCM2bM0AsvvKDWrVurR48e+u9//6vhw4frscce05AhQyRJ+/bt03333ad27dpp8uTJkm7edXCrwYMHq1u3bnr//feVkpKiwoUL67ffflPJkiU1a9YslS5dWhcvXtTy5cvVrFkzHT58OMP778UXX1SjRo30zjvv6PLly5o6daratm2rw4cPW94DH374ofr166dOnTrpo48+UmpqqubMmWP5HhYREZHla2LLd5ycPt9ud/XqVbVr105xcXGaNm2a6tWrp927dysqKkpHjhzRpk2brNbP6/scLmIALvLqq68akozTp09nu57ZbDauX79uxMTEGJKMo0ePGoZhGBcuXDAkGfPmzct2++XLlxuFChUyli9fnu16J06cMCQZTz/9tFX5f/7zH0OS8eKLL1rK2rRpY0gyvvrqqwz1tGnTxmjTpo3l8cKFCw1Jxueff2613rBhwwxJxtKlSy1lU6ZMMW7/3zI0NNTw8/Mzfv75Z0vZ33//bZQoUcIYNmxYlsdz48YN4/r160b79u2NyMhIq+ckGVOmTMlyW3vbPWDAAEOS8d5772WoZ8CAAUZoaKjl8eeff25IMt58802r9WbOnGlTuwAAuUf2unf23lpH+vLuu+8akqzKrl+/bqSlpeVYlyQjJCTESE5OtpStW7fOkGQ0aNDAMJvNlvJ58+YZkoxjx45lWlf6e+Lnn382JBnr16+3PFesWDFj1KhR2balTZs2Rp06dYy0tDRjxIgRho+Pj/HBBx/keAwA3J+7ZYth3PwcL1SokBEbG2tVPmzYMKNYsWJWn++GYRivvfaaIcn473//axiGe/wWatasmVGuXDnj77//tpQlJSUZJUqUsMqtffv2GZKM119/3arOs2fPGkWKFDGef/55wzAM488//zT8/Pwy5NPXX39tSLLK0cz8+OOPhiRjxYoVhmEYxp49ewxJxvPPP29UqVLFsl7Hjh2Nli1bWh7v2LHDkGTs2LHDUjZ8+PAM2ZtOklGmTBkjKSnJUpaQkGB4eXkZUVFR2bYxfV8PPPCAVfmoUaMMScazzz5rVd6rVy+jRIkSWdaXlpZmXL9+3VixYoVRqFAh4+LFi4ZhGMa3335rSDLWrVuXbXskGcOHDzf++OMPIyIiwihfvrxx5MiRbLdJd/v3gS+//NKQZPz44492fR+Ij483vL29jWeeecaq/MqVK0ZISIjx8MMPW8rMZrPRtWtX46677jK+++47o3bt2kZYWJjV9wjDMAx/f39jwIABGfa1dOlSQ5LRv39/m47v2rVrRvXq1Y3Ro0dbytP/ho0aNbL6nnLmzBmjcOHCxhNPPGEYxs2/Tbly5Yzw8HCr1+DKlStGcHCw1XswvV1ZfUZl9x0nu8+3279/RkdHG5KMjz/+2Gq92bNnG5KMrVu3Wsry8j6HazG0C9zSTz/9pEcffVQhISEqVKiQChcurDZt2kiSTpw4IUkqUaKEqlWrpldffVVvvPGGDh8+LLPZnKGu/v3768aNG+rfv3+2+9yxY4ckZbi64Z577lGtWrX01VdfWZUXL15c9913X47HEhMTo4CAgAxnnB955JEct03XoEEDVapUyfLYz89PNWrU0M8//2y1XnR0tBo1aiQ/Pz95e3urcOHC+uqrryyvmT1y0+4HH3wwx3rTX+d+/fpZlT/66KN2txEA4DhkrzVXZK8kVatWTYULF7Ys6VeA3VpWuHBhTZ8+3ab62rVrJ39/f8vjWrVqSZLuv/9+qyFt0stvPb7ExEQ99dRTqlixouXYQkNDJcnq+O655x4tW7ZMM2bM0P79+zPc/p7u6tWr6tWrl/79739r69atGb4LAMh/XJEt6erVq6caNWpYlX322Wdq166dypUrpxs3bliW9CvCY2JiLP915W+hlJQUHThwQL1795afn5+lPCAgQA888ECGYzKZTHrsscesjikkJET169e3DEOxb98+Xb16NcO+W7Zsaflsz061atVUuXJly7Bd27ZtU3h4uB577DGdPn1acXFxSk1N1Z49e9ShQ4cc68tOu3btFBAQYHlcpkwZBQcHZ8jgrHTv3t3qcXrGdevWLUP5xYsXrYZ3OXz4sHr06KGSJUta3rP9+/dXWlqaZQieu+++W8WLF9f48eMVHR2t77//Psu2nD59Wi1atFBSUpL279+v+vXr23QM7du3t8r99Nf07rvvtipPH+YuK1988YXl/5tb3x9+fn5q06aN5f0h3RxuZMWKFQoICFCTJk10+vRpffzxx1bfI2yR2f8LN27c0CuvvKLatWvLx8dH3t7e8vHx0alTpzL9zvToo49afU8JDQ1Vy5YtLf8PxcbG6rffftPjjz9udYdisWLF9OCDD2r//v3666+/smyjrd9x7LF9+3b5+/urT58+VuXp33Nv/16b1/c5XIOhXeB2kpOTde+998rPz08zZsxQjRo1VLRoUZ09e1a9e/fW33//Lenmh/xXX32l6dOna86cOXruuedUokQJ9evXTzNnzrT6QLJF+u3Ht95Slq5cuXIZPswyWy+retNvpbtVZmVZKVmyZIYyX19fy2shSW+88Yaee+45PfXUU3r55ZdVqlQpFSpUSJMnT85VENjb7qJFi2a4pSurer29vTMcU0hIiN1tBAA4BtmbkSuyV5I2btxoNY7mZ599pmnTpunAgQNW65UrV86m+kqUKGH12MfHJ9vyq1evSro5dn2nTp3022+/afLkyQoPD5e/v7/MZrOaN29u9TqsWrVKM2bM0DvvvKPJkyerWLFiioyM1Jw5c6zyPTExUWfPnlWHDh3UsmVLm9oPwHO5KlvSZZYZ58+f18aNGy1DU90ufXxkV/8W+vPPP2U2mzP9jXR72fnz52UYRpZtSx8iIj1zbakzK+3bt9eWLVsk3RzCpWPHjgoPD1eZMmX05Zdfqnr16vr777/z3JFuSwZnJzfZV6xYMcXHx+vee+9VzZo19eabb6py5cry8/PTN998o+HDh1v2HxQUpJiYGM2cOVMvvvii/vzzT5UtW1ZPPvmkJk2aZPX++uabb3ThwgXNnDnTrsnN//Wvf1kNE3Pw4EE99dRT2rBhg9V7+9Yh8DKTPhRQ06ZNM33+9mHySpYsqR49emjhwoWKjIxUeHi4zW1Ol9n/e2PGjNHChQs1fvx4tWnTRsWLF5eXl5eeeOKJTP+uWb1Pjx49Kinn75Bms1l//vmnihYtmuF5e77j2OOPP/5QSEhIhrl3goOD5e3tnWHIu7y+z+EadKTD7Wzfvl2//fabdu7cablaQZLV+HjpQkNDLZNenDx5Uh9//LGmTp2qa9euKTo62q79pn+InTt3LkPA/fbbbxkCytZZp0uWLKlvvvkmQ3lCQoJd7cvJBx98oLZt22rRokVW5VmN0ZYTe9ttz+tx48YN/fHHH1bB4ejXAwBgO7I3dxydvZIy/GD97rvvJElNmjTJdZ258d133+no0aNatmyZBgwYYCm/fUJS6eaP+Hnz5mnevHmKj4/Xhg0b9MILLygxMdHS4SJJlSpV0htvvKHIyEj17t1bn3zyidWVlgDyF1dlS7rMMqNUqVKqV6+eZs6cmek26ScpXf1bqHjx4jKZTJnu7/ayUqVKyWQyaffu3fL19c2wfnpZ+v6yqvP2SVEz0759e7377rv65ptv9J///Mcyx8V9992nbdu26eeff1axYsXUvHnzHOtyR+vWrVNKSorWrFljdZV+ZpPehoeHa+XKlTIMQ8eOHdOyZcs0ffp0FSlSRC+88IJlvb59+yokJEQTJ06U2Wy2eV6Q28cMT79qPjw83Ka/Vbr071KffvqpTXcebNu2TYsWLdI999yjtWvXavXq1TbdbXGrzP5/+OCDD9S/f3+98sorVuUXLlzQXXfdlWH9rN6n6e/jW79D3u63336Tl5eXihcvnmn77PmOY4+SJUvqP//5jwzDsHoNEhMTdePGjRxPesAzMLQLXCY90G8/25b+gXP7l4B//etf2dZXo0YNTZo0SeHh4Tp06JDd7Um/VfyDDz6wKj9w4IBOnDhhmXndXm3atNGVK1cyzIa+cuXKXNWXFZPJlOE1O3bsmE0zVmfGWe1u166dJOnf//63VfmHH36Yp3oBADkje907e91Jbt8TlSpV0ogRI9SxY8dM3xOdOnXSF198oV27dql79+5KSUlxXKMBuIS7ZUt2unfvru+++07VqlVTkyZNMizpHemu/i3k7++ve+65R2vWrLHcKSTdPFG7cePGDMdkGIZ+/fXXTI8p/QRt8+bN5efnl2Hfe/futXkoifbt28tkMmny5Mny8vKyTL7doUMH7dixQ9u2bVPr1q2zvOI/XVbvGVfL7D1rGIaWLFmS7Tb169fX3Llzddddd2X6np00aZLmzZunl156SRMmTHB8w7PRuXNneXt7Ky4uLtP3x60n6tMndW/Tpo327t2rHj16aMiQITp9+rRVnbm5ajqz70ybNm3Sr7/+mun6H330kQzDsDz++eeftXfvXssktjVr1lT58uX14YcfWq2XkpKi1atXq0WLFplejZ7elvTjuFVmn032vFfbt2+v5ORkrVu3zqp8xYoVlufh+bgiHS6THuhvvvmmBgwYoMKFC6tmzZpq2bKlihcvrqeeekpTpkxR4cKF9e9//9tyC0+6Y8eOacSIEXrooYdUvXp1+fj4aPv27Tp27JjVGeAVK1Zo8ODBeu+997IdT69mzZoaOnSo3nrrLXl5een+++/XmTNnNHnyZFWsWFGjR4/O1XEOGDBAc+fO1WOPPaYZM2bo7rvv1ueff64vvvhCUsZbqXKre/fuevnllzVlyhS1adNGsbGxmj59uqpUqZLlrPGuaHenTp3UunVrPf/880pJSVGTJk309ddf6/33389VfQAA25G97p297iQsLEzVqlXTCy+8IMMwVKJECW3cuFHbtm2zWu/y5ctq166dHn30UYWFhSkgIEAHDhzQli1b1Lt370zrjoiI0FdffaUuXbqoU6dO2rx5s4KCgu7EYQFwAnfLluxMnz5d27ZtU8uWLfXss8+qZs2aunr1qs6cOaPNmzcrOjpaFSpUcIvfQi+//LK6dOmijh076rnnnlNaWppmz54tf39/Xbx40bJeq1atNHToUA0aNEjffvutWrduLX9/f507d0579uxReHi4/vnPf6p48eIaO3asZsyYoSeeeEIPPfSQzp49q6lTp9o8tEtwcLDq1q2rrVu3ql27dpaOyg4dOujixYu6ePGi3njjjRzrSX/PzJ49W/fff78KFSqkevXqWYZacZWOHTvKx8dHjzzyiJ5//nldvXpVixYt0p9//mm13meffaa3335bvXr1UtWqVWUYhtasWaNLly6pY8eOmdY9cuRIFStWTEOHDlVycrLmz59v850MeVG5cmVNnz5dEydO1E8//aQuXbqoePHiOn/+vL755hv5+/tr2rRpSktL0yOPPCKTyaQPP/xQhQoV0rJly9SgQQP17dtXe/bssfx9wsPDtXPnTm3cuFFly5ZVQEBAhivob9e9e3ctW7ZMYWFhqlevng4ePKhXX301y+FuEhMTFRkZqSeffFKXL1/WlClT5OfnZzkR4eXlpTlz5qhfv37q3r27hg0bptTUVL366qu6dOmSZs2alWVbbP2Ok36sUsbPt8yGnOrfv78WLlyoAQMG6MyZMwoPD9eePXv0yiuvqGvXrnke8ghuwlWznAKGYRgTJkwwypUrZ3h5eVnN5L13716jRYsWRtGiRY3SpUsbTzzxhHHo0CGrGdLPnz9vDBw40AgLCzP8/f2NYsWKGfXq1TPmzp1r3Lhxw7KP9Bmab51ZPStpaWnG7NmzjRo1ahiFCxc2SpUqZTz22GPG2bNnrdZr06aNUadOnUzruH3mZsO4OVN27969jWLFihkBAQHGgw8+aGzevDnDjNBTpkzJMHt5aGio0a1btxz3k5qaaowdO9YoX7684efnZzRq1MhYt25dhpniDcPIMCN8Vmxt94ABAwx/f/9M68hs/5cuXTIGDx5s3HXXXUbRokWNjh07Gj/88IPN7QIA5B7Z697Ze7v01zI3JBnDhw+3Kjt9+rQhyXj11Vetynfs2GFIMj755BNL2ffff2907NjRCAgIMIoXL2489NBDRnx8vNWxXL161XjqqaeMevXqGYGBgUaRIkWMmjVrGlOmTDFSUlIsdWX29/vuu++MkJAQo1GjRsbvv/+eq2ME4B7cLVuy+hw3DMP4/fffjWef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MmXK2LwNAADuhOzOeRsAANwJ2Z3zNncCV6QDANxOxYoVFRQUZFlyum1rxIgROnbsmD766KMs13nvvffUr18/+fnlfOuwYRgymbK/9fP2523ZBgCA/IrsBgDAs5Dd9uOKdABAnqQZhtIcNN1Gej1nz561Gqstu7PizzzzjDZs2KBdu3apQoUKma6ze/duxcbGatWqVVblISEhunbtmv7880+rs+OJiYlq2bJlpnWVKlVKhQoVynAWPDExMcPZcgAA3BHZ/b9tyG4AgCcgu/+3jSuzmyvSAQB5YnbwIkmBgYFWS2aBbhiGRowYoTVr1mj79u2qUqVKlm1899131bhxY9WvX9+qvHHjxipcuLC2bdtmKTt37py+++67LAPdx8dHjRs3ttpGkrZt25blNgAAuBOy+yayGwDgKcjum1yd3VyRDgDwSMOHD9eHH36o9evXKyAgwHKmOigoSEWKFLGsl5SUpE8++USvv/56hjqCgoI0ZMgQPffccypZsqRKlCihsWPHKjw8XB06dLCs1759e0VGRmrEiBGSpDFjxujxxx9XkyZN1KJFCy1evFjx8fF66qmnnHzUAAB4LrIbAADPQnZbc5sr0qOiomQymTRq1ChLWXJyskaMGKEKFSqoSJEiqlWrlhYtWpRtPcuWLZPJZMqwXL161clHAAAFU5oMhy62WrRokS5fvqy2bduqbNmyluX228hWrlwpwzD0yCOPZFrP3Llz1atXLz388MNq1aqVihYtqo0bN6pQoUKWdeLi4nThwgXL4759+2revHmaPn26GjRooF27dmnz5s0KDQ2189XzbGQ3AHgmsrvgZjcAwDOR3e6R3SbDcNAAO3lw4MABPfzwwwoMDFS7du00b948SdKTTz6pHTt26J133lHlypW1detWPf3001q9erV69uyZaV3Lli3TyJEjFRsba1UeEhJic3uSkpIUFBSktuopb1PhXB8XYKvK3xTJeSXAAa4lX9OKdqt0+fJlq7HQciP9s/LY98EKCHDMedkrV8yqVzvRIe2Dc5HdKOjIbtwpZDfyq/T3Y5PIl+VdOOdJ6fA/f5d0m2siPcrfwUwunBvXSphzXglWzFevKn78JLI7H3L5p29ycrL69eunJUuWWA04L0n79u3TgAED1LZtW1WuXFlDhw5V/fr19e2332Zbp8lkUkhIiNUCAAAcg+wGAAAAABQ0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261atUqNGjWq0bFQsUmTJln/Du+++66rqwMAboHsLh/Z7R7IbgAoi+wuH9ntHshueDM60uER3nnnHc2fP98636pVKy1ZssR1FSrHk08+qdzcXIWGhrq6KnVeenp6uV+eXnjhBeXm5rqmUgAAG2Q3LkZ2A4D7I7txMbIbKMvX1RUAKqNJkyaursIlBQcHKzIy0tXVkCSdPXtW9evXd3U1al1oaChfqADATZDdVUN2AwBcjeyuGrIb8D7ckY4a+eGHHzRx4kQ1btxYDRo00OjRo3Xw4EHr+guPVG3atEkdOnRQw4YNNWrUKJtfL8+dO6ekpCQ1atRITZs21ezZs3XnnXfaPPZ18SNmQ4YM0bFjxzRz5kzr40SSNHfuXHXt2tWmfkuWLFGrVq2s8yUlJZo1a5b1WL/97W9ljLHZxxijRYsWqXXr1goMDFSXLl20du3aap2fVatWqWXLlmrQoIHi4+N14sSJMtu8//776tGjhwICAtS6dWvNmzdP586ds67/17/+pQEDBiggIEAdO3bUli1bbB6hOnr0qCwWi9566y0NGTJEAQEB+stf/iJJSk1NVYcOHRQQEKCYmBi99NJLNsf+7rvvlJCQoMaNG6tp06YaM2aMjh49al2fnp6uq6++WkFBQWrUqJH69++vY8eOVartl2rX888/r06dOikoKEgtWrTQgw8+qKKiIuv6Y8eO6YYbblDjxo0VFBSkq666Sh988IGOHj2qoUOHSpIaN24si8WiSZMmVapOAACy+1LIbrIbANwN2W0f2U12A7WFjnTUyKRJk/T5559r/fr12rlzp4wxuvbaa3X27FnrNj///LOeffZZvfbaa9q2bZuys7P10EMPWdcvXLhQr7/+ulJTU/Xpp5+qsLDQ7nu23nnnHTVv3tz6SFdVHil67rnn9Morr+jll1/W9u3bdfLkSa1bt85mm8cff1ypqalatmyZvv76a82cOVN33HGHtm7dWvkTI2nXrl26++679eCDD2rPnj0aOnSoFixYYLPNpk2bdMcddygpKUnffPON/vSnP2nVqlV66qmnJEmlpaUaO3asGjRooF27dmnFihV67LHHyj3e7NmzlZSUpH379ikuLk4rV67UY489pqeeekr79u3T008/rTlz5ujVV1+VdP7vMnToUDVs2FDbtm3T9u3brV+4zpw5o3Pnzmns2LEaPHiwvvrq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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.patches as patches\n", "\n", @@ -1813,7 +773,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "90dde88c", "metadata": { "tags": [] @@ -1861,66 +821,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "d8f8dc7e", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ds_dict = pcat.search(processing_level=\"regridded\").to_dataset_dict()\n", "\n", @@ -1962,23 +868,12 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "6c7eee07", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABdQAAAHqCAYAAAANjswzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC5YUlEQVR4nOzdeXQUVeL28ac6kAQwiQKGnbAMyipCQDZFENlEUdARlUFFFP2xi9vwKgJucRcBBWFYR1lGEUFBBFS2ISiry4iILBKRiKgk7JB0vX9k0mObrTq5ne4K38859xy6+tatW014Uty+dcuybdsWAAAAAAAAAADIlyfUHQAAAAAAAAAAwA0YUAcAAAAAAAAAwAEG1AEAAAAAAAAAcIABdQAAAAAAAAAAHGBAHQAAAAAAAAAABxhQBwAAAAAAAADAAQbUAQAAAAAAAABwgAF1AAAAAAAAAAAcYEAdAAAAAAAAAAAHGFBHnjZs2KCxY8fqyJEjoe5Kvvbt2yfLsnzF4/HoggsuUKdOnbRixYoitdujRw+VL19elmVpxIgR5joNAEFwruc2ADjl1ry0LEuxsbFq2rSpxo8fr8zMTL/6HTp0UIcOHULT2UK68847VatWLb9tlmVp7NixQTneiRMnNHbsWK1evdp426tXr5ZlWUFpGwAAhA8G1JGnDRs2aNy4cWH/H41sQ4cOVXJystatW6cXX3xRu3bt0jXXXKO1a9cWqr37779fn332mWbMmKHk5GTdf//9hnsMAGad67kNAE65NS+Tk5P1r3/9S+3atdP999+vhx9+2K/e66+/rtdffz1EvTQnOTlZd999d1DaPnHihMaNG8egN4CgmzVrVo4vRS+88EJ16NBBH3zwQY76wfwyMT+7d+9WVFSUkpOT/baPHj1aFSpUULVq1TRt2rRc992zZ4+GDBmiiy66SGXKlFHZsmXVqFEjPfbYYzpw4ICvXr9+/XTDDTcE8zSAYlUq1B0ATKlZs6Zat24tSWrXrp3q1aunK6+8UtOnT1f79u0Dbu/rr7/WZZddRugDQJCYzm0AKKn+mJeS1K1bN3399deaN2+eXnrpJd/2hg0bhqJ7xv3xXAHA7WbOnKn69evLtm2lpqZq0qRJuu6667RkyRJdd911vnrJycmqXr16sffvwQcfVOfOndWmTRvftgULFmju3LmaNWuWTpw4oSFDhujSSy9Vy5YtfXU++OAD3XLLLapYsaKGDBmiZs2aybIsffXVV5oxY4aWLl2qbdu2SZLGjh2r+vXr65NPPtFVV11V7OcImMYMdeRq7NixeuihhyRJtWvX9n2bmj2TY8GCBerSpYuqVKmiMmXKqEGDBvr73/+u48eP+7WzZ88e3XLLLapataqioqJUqVIlderUSdu3bw/6ObRo0UKS9PPPP/ttT01N1b333qvq1asrMjJStWvX1rhx45SRkSHpf7dqfv/99/rwww99575v376g9xkACqsk5/Zrr72m9u3bKz4+XuXKlVOTJk30/PPP6+zZs351PB6PDh065Nv20ksvybIsDR482LfN6/Xqggsu0AMPPBDkswEQrkpCXkpSXFycSpcu7bcttyVfxo0bp1atWql8+fKKjY1V8+bNNX36dNm27Vfvk08+UYcOHVShQgWVKVNGNWvW1I033qgTJ07k2w+nn5eUNVvz4osvVlRUlBo0aKA5c+bk2uafZ2mOHTtWlmXl2t6fr9PzO499+/bpwgsv9H0u2X/3d955p2//Xbt26bbbblN8fLyvn6+99lqOY3/77bfq1q2bypYtq4oVK+q+++7T0aNH8/2sAJybGjdurNatW6tNmzbq1auXPvjgA0VFRWnevHl+9Vq3bl3sA+o7duzQe++9p6FDh/ptX7dunYYPH67rrrtOffr0Ub9+/fzuIt27d69uueUWXXTRRfriiy/04IMPqlOnTrrqqqs0fPhwbd++XaNHj/bVr1u3rrp166Znn3222M4NCCZmqCNXd999t3777TdNnDhR7777rqpUqSLpf7Nesm/LHzFihMqVK6dvv/1Wzz33nD7//HN98sknvnauueYaZWZm6vnnn1fNmjV1+PBhbdiwoVhur927d68k6aKLLvJtS01N1WWXXSaPx6PHH39cdevWVXJysp566int27dPM2fOVPPmzZWcnKxevXqpbt26evHFFyXJ9xkAQDgqqbktZd2Getttt6l27dqKjIzUF198oaefflrffvutZsyYIUm6+uqrZdu2Pv74Y916662SpFWrVqlMmTJauXKlr63NmzfryJEjuvrqq4N+PgDCkxvz0uv1+iZ/pKWlafHixVq+fLkeeeSRAvfdt2+f7r33XtWsWVOStHHjRg0dOlQHDhzQ448/7qvTo0cPXXHFFZoxY4bOP/98HThwQMuXL9eZM2dUtmzZPNt3+nnNmjVL/fv31/XXX6+XXnpJaWlpGjt2rE6fPi2Px8w8r4LOo0qVKlq+fLm6deumAQMG+JaVyR5k/+abb9S2bVvVrFlTL730kipXrqyPPvpIw4YN0+HDhzVmzBhJWV/8XnnllSpdurRef/11VapUSW+99ZaGDBli5DwAlGzR0dGKjIzM8aWoZVkaM2aM7wvFX375RWPGjNHq1au1f/9+lS1bVo0bN9a4ceN0xRVX+O07efJkTZkyRbt375ZlWapWrZp69+6tZ555Jt++TJ48WZUrV1bnzp39ttetW1f/+te/1KtXL504cUJLly71uyPq5Zdf1vHjx/X6668rLi4uR7uWZal3795+2/r166dbbrlFu3fvVt26dQv8nICwZgN5eOGFF2xJ9t69e/Ot5/V67bNnz9pr1qyxJdlffPGFbdu2ffjwYVuSPX78+KD2c+/evbYk+7nnnrPPnj1rnzp1yt6+fbvdpk0bu0qVKn79v/fee+3zzjvP/uGHH/zaePHFF21J9n/+8x/ftoSEBLtHjx5B7TsAmFQSc/vPMjMz7bNnz9pz5syxIyIi7N9++833XvXq1e277rrLtm3bPn36tF2uXDn7kUcesSX5cv/pp5+2S5cubR87diyo5wggvLktL3Mrd955p52RkeFX/8orr7SvvPLKPNvLztAnnnjCrlChgu31em3btu133nnHlmRv3769SP3N6/PKzMy0q1atajdv3tx3TNu27X379tmlS5e2ExIS/NqRZI8ZM8b3esyYMXZu/3WdOXOm39+jk/P45ZdfcrSfrWvXrnb16tXttLQ0v+1Dhgyxo6Ojfb9zHnnkEduyrBzH6dy5sy3J/vTTT/M8PoBzR3ZGbdy40T579qx95swZOyUlxR42bJjt8Xjs5cuX+9X/czZ9++239v/93//Z8+fPt1evXm1/8MEH9oABA2yPx+OXM/PmzbMl2UOHDrVXrFhhr1q1yp4yZYo9bNiwAvtYp04d++abb86x/cSJE/bVV1/t+50zcOBAv/cvuugiu1KlSgF9Hj///LMtyZ4wYUJA+wHhiCVfUCh79uzRbbfdpsqVKysiIkKlS5fWlVdeKSnrliFJKl++vOrWrasXXnhBL7/8srZt2yav11tg27ZtKyMjw6848cgjj6h06dKKjo7WpZdeqq+//lrvv/++atWq5avzwQcfqGPHjqpatapf+927d5ckrVmzJsBPAgDcwa25LUnbtm1Tz549VaFCBV/fb7/9dmVmZuq7777z1evUqZNWrVolKeuBgydOnNDIkSNVsWJF3yz1VatWqU2bNipXrpyjPgI494RjXg4fPlybNm3Spk2b9Omnn+qZZ57Rv/71L98dOfn55JNPdPXVVysuLs53Po8//rh+/fVX3zJZl156qSIjIzVw4EDNnj1be/bscdQvydnntXPnTv3000+67bbb/JZuSUhIUNu2bR0fqyBFOY9Tp07p448/Vq9evVS2bFm/v6NrrrlGp06d0saNGyVJn376qRo1aqSmTZv6tXHbbbcZOxcAJUfr1q1VunRpRUZGqkaNGnrjjTc0adIkde3aNd/9Lr74Yr3++uvq06ePrrzySnXr1k1TpkxRx44dNWHCBF+9f//73zr//PM1YcIEde7cWZ06ddK9996rV199Nd/2Dx06pD179qh58+Y53su+y3Pv3r06ePCg3njjDb/39+/fr9q1awfwKUjx8fGqVq2a/v3vfwe0HxCOGFBHwI4dO6YrrrhCn332mZ566imtXr1amzZt0rvvvitJOnnypKSsW3w+/vhjde3aVc8//7yaN2+uCy+8UMOGDct3fcE1a9aodOnSfsXJ+uXZ/9FYv369XnzxRZ09e1bXX3+9fv31V1+dn3/+We+//36O9hs1aiRJOnz4cBE+GQAIT27O7f379+uKK67QgQMH9Oqrr2rdunXatGmTbz3b7L5LWcu+7N+/X7t27dKqVavUrFkzxcfH66qrrtKqVat08uRJbdiwgeVeAOQpXPOyevXqatGihVq0aKEOHTpo1KhRGj16tN5++2199NFHee73+eefq0uXLpKkadOm6d///rc2bdqkRx991O986tatq1WrVik+Pl6DBw9W3bp1Vbdu3QIHY5x+Xtm5Xrly5Rxt5LatsAp7Htl9zMjI0MSJE3P8HV1zzTWS/vd/hV9//TXo5wKg5JgzZ47vS9EPP/xQd9xxhwYPHqxJkyYVuO+UKVPUvHlzRUdHq1SpUipdurQ+/vhj3xeWknTZZZfpyJEjuvXWW7V48WLH4xo//fSTpKyB7rzUqlXLaLbFx8frwIEDxtoDQoU11BGwTz75RD/99JNWr17tm30iKdf1IhMSEjR9+nRJ0nfffad//etfGjt2rM6cOaMpU6bk2n5iYqI2bdrkt61q1aoF9iv7PxqS1K5dO1WuXFl/+9vfNGbMGN8vqooVK+qSSy7R008/nWsbTo4DAG7j5tx+7733dPz4cb377rtKSEjw7ZvbQ/86deokKWsW+sqVK31rQXbq1EmPPfaY1q5dq9OnTzOgDiBP4ZqXubnkkkskSV988UWesxznz5+v0qVL64MPPlB0dLRv+3vvvZej7hVXXKErrrhCmZmZ2rx5syZOnKgRI0aoUqVKuuWWW3Jt3+nnVaFCBUlZzzP6s9y2/Vl230+fPq2oqCjf9twGjQpzHpJ0wQUXKCIiQv369fN7mPUfZc/GrFChQqHPBcC5p0GDBr5rXknq1q2bfvjhBz388MP629/+pvPPPz/X/V5++WU98MADuu+++/Tkk0+qYsWKioiI0OjRo/0G1Pv166eMjAxNmzZNN954o7xer1q2bKmnnnoqx9rof5T9pecffz84VbNmTd/zjwIRHR3tNyEGcCtmqCNP2Rerfw677Ns0/3gxKynHLUB/dtFFF+mxxx5TkyZNtHXr1jzrxcTE+GbgZJfIyMiA+9+3b1916NBB06ZN0w8//CBJuvbaa/X111+rbt26OY7RokULBtQBuFpJzO3c+m7btqZNm5Zj/ypVqqhhw4ZauHChtmzZ4vsPROfOnfXLL7/o5ZdfVmxsrFq2bBlw3wCULG7PS+l/XyzmN7PQsiyVKlVKERERvm0nT57UP//5zzz3iYiIUKtWrXx3AuV3Pk4/r4svvlhVqlTRvHnzZNu2b/sPP/ygDRs25Nl+tuylwL788ku/7e+//37A55HX333ZsmXVsWNHbdu2TZdcckmu/1fI/mKgY8eO+s9//qMvvvjCr425c+cWeC4AIGV9KXry5Em/5Qv/7M0331SHDh00efJk9ejRQ61atVKLFi1yvROqf//+2rBhg9LS0rR06VLZtq1rr73Wd02dm4oVK0qSfvvtt4D737VrV/3888++pbCc+u2333zHBdyMAXXkqUmTJpKkV199VcnJydq8ebOOHj2qtm3b6oILLtB9992nRYsW6YMPPtCtt96a44Lyyy+/VPv27TVx4kQtX75cn3zyiR577DF9+eWX+X5LatJzzz2nM2fO6Mknn5QkPfHEEypdurTatm2ryZMn65NPPtGyZcv0+uuv69prr9WPP/5YLP0CgGAoibnduXNnRUZG6tZbb9WHH36oRYsWqWvXrvr9999z3b9Tp076+OOPFRkZqXbt2knKmlFYu3ZtrVixQh06dFCpUtygB5zr3JaX+/fv18aNG7Vx40Z9/PHHeuqpp/T0008rISFBvXv3znO/Hj166NixY7rtttu0cuVKzZ8/X1dccUWOAfApU6bo5ptv1uzZs/Xpp5/qww8/1N133y1J+d7V4/Tz8ng8evLJJ7Vlyxb16tVLS5cu1VtvvaWrr77a0VIC11xzjcqXL68BAwbovffe0wcffKCbbrpJKSkpAZ9HTEyMEhIStHjxYq1YsUKbN2/2Lbvz6quv+pYamzVrllavXq33339fr7zyiq666irfcUaMGKGKFSuqR48emjVrlj788EP97W9/07ffflvguQCA9L8vRS+88MI861iWlSOvv/zySyUnJ+e5T7ly5dS9e3c9+uijOnPmjP7zn//kWTchIUFlypTR7t27A+u8pPvvv1/lypXToEGDlJaWluN927a1aNEiv20ZGRlKSUlRw4YNAz4eEHZC+EBUuMCoUaPsqlWr2h6Px++J9Rs2bLDbtGljly1b1r7wwgvtu+++2966dastyZ45c6Zt21lPcL7zzjvt+vXr2+XKlbPPO+88+5JLLrFfeeUVOyMjw1gf9+7da0uyX3jhhVzf/+tf/2qXKlXK/v77723btu1ffvnFHjZsmF27dm27dOnSdvny5e3ExET70UcftY8dO+bbLyEhwe7Ro4exfgJAcSiJuf3+++/bTZs2taOjo+1q1arZDz30kP3hhx/6nV+2xYsX25Lszp07+22/5557bEn2hAkTjJ0HAHdzU17+sURHR9sXXXSRPWLECPvgwYN+9a+88kr7yiuv9Ns2Y8YM++KLL7ajoqLsOnXq2ElJSfb06dNtSfbevXtt27bt5ORku1evXnZCQoIdFRVlV6hQwb7yyivtJUuWFNhHJ59Xtn/84x92vXr17MjISPuiiy6yZ8yYYd9xxx12QkKCXz1J9tixY/22ff7553bbtm3tcuXK2dWqVbPHjBlj/+Mf/yjUeaxatcpu1qyZHRUVZUuy77jjDr/P/K677rKrVatmly5d2r7wwgvttm3b2k899ZRfG998843duXNnOzo62i5fvrw9YMAA3++gP/9uAnBumjlzpi8Lk5OT7eTkZPuDDz6w77rrLluS3atXL7/6kuwxY8b4Xj/++OO2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OKoyrlAPkJycHI0cOVJ169ZVzZo1dfXVV2vHjh2e7UU/wXn77bfVokUL1a5dW/369fP6lqugoEATJkxQnTp1VL9+fd1777266aabvH4mdOZPknr06KF9+/Zp8uTJnp+fSNK0adPUrl07r/bNmzdPqampnseFhYW68847Pfv685//LDPzeo6Zac6cOWrSpImio6PVtm1bLV++vEKvz5IlS3ThhReqZs2auu6663T48OFiZd5880117NhRUVFRatKkiaZPn66CggLP9m+//VaXX365oqKi1LJlS61du9brJzd79+6Vy+XSyy+/rB49eigqKkovvPCCJGnx4sVq0aKFoqKi1Lx5c/3tb3/z2vf333+vG264QXXr1lX9+vU1cOBA7d2717N93bp1uvTSS1WrVi3VqVNH3bp10759+/zqe1n9euKJJ9S6dWvVqlVLycnJ+tOf/qRjx455tu/bt0/XXHON6tatq1q1aumSSy7RW2+9pb179+rKK6+UJNWtW1cul0ujRo3yq00ASkaW+0aWk+VAOCDLfSPLyXIg1JHjvpHj5DiCwOCI7t2728SJEz2PBwwYYC1atLD333/fvvjiC+vbt69ddNFFdurUKTMzW7x4sdWoUcN69eplGRkZtnnzZmvRooXdeOONnjoeeughq1evnr322mu2bds2Gzt2rMXGxtrAgQNL3O/hw4etUaNGNmPGDMvKyrKsrCwzM5s6daq1bdvWq71PPvmkpaSkeB4/+uijFhcXZ8uXL7etW7fa6NGjLSYmxmtff/nLX6x58+aWnp5uu3btssWLF1tkZKStW7eu1NclJSXFnnzySa91mzZtMpfLZbNnz7bMzEx76qmnrE6dOhYXF+cpk56ebrGxsbZkyRLbtWuXrV692lJTU23atGlmZlZYWGhpaWnWu3dv++KLL+yDDz6wSy+91CTZihUrzMxsz549JslSU1Pt1Vdftd27d9v3339v8+fPt6SkJM+6V1991erVq2dLliwxM7Pjx49bs2bN7Oabb7avvvrKtm7dajfeeKOlpaXZyZMnLT8/3+Li4uzuu++2nTt32tatW23JkiW2b9++Ul8Hf/tVdGzeffdd2717t73zzjuWlpZmt99+u2f773//e+vdu7d99dVXtmvXLnvzzTdt/fr1VlBQYK+++qpJsszMTMvKyrIjR4547f/M1wdAcWR5ychyb2Q5ENrI8pKR5d7IciB0keMlI8e9keMIJgbUHXJm8G7fvt0k2UcffeTZ/uOPP1p0dLS9/PLLZnY68CXZzp07PWX+8z//0xISEjyPExIS7LHHHvM8LigosAsvvLDUwDcrOWD9CfykpCR75JFHPI/z8/OtUaNGnn0dO3bMoqKibMOGDV71jB492oYNG1bq61JSe4YNG2b9+vXzWnfDDTd4Bf5vf/tbmzVrlleZf/7zn5aUlGRmZqtWrbLq1at7/qiZma1Zs6bEwJ83b55XPcnJyfbSSy95rZs5c6Z16dLFzMwWLlxoaWlp5na7PdtPnjxp0dHR9vbbb9vhw4dNks8/dKUpq18lefnll61+/fqex61bt/b6A3Gm9957zyRZTk5OidsJfMA3srxkZLk3shwIbWR5ychyb2Q5ELrI8ZKR497IcQQTc6gHwLZt21S9enV17tzZs65+/fpKS0vTtm3bPOtq1qyppk2beh4nJSXp0KFDkqTc3FwdPHhQl156qWf7eeedp44dO8rtdjva3tzcXGVlZalLly6eddWrV1enTp08P0vaunWrTpw4od69e3s999SpU2rfvn259rdt2zZdd911Xuu6dOmi9PR0z+PNmzcrIyNDDz/8sGddYWGhTpw4oZ9//lmZmZlKTk72mjvszNfqTJ06dfL8+4cfftCBAwc0evRojRkzxrO+oKDAMwfW5s2btXPnTsXExHjVc+LECe3atUt9+vTRqFGj1LdvX/Xu3Vu9evXSkCFDlJSUVGbfy+pXzZo19d5772nWrFnaunWr8vLyVFBQoBMnTuj48eOqVauWJkyYoNtvv12rV69Wr169dP3116tNmzZl7htA+ZDlvpHlZDkQDshy38hyshwIdeS4b+Q4OY7gYEA9AOxXc2Odub5o3i1JxW7e4HK5ij33zPK+6valWrVqxZ6Xn59frjqK/sisXLlSDRs29NoWGRlZrrr86YPb7db06dM1aNCgYtuioqKKvZa+1KpVy6teSVqwYIHXH2Tp9B/UojIdO3bUiy++WKyu888/X9LpOcImTJig9PR0LVu2TA888IDWrFmjyy677Kz6tW/fPv3ud7/T2LFjNXPmTNWrV08ffvihRo8e7Tlmt9xyi/r27auVK1dq9erVmj17tubOnavx48f79XoA8A9Z7htZTpYD4YAs940sJ8uBUEeO+0aOk+MIDgbUA6Bly5YqKCjQxx9/rK5du0qSDh8+rO3bt6tFixZ+1REXF6eEhAR98skn+u1vfyvp9Ddtn3/+ebEbYJwpIiJChYWFXuvOP/98ZWdne4XkF1984bWvpKQkbdq0SVdccYWk098obt68WR06dPD0KTIyUvv371f37t396kNpWrZsqU2bNnmt+/XjDh06KDMzUxdddFGJdTRv3lz79+/XwYMHlZCQIEnKyMgoc98JCQlq2LChdu/ereHDh5dYpkOHDlq2bJkaNGig2NjYUutq37692rdvrylTpqhLly566aWXygz8svr16aefqqCgQHPnzlW1aqfvGfzyyy8XK5ecnKyxY8dq7NixmjJlihYsWKDx48crIiJCkoq9BwCUH1nuG1lOlgPhgCz3jSwny4FQR477Ro6T4wgOBtQDoFmzZho4cKDGjBmjf/zjH4qJidF9992nhg0bauDAgX7XM378eM2ePVsXXXSRmjdvrqefflo5OTk+vzlMTU3V+++/r6FDhyoyMlLx8fHq0aOHfvjhB82ZM0d/+MMflJ6erlWrVnmF2cSJE/XII4+oWbNmatGihZ544gkdOXLEsz0mJkZ33323Jk+eLLfbrcsvv1x5eXnasGGDateurZtuusnvfk2YMEFdu3bVnDlzdO2112r16tVeP0eSpAcffFD9+/dXcnKyBg8erGrVqumrr77Sli1b9NBDD6l3795q2rSpbrrpJs2ZM0dHjx7V/fffL6n4t86/Nm3aNE2YMEGxsbG6+uqrdfLkSX366afKycnRnXfeqeHDh+uxxx7TwIEDNWPGDDVq1Ej79+/Xa6+9pnvuuUf5+fmaP3++BgwYoAsuuECZmZnavn27Ro4cWWbfy+pX06ZNVVBQoKefflrXXHONPvroI/3973/3qmPSpEm6+uqrdfHFFysnJ0fvvvuu50QiJSVFLpdL//u//6vf/e53io6OVu3atf0+NgD+H1nuG1lOlgPhgCz3jSwny4FQR477Ro6T4wiSwE7RXnX8+uYVP/30k40YMcLi4uIsOjra+vbta9u3b/dsX7x4sddNIszMVqxYYWcekvz8fBs3bpzFxsZa3bp17d5777XBgwfb0KFDS93vxo0brU2bNhYZGelV17PPPmvJyclWq1YtGzlypD388MNeN83Iz8+3iRMnWmxsrNWpU8fuvPNOGzlypNcNOtxutz311FOWlpZmNWrUsPPPP9/69u1r69evL/V1KemmGWanb0zRqFEji46OtmuuucYef/zxYq9Henq6de3a1aKjoy02NtYuvfRSmz9/vmf7tm3brFu3bhYREWHNmze3N9980yRZenq6mf3/TTM+//zzYvt/8cUXrV27dhYREWF169a1K664wl577TXP9qysLBs5cqTFx8dbZGSkNWnSxMaMGWO5ubmWnZ1t1157rSUlJVlERISlpKTYgw8+aIWFhaW+DuXp1xNPPGFJSUme983zzz/vdSOMcePGWdOmTS0yMtLOP/98GzFihP3444+e58+YMcMSExPN5XLZTTfd5LVvcdMMwCeyvGRkeXFkORC6yPKSkeXFkeVAaCLHS0aOF0eOI1hcZhWYNApB4Xa71aJFCw0ZMkQzZ84MdnP8kpqaqkmTJmnSpEkB39dHH32kyy+/XDt37vS6GQn+n8vl0ooVK3TttdcGuylAlUWW+0aWl40sB4KPLPeNLC8bWQ4EFznuGzleNnK8aqsW7AagdPv27dOCBQu0fft2bdmyRbfffrv27NmjG2+8MdhNK5d7771XtWvXVm5urqP1rlixQmvWrNHevXu1du1a3XrrrerWrRthX4KxY8fy0yQgSMhy38hy/5HlQPCQ5b6R5f4jy4HgIMd9I8f9R45DkrhCPYQdOHBAQ4cO1ddffy0zU6tWrfTII494bmwRDvbt2+e5e3KTJk08N4JwwvPPP6+ZM2fqwIEDio+PV69evTR37lzVr1/fsX2U1yWXXKJ9+/aVuO0f//hHqTfqCLRDhw4pLy9PkpSUlOR1Z24AgUWW+0aW+48sB4KHLPeNLPcfWQ4EBznuGznuP3IcEgPqgKPO/AP3awkJCYqJiankFgEAyossB4DwR5YDQHgjxxHKGFAHAAAAAAAAAMAPzKEOAAAAAAAAAIAfGFAHAAAAAAAAAMAPDKgDAAAAAAAAAOAHBtQBAAAAAAAAAPADA+oAAAAAAAAAAPiBAXUAAAAAAAAAAPzAgDoAAAAAAAAAAH5gQB0AAAAAAAAAAD/8H5l3dXRIuc0iAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ds = pcat.search(\n", " processing_level=\"regridded\",\n", @@ -2072,76 +967,12 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "f060f23e", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n" - ] - } - ], + "outputs": [], "source": [ "ds_dict = pcat.search(processing_level=\"biasadjusted\").to_dataset_dict()\n", "\n", @@ -2166,687 +997,12 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "f9f8d1e9", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:              (lat: 5, lon: 4, time: 70)\n",
-       "Coordinates:\n",
-       "  * lat                  (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon                  (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * time                 (time) object 1981-01-01 00:00:00 ... 2050-01-01 00:...\n",
-       "Data variables:\n",
-       "    growing_degree_days  (time, lon, lat) float64 dask.array<chunksize=(70, 4, 5), meta=np.ndarray>\n",
-       "    tg_min               (time, lon, lat) float64 dask.array<chunksize=(70, 4, 5), meta=np.ndarray>\n",
-       "Attributes: (12/25)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:date_end:                 2050-12-31 00:00:00\n",
-       "    cat:date_start:               1981-01-01 00:00:00\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    history:                      [2023-10-09 15:41:03] regridded with argume...\n",
-       "    intake_esm_dataset_key:       CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n",
-       "    intake_esm_vars:              ('tas',)\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 5, lon: 4, time: 70)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * time (time) object 1981-01-01 00:00:00 ... 2050-01-01 00:...\n", - "Data variables:\n", - " growing_degree_days (time, lon, lat) float64 dask.array\n", - " tg_min (time, lon, lat) float64 dask.array\n", - "Attributes: (12/25)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:date_end: 2050-12-31 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " history: [2023-10-09 15:41:03] regridded with argume...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n", - " intake_esm_vars: ('tas',)\n", - " regrid_method: bilinear\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display(ds_ind)" ] @@ -2874,66 +1030,12 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "fb23ba64", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ds_dict = pcat.search(processing_level=\"indicators\").to_dataset_dict()\n", "\n", @@ -2953,605 +1055,12 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "ef7b336f", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:              (lat: 5, lon: 4, time: 5)\n",
-       "Coordinates:\n",
-       "  * lat                  (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon                  (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "    horizon              (time) <U9 '1981-2010' '1991-2020' ... '2021-2050'\n",
-       "  * time                 (time) object 1981-01-01 00:00:00 ... 2021-01-01 00:...\n",
-       "Data variables:\n",
-       "    growing_degree_days  (time, lon, lat) float64 dask.array<chunksize=(5, 4, 5), meta=np.ndarray>\n",
-       "    tg_min               (time, lon, lat) float64 dask.array<chunksize=(5, 4, 5), meta=np.ndarray>\n",
-       "Attributes: (12/25)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:date_end:                 2050-01-01 00:00:00\n",
-       "    cat:date_start:               1981-01-01 00:00:00\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    history:                      [2023-10-09 15:41:02] regridded with argume...\n",
-       "    intake_esm_dataset_key:       CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i...\n",
-       "    intake_esm_vars:              ('growing_degree_days', 'tg_min')\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 5, lon: 4, time: 5)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " horizon (time) \n", - " tg_min (time, lon, lat) float64 dask.array\n", - "Attributes: (12/25)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:date_end: 2050-01-01 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " history: [2023-10-09 15:41:02] regridded with argume...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i...\n", - " intake_esm_vars: ('growing_degree_days', 'tg_min')\n", - " regrid_method: bilinear\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display(ds_mean)" ] @@ -3572,26 +1081,12 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "7c6aaeaa", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "time: [cftime.DatetimeNoLeap(1981, 1, 1, 0, 0, 0, 0, has_year_zero=True)\n", - " cftime.DatetimeNoLeap(1991, 1, 1, 0, 0, 0, 0, has_year_zero=True)\n", - " cftime.DatetimeNoLeap(2001, 1, 1, 0, 0, 0, 0, has_year_zero=True)\n", - " cftime.DatetimeNoLeap(2011, 1, 1, 0, 0, 0, 0, has_year_zero=True)\n", - " cftime.DatetimeNoLeap(2021, 1, 1, 0, 0, 0, 0, has_year_zero=True)]\n", - "horizon: ['1981-2010' '1991-2020' '2001-2030' '2011-2040' '2021-2050']\n", - "cat:xrfreq attribute: AS-JAN\n" - ] - } - ], + "outputs": [], "source": [ "print(f\"time: {ds_mean.time.values}\")\n", "print(f\"horizon: {ds_mean.horizon.values}\")\n", @@ -3615,66 +1110,12 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "id": "a6971329", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ds_dict = pcat.search(processing_level=\"30yr-climatology\").to_dataset_dict()\n", "\n", @@ -3698,29 +1139,12 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "698e241a", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Deltas over ['1981-2010' '1991-2020' '2001-2030' '2011-2040' '2021-2050']\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0. , 0.04401971, 0.46335546, 1.33483675, 2.48586193])" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "print(f\"Deltas over {ds_delta.horizon.values}\")\n", "display(ds_delta.tg_min_delta_1981_2010.isel(lon=0, lat=0).values)" @@ -3751,66 +1175,12 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "id": "17168e53", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ds_dict = pcat.search(processing_level=\"deltas\", domain=\"finer-grid\").to_dataset_dict()\n", "\n", @@ -3834,614 +1204,12 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "id": "f9bf486a", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                              (time: 5)\n",
-       "Coordinates:\n",
-       "    horizon                              (time) <U9 dask.array<chunksize=(5,), meta=np.ndarray>\n",
-       "  * time                                 (time) object 1981-01-01 00:00:00 .....\n",
-       "    lon                                  float64 -74.5\n",
-       "    lat                                  int64 47\n",
-       "Data variables:\n",
-       "    growing_degree_days_delta_1981_2010  (time) float64 dask.array<chunksize=(5,), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010               (time) float64 dask.array<chunksize=(5,), meta=np.ndarray>\n",
-       "Attributes: (12/25)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:date_end:                 2021-01-01 00:00:00\n",
-       "    cat:date_start:               1981-01-01 00:00:00\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    history:                      [2023-10-09 15:42:16] xarray.interp(**{'met...\n",
-       "    intake_esm_dataset_key:       CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i...\n",
-       "    intake_esm_vars:              ('tg_min_delta_1981_2010', 'growing_degree_...\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (time: 5)\n", - "Coordinates:\n", - " horizon (time) \n", - " * time (time) object 1981-01-01 00:00:00 .....\n", - " lon float64 -74.5\n", - " lat int64 47\n", - "Data variables:\n", - " growing_degree_days_delta_1981_2010 (time) float64 dask.array\n", - " tg_min_delta_1981_2010 (time) float64 dask.array\n", - "Attributes: (12/25)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:date_end: 2021-01-01 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " history: [2023-10-09 15:42:16] xarray.interp(**{'met...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i...\n", - " intake_esm_vars: ('tg_min_delta_1981_2010', 'growing_degree_...\n", - " regrid_method: bilinear\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Aggregated deltas over the study area\n", "display(ds_savg)" @@ -4474,449 +1242,12 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "id": "fa8e6d0f-5148-4bad-a2ba-ada5035df35c", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray (realization: 2)>\n",
-       "array([0.5, 0.5])\n",
-       "Coordinates:\n",
-       "  * realization  (realization) <U88 'CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_...
" - ], - "text/plain": [ - "\n", - "array([0.5, 0.5])\n", - "Coordinates:\n", - " * realization (realization) \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                              (time: 5, percentiles: 3)\n",
-       "Coordinates:\n",
-       "    horizon                              (time) <U9 dask.array<chunksize=(5,), meta=np.ndarray>\n",
-       "    lat                                  int64 47\n",
-       "    lon                                  float64 -74.5\n",
-       "  * time                                 (time) object 1981-01-01 00:00:00 .....\n",
-       "  * percentiles                          (percentiles) int64 10 50 90\n",
-       "Data variables:\n",
-       "    growing_degree_days_delta_1981_2010  (percentiles, time) float64 dask.array<chunksize=(3, 5), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010               (percentiles, time) float64 dask.array<chunksize=(3, 5), meta=np.ndarray>\n",
-       "Attributes: (12/20)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:domain:                   aggregated\n",
-       "    cat:experiment:               ssp245\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    intake_esm_vars:              ('tg_min_delta_1981_2010', 'growing_degree_...\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108\n",
-       "    cat:id:                       xscen-tutorial_CMIP6_ScenarioMIP_NCC_NorESM...\n",
-       "    ensemble_size:                2
" - ], - "text/plain": [ - "\n", - "Dimensions: (time: 5, percentiles: 3)\n", - "Coordinates:\n", - " horizon (time) \n", - " lat int64 47\n", - " lon float64 -74.5\n", - " * time (time) object 1981-01-01 00:00:00 .....\n", - " * percentiles (percentiles) int64 10 50 90\n", - "Data variables:\n", - " growing_degree_days_delta_1981_2010 (percentiles, time) float64 dask.array\n", - " tg_min_delta_1981_2010 (percentiles, time) float64 dask.array\n", - "Attributes: (12/20)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:domain: aggregated\n", - " cat:experiment: ssp245\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " intake_esm_vars: ('tg_min_delta_1981_2010', 'growing_degree_...\n", - " regrid_method: bilinear\n", - " version: v20191108\n", - " cat:id: xscen-tutorial_CMIP6_ScenarioMIP_NCC_NorESM...\n", - " ensemble_size: 2" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display(ens_stats)" ] @@ -5625,7 +1344,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "id": "465ca630", "metadata": {}, "outputs": [], @@ -5657,7 +1376,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "bcda251f", "metadata": {}, "outputs": [], @@ -5676,20 +1395,10 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "id": "b7c6a2e2", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.utils:Converting units: {'tas': 'degC'}\n", - "INFO:xscen.utils:Converting calendar with {'target': 'standard', 'missing': -9999} \n", - "INFO:root:Filling missing tas with interpolate\n" - ] - } - ], + "outputs": [], "source": [ "ds = pcat.search(\n", " processing_level=\"biasadjusted\", variable=\"tas\", experiment=\"ssp245\", member=\"r1.*\"\n", @@ -5709,1062 +1418,10 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "id": "91502867", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Initial calendar: noleap\n", - "[cftime.DatetimeNoLeap(2000, 2, 28, 0, 0, 0, 0, has_year_zero=True)\n", - " cftime.DatetimeNoLeap(2000, 3, 1, 0, 0, 0, 0, has_year_zero=True)]\n", - "[10.1320762 8.56638259]\n", - "Final calendar: standard\n", - "[cftime.DatetimeGregorian(2000, 2, 28, 0, 0, 0, 0, has_year_zero=False)\n", - " cftime.DatetimeGregorian(2000, 2, 29, 0, 0, 0, 0, has_year_zero=False)\n", - " cftime.DatetimeGregorian(2000, 3, 1, 0, 0, 0, 0, has_year_zero=False)]\n", - "[10.1320762 9.34922939 8.56638259]\n", - "\n", - "Inspect initial attributes\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:  (time: 25550, lon: 4, lat: 5)\n",
-       "Coordinates:\n",
-       "  * lat      (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon      (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * time     (time) object 1981-01-01 00:00:00 ... 2050-12-31 00:00:00\n",
-       "Data variables:\n",
-       "    tas      (time, lon, lat) float64 dask.array<chunksize=(25550, 4, 5), meta=np.ndarray>\n",
-       "Attributes: (12/25)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:date_end:                 2050-12-31 00:00:00\n",
-       "    cat:date_start:               1981-01-01 00:00:00\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    history:                      [2023-10-09 15:41:03] regridded with argume...\n",
-       "    intake_esm_dataset_key:       CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n",
-       "    intake_esm_vars:              ['tas']\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (time: 25550, lon: 4, lat: 5)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * time (time) object 1981-01-01 00:00:00 ... 2050-12-31 00:00:00\n", - "Data variables:\n", - " tas (time, lon, lat) float64 dask.array\n", - "Attributes: (12/25)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:date_end: 2050-12-31 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " history: [2023-10-09 15:41:03] regridded with argume...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n", - " intake_esm_vars: ['tas']\n", - " regrid_method: bilinear\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Inspect final attributes\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:  (time: 25567, lon: 4, lat: 5)\n",
-       "Coordinates:\n",
-       "  * lat      (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon      (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * time     (time) object 1981-01-01 00:00:00 ... 2050-12-31 00:00:00\n",
-       "Data variables:\n",
-       "    tas      (time, lon, lat) float64 dask.array<chunksize=(25567, 4, 5), meta=np.ndarray>\n",
-       "Attributes: (12/19)\n",
-       "    dataset:_data_format_:            zarr\n",
-       "    dataset:activity:                 ScenarioMIP\n",
-       "    dataset:bias_adjust_institution:  Ouranos\n",
-       "    dataset:bias_adjust_project:      xscen-tutorial\n",
-       "    dataset:date_end:                 2050-12-31 00:00:00\n",
-       "    dataset:date_start:               1981-01-01 00:00:00\n",
-       "    ...                               ...\n",
-       "    dataset:path:                     /home/pbourg/xscen/docs/notebooks/_data...\n",
-       "    dataset:processing_level:         biasadjusted\n",
-       "    dataset:source:                   NorESM2-MM\n",
-       "    dataset:type:                     simulation\n",
-       "    dataset:variable:                 tas\n",
-       "    dataset:xrfreq:                   D
" - ], - "text/plain": [ - "\n", - "Dimensions: (time: 25567, lon: 4, lat: 5)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * time (time) object 1981-01-01 00:00:00 ... 2050-12-31 00:00:00\n", - "Data variables:\n", - " tas (time, lon, lat) float64 dask.array\n", - "Attributes: (12/19)\n", - " dataset:_data_format_: zarr\n", - " dataset:activity: ScenarioMIP\n", - " dataset:bias_adjust_institution: Ouranos\n", - " dataset:bias_adjust_project: xscen-tutorial\n", - " dataset:date_end: 2050-12-31 00:00:00\n", - " dataset:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " dataset:path: /home/pbourg/xscen/docs/notebooks/_data...\n", - " dataset:processing_level: biasadjusted\n", - " dataset:source: NorESM2-MM\n", - " dataset:type: simulation\n", - " dataset:variable: tas\n", - " dataset:xrfreq: D" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from xclim.core.calendar import get_calendar\n", "\n", diff --git a/docs/notebooks/3_diagnostics.ipynb b/docs/notebooks/3_diagnostics.ipynb index e40c7381..3a6502c8 100644 --- a/docs/notebooks/3_diagnostics.ipynb +++ b/docs/notebooks/3_diagnostics.ipynb @@ -2,20 +2,12 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "b2e9213c", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Successfully wrote ESM catalog json file to: file:///home/pbourg/xscen/docs/notebooks/_data/example-diagnostics.json\n" - ] - } - ], + "outputs": [], "source": [ "from pathlib import Path\n", "\n", @@ -55,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "5022726c", "metadata": { "tags": [] @@ -100,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "50b76511-571f-4472-81c6-3c4e0872b4d8", "metadata": { "tags": [] @@ -117,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "84bb901a-3806-40a5-9214-f98f1b52c515", "metadata": { "tags": [] @@ -138,24 +130,12 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "ddb4a2ad-fc69-47c2-9f44-97f7ebaab7f2", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/pbourg/xscen/xscen/diagnostics.py:285: UserWarning: The following health checks failed:\n", - " - The calendar is not '365_day'. Received 'default'.\n", - " - The start date is not at least 1971-01-01 00:00:00. Received 1981-01-01 00:00:00.\n", - " - The variable 'tas' does not have the expected units 'degC'. Received 'K'.\n", - " - The frequency is not 'MS'. Received 'D'.\n" - ] - } - ], + "outputs": [], "source": [ "xs.diagnostics.health_checks(\n", " ds,\n", @@ -234,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "dc1131b2", "metadata": {}, "outputs": [], @@ -254,638 +234,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "fae03cbe", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.diagnostics:1 - Computing quantile_98_tas.\n", - "INFO:xscen.diagnostics:2 - Computing maximum_length_of_warm_spell.\n", - "INFO:xscen.diagnostics:3 - Computing mean-tas.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                       (lat: 5, lon: 4, season: 4)\n",
-       "Coordinates:\n",
-       "  * lat                           (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon                           (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * season                        (season) <U3 'DJF' 'JJA' 'MAM' 'SON'\n",
-       "Data variables:\n",
-       "    quantile_98_tas               (season, lat, lon) float64 dask.array<chunksize=(1, 5, 4), meta=np.ndarray>\n",
-       "    maximum_length_of_warm_spell  (lon, lat) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
-       "    mean-tas                      (lat, lon) float64 dask.array<chunksize=(5, 4), meta=np.ndarray>\n",
-       "Attributes: (12/21)\n",
-       "    cat:_data_format_:       zarr\n",
-       "    cat:activity:            None\n",
-       "    cat:date_end:            2011-12-24 00:00:00\n",
-       "    cat:date_start:          1981-01-01 00:00:00\n",
-       "    cat:domain:              finer-grid\n",
-       "    cat:experiment:          None\n",
-       "    ...                      ...\n",
-       "    cat:xrfreq:              fx\n",
-       "    comment:                 This is a test file created for the xscen tutori...\n",
-       "    history:                 [2023-10-09 15:40:53] bbox spatial subsetting wi...\n",
-       "    intake_esm_dataset_key:  ECMWF_ERA5-Land_finer-grid.finer-grid.extracted.D\n",
-       "    intake_esm_vars:         ('tas',)\n",
-       "    version:                 v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 5, lon: 4, season: 4)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * season (season) \n", - " maximum_length_of_warm_spell (lon, lat) float64 dask.array\n", - " mean-tas (lat, lon) float64 dask.array\n", - "Attributes: (12/21)\n", - " cat:_data_format_: zarr\n", - " cat:activity: None\n", - " cat:date_end: 2011-12-24 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " cat:domain: finer-grid\n", - " cat:experiment: None\n", - " ... ...\n", - " cat:xrfreq: fx\n", - " comment: This is a test file created for the xscen tutori...\n", - " history: [2023-10-09 15:40:53] bbox spatial subsetting wi...\n", - " intake_esm_dataset_key: ECMWF_ERA5-Land_finer-grid.finer-grid.extracted.D\n", - " intake_esm_vars: ('tas',)\n", - " version: v20191108" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# load input\n", "dref = gettingStarted_cat.search(source=\"ERA5-Land\").to_dataset()\n", @@ -920,1268 +272,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "d78534b5", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.diagnostics:1 - Computing quantile_98_tas.\n", - "INFO:xscen.diagnostics:2 - Computing maximum_length_of_warm_spell.\n", - "INFO:xscen.diagnostics:3 - Computing mean-tas.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                       (lat: 5, lon: 4, season: 4)\n",
-       "Coordinates:\n",
-       "  * lat                           (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon                           (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * season                        (season) <U3 'DJF' 'JJA' 'MAM' 'SON'\n",
-       "Data variables:\n",
-       "    quantile_98_tas               (season, lon, lat) float64 dask.array<chunksize=(1, 4, 5), meta=np.ndarray>\n",
-       "    maximum_length_of_warm_spell  (lon, lat) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
-       "    mean-tas                      (lon, lat) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
-       "Attributes: (12/24)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:date_end:                 2050-12-31 00:00:00\n",
-       "    cat:date_start:               1981-01-01 00:00:00\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    history:                      [2023-10-09 15:41:03] regridded with argume...\n",
-       "    intake_esm_dataset_key:       CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n",
-       "    intake_esm_vars:              ('tas',)\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 5, lon: 4, season: 4)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * season (season) \n", - " maximum_length_of_warm_spell (lon, lat) float64 dask.array\n", - " mean-tas (lon, lat) float64 dask.array\n", - "Attributes: (12/24)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:date_end: 2050-12-31 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " history: [2023-10-09 15:41:03] regridded with argume...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n", - " intake_esm_vars: ('tas',)\n", - " regrid_method: bilinear\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                       (lat: 5, lon: 4, season: 4)\n",
-       "Coordinates:\n",
-       "  * lat                           (lat) float64 45.27 45.82 46.37 46.92 47.47\n",
-       "  * lon                           (lon) float64 -74.88 -74.62 -74.38 -74.12\n",
-       "  * season                        (season) <U3 'DJF' 'JJA' 'MAM' 'SON'\n",
-       "Data variables:\n",
-       "    quantile_98_tas               (season, lon, lat) float64 dask.array<chunksize=(1, 4, 5), meta=np.ndarray>\n",
-       "    maximum_length_of_warm_spell  (lon, lat) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
-       "    mean-tas                      (lon, lat) float64 dask.array<chunksize=(4, 5), meta=np.ndarray>\n",
-       "Attributes: (12/24)\n",
-       "    cat:_data_format_:            zarr\n",
-       "    cat:activity:                 ScenarioMIP\n",
-       "    cat:bias_adjust_institution:  Ouranos\n",
-       "    cat:bias_adjust_project:      xscen-tutorial\n",
-       "    cat:date_end:                 2050-12-31 00:00:00\n",
-       "    cat:date_start:               1981-01-01 00:00:00\n",
-       "    ...                           ...\n",
-       "    comment:                      This is a test file created for the xscen t...\n",
-       "    history:                      [2023-10-09 15:41:03] regridded with argume...\n",
-       "    intake_esm_dataset_key:       CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n",
-       "    intake_esm_vars:              ('tas',)\n",
-       "    regrid_method:                bilinear\n",
-       "    version:                      v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 5, lon: 4, season: 4)\n", - "Coordinates:\n", - " * lat (lat) float64 45.27 45.82 46.37 46.92 47.47\n", - " * lon (lon) float64 -74.88 -74.62 -74.38 -74.12\n", - " * season (season) \n", - " maximum_length_of_warm_spell (lon, lat) float64 dask.array\n", - " mean-tas (lon, lat) float64 dask.array\n", - "Attributes: (12/24)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:bias_adjust_institution: Ouranos\n", - " cat:bias_adjust_project: xscen-tutorial\n", - " cat:date_end: 2050-12-31 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " ... ...\n", - " comment: This is a test file created for the xscen t...\n", - " history: [2023-10-09 15:41:03] regridded with argume...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i...\n", - " intake_esm_vars: ('tas',)\n", - " regrid_method: bilinear\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# load input\n", "dscen = gettingStarted_cat.search(\n", @@ -2218,21 +312,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "520da8a4", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABcwAAAHqCAYAAAA59w0vAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC9SUlEQVR4nOzdeZyN5f/H8fc9u2VmrGPNICJbCVmzl6wlfSuEkDayjKWkEtlLZMlekkJlSYlQlhQheyRJWTLZYuzGnPv3h+b8Os3g3GfumXPOnNfz8bgeD+c+97nO55ymec99netcl2GapikAAAAAAAAAAAJckLcLAAAAAAAAAADAFzBgDgAAAAAAAACAGDAHAAAAAAAAAEASA+YAAAAAAAAAAEhiwBwAAAAAAAAAAEkMmAMAAAAAAAAAIIkBcwAAAAAAAAAAJDFgDgAAAAAAAACAJAbMAQAAAAAAAACQxIA5MrmZM2fKMAxnCwkJUYECBfTYY49p3759HvX59ddfq3LlysqWLZsMw9CiRYvsLRoAAKTqhx9+UMuWLVWkSBGFh4crX758ql69unr37u3t0mxRt25d1a1b19tlAEC6++91mmEYyps3r+rWrasvvvgixfmGYei1117LsPp+//13GYahN99807Y+//zzT7322mvatm2bbX36mieeeMLlv2lYWJhuvfVW9enTRwkJCR73O378eJUoUUJhYWEyDEOnT5+2r2hcV9GiRfXEE0/c9LyTJ0+qf//+KlOmjLJly6bo6GiVLl1a7dq1044dO9K/0AyQ/Dvr999/93YpyCAh3i4AyAjvvfeeSpcurUuXLum7777T0KFDtWrVKv3888/KmTOn2/2YpqlHHnlEt912mxYvXqxs2bKpVKlS6Vg5AACQpCVLlqhFixaqW7euRo0apQIFCujo0aPavHmz5s6dq9GjR3u7xDR75513vF0CAGSo5Os00zQVHx+vCRMmqHnz5lq8eLGaN2/uPG/9+vUqXLiwFytNuz///FODBg1S0aJFdeedd3q7nHSTJUsWffPNN5Kk06dP69NPP9Xo0aO1Y8cOLV++3HJ/27ZtU/fu3fXkk0+qQ4cOCgkJUWRkpN1lw0Pnzp1TtWrVdO7cOfXt21d33HGHLl68qF9++UULFizQtm3bVKFCBW+XmWZNmzbV+vXrVaBAAW+XggzCgDkCQrly5VS5cmVJ12ZvJSUlaeDAgVq0aJE6duzodj9//vmnTp06pZYtW6pBgwa21JaYmOic/Q4AAFI3atQoFStWTF999ZVLZj722GMaNWqUFytLuwsXLihr1qwqU6aMt0sBgAz17+s0Sbr//vuVM2dOzZkzx2XAvFq1at4oDx4ICgpy+e91//3367ffftOKFSt04MABFStWzFJ/P/30kySpS5cuuvvuu22pMTl3kXaffPKJfv31V33zzTeqV6+ey31xcXFyOBxeqsweFy9eVEREhPLmzau8efN6uxxkIJZkQUBK/qPsr7/+ch7bvHmzWrRooVy5cikiIkIVK1bUxx9/7Lz/tddec85qeOGFF2QYhooWLeq8f9++fWrTpo1iYmIUHh6u22+/XRMnTnR53tWrV8swDH3wwQfq3bu3ChUqpPDwcP3666+SpJUrV6pBgwaKiopS1qxZVbNmTX399dcufbz22msyDEM//fSTWrdurejoaOXLl0+dOnXSmTNnXM51OBwaP3687rzzTmXJkkU5cuRQtWrVtHjxYpfz5s2bp+rVqytbtmzKnj27GjVqpK1bt3r47gIAYL+TJ08qT548qX7AHBTk+iftRx99pOrVqyt79uzKnj277rzzTs2YMcPlHLszd+LEiapdu7ZiYmKULVs2lS9fXqNGjVJiYqLLeXXr1lW5cuW0du1a1ahRQ1mzZlWnTp2c9/13SZZTp07pueeeU6FChRQWFqbixYtrwIABunz5sqX3DwD8QUREhMLCwhQaGupy/L9Lshw/flzPPfecypQpo+zZsysmJkb169fXt99+m6LPSZMm6Y477lD27NkVGRmp0qVL66WXXnKrHofDoaFDh6pIkSKKiIhQ5cqVU2SFdPNrwdWrV6tKlSqSpI4dOzqXLHnttde0ZMkSGYahTZs2Oc+fP3++DMNQ06ZNXZ6nQoUKatWqlfO2aZp65513nNd7OXPm1MMPP6zffvstRY12554VqV1/Sze/Dq1bt64ef/xxSVLVqlVlGIbLEiFWXtOWLVv08MMPK2fOnLr11lstvX/J2b1p0ybdc889ypo1q4oXL64RI0akGBA+ffq0evfureLFiys8PFwxMTFq0qSJfv75Z+c5V65c0ZAhQ1S6dGmFh4crb9686tixo44fP37T93Lz5s167LHHVLRoUWXJkkVFixZV69at9ccff7icl7yEyKpVq/Tss88qT548yp07tx566CH9+eefLucmJiaqX79+yp8/v7JmzapatWpp48aNN61Fuvb3maTrzrz+799oP//8s1q3bq18+fIpPDxcRYoUUfv27V3+romPj9fTTz+twoULKywsTMWKFdOgQYN09epV5zn/XjbprbfeUrFixZQ9e3ZVr15dGzZsSNN7tnz5cnXq1El58+ZV1qxZdfny5esuyfLuu+/qjjvuUEREhHLlyqWWLVtqz549br138G0MmCMgHThwQJJ02223SZJWrVqlmjVr6vTp05o8ebI+++wz3XnnnXr00Uc1c+ZMSdKTTz6pBQsWSJKef/55rV+/XgsXLpQk7d69W1WqVNGuXbs0evRoffHFF2ratKm6d++uQYMGpXj+/v376+DBg5o8ebI+//xzxcTEaPbs2brvvvsUFRWl999/Xx9//LFy5cqlRo0apfpHWatWrXTbbbdp/vz5evHFF/XRRx+pV69eLuc88cQT6tGjh6pUqaJ58+Zp7ty5atGihcsv+WHDhql169YqU6aMPv74Y33wwQc6e/as7rnnHu3evTvN7zUAAHaoXr26fvjhB3Xv3l0//PBDioHoZK+++qratm2rggULaubMmVq4cKE6dOjgclGUHpm7f/9+tWnTRh988IG++OILde7cWW+88YaefvrpFP0dPXpUjz/+uNq0aaMvv/xSzz33XKqv5dKlS6pXr55mzZqluLg4LVmyRI8//rhGjRqlhx56yMrbBwA+KSkpSVevXlViYqIOHz6snj176vz582rTps0NH3fq1ClJ0sCBA7VkyRK99957Kl68uOrWravVq1c7z5s7d66ee+451alTRwsXLtSiRYvUq1cvnT9/3q36JkyYoGXLlmns2LGaPXu2goKC1LhxY61fv955jjvXgnfddZfee+89SdLLL7+s9evXa/369XryySdVp04dhYaGauXKlc4+V65cqSxZsmjNmjXOvDt27Jh27dqlhg0bOs97+umn1bNnTzVs2FCLFi3SO++8o59++kk1atRwGZxOj9yz4sCBAwoJCVHx4sWdx9y5Dn3nnXf08ssvS7q2fM/69ev1yiuvePSaHnroIZUoUUKffPKJJk+ebOn9k64N4rZt21aPP/64Fi9erMaNG6t///6aPXu285yzZ8+qVq1amjJlijp27KjPP/9ckydP1m233aajR49KuvYhzAMPPKARI0aoTZs2WrJkiUaMGKEVK1aobt26unjx4g3fy99//12lSpXS2LFj9dVXX2nkyJE6evSoqlSpohMnTqQ4/8knn1RoaKg++ugjjRo1SqtXr3Z+CJGsS5cuevPNN9W+fXt99tlnatWqlR566CH9/fffN6xFuvb3mSS1b99eixYtcg6gp2b79u2qUqWKNmzYoMGDB2vp0qUaPny4Ll++rCtXrjjf57vvvltfffWVXn31VS1dulSdO3fW8OHD1aVLlxR9Tpw4UStWrNDYsWP14Ycf6vz582rSpInLBzxW37NOnTopNDRUH3zwgT799NMUH+AlGz58uDp37qyyZctqwYIFevvtt7Vjxw5Vr17d4z3z4ENMIBN77733TEnmhg0bzMTERPPs2bPmsmXLzPz585u1a9c2ExMTTdM0zdKlS5sVK1Z03k7WrFkzs0CBAmZSUpJpmqZ54MABU5L5xhtvuJzXqFEjs3DhwuaZM2dcjnfr1s2MiIgwT506ZZqmaa5atcqUZNauXdvlvPPnz5u5cuUymzdv7nI8KSnJvOOOO8y7777beWzgwIGmJHPUqFEu5z733HNmRESE6XA4TNM0zbVr15qSzAEDBlz3/Tl48KAZEhJiPv/88y7Hz549a+bPn9985JFHrvtYAAAy0okTJ8xatWqZkkxJZmhoqFmjRg1z+PDh5tmzZ03TNM3ffvvNDA4ONtu2bXvdftIjc/8rKSnJTExMNGfNmmUGBwc7/w4wTdOsU6eOKcn8+uuvUzyuTp06Zp06dZy3J0+ebEoyP/74Y5fzRo4caUoyly9fft3XCQC+LPk67b8tPDzcfOedd1KcL8kcOHDgdfu7evWqmZiYaDZo0MBs2bKl83i3bt3MHDlyWK4v+bqvYMGC5sWLF53HExISzFy5cpkNGzZ0HnP3WnDTpk2mJPO9995L8Xy1atUy69ev77xdokQJs2/fvmZQUJC5Zs0a0zRN88MPPzQlmb/88otpmqa5fv16U5I5evRol74OHTpkZsmSxezXr59pmhmTe8k6dOhgZsuWzUxMTDQTExPNEydOmJMmTTKDgoLMl156yXmelevQ5J+VTZs2OY958ppeffVVl3Pdff9M8/+z+4cffnA5t0yZMmajRo2ctwcPHmxKMlesWHHd92jOnDmmJHP+/Pkux5N/PlL7+b+Rq1evmufOnTOzZctmvv32287jye/bc88953L+qFGjTEnm0aNHTdM0zT179piSzF69ermcl/zz1qFDh5vWMHjwYDMsLMz5/3GxYsXMZ555xty+fbvLefXr1zdz5MhhHjt27Lp9Pf3002b27NnNP/74w+X4m2++aUoyf/rpJ9M0////0fLly5tXr151nrdx40ZTkjlnzpzrPsfN3rP27duneEzyfQcOHDBN0zT//vtvM0uWLGaTJk1czjt48KAZHh5utmnT5rrPD//ADHMEhGrVqik0NFSRkZHOdfE+++wzhYSE6Ndff9XPP/+stm3bSpKuXr3qbE2aNNHRo0e1d+/e6/Z96dIlff3112rZsqWyZs2a4vGXLl1K8ZWgf3+NTpK+//57nTp1Sh06dHB5vMPh0P33369NmzalmAXRokULl9sVKlTQpUuXdOzYMUnS0qVLJUldu3a9bu1fffWVrl69qvbt27s8b0REhOrUqeMyOwMAAG/KnTu3vv32W23atEkjRozQAw88oF9++UX9+/dX+fLldeLECa1YsUJJSUk3zL70yFxJ2rp1q1q0aKHcuXMrODhYoaGhat++vZKSkvTLL7+4PD5nzpyqX7/+TV/zN998o2zZsunhhx92OZ78dfTUZtABgD+ZNWuWNm3apE2bNmnp0qXq0KGDunbtqgkTJtz0sZMnT9Zdd92liIgIhYSEKDQ0VF9//bXLcgh33323Tp8+rdatW+uzzz5LdTbpjTz00EOKiIhw3o6MjFTz5s21du1aJSUleXQtmJoGDRrou+++08WLF/XHH3/o119/1WOPPaY777xTK1askHRt1nmRIkVUsmRJSdIXX3whwzD0+OOPuzxv/vz5dccddziv5dIr967n/PnzCg0NVWhoqPLkyaNnn31Wjz76qIYOHeo8J63XoZ68pv9eg7v7/iXLnz9/ijXUK1So4PINtqVLl+q2225z+RbAf33xxRfKkSOHmjdv7vK8d955p/Lnz3/T137u3Dm98MILKlGihEJCQhQSEqLs2bPr/PnzqS4Fktp/S0nOuletWiVJzvGQZI888ojb+6y98sorOnjwoN599109/fTTyp49uyZPnqxKlSppzpw5kq6tG79mzRo98sgjN1wL/IsvvlC9evVUsGBBl/encePGkqQ1a9a4nN+0aVMFBwdf9/VJ1t+z//6spGb9+vW6ePGiyxJBknTLLbeofv36/I2W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p59++kkFCxZUv3799Mwzz7j9nOvXr9c333yjvHnzKigoSEFBQapVq5aGDx+u7t27a+vWrR6/noxAfgMAvC2j85vsBgAg7dauXas33nhDP/74o44ePaqFCxfqwQcftP157Mjtq1ev6ueff9Ztt93mcvznn392zlCPiIhIdZ3z63FrwDy1N2Tw4MEpjhmG4VdfcQMAWGea15pdfVlRtmxZrVy50nn7RrtmHzhwQE2aNFGXLl00e/Zsfffdd3ruueeUN29etWrVyq3nS0pKUvbs2SVJefLk0Z9//qlSpUopNjZWe/futVa8F5DfAIBkduW3J31kZH6T3QCATCMoyL6Z4RY3/Tx//rzuuOMOdezY0e3rZ0/Ykdvt2rVT586d9dJLL6lKlSoyDEMbN27UsGHDnBtkr1mzRmXLlnW7LrcGzDPTTuMAAP8VEhKi/Pnzu3Xu5MmTVaRIEY0dO1aSdPvtt2vz5s1688033Q78cuXKaceOHSpevLiqVq2qUaNGKSwsTFOnTlXx4sU9fRkZhvwGAPiCjMxvshsAgLRr3LixGjdunO7PY0dujxkzRvny5dOoUaP0119/Sbr2bbZevXrphRdekCTdd999uv/++92uy/Ia5rNmzdLly5dTHL9y5YpmzZpltTsAgJ9J3jTMrmbFvn37VLBgQRUrVkyPPfaYfvvtt+ueu379et13330ux5LXAk1MTHTr+V5++WXnheuQIUP0xx9/6J577tGXX36pcePGWard28hvAAhs3spuKWPzm+wGAGQWRlCQrc0X2ZHbwcHBGjBggI4eParTp0/r9OnTOnr0qF566SXnt9qKFCmiwoULu12X5XerY8eOOnPmTIrjZ8+eVceOHa12BwDwN6Zhb5OUkJDg0lK7OKxatapmzZqlr776StOmTVN8fLxq1KihkydPplpmfHy88uXL53IsX758unr1qk6cOOHWS23UqJEeeughSVLx4sW1e/dunThxQseOHVP9+vWtvGteR34DQIDzQnZLGZ/fZDcAINMwbNzw07g2cOxufmcUu3L76tWrWrlypebMmeNcq/zPP//UuXPnPKrL8oC5aZqpLpJ++PBhRUdHe1QEACCw3XLLLYqOjna24cOHpzincePGatWqlcqXL6+GDRtqyZIlkqT333//uv3+N6/MfxZedWezj6tXryokJCTFTtq5cuWytFmIryC/AQB2cie7pYzNb7IbAIAbcze/M4Jduf3HH3+ofPnyeuCBB9S1a1cdP35ckjRq1Cj16dPHo9rcWsNckipWrCjDMGQYhho0aKCQkP9/aFJSkg4cOGBpLRgAgJ9yGDIdNl10/tPPoUOHFBUV5TwcHh5+04dmy5ZN5cuX1759+1K9P3/+/IqPj3c5duzYMYWEhCh37tw37T8kJESxsbF+v6EW+Q0AkGRffqchu6X0zW+yGwCQqSTPDrerL3me3+nBrtzu0aOHKleurO3bt7v8rdCyZUs9+eSTntXm7onJu3Vv27ZNjRo1cu5gKklhYWEqWrRouu6aCgDwDZ6uX3q9viQpKirKJbTdcfnyZe3Zs0f33HNPqvdXr15dn3/+ucux5cuXq3LlygoNDXXrOV5++WX1799fs2fPVq5cuSzV5yvIbwCAZF9+pyW7pfTPb7IbAJBZ2Ln2eHI/nuZ3erEjt9etW6fvvvtOYWFhLsdjY2N15MgRj/p0e8B84MCBSkpKUmxsrBo1aqQCBQp49IQAAHiiT58+at68uYoUKaJjx45pyJAhSkhIUIcOHSRJ/fv315EjR5ybYD3zzDOaMGGC4uLi1KVLF61fv14zZszQnDlz3H7OcePG6ddff1XBggUVGxurbNmyudy/ZcsW+15gOiG/AQDelNH5TXYDAJB2586d06+//uq8feDAAW3btk25cuVSkSJFbHseO3Lb4XCkOkv98OHDioyM9KgutwfMpWu7jj7zzDPas2ePR08GAMgE/rXhly19uenw4cNq3bq1Tpw4obx586patWrasGGDYmNjJUlHjx7VwYMHnecXK1ZMX375pXr16qWJEyeqYMGCGjdunKUZWckzvPwd+Q0AsC2/LfaR0flNdgMAMo10WJLFXZs3b1a9evWct+Pi4iRJHTp00MyZM+2pSfbk9r333quxY8dq6tSpkq7teXLu3DkNHDhQTZo08ahPSwPmklS+fHn99ttvKlasmEdPCACAJ+bOnXvD+1ML7Tp16qRpJtnAgQM9fqyvIb8BAN6Q0flNdgMAkHZ169Z1brqdnuzI7TFjxqhevXoqU6aMLl26pDZt2mjfvn3KkyePpW+Y/5vlhXCGDh2qPn366IsvvtDRo0eVkJDg0gAAmVvyGqh2NV93+vRpTZ8+Xf3799epU6ckXftamKdroXkL+Q0AgY3sJrsBAH4mKOj/Z5mnudmzFnp6SGtuFyxYUNu2bVOfPn309NNPq2LFihoxYoS2bt2qmJgYj2qyPMM8eTfuFi1ayDD+/48l0zRlGIbf70gOALgx03Gt2dWXL9uxY4caNmyo6Oho/f777+rSpYty5cqlhQsX6o8//nCut+oPyG8ACGx25TfZnXHIbgAIbEZwsIxge5Zksasfu9mV21myZFGnTp3UqVMnW+qyPGC+atUqW54YAABfFxcXpyeeeEKjRo1y2SykcePGatOmjRcrs478BgAEArIbAAD/4WluL1682O3naNGiheW6LA+Y16lTx/KTAAAyES9t+ukNmzZt0pQpU1IcL1SokOLj471QkefIbwAIcF7a9DOjkd0AgEwjKMi+pVR8dEkWT3P7v5uFGoaRYs315G9nefKNLMsD5tK1tWVmzJihPXv2yDAMlSlTRp06dVJ0dLQn3QEA/Iid65f6+jqoERERqa4RunfvXuXNm9cLFaUN+Q0Agcuu/Ca7MxbZDQABLHn9cbv68kGe5rbD8f9rxK1cuVIvvPCChg0bpurVq8swDH3//fd6+eWXNWzYMI/qsvzxwubNm3XrrbdqzJgxOnXqlE6cOKG33npLt956q8c7mQMA4IseeOABDR48WImJiZKufUJ98OBBvfjii2rVqpWXq7OG/AYABAKyGwAA/2FHbvfs2VNvv/22GjVqpKioKEVGRqpRo0Z666231L17d4/qsjxg3qtXL7Vo0UK///67FixYoIULF+rAgQNq1qyZevbs6VERAAD/kTxDza7my958800dP35cMTExunjxourUqaMSJUooMjJSQ4cO9XZ5lpDfABDYyG6yGwDgX4ygYFubL7Ijt/fv35/qN6+SNxL1hOUlWTZv3qxp06YpJOT/HxoSEqJ+/fqpcuXKHhUBAIAvioqK0rp16/TNN99oy5Ytcjgcuuuuu9SwYUNvl2YZ+Q0ACARkNwAA/sOO3K5SpYp69uyp2bNnq0CBApKk+Ph49e7dW3fffbdHdVkeMI+KitLBgwdVunRpl+OHDh1y2c0UAJBJBdCmn8nq16+v+vXre7uMNCG/ASDABcimn8nIbgCA3zNs3PTT8M1NP5OlJbffffddtWzZUrGxsSpSpIgk6eDBg7rtttu0aNEij/q0/G49+uij6ty5s+bNm6dDhw7p8OHDmjt3rp588km1bt3aoyIAAP7DNCXTYdjTzJs/n7d9/fXXatasmW699VaVKFFCzZo108qVK71dlmXkNwAENtvym+zOMGQ3AAS2QFiSRUp7bpcoUUI7duzQF198oe7du+v555/XkiVLtHPnTpUoUcKjmizPMH/zzTdlGIbat2+vq1evSpJCQ0P17LPPasSIER4VAQCAL5owYYJ69eqlhx9+WD169JAkbdiwQU2aNNFbb72lbt26eblC95HfAIBAQHYDAOA/7MptwzB033336b777rvuOeXLl9eXX36pW2655eb9maZncwQuXLig/fv3yzRNlShRQlmzZvWkG5+UkJCg6Ohobfnfk8oeGubtcvyG6fB2Bf7nyuVwb5fgdyKyXfR2CX7l7JUruuvjd3XmzBlFRUWlqa/k340/d3lUkWH2/G48e+WKSk+bZ0t96aFQoULq379/ipCeOHGihg4dqj///NNLlXkuEPJ780NdyG8LfH0DP1+UeDnU2yX4nYjsl7xdgl85l3hFd308wyfzm+zOeIGQ3fF//eWTP08A4K6EhATlz5fP1uw+ufZTRWXPZk99584rd+2HfS6/MzK3IyMjtX37dhUvXvym53q8gE3WrFlVvnx5VahQIVMFNgDgJkybmw9LSEjQ/fffn+L4fffdp4SEBC9UlHbkNwAEKLKb7AYA+JegIHubD/LV3Lb8bp0/f16vvPKKatSooRIlSqh48eIuDQCAzKJFixZauHBhiuOfffaZmjdv7oWKPEd+AwACAdkNAID/8NXctryG+ZNPPqk1a9aoXbt2KlCggAyDr/ECQCAxTcO2JRx8fSmI22+/XUOHDtXq1atVvXp1SdfWU/vuu+/Uu3dvjRs3znlu9+7dvVWmW8hvAAhsduU32Z1xyG4ACGxGcLCMYHs267SrH7v5am5bHjBfunSplixZopo1a6ZHPQAAHxdIA+YzZsxQzpw5tXv3bu3evdt5PEeOHJoxY4bztmEYPn/RTX4DQGALlAFzshsAkGkEBV9rdvXlg3w1ty0PmOfMmVO5cuVKj1oAAPApBw4c8HYJtiG/AQCBgOwGAMB/+GpuW17D/PXXX9err76qCxcupEc9AAAfZzoMWxsyBvkNAIGN7PY/ZDcABLjkGeZ2tQA3ZcoU5cuXz61zLc8wHz16tPbv3698+fKpaNGiCg0Ndbl/y5YtVrsEAMAnmaapTz/9VKtWrdKxY8fkcDhc7l+wYIGXKrOO/AYABAKyGwAA/2FXbp8/f15r1qzRwYMHdeXKFZf7kpdyadOmjdt1WR4wf/DBB60+BACQmZjGtWZXXz6sR48emjp1qurVq6d8+fL59WZb5DcABDi78pvszjBkNwAENiMoSEaQ5cVBrtuXL7Ijt7du3aomTZrowoULOn/+vHLlyqUTJ04oa9asiomJ8Wjtc8sD5gMHDnTrvDlz5qhFixbKli2b5aIAAL4rkDb9nD17thYsWKAmTZp4u5Q0I78BILAFyqafZDcAINMwbFxKxfDNJVnsyO1evXqpefPmmjRpknLkyKENGzYoNDRUjz/+uHr06OFRn5YHzN319NNPq2rVqipevHh6PUW6u3Q+TCGh4d4uw29cvhjh7RL8Tmj4lZufBBfnz3AhYMWFxHT7NR8QoqOj/TrHPJEZ8vvyxTCFXiW/3UV+WxcSlujtEvwO+W3NefLbY2Q3AAD+w47c3rZtm6ZMmaLg4GAFBwfr8uXLKl68uEaNGqUOHTrooYcestxnus3HN00zvboGAHhR8gw1u5ove+211zRo0CBdvHjR26VkGPIbADInsjvzIrsBIJMyDMkIsqn5Zn7bkduhoaHOpVzy5cungwcPSro2GJ/8b6uYugAAsMQ0rzW7+vJl//vf/zRnzhzFxMSw2RYAwK/Zld9kNwAAGSR5sNuuvnyQHbldsWJFbd68Wbfddpvq1aunV199VSdOnNAHH3yg8uXLe1QXA+YAAFzHE088oR9//FGPP/64328cBgBAICC7AQDwH3bk9rBhw3T27FlJ0uuvv64OHTro2WefVYkSJfTuu+96VBcD5gAASwJp088lS5boq6++Uq1atbxdCgAAaRIom36S3QCAzMI0gmTaNDPcrn7sZkduV65c2fnvvHnz6ssvv0xzXb75bgEA4ANuueUWRUVFebsMAADgJrIbAAD/YUdu169fX6dPn05xPCEhQfXr1/eoz3QbMI+NjU2x7gwAIBNwGPY2HzZ69Gj169dPv//+u7dLyTDkNwBkUmR3pkV2A0AmZduGnzauhW4zO3J79erVunLlSorjly5d0rfffutRn5aXZDl06JAMw1DhwoUlSRs3btRHH32kMmXK6KmnnnKet2vXLo8KAgD4tkBakuXxxx/XhQsXdOuttypr1qwpLkZPnTrlpcqsI78BILAFypIsZDcAINMwjGvNrr58UFpye8eOHc5/7969W/Hx8c7bSUlJWrZsmQoVKuRRXZYHzNu0aaOnnnpK7dq1U3x8vO69916VLVtWs2fPVnx8vF599VWPCgEAwNeMHTvW2yXYhvwGAAQCshsAAP+Rlty+8847ZRiGDMNIdemVLFmyaPz48R71bXnAfNeuXbr77rslSR9//LHKlSun7777TsuXL9czzzxDaANAJhdIM8w7dOjg7RJsQ34DQGALlBnmZDcAINMICrrW7OrLB6Ultw8cOCDTNFW8eHFt3LhRefPmdd4XFhammJgYBQcHe9S35QHzxMREhYeHS5JWrlypFi1aSJJKly6to0ePelQEAMB/BNKAuSTt379f7733nvbv36+3335bMTExWrZsmW655RaVLVvW2+W5jfwGgMAWKAPmEtkNAMgcTCNIpk1rj9vVT3rwNLdjY2MlSQ6Hw/aaLL9bZcuW1eTJk/Xtt99qxYoVuv/++yVJf/75p3Lnzm17gQAAeMuaNWtUvnx5/fDDD1qwYIHOnTsn6dpaaQMHDvRyddaQ3wCAQEB2AwDgPzzN7cWLF7vdPGF5hvnIkSPVsmVLvfHGG+rQoYPuuOMOZ6HJXxcDAGRm9s0wl3x7ltqLL76oIUOGKC4uTpGRkc7j9erV09tvv+3FyqwjvwEg0NmV32R3RiG7ASDAGUHXml19+SBPc/vBBx90q3/DMJSUlGS5LssD5nXr1tWJEyeUkJCgnDlzOo8/9dRTypo1q+UCAAB+xjSuNbv68mE7d+7URx99lOJ43rx5dfLkSS9U5DnyGwACnF35TXZnGLIbAAJcAAyYe5rb6bEMy7959G6Zpqkff/xRU6ZM0dmzZyVdW0yd0AYAZCY5cuRIdY3QrVu3qlChQl6oKG3IbwBAZkd2AwDgP+zO7UuXLtlRlvUB8z/++EPly5fXAw88oK5du+r48eOSpFGjRqlPnz62FAUA8F2mw97my9q0aaMXXnhB8fHxMgxDDodD3333nfr06aP27dt7uzxLyG8ACGxkN9kNAPAzyTPM7Wo+yI7cTkpK0uuvv65ChQope/bs+u233yRJr7zyimbMmOFRXZbfrR49eqhy5cr6+++/lSVLFufxli1b6uuvv/aoCAAAfNHQoUNVpEgRFSpUSOfOnVOZMmVUu3Zt1ahRQy+//LK3y7OE/AYABAKyGwAA/2FHbg8dOlQzZ87UqFGjFBYW5jxevnx5TZ8+3aO6LA+Yr1u3Ti+//LJLAZIUGxurI0eOeFSEJA0fPlyGYahnz54ux/fs2aMWLVooOjpakZGRqlatmg4ePHjdfmbOnCnDMFI0u6bkA0CgM03D1ubLQkND9eGHH2rfvn36+OOPNXv2bP3888/64IMPFBwc7O3yLCG/ASCwkd1kdzKyGwD8g2kYMo0gm5pv5rcduT1r1ixNnTpVbdu2dXlMhQoV9PPPP3tUl+VNPx0OR6q7ix4+fNhlN1MrNm3apKlTp6pChQoux/fv369atWqpc+fOGjRokKKjo7Vnzx5FRETcsL+oqCjt3bvX5djNHgMAcI+dF8u+ftE9ePBg9enTR8WLF1fx4sWdxy9evKg33nhDr776qhers4b8BoDAZld+k90Zh+wGgAAXAJt+2pHbR44cUYkSJVIcdzgcSkxM9Kguy+/Wvffeq7FjxzpvG4ahc+fOaeDAgWrSpInlAs6dO6e2bdtq2rRpLjt/S9KAAQPUpEkTjRo1ShUrVlTx4sXVtGlTxcTE3LBPwzCUP39+lwYAgFWDBg3SuXPnUhy/cOGCBg0a5IWKPEd+AwACAdl9fWQ3AMDX2JHbZcuW1bfffpvi+CeffKKKFSt6VJflAfMxY8ZozZo1KlOmjC5duqQ2bdqoaNGiOnLkiEaOHGm5gK5du6pp06Zq2LChy3GHw6ElS5botttuU6NGjRQTE6OqVatq0aJFN+3z3Llzio2NVeHChdWsWTNt3brVcl0AgNQF0pIspmnKSOWra9u3b1euXLm8UJHnyG8ACGxkN9lNdgOAnzEMe5sPsiO3Bw4cqG7dumnkyJFyOBxasGCBunTpomHDhnn8zTLLS7IULFhQ27Zt05w5c7RlyxY5HA517txZbdu2ddmIxB1z587Vli1btGnTphT3HTt2TOfOndOIESM0ZMgQjRw5UsuWLdNDDz2kVatWqU6dOqn2Wbp0ac2cOVPly5dXQkKC3n77bdWsWVPbt29XyZIlU33M5cuXdfnyZefthIQES68DAAKJadr3dWzTtKUb2+XMmdO5Dudtt93mEuBJSUk6d+6cnnnmGS9WaB35DQCBza78JrszDtkNAAEuEy/JYmduN2/eXPPmzdOwYcNkGIZeffVV3XXXXfr888917733elSf5QFzScqSJYs6deqkTp06efSkknTo0CH16NFDy5cvT3WNM4fDIUl64IEH1KtXL0nSnXfeqe+//16TJ0++bmhXq1ZN1apVc96uWbOm7rrrLo0fP17jxo1L9THDhw/3u6/nAQDSz9ixY2Wapjp16uRcxzNZWFiYihYtqurVq3uxQs+Q3wCAzIrsvj6yGwDga+zO7UaNGqlRo0a21efRgPkHH3ygKVOm6LffftP69esVGxurMWPGqHjx4nrggQfc6uPHH3/UsWPHVKlSJeexpKQkrV27VhMmTND58+cVEhKiMmXKuDzu9ttv17p169yuNSgoSFWqVNG+ffuue07//v0VFxfnvJ2QkKBbbrnF7ecAgIBiGteaXX35oA4dOkiSihUrppo1ayokxKO49DnkNwAEMLvym+zOUGQ3AAQu0wiSadPMcLv6sYuv57bld2vSpEmKi4tT48aN9ffffzt37c6ZM6fLhiQ306BBA+3cuVPbtm1ztsqVK6tt27batm2bwsPDVaVKlRQ7bv/yyy+KjY11+3lM09S2bdtUoECB654THh6uqKgolwYAQJ06dXwuuD1FfgMAAgHZnRLZDQDwVZ7mds6cOZUrVy63micsVzR+/HhNmzZNDz74oEaMGOE8XrlyZfXp08ftfiIjI1WuXDmXY9myZVPu3Lmdx/v27atHH31UtWvXVr169bRs2TJ9/vnnWr16tfMx7du3V6FChTR8+HBJ13ZXrVatmkqWLKmEhASNGzdO27Zt08SJE62+VABAKuzc8MvXNw7LTMhvAAhsduU32Z1xyG4ACHBGkBSUOdcwT6t/f3B88uRJDRkyRI0aNXIu47J+/Xp99dVXeuWVVzzq3/KA+YEDB1SxYsUUx8PDw3X+/HmPirieli1bavLkyRo+fLi6d++uUqVKaf78+apVq5bznIMHDyroXz88p0+f1lNPPaX4+HhFR0erYsWKWrt2re6++25bawOAQMWAuX8ivwEgsDFg7n/IbgAIcJl408+0Sl7SRZJatWqlwYMHq1u3bs5j3bt314QJE7Ry5Urn/hxWWB4wL1asmLZt25biq1lLly5NseaZVf/+9DrZzTY4+e9jxowZozFjxqSpDgAAMhvyGwAA/0J2AwBwc1999ZVGjhyZ4nijRo304osvetSn5QHzvn37qmvXrrp06ZJM09TGjRs1Z84cDR8+XNOnT/eoCACA/zAd15pdfSFjkN8AENjsym+yO+OQ3QAQ4Jhh7pbcuXNr4cKF6tu3r8vxRYsWKXfu3B71aXnAvGPHjrp69ar69eunCxcuqE2bNipUqJDefvttPfbYYx4VAQDwH4G0JMv58+c1YsQIff311zp27JgcDtdRgt9++81LlVlHfgNAYAuUJVnIbgBAphEAA+Z25PagQYPUuXNnrV692rmG+YYNG7Rs2TKPP2C2NGB+9epVffjhh2revLm6dOmiEydOyOFwKCYmxqMnBwDAlz355JNas2aN2rVrpwIFCsgw3B8kiIuLs/x8L7/8sse7eN8I+Q0ACBRkNwAA/iMtuZ3siSee0O23365x48ZpwYIFMk1TZcqU0XfffaeqVat6VJelAfOQkBA9++yz2rNnjyQpT548Hj0pAMB/BdIM86VLl2rJkiWqWbOm5ceOHTtW1atXV1hYmFvnr1u3Tt26dUuXi27yGwAQKDPMyW4AQGZhGoZMm2aGmx4MRGeEtOT2v1WtWlUffvihTVV5sCRL1apVtXXr1hQbjwAAkNnkzJkzTRfBCxcudHsmWGRkpMfP4w7yGwAQCMhuAAD8h6e5nZCQoKioKLfPP3v2rKXctjxg/txzz6l37946fPiwKlWqpGzZsrncX6FCBatdAgD8SCDNMH/99df16quv6v3331fWrFktPfa9995TdHS02+dPmTJF+fLls1qi28hvAAhsgTLDnOwGAGQaAbCGuae5nTNnTh09etTtD7kLFSqkbdu2qXjx4m6db3nA/NFHH5Ukde/e3XnMMAyZpinDMJSUlGS1SwCAHwmkAfPRo0dr//79ypcvn4oWLarQ0FCX+7ds2XLdx3bo0MHSc7Vp08ajGt1FfgNAYAuUAXOyGwCQaRjGtWZXXz7I09w2TVPTp09X9uzZ3XqexMRES3VZHjA/cOCA1YcAAOCXHnzwwTQ9/u+//9bs2bPVoUOHFF8XO3PmjGbNmpXqfemB/AYABAKyGwAA/+FpbhcpUkTTpk1z+/z8+fOnGIy/EcsD5qyfBgCBzVdmmA8fPlwvvfSSevToobFjx6Z6zurVq1WvXr0Ux/fs2aPSpUvf9DkGDhzocX2SNGHCBO3YsUPPP/98ivuio6P17bffKiEhQQMGDEjT87iD/AaAwOYLM8zJbmvIbgAIcF5ekuWdd97RG2+8oaNHj6ps2bIaO3as7rnnHnvq+Yenuf3777/bWsd/WR4wX7x4carHDcNQRESESpQooWLFiqW5MACAb/KFAfNNmzZp6tSpbq/duXfvXpeZYHnz5vXoea2aP3++Ro8efd37n376afXp0ydDLrrJbwAIbN4eMCe7rSO7ASCwmUaQTJsGzK32M2/ePPXs2VPvvPOOatasqSlTpqhx48bavXu3ihQpYktNvszygPmDDz7oXDft3/69llqtWrW0aNEi5cyZ07ZCAQCQpHPnzqlt27aaNm2ahgwZ4tZjYmJilCNHDsvPlZSUpDFjxujjjz/WwYMHdeXKFZf7T506dcPH79+/XyVLlrzu/SVLltT+/fst1+UJ8hsA4C1kt2fIbgCAt7z11lvq3LmznnzySUnS2LFj9dVXX2nSpEkaPny4bc+T1txOL5Y/plixYoWqVKmiFStW6MyZMzpz5oxWrFihu+++W1988YXWrl2rkydPqk+fPulRLwDA20xDctjU/pmllpCQ4NIuX7583afv2rWrmjZtqoYNG7pdcsWKFVWgQAE1aNBAq1atcvtxgwYN0ltvvaVHHnlEZ86cUVxcnB566CEFBQXptddeu+njg4OD9eeff173/j///FNBQRmzWzn5DQABzq78JrvJbgBAxkheksWuJvfy+8qVK/rxxx913333uRy/77779P3339v6EtOa2+nF8gzzHj16aOrUqapRo4bzWIMGDRQREaGnnnpKP/30k8aOHatOnTrZWigAwDekx5Ist9xyi8vxgQMHphqOc+fO1ZYtW7Rp0ya3+i9QoICmTp2qSpUq6fLly/rggw/UoEEDrV69WrVr177p4z/88ENNmzZNTZs21aBBg9S6dWvdeuutqlChgjZs2KDu3bvf8PEVK1bUokWLVK1atVTvX7hwoSpWrOjWa0kr8hsAApvdS7KQ3emP7AaAwGYahkzDpmtvw/38PnHihJKSkpQvXz6X4/ny5VN8fLwt9SRLa26nF8sD5vv37091R/CoqCj99ttvkq59Te3EiRNprw4AEBAOHTrkki3h4eGpntOjRw8tX75cERERbvVbqlQplSpVynm7evXqOnTokN588023Lrrj4+NVvnx5SVL27Nl15swZSVKzZs30yiuv3PTx3bp102OPPabChQvr2WefVXBwsKRrXzt75513NGbMGH300UduvZa0Ir8BAHYiu9Mf2Q0AsJs7+Z3M+M9gffJyYHZKa26nF8vfJatUqZL69u2r48eP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eW3t2rXtqaee8ju3bNkyk2SZmZln/fVwK/Kbg4ODI3RHpOZ3INltRn6HG9nNwcHBEbojUrNbCiy/C/N6nZ6e7rv+119/tY0bN9qiRYvssssusy5dupjX6z3rr0W4hG2G+erVq7Vr1y41a9bMdy43N1eff/65XnjhBWVnZys21n8mSnJyslJTU/XDDz/k227lypVPeUd7165dp7zzfaLhw4dr6NChvtv79u1Tamqqtm3bplKlSgVaWtTKyspSSkqKtm/frqSkpHB3JyTcWLNE3W6qe//+/apWrdpp16AsjPj4eG3evFlHjjg7e9fM5PF4/M7l9w53sWLFVKtWLUlS8+bNlZ6erokTJ2rq1KmnXJtfHhQpUkTlypVzqPfuQ35HFje+rknurNuNNUvurTvS8zuQ7JbI73AjuyOPG1/b3Fiz5M663VizFPnZLQWW3/fdd5969epVYHvVq1f3/bt8+fIqX7686tSpo/r16yslJUUrVqzIdwm2SBe2AfN27dopIyPD79yf//xn1atXT8OGDTslsCVp9+7d2r59e4Efw0tLS9PixYs1ZMgQ37lFixapZcuW+T4mv48flCpVylU/3MclJSW5rm431ixRt5vExDizZUV8fLzi4+MdacsJZub3sd4TpaWl6f333/c7t2jRIjVv3jyq11ILN/I7MrnxdU1yZ91urFlyb93k9zHk99khuyOXG1/b3Fiz5M663VizdO5k9/EB8DNhfyxLk1/WR4OwDZiXLFlSDRs29DuXmJiocuXKqWHDhjp48KBGjhypG264QcnJydqyZYsefvhhlS9fXtddd53vMX369FGVKlU0ZswYSdKgQYN05ZVX6umnn1a3bt3097//XUuWLNGyZctCWh8AwFkPP/ywOnfurJSUFB04cEBz5szR0qVLtXDhQknHZiz9/PPPmj17tiRpwIABeuGFFzR06FD1799fy5cv14wZM/S3v/0tnGVEPfIbABAI8jv8yG4AQLB89dVX+uqrr3T55ZerTJky+umnn/TYY4+pZs2aUTu7XArzpp8FiY2NVUZGhmbPnq19+/YpOTlZbdq00dy5c1WyZEnfddu2bfN796Zly5aaM2eOHnnkET366KOqWbOm5s6dq0svvTQcZQAAHPLLL7+od+/eyszMVKlSpdS4cWMtXLhQHTp0kCRlZmZq27ZtvuvPP/98ffjhhxoy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eTweeTwe7du3L9/rZs2apdKlS5/VcyF//fr1830f3n333XB3BwAiBvmdN/I7MpDfAHAqsjtvZHdkILvhFgyYI6K98847Gj16tO929erVNWHChPB1KA+jRo1SZmamSpUqFe6unPOWLl2a5y9IEydOVGZmZng6BQA4BfmNE5HfABD5yG6ciOyG2xUJdweAgpQtWzbcXTitkiVLqnLlyuHuhiTp6NGjKlq0aLi7EXKlSpXilyYAiCDkd2DIbwBAuJHdgSG7gXMbM8xxRvbu3as+ffqoTJkyKl68uDp37qwffvjBd//xj0F9/PHHql+/vkqUKKFOnTr5vROZk5OjgQMHqnTp0ipXrpyGDRumvn37+n1U68SPhbVu3Vpbt27VkCFDfB8BkqSRI0eqSZMmfv2bMGGCqlev7rudm5uroUOH+p7rwQcflJn5PcbM9Mwzz6hGjRpKSEjQhRdeqLfffvuMvj6zZs1StWrVVLx4cV133XXavXv3Kde8//77atasmeLj41WjRg09/vjjysnJ8d3/3Xff6fLLL1d8fLwaNGigJUuW+H3sacuWLfJ4PJo3b55at26t+Ph4vf7665KkmTNnqn79+oqPj1e9evX00ksv+T33zz//rJ49e6pMmTIqV66cunXrpi1btvjuX7p0qS655BIlJiaqdOnSuuyyy7R169ZC1X66up5//nk1atRIiYmJSklJ0T333KODBw/67t+6dau6du2qMmXKKDExURdccIE+/PBDbdmyRW3atJEklSlTRh6PR/369StUnwAAx5DfBSO/yW8AiDRkd8HIbrIbCAYGzHFG+vXrp1WrVum9997T8uXLZWbq0qWLjh496rvmt99+07hx4/Taa6/p888/17Zt2/TAAw/47n/66af1xhtvaObMmfriiy+UlZVV4BpY77zzjqpWrer7GFYgHwN67rnn9Morr2jGjBlatmyZ9uzZowULFvhd88gjj2jmzJmaMmWKvvnmGw0ZMkS33nqrPvvss8J/YSStXLlSt912m+655x6tW7dObdq00RNPPOF3zccff6xbb71VAwcO1LfffqupU6dq1qxZevLJJyVJXq9X3bt3V/HixbVy5UpNmzZNf/3rX/N8vmHDhmngwIHasGGDOnbsqOnTp+uvf/2rnnzySW3YsEFPPfWUHn30Ub366quSjn1f2rRpoxIlSujzzz/XsmXLfL9UHTlyRDk5OerevbtatWql9evXa/ny5brzzjt9vyQV5HR1SVJMTIwmTZqkr7/+Wq+++qo++eQTPfjgg7777733XmVnZ+vzzz9XRkaGnn76aZUoUUIpKSmaP3++JGnjxo3KzMzUxIkTA/reAIDbkd/5I7/JbwCIRGR3/shushsIGgMKoVWrVjZo0CAzM/v+++9Nkn3xxRe++//73/9aQkKCzZs3z8zMZs6caZJs06ZNvmtefPFFq1Spku92pUqV7Nlnn/XdzsnJsWrVqlm3bt3yfF4zs9TUVBs/frxf30aMGGEXXnih37nx48dbamqq73ZycrKNHTvWd/vo0aNWtWpV33MdPHjQ4uPj7csvv/Rr5/bbb7ebb745369LXv25+eabrVOnTn7nevbsaaVKlfLdvuKKK+ypp57yu+a1116z5ORkMzP76KOPrEiRIpaZmem7f/HixSbJFixYYGZmmzdvNkk2YcIEv3ZSUlLszTff9Ds3evRoS0tLMzOzGTNmWN26dc3r9fruz87OtoSEBPv4449t9+7dJsmWLl2ab935OV1deZk3b56VK1fOd7tRo0Y2cuTIPK/99NNPTZLt3bs3z/tP/PoAAMjv/JDf/shvAIgcZHfeyG5/ZDcQXKxhjoBt2LBBRYoU0aWXXuo7V65cOdWtW1cbNmzwnStevLhq1qzpu52cnKxdu3ZJkvbv369ffvlFl1xyie/+2NhYNWvWTF6v19H+7t+/X5mZmUpLS/OdK1KkiJo3b+77aNi3336rw4cPq0OHDn6PPXLkiC666KKAnm/Dhg267rrr/M6lpaVp4cKFvturV69Wenq637u/ubm5Onz4sH777Tdt3LhRKSkpfuuznfi1OlHz5s19//7111+1fft23X777erfv7/vfE5Ojm+dsdWrV2vTpk0qWbKkXzuHDx/Wjz/+qKuuukr9+vVTx44d1aFDB7Vv3149evRQcnLyaWs/XV3FixfXp59+qqeeekrffvutsrKylJOTo8OHD+vQoUNKTEzUwIEDdffdd2vRokVq3769brjhBjVu3Pi0zw0AKBj5XTDym/wGgEhDdheM7Ca7gWBhwBwBs5PWHzvx/IkfHTp5AwyPx3PKY0/+qFF+bRckJibmlMed+PG0wjj+i8IHH3ygKlWq+N0XFxcXUFuFqcHr9erxxx/X9ddff8p98fHxp3wtC5KYmOjXriRNnz7d75cq6dgvRcevadasmd54441T2qpQoYKkY+uwDRw4UAsXLtTcuXP1yCOPaPHixWrRosVZ1bV161Z16dJFAwYM0OjRo1W2bFktW7ZMt99+u+97dscdd6hjx4764IMPtGjRIo0ZM0bPPfec7r///kJ9PQAAeSO/C0Z+k98AEGnI7oKR3WQ3ECwMmCNgDRo0UE5OjlauXKmWLVtKknbv3q3vv/9e9evXL1QbpUqVUqVKlfTVV1/piiuukHTs3dC1a9eesonIiYoVK6bc3Fy/cxUqVNDOnTv9gm7dunV+z5WcnKwVK1boyiuvlHTsXd/Vq1eradOmvpri4uK0bds2tWrVqlA15KdBgwZasWKF37mTbzdt2lQbN25UrVq18myjXr162rZtm3755RdVqlRJkpSenn7a565UqZKqVKmin376Sbfcckue1zRt2lRz585VxYoVlZSUlG9bF110kS666CINHz5caWlpevPNN08b2qera9WqVcrJydFzzz2nmJhjWyjMmzfvlOtSUlI0YMAADRgwQMOHD9f06dN1//33q1ixYpJ0yv8HAACnR34XjPwmvwEg0pDdBSO7yW4gWBgwR8Bq166tbt26qX///po6dapKliyphx56SFWqVFG3bt0K3c7999+vMWPGqFatWqpXr54mT56svXv3FvjubvXq1fX555+rV69eiouLU/ny5dW6dWv9+uuveuaZZ3TjjTdq4cKF+uijj/wCadCgQRo7dqxq166t+vXr6/nnn9e+fft895csWVIPPPCAhgwZIq/Xq8svv1xZWVn68ssvVaJECfXt27fQdQ0cOFAtW7bUM888o+7du2vRokV+HwmTpMcee0zXXHONUlJSdNNNNykmJkbr169XRkaGnnjiCXXo0EE1a9ZU37599cwzz+jAgQO+jUdO9+73yJEjNXDgQCUlJalz587Kzs7WqlWrtHfvXg0dOlS33HKLnn32WXXr1k2jRo1S1apVtW3bNr3zzjv6n//5Hx09elTTpk3Ttddeq/POO08bN27U999/rz59+py29tPVVbNmTeXk5Gjy5Mnq2rWrvvjiC7388st+bQwePFidO3dWnTp1tHfvXn3yySe+XwZTU1Pl8Xj0j3/8Q126dFFCQoJKlChR6O8NALgZ+V0w8pv8BoBIQ3YXjOwmu4GgCdFa6YhyJ28AsmfPHuvdu7eVKlXKEhISrGPHjvb999/77p85c6bfRhtmZgsWLLAT/y939OhRu++++ywpKcnKlCljw4YNs5tuusl69eqV7/MuX77cGjdubHFxcX5tTZkyxVJSUiwxMdH69OljTz75pN/GI0ePHrVBgwZZUlKSlS5d2oYOHWp9+vTx2+TE6/XaxIkTrW7dula0aFGrUKGCdezY0T777LN8vy55bTxidmxzj6pVq1pCQoJ17drVxo0bd8rXY+HChdayZUtLSEiwpKQku+SSS2zatGm++zds2GCXXXaZFStWzOrVq2fvv/++SbKFCxea2f9vPLJ27dpTnv+NN96wJk2aWLFixaxMmTJ25ZVX2jvvvOO7PzMz0/r06WPly5e3uLg4q1GjhvXv39/2799vO3futO7du1tycrIVK1bMUlNT7bHHHrPc3Nx8vw6B1PX8889bcnKy7/83s2fP9ttM5L777rOaNWtaXFycVahQwXr37m3//e9/fY8fNWqUVa5c2Twej/Xt29fvucXGIwDgh/zOG/l9KvIbACID2Z03svtUZDcQPB6zM1i4CggCr9er+vXrq0ePHho9enS4u1Mo1atX1+DBgzV48OCgP9cXX3yhyy+/XJs2bfLb0AX/z+PxaMGCBerevXu4uwIArkF+F4z8Pj3yGwBCi+wuGNl9emQ3znUx4e4A3Gvr1q2aPn26vv/+e2VkZOjuu+/W5s2b9ac//SncXQvIsGHDVKJECe3fv9/RdhcsWKDFixdry5YtWrJkie68805ddtllBHYeBgwYwMfDACBEyO+Ckd+FR34DQGiQ3QUjuwuP7IZbMMMcYbN9+3b16tVLX3/9tcxMDRs21NixY32bg0SDrVu3+naYrlGjhm8zDSfMnj1bo0eP1vbt21W+fHm1b99ezz33nMqVK+fYcwTqggsu0NatW/O8b+rUqfludhJsu3btUlZWliQpOTnZb/dyAICzyO+Ckd+FR34DQGiQ3QUjuwuP7IZbMGAOoNBO/CXlZJUqVVLJkiVD3CMAAHA65DcAANGF7AbCiwFzAAAAAAAAAADEGuYAAAAAAAAAAEhiwBwAAAAAAAAAAEkMmAMAAAAAAAAAIIkBcwAAAAAAAAAAJDFgDgAAAAAAAACAJAbMAQAAAAAAAACQxIA5AAAAAAAAAACSGDAHAAAAAAAAAECS9H/EX8wxXy2/pAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "var = \"mean-tas\"\n", "\n", @@ -2266,20 +349,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "2522cf60", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.diagnostics:1 - Computing quantile_98_tas.\n", - "INFO:xscen.diagnostics:2 - Computing maximum_length_of_warm_spell.\n", - "INFO:xscen.diagnostics:3 - Computing mean-tas.\n" - ] - } - ], + "outputs": [], "source": [ "# repeat the step above for the simulation (no bias adjustment)\n", "dsim = gettingStarted_cat.search(\n", @@ -2310,64 +383,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "f20a5915", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [2/2 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# load the measures for both kinds of data (sim and scen)\n", "meas_datasets = pcat.search(\n", @@ -2377,28 +396,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "498ccf9d", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_6208/1327646955.py:19: UserWarning: Tight layout not applied. The bottom and top margins cannot be made large enough to accommodate all axes decorations.\n" - ] - }, - { - "data": { - "image/png": "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rc/AwICBAwcycOBAXrx4wZ49e/D19cXd3Z27d++SPXt29PX18fLyolevXimuI1++fEBC/jx48CDZ9ylN+xxy5syJqalpquMG5MyZE/j0efi5aNI7e/bsVEck1wSnmr7148eP1/r+yZMnWFtbK/+n93trHppER0cn21ZqAXjScp6RMpOSjB5nGaEJnhPTlM+kD22S7pfm+4iIiGTr+Pfff9HT09NqoaBZt4ODg/J/bGwsT58+Vdal+Y3//PNPrbKYmk9xTsmZMydubm6MGzcuxe/t7e2Vvzt27EjHjh15+/YtBw8exN/fn0aNGnH16lWd0gsSzAshhBBCiC+kTp061K1bl4CAABwdHbW+q127NpMnT+b3339nwIAByvQNGzbw9u1bZTCyz0lzM594oD21Ws2iRYs+et3W1ta0bNmS+/fv079/f27dukXRokWpVasWZ86cwc3NTak9TkmtWrWYPHky586d02pqv3r16o9Omy4aNWrE+PHjsbGxSTNY/Jx5+ClVqVIFa2trLl++nO4ggiqVKtlr0/766y/u379PwYIFU1wmtd/b2dmZR48e8fDhQ+VhQUxMDLt27dIp3WZmZjqXmZR8zuPs9evXbN26Vaup/erVq9HT06N69eppLuvq6oqDg4PyGktNOXr79i0bNmxQRrhPbNWqVZQpU0b5f/369cTGxlKzZk0A3N3dMTAw4MaNGx/VfD4jLUUaNWrEjh07KFCgQLKHD6kxNzenfv36xMTE0KxZMy5duiTBvBBCCCGE+PpMmjSJMmXK8OjRI6XpKUDdunVxd3fHx8eHV69eUaVKFWWU7e+//x4vL6/Pnra6detiZGREmzZtGDp0KFFRUcybNy9Z815dNW7cmOLFi1O2bFly5crF7du3mTFjBk5OTri4uAAwc+ZMqlatSrVq1ejRowfOzs68fv2a69evs23bNqWPc//+/QkKCqJhw4YEBgYqo9n/888/n2z/09K/f382bNhA9erVGTBgAG5ubsTHx3Pnzh12797NoEGDqFChwifPw8/FwsKC2bNn0759e549e0bLli3JnTs3jx8/5ty5czx+/Jh58+YBCQHasmXLKFy4MG5uboSGhjJlyhS+++47rXXq8nu3bt2aUaNG8fPPPzNkyBCioqKYNWuW1uvb0qNrmUnJ5zzObGxs6NGjB3fu3KFQoULs2LGDRYsW0aNH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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from matplotlib import colors\n", "\n", @@ -2431,28 +432,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "ba7ed6ba", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_6208/1692311341.py:29: UserWarning: Tight layout not applied. The bottom and top margins cannot be made large enough to accommodate all axes decorations.\n" - ] - }, - { - "data": { - "image/png": "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WSIiIiLSSQyyRERERKSTGGSJiIiISCcxyBIRERGRTmKQJSIiIiKdxCBLRERERDqJQZaIiIiIdBKDLBERERHpJAZZIiIiItJJDLJEREREpJMYZImIiIhIJzHIEhEREZFOYpAlIiIiIp3EIEtEREREOolBloiIiIh0EoMsEREREekkmbYbQPS9UCgUePr0KfLnzw+JRKLt5hARpSGEQExMDGxtbaGnx3NRRAyyRP/v6dOnKFasmLabQUT0WY8ePULRokW13QwirWOQJfp/+fPnBwAYD6kDiSF3DW17H/Ve200g+v4kyYF/L6mOV0R5HT+tif6fsjuBxFDGIPs9MOA2IMoIuz8RfcAONkRERESkkxhkiYiIiEgnMcgSERERkU5ikCUiIiIincQgS0REREQ6iUGWiIiIiHQSgywRERER6SQGWSIiIiLSSQyyRERERKSTGGSJiIiISCcxyBIRERGRTmKQJSIiIiKdxCBLRERERDqJQZaIiIiIdBKDLBERERHpJAZZIiIiItJJDLJEREREpJMYZImIiIhIJzHIEhEREZFOYpAlIiIiIp3EIEtEREREOolBloiIiIh0EoMsEREREekkBlkiIiIi0kkMskRERESkkxhkiYiIiEgnMcgSERERkU5ikCUiIiIincQgS0REREQ6iUGWiIiIiHQSgywRERER6SQGWSIiIiLSSQyyRERERKSTGGSJiIiISCcxyBIRERGRTmKQJSIiIiKdxCBLRERERDqJQZaIiIiIdBKDLBERERHpJAZZIiIiItJJDLJEREREpJMYZImIiIhIJzHIEhEREZFOYpAlIiIiIp3EIEtEREREOkmm7QYQaUtiYiISExNVf797906LrSEiIqIvxTOylGdNnjwZ5ubmqn/FihXTdpOIiIjoCzDIUp41atQovH37VvXv0aNH2m4SERERfQF2LaA8y9DQEIaGhtpuBhEREX0lnpElIiIiIp3EIEtEREREOolBloiIiIh0EoMsEREREekkBlkiIiIi0kkMskRERESkkxhkiYiIiEgnMcgSERERkU5ikCUiIiIincQgS0REREQ6iUGWiIiIiHQSgywRERER6SQGWSIiIiLSSQyyRERERKSTGGSJiIiISCcxyBIRERGRTmKQJSIiIiKdxCBLRERERDqJQZaIiIiIdBKDLBERERHpJAZZIiIiItJJDLJERERE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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# change the order of meas_dataset to have sim first, because we want to see how scen improved compared to sim.\n", "ordered_keys = [\n", diff --git a/docs/notebooks/4_ensemble_reduction.ipynb b/docs/notebooks/4_ensemble_reduction.ipynb index e6fad44b..1cc3d594 100644 --- a/docs/notebooks/4_ensemble_reduction.ipynb +++ b/docs/notebooks/4_ensemble_reduction.ipynb @@ -11,26 +11,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xclim:Fetching remote file: EnsembleStats/BCCAQv2+ANUSPLIN300_ACCESS1-0_historical+rcp45_r1i1p1_1950-2100_tg_mean_YS.nc\n", - "INFO:xclim:Fetching remote file md5: EnsembleStats/BCCAQv2+ANUSPLIN300_ACCESS1-0_historical+rcp45_r1i1p1_1950-2100_tg_mean_YS.nc.md5\n", - "INFO:xclim:Fetching remote file: EnsembleStats/BCCAQv2+ANUSPLIN300_BNU-ESM_historical+rcp45_r1i1p1_1950-2100_tg_mean_YS.nc\n", - "INFO:xclim:Fetching remote file md5: EnsembleStats/BCCAQv2+ANUSPLIN300_BNU-ESM_historical+rcp45_r1i1p1_1950-2100_tg_mean_YS.nc.md5\n", - "INFO:xclim:Fetching remote file: EnsembleStats/BCCAQv2+ANUSPLIN300_CCSM4_historical+rcp45_r1i1p1_1950-2100_tg_mean_YS.nc\n", - "INFO:xclim:Fetching remote file md5: EnsembleStats/BCCAQv2+ANUSPLIN300_CCSM4_historical+rcp45_r1i1p1_1950-2100_tg_mean_YS.nc.md5\n", - "INFO:xclim:Fetching remote file: EnsembleStats/BCCAQv2+ANUSPLIN300_CCSM4_historical+rcp45_r2i1p1_1950-2100_tg_mean_YS.nc\n", - "INFO:xclim:Fetching remote file md5: EnsembleStats/BCCAQv2+ANUSPLIN300_CCSM4_historical+rcp45_r2i1p1_1950-2100_tg_mean_YS.nc.md5\n", - "INFO:xclim:Fetching remote file: EnsembleStats/BCCAQv2+ANUSPLIN300_CNRM-CM5_historical+rcp45_r1i1p1_1970-2050_tg_mean_YS.nc\n", - "INFO:xclim:Fetching remote file md5: EnsembleStats/BCCAQv2+ANUSPLIN300_CNRM-CM5_historical+rcp45_r1i1p1_1970-2050_tg_mean_YS.nc.md5\n" - ] - } - ], + "outputs": [], "source": [ "from xclim.testing import open_dataset\n", "\n", @@ -73,447 +56,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/xarray/core/common.py:620: FutureWarning: Updating MultiIndexed coordinate 'criteria' would corrupt indices for other variables: ['lat', 'time', 'lon']. This will raise an error in the future. Use `.drop_vars({'criteria', 'lat', 'lon', 'time'})` before assigning new coordinate values.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'values' (realization: 5, criteria: 16)>\n",
-       "array([[1.6385803, 1.6387024, 1.6386108, 1.6383972, 1.6400146, 1.6401978,\n",
-       "        1.6411133, 1.6411743, 1.6436768, 1.6435242, 1.6429443, 1.6429138,\n",
-       "        1.6479797, 1.6470337, 1.6461182, 1.6454468],\n",
-       "       [2.0663452, 2.0625305, 2.059143 , 2.056244 , 2.0645447, 2.0613098,\n",
-       "        2.0582886, 2.0549316, 2.0631104, 2.0596619, 2.056549 , 2.0528564,\n",
-       "        2.0624084, 2.0589905, 2.055359 , 2.0518494],\n",
-       "       [1.6872864, 1.690033 , 1.6922913, 1.6943359, 1.6863403, 1.689331 ,\n",
-       "        1.6921997, 1.6947937, 1.685852 , 1.6888733, 1.6918335, 1.6954346,\n",
-       "        1.6836548, 1.6868286, 1.6904602, 1.6944885],\n",
-       "       [1.6043091, 1.6021423, 1.6007996, 1.5988159, 1.6131592, 1.611084 ,\n",
-       "        1.6099854, 1.6082764, 1.6217651, 1.620697 , 1.6195679, 1.618042 ,\n",
-       "        1.6308289, 1.6300964, 1.629364 , 1.62854  ],\n",
-       "       [1.3090515, 1.3095093, 1.3098145, 1.3091736, 1.3128052, 1.3133545,\n",
-       "        1.3131714, 1.3131714, 1.3164062, 1.3165588, 1.316864 , 1.3173828,\n",
-       "        1.3200073, 1.3203735, 1.3208923, 1.3215027]], dtype=float32)\n",
-       "Coordinates:\n",
-       "  * realization  (realization) <U8 'ACCESS' 'BNU-ESM' ... 'CCSM4-r2' 'CNRM-CM5'\n",
-       "  * criteria     (criteria) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n",
-       "Attributes:\n",
-       "    long_name:  criteria for ensemble selection
" - ], - "text/plain": [ - "\n", - "array([[1.6385803, 1.6387024, 1.6386108, 1.6383972, 1.6400146, 1.6401978,\n", - " 1.6411133, 1.6411743, 1.6436768, 1.6435242, 1.6429443, 1.6429138,\n", - " 1.6479797, 1.6470337, 1.6461182, 1.6454468],\n", - " [2.0663452, 2.0625305, 2.059143 , 2.056244 , 2.0645447, 2.0613098,\n", - " 2.0582886, 2.0549316, 2.0631104, 2.0596619, 2.056549 , 2.0528564,\n", - " 2.0624084, 2.0589905, 2.055359 , 2.0518494],\n", - " [1.6872864, 1.690033 , 1.6922913, 1.6943359, 1.6863403, 1.689331 ,\n", - " 1.6921997, 1.6947937, 1.685852 , 1.6888733, 1.6918335, 1.6954346,\n", - " 1.6836548, 1.6868286, 1.6904602, 1.6944885],\n", - " [1.6043091, 1.6021423, 1.6007996, 1.5988159, 1.6131592, 1.611084 ,\n", - " 1.6099854, 1.6082764, 1.6217651, 1.620697 , 1.6195679, 1.618042 ,\n", - " 1.6308289, 1.6300964, 1.629364 , 1.62854 ],\n", - " [1.3090515, 1.3095093, 1.3098145, 1.3091736, 1.3128052, 1.3133545,\n", - " 1.3131714, 1.3131714, 1.3164062, 1.3165588, 1.316864 , 1.3173828,\n", - " 1.3200073, 1.3203735, 1.3208923, 1.3215027]], dtype=float32)\n", - "Coordinates:\n", - " * realization (realization) \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'realization' (realization: 3)>\n",
-       "array(['ACCESS', 'BNU-ESM', 'CNRM-CM5'], dtype='<U8')\n",
-       "Coordinates:\n",
-       "  * realization  (realization) <U8 'ACCESS' 'BNU-ESM' 'CNRM-CM5'\n",
-       "Attributes:\n",
-       "    axis:     E
" - ], - "text/plain": [ - "\n", - "array(['ACCESS', 'BNU-ESM', 'CNRM-CM5'], dtype='\n", - " array(['ACCESS', 'CCSM4-r1', 'CCSM4-r2'], dtype='\n", - " array(['BNU-ESM'], dtype='\n", - " array(['CNRM-CM5'], dtype='" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from xclim.ensembles import plot_rsqprofile\n", "\n", diff --git a/docs/notebooks/5_warminglevels.ipynb b/docs/notebooks/5_warminglevels.ipynb index d6a0f79b..98ea5a8a 100644 --- a/docs/notebooks/5_warminglevels.ipynb +++ b/docs/notebooks/5_warminglevels.ipynb @@ -14,41 +14,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "eec162f0", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Catalog opened: from 1 files.\n", - "INFO:xscen.extract:10 assets matched the criteria : {'source': 'NorESM2-MM', 'activity': 'ScenarioMIP'}.\n", - "INFO:xscen.extract:Iterating over 5 potential datasets.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Successfully wrote ESM catalog json file to: file:///home/pbourg/xscen/docs/notebooks/_data/example-wl.json\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Found 5 with all variables requested and corresponding to the criteria.\n", - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n", - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n", - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n", - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n", - "/home/pbourg/xscen/xscen/extract.py:211: FutureWarning: unique with argument that is not not a Series, Index, ExtensionArray, or np.ndarray is deprecated and will raise in a future version.\n" - ] - } - ], + "outputs": [], "source": [ "# Basic imports\n", "from pathlib import Path\n", @@ -156,30 +127,12 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "fa38e4c5-b693-42ea-bf9e-08862742c729", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Global warming level of +10C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_CanESM5_ssp585_r1i1p1f1.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[['2017', '2036'], ['2015', '2034'], ['2014', '2033'], ['2013', '2032']]\n", - "['2013', '2032']\n", - "2022\n", - "[None, None]\n" - ] - } - ], + "outputs": [], "source": [ "# Multiple entries, returns a list of the same length\n", "print(\n", @@ -242,537 +195,12 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "8f4a5b3e", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:       (warminglevel: 1, lat: 3, lon: 2, time: 7305)\n",
-       "Coordinates:\n",
-       "  * warminglevel  (warminglevel) object '+2Cvs1850-1900'\n",
-       "  * lat           (lat) float64 45.0 46.5 48.0\n",
-       "  * lon           (lon) int64 -75 -74\n",
-       "  * time          (time) datetime64[ns] 2069-01-01 2069-01-02 ... 2088-12-31\n",
-       "Data variables:\n",
-       "    tas           (warminglevel, time, lat, lon) float64 dask.array<chunksize=(1, 7305, 3, 2), meta=np.ndarray>\n",
-       "Attributes: (12/22)\n",
-       "    cat:_data_format_:       zarr\n",
-       "    cat:activity:            ScenarioMIP\n",
-       "    cat:date_end:            2101-12-02 00:00:00\n",
-       "    cat:date_start:          1981-01-01 00:00:00\n",
-       "    cat:domain:              example-region\n",
-       "    cat:experiment:          ssp245\n",
-       "    ...                      ...\n",
-       "    cat:xrfreq:              D\n",
-       "    comment:                 This is a test file created for the xscen tutori...\n",
-       "    history:                 [2023-10-09 16:39:58] bbox spatial subsetting wi...\n",
-       "    intake_esm_dataset_key:  CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1...\n",
-       "    intake_esm_vars:         ('tas',)\n",
-       "    version:                 v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (warminglevel: 1, lat: 3, lon: 2, time: 7305)\n", - "Coordinates:\n", - " * warminglevel (warminglevel) object '+2Cvs1850-1900'\n", - " * lat (lat) float64 45.0 46.5 48.0\n", - " * lon (lon) int64 -75 -74\n", - " * time (time) datetime64[ns] 2069-01-01 2069-01-02 ... 2088-12-31\n", - "Data variables:\n", - " tas (warminglevel, time, lat, lon) float64 dask.array\n", - "Attributes: (12/22)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:date_end: 2101-12-02 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " cat:domain: example-region\n", - " cat:experiment: ssp245\n", - " ... ...\n", - " cat:xrfreq: D\n", - " comment: This is a test file created for the xscen tutori...\n", - " history: [2023-10-09 16:39:58] bbox spatial subsetting wi...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r1i1p1f1...\n", - " intake_esm_vars: ('tas',)\n", - " version: v20191108" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ds = pcat.search(\n", " processing_level=\"extracted\",\n", @@ -805,599 +233,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "e394f0d6-3cb2-4e77-a221-fc1c1bd07475", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:      (realization: 4, time: 121, lat: 3, lon: 2)\n",
-       "Coordinates:\n",
-       "  * lat          (lat) float64 45.0 46.5 48.0\n",
-       "  * lon          (lon) int64 -75 -74\n",
-       "  * realization  (realization) object 'CMIP6_NorESM2-MM_ssp126_r1i1p1f1' ... ...\n",
-       "  * time         (time) datetime64[ns] 1981-01-01 1982-01-01 ... 2101-01-01\n",
-       "Data variables:\n",
-       "    tas          (realization, time, lat, lon) float64 dask.array<chunksize=(1, 121, 3, 2), meta=np.ndarray>\n",
-       "Attributes: (12/19)\n",
-       "    cat:_data_format_:       zarr\n",
-       "    cat:activity:            ScenarioMIP\n",
-       "    cat:date_end:            2101-12-02 00:00:00\n",
-       "    cat:date_start:          1981-01-01 00:00:00\n",
-       "    cat:domain:              example-region\n",
-       "    cat:frequency:           day\n",
-       "    ...                      ...\n",
-       "    cat:variable:            tas\n",
-       "    cat:xrfreq:              D\n",
-       "    comment:                 This is a test file created for the xscen tutori...\n",
-       "    intake_esm_vars:         ('tas',)\n",
-       "    version:                 v20191108\n",
-       "    intake_esm_dataset_key:  ScenarioMIP_NCC_example-region.example-region.ex...
" - ], - "text/plain": [ - "\n", - "Dimensions: (realization: 4, time: 121, lat: 3, lon: 2)\n", - "Coordinates:\n", - " * lat (lat) float64 45.0 46.5 48.0\n", - " * lon (lon) int64 -75 -74\n", - " * realization (realization) object 'CMIP6_NorESM2-MM_ssp126_r1i1p1f1' ... ...\n", - " * time (time) datetime64[ns] 1981-01-01 1982-01-01 ... 2101-01-01\n", - "Data variables:\n", - " tas (realization, time, lat, lon) float64 dask.array\n", - "Attributes: (12/19)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:date_end: 2101-12-02 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " cat:domain: example-region\n", - " cat:frequency: day\n", - " ... ...\n", - " cat:variable: tas\n", - " cat:xrfreq: D\n", - " comment: This is a test file created for the xscen tutori...\n", - " intake_esm_vars: ('tas',)\n", - " version: v20191108\n", - " intake_esm_dataset_key: ScenarioMIP_NCC_example-region.example-region.ex..." - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ds = pcat.search(\n", " processing_level=\"extracted\",\n", @@ -1405,621 +244,21 @@ " frequency=\"day\",\n", ").to_dataset(\n", " # Value of the \"realization\" dimension will be constructed by concatenaing those fields with a '_'\n", - " create_ensemble_on=['mip_era', 'source', 'experiment', 'member']\n", + " create_ensemble_on=[\"mip_era\", \"source\", \"experiment\", \"member\"]\n", ")\n", - "ds = ds.resample(time='YS').mean()\n", + "ds = ds.resample(time=\"YS\").mean()\n", "ds" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "74320396-09e8-40ea-80ee-56ec7ad567c1", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.extract:Global warming level of +1.5C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +3C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +3C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp245_r1i1p1f1.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:              (warminglevel: 3, lat: 3, lon: 2, realization: 4,\n",
-       "                          time: 20, bounds: 2)\n",
-       "Coordinates:\n",
-       "  * warminglevel         (warminglevel) float64 1.5 2.0 3.0\n",
-       "  * lat                  (lat) float64 45.0 46.5 48.0\n",
-       "  * lon                  (lon) int64 -75 -74\n",
-       "  * realization          (realization) object 'CMIP6_NorESM2-MM_ssp126_r1i1p1...\n",
-       "  * time                 (time) object 1000-01-01 00:00:00 ... 1019-01-01 00:...\n",
-       "    warminglevel_bounds  (realization, warminglevel, bounds) object None ... ...\n",
-       "Dimensions without coordinates: bounds\n",
-       "Data variables:\n",
-       "    tas                  (warminglevel, realization, time, lat, lon) float64 dask.array<chunksize=(1, 1, 20, 3, 2), meta=np.ndarray>\n",
-       "Attributes: (12/19)\n",
-       "    cat:_data_format_:       zarr\n",
-       "    cat:activity:            ScenarioMIP\n",
-       "    cat:date_end:            2101-12-02 00:00:00\n",
-       "    cat:date_start:          1981-01-01 00:00:00\n",
-       "    cat:domain:              example-region\n",
-       "    cat:frequency:           day\n",
-       "    ...                      ...\n",
-       "    cat:variable:            tas\n",
-       "    cat:xrfreq:              D\n",
-       "    comment:                 This is a test file created for the xscen tutori...\n",
-       "    intake_esm_vars:         ('tas',)\n",
-       "    version:                 v20191108\n",
-       "    intake_esm_dataset_key:  ScenarioMIP_NCC_example-region.example-region.ex...
" - ], - "text/plain": [ - "\n", - "Dimensions: (warminglevel: 3, lat: 3, lon: 2, realization: 4,\n", - " time: 20, bounds: 2)\n", - "Coordinates:\n", - " * warminglevel (warminglevel) float64 1.5 2.0 3.0\n", - " * lat (lat) float64 45.0 46.5 48.0\n", - " * lon (lon) int64 -75 -74\n", - " * realization (realization) object 'CMIP6_NorESM2-MM_ssp126_r1i1p1...\n", - " * time (time) object 1000-01-01 00:00:00 ... 1019-01-01 00:...\n", - " warminglevel_bounds (realization, warminglevel, bounds) object None ... ...\n", - "Dimensions without coordinates: bounds\n", - "Data variables:\n", - " tas (warminglevel, realization, time, lat, lon) float64 dask.array\n", - "Attributes: (12/19)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:date_end: 2101-12-02 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " cat:domain: example-region\n", - " cat:frequency: day\n", - " ... ...\n", - " cat:variable: tas\n", - " cat:xrfreq: D\n", - " comment: This is a test file created for the xscen tutori...\n", - " intake_esm_vars: ('tas',)\n", - " version: v20191108\n", - " intake_esm_dataset_key: ScenarioMIP_NCC_example-region.example-region.ex..." - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "%autoreload\n", - "xs.subset_warming_level(\n", - " ds,\n", - " wl=[1.5, 2, 3],\n", - " wl_dim=True,\n", - " to_level=\"warming-level\"\n", - ")" + "xs.subset_warming_level(ds, wl=[1.5, 2, 3], wl_dim=True, to_level=\"warming-level\")" ] }, { @@ -2043,110 +282,12 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "f5f8c25d", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [5/5 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.extract:Global warming level of +1.5C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.extract:Global warming level of +2C is not reached by the last year (2100) of the provided 'tas_src' database for CMIP6_NorESM2-MM_ssp126_r1i1p1f1.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n", - "INFO:xscen.indicators:1 - Computing growing_degree_days.\n", - "INFO:xscen.indicators:2 - Computing tg_min.\n" - ] - } - ], + "outputs": [], "source": [ "dict_input = pcat.search(processing_level=\"extracted\", xrfreq=\"D\").to_dataset_dict(\n", " xarray_open_kwargs={\"decode_timedelta\": False}\n", @@ -2173,603 +314,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "130a2168", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:              (lat: 3, lon: 2, horizon: 4)\n",
-       "Coordinates:\n",
-       "  * lat                  (lat) float64 45.0 46.5 48.0\n",
-       "  * lon                  (lon) int64 -75 -74\n",
-       "  * horizon              (horizon) <U16 '1981-2010' ... '+2Cvs1850-1900'\n",
-       "Data variables:\n",
-       "    growing_degree_days  (horizon, lat, lon) float64 dask.array<chunksize=(1, 3, 2), meta=np.ndarray>\n",
-       "    tg_min               (horizon, lat, lon) float64 dask.array<chunksize=(1, 3, 2), meta=np.ndarray>\n",
-       "Attributes: (12/22)\n",
-       "    cat:_data_format_:       zarr\n",
-       "    cat:activity:            ScenarioMIP\n",
-       "    cat:date_end:            2101-12-02 00:00:00\n",
-       "    cat:date_start:          1981-01-01 00:00:00\n",
-       "    cat:domain:              example-region\n",
-       "    cat:experiment:          ssp245\n",
-       "    ...                      ...\n",
-       "    cat:xrfreq:              fx\n",
-       "    comment:                 This is a test file created for the xscen tutori...\n",
-       "    history:                 [2023-10-09 16:39:59] bbox spatial subsetting wi...\n",
-       "    intake_esm_dataset_key:  CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1...\n",
-       "    intake_esm_vars:         ('tas',)\n",
-       "    version:                 v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (lat: 3, lon: 2, horizon: 4)\n", - "Coordinates:\n", - " * lat (lat) float64 45.0 46.5 48.0\n", - " * lon (lon) int64 -75 -74\n", - " * horizon (horizon) \n", - " tg_min (horizon, lat, lon) float64 dask.array\n", - "Attributes: (12/22)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:date_end: 2101-12-02 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " cat:domain: example-region\n", - " cat:experiment: ssp245\n", - " ... ...\n", - " cat:xrfreq: fx\n", - " comment: This is a test file created for the xscen tutori...\n", - " history: [2023-10-09 16:39:59] bbox spatial subsetting wi...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp245_r2i1p1f1...\n", - " intake_esm_vars: ('tas',)\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display(ds_hor)" ] @@ -2786,66 +336,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "f31c4d08", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [5/5 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "dict_wl = pcat.search(processing_level=\"horizons\").to_dataset_dict(\n", " xarray_open_kwargs={\"decode_timedelta\": False}\n", @@ -2880,543 +376,12 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "7f96ae9b", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                              (horizon: 1)\n",
-       "Coordinates:\n",
-       "  * horizon                              (horizon) <U14 '+1Cvs1850-1900'\n",
-       "Data variables:\n",
-       "    growing_degree_days_delta_1981_2010  (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010               (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "Attributes: (12/22)\n",
-       "    cat:_data_format_:       zarr\n",
-       "    cat:activity:            ScenarioMIP\n",
-       "    cat:date_end:            2101-12-02 00:00:00\n",
-       "    cat:date_start:          1981-01-01 00:00:00\n",
-       "    cat:domain:              example-region\n",
-       "    cat:experiment:          ssp126\n",
-       "    ...                      ...\n",
-       "    cat:xrfreq:              fx\n",
-       "    comment:                 This is a test file created for the xscen tutori...\n",
-       "    history:                 [2023-10-09 16:40:13] weighted mean(dim=['lon', ...\n",
-       "    intake_esm_dataset_key:  CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1...\n",
-       "    intake_esm_vars:         ('tg_min', 'growing_degree_days')\n",
-       "    version:                 v20191108
" - ], - "text/plain": [ - "\n", - "Dimensions: (horizon: 1)\n", - "Coordinates:\n", - " * horizon (horizon) \n", - " tg_min_delta_1981_2010 (horizon) float64 dask.array\n", - "Attributes: (12/22)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:date_end: 2101-12-02 00:00:00\n", - " cat:date_start: 1981-01-01 00:00:00\n", - " cat:domain: example-region\n", - " cat:experiment: ssp126\n", - " ... ...\n", - " cat:xrfreq: fx\n", - " comment: This is a test file created for the xscen tutori...\n", - " history: [2023-10-09 16:40:13] weighted mean(dim=['lon', ...\n", - " intake_esm_dataset_key: CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp126_r1i1p1f1...\n", - " intake_esm_vars: ('tg_min', 'growing_degree_days')\n", - " version: v20191108" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display(ds_agg)" ] @@ -3435,493 +400,24 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "50a1152f-b1c3-4b70-baee-94366fb51453", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--> The keys in the returned dictionary of datasets are constructed as follows:\n", - "\t'id.domain.processing_level.xrfreq'\n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " 100.00% [5/5 00:00<00:00]\n", - "
\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "datasets = pcat.search(processing_level=\"deltas-agg\").to_dataset_dict()" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "dd9b6a71-0ee8-4c3e-9962-d18e4b19a1fa", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:xscen.ensembles:Using 'growing_degree_days_delta_1981_2010' as the variable to check for missing values.\n", - "/home/pbourg/xscen/xscen/ensembles.py:311: UserWarning: Extra dimension horizon is not the same for all datasets. Reindexing.\n", - "/expl7/pbourg/mambaforge/envs/espor/lib/python3.10/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray (realization: 5, horizon: 3)>\n",
-       "array([[0.2 , 0.25, 0.25],\n",
-       "       [0.2 , 0.25, 0.25],\n",
-       "       [0.2 , 0.  , 0.  ],\n",
-       "       [0.2 , 0.25, 0.25],\n",
-       "       [0.2 , 0.25, 0.25]])\n",
-       "Coordinates:\n",
-       "  * realization  (realization) <U92 'CMIP6_ScenarioMIP_NCC_NorESM2-MM_ssp585_...\n",
-       "  * horizon      (horizon) <U16 '+1Cvs1850-1900' ... '+2Cvs1850-1900'
" - ], - "text/plain": [ - "\n", - "array([[0.2 , 0.25, 0.25],\n", - " [0.2 , 0.25, 0.25],\n", - " [0.2 , 0. , 0. ],\n", - " [0.2 , 0.25, 0.25],\n", - " [0.2 , 0.25, 0.25]])\n", - "Coordinates:\n", - " * realization (realization) \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:                                    (horizon: 3)\n",
-       "Coordinates:\n",
-       "  * horizon                                    (horizon) <U16 '+1Cvs1850-1900...\n",
-       "Data variables:\n",
-       "    growing_degree_days_delta_1981_2010_mean   (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    growing_degree_days_delta_1981_2010_stdev  (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    growing_degree_days_delta_1981_2010_max    (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    growing_degree_days_delta_1981_2010_min    (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010_mean                (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010_stdev               (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010_max                 (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "    tg_min_delta_1981_2010_min                 (horizon) float64 dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "Attributes: (12/16)\n",
-       "    cat:_data_format_:     zarr\n",
-       "    cat:activity:          ScenarioMIP\n",
-       "    cat:domain:            example-region\n",
-       "    cat:frequency:         fx\n",
-       "    cat:institution:       NCC\n",
-       "    cat:mip_era:           CMIP6\n",
-       "    ...                    ...\n",
-       "    cat:xrfreq:            fx\n",
-       "    comment:               This is a test file created for the xscen tutorial...\n",
-       "    intake_esm_vars:       ('tg_min_delta_1981_2010', 'growing_degree_days_de...\n",
-       "    version:               v20191108\n",
-       "    cat:id:                CMIP6_ScenarioMIP_NCC_NorESM2-MM_example-region\n",
-       "    ensemble_size:         5
" - ], - "text/plain": [ - "\n", - "Dimensions: (horizon: 3)\n", - "Coordinates:\n", - " * horizon (horizon) \n", - " growing_degree_days_delta_1981_2010_stdev (horizon) float64 dask.array\n", - " growing_degree_days_delta_1981_2010_max (horizon) float64 dask.array\n", - " growing_degree_days_delta_1981_2010_min (horizon) float64 dask.array\n", - " tg_min_delta_1981_2010_mean (horizon) float64 dask.array\n", - " tg_min_delta_1981_2010_stdev (horizon) float64 dask.array\n", - " tg_min_delta_1981_2010_max (horizon) float64 dask.array\n", - " tg_min_delta_1981_2010_min (horizon) float64 dask.array\n", - "Attributes: (12/16)\n", - " cat:_data_format_: zarr\n", - " cat:activity: ScenarioMIP\n", - " cat:domain: example-region\n", - " cat:frequency: fx\n", - " cat:institution: NCC\n", - " cat:mip_era: CMIP6\n", - " ... ...\n", - " cat:xrfreq: fx\n", - " comment: This is a test file created for the xscen tutorial...\n", - " intake_esm_vars: ('tg_min_delta_1981_2010', 'growing_degree_days_de...\n", - " version: v20191108\n", - " cat:id: CMIP6_ScenarioMIP_NCC_NorESM2-MM_example-region\n", - " ensemble_size: 5" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display(ds_ens)" ] diff --git a/xscen/catalog.py b/xscen/catalog.py index 0552337f..f43219a5 100644 --- a/xscen/catalog.py +++ b/xscen/catalog.py @@ -423,7 +423,9 @@ def to_dataset( if ensemble_name is None: ensemble_name = create_ensemble_on elif not set(ensemble_name).issubset(create_ensemble_on): - raise ValueError(f"`ensemble_name` must be a subset of `create_ensemble_on`.") + raise ValueError( + "`ensemble_name` must be a subset of `create_ensemble_on`." + ) rm_from_id = (concat_on or []) + (create_ensemble_on or []) + ["realization"] aggs = { diff --git a/xscen/extract.py b/xscen/extract.py index 0748dd90..e4301187 100644 --- a/xscen/extract.py +++ b/xscen/extract.py @@ -5,9 +5,10 @@ import re import warnings from collections import defaultdict +from collections.abc import Sequence from copy import deepcopy from pathlib import Path -from typing import Callable, List, Optional, Sequence, Union +from typing import Callable, List, Optional, Union import numpy as np import pandas as pd @@ -960,6 +961,7 @@ def get_warming_level( When `realization` is a sequence. If "requested", the function returns a list of the same length as `realization`. If "selected", the function returns a dict, keys are the models selected in the database. + Returns ------- dict, list or str @@ -1005,7 +1007,7 @@ def get_warming_level( if ignore_member: info["member"] = ".*" # Dict or Series (DataFrame row) - elif hasattr(real, 'keys') and set(real.keys()).issuperset( + elif hasattr(real, "keys") and set(real.keys()).issuperset( (set(FIELDS) - {"member"}) if ignore_member else FIELDS ): info = real @@ -1019,7 +1021,7 @@ def get_warming_level( # open nc tas = xr.open_dataset(tas_src).tas - + def _get_warming_level(model): # choose colum based in ds cat attrs, +'$' to ensure a full match (matches end-of-string) mip = tas.mip_era.str.match(model["mip_era"] + "$") @@ -1029,7 +1031,7 @@ def _get_warming_level(model): src = xr.apply_ufunc(model["source"].endswith, tas.source, vectorize=True) exp = tas.experiment.str.match(model["experiment"] + "$") mem = tas.member.str.match(model["member"] + "$") - + candidates = mip & src & exp & mem if not candidates.any(): warnings.warn( @@ -1047,10 +1049,10 @@ def _get_warming_level(model): logger.debug( f"Computing warming level +{wl}°C for {model} from simulation: {selected}." ) - + # compute reference temperature for the warming and difference from reference yearly_diff = tas_sel - tas_sel.sel(time=slice(*tas_baseline_period)).mean() - + # get the start and end date of the window when the warming level is first reached rolling_diff = yearly_diff.rolling( time=window, min_periods=window, center=True @@ -1059,7 +1061,7 @@ def _get_warming_level(model): # rolling defines the window as [n-10,n+9], but the the IPCC defines it as [n-9,n+10], where n is the center year. if window % 2 == 0: # Even window rolling_diff = rolling_diff.shift(time=-1) - + yrs = rolling_diff.where(rolling_diff >= wl, drop=True) if yrs.size == 0: logger.info( @@ -1067,7 +1069,7 @@ def _get_warming_level(model): f"({tas.time[-1].dt.year.item()}) of the provided 'tas_src' database for {selected}." ) return selected, [None, None] if return_horizon else None - + yr = yrs.isel(time=0).time.dt.year.item() start_yr = yr - (window // 2) + 1 end_yr = yr + (window // 2) @@ -1076,21 +1078,23 @@ def _get_warming_level(model): if return_horizon else str(yr) ) - - out = [] if output == 'requested' or len(realization) == 1 else {} + + out = [] if output == "requested" or len(realization) == 1 else {} for model in info_models: selected, wlslice = _get_warming_level(model) if isinstance(out, list): out.append(wlslice) else: - out[selected] = wlslice + out[selected] = wlslice if len(out) == 1: return out[0] if isinstance(realization, pd.DataFrame): return pd.Series(out, index=realization.index) elif isinstance(realization, xr.DataArray): - return xr.DataArray(out, dims=(realization.dims[0], 'bounds'), coords=realization.coords) + return xr.DataArray( + out, dims=(realization.dims[0], "bounds"), coords=realization.coords + ) return out @@ -1100,7 +1104,7 @@ def subset_warming_level( wl: Union[float, Sequence[float]], to_level: str = "warminglevel-{wl}vs{period0}-{period1}", wl_dim: Union[str, bool] = "+{wl}Cvs{period0}-{period1}", - **kwargs + **kwargs, ): """Subsets the input dataset with only the window of time over which the requested level of global warming is first reached, using the IPCC Atlas method. @@ -1139,49 +1143,78 @@ def subset_warming_level( If `wl` was a list or if ds had a "realization" dim, the "time" axis is replaced by a fake time starting in 1000-01-01 and of length of `window` years. Start and end years of the subsets are bound in the new coordinate "warminglevel_bounds". """ - tas_baseline_period = standardize_periods(kwargs.get('tas_baseline_period', ['1850', '1900']), multiple=False) - window = kwargs.get('window', 20) + tas_baseline_period = standardize_periods( + kwargs.get("tas_baseline_period", ["1850", "1900"]), multiple=False + ) + window = kwargs.get("window", 20) - fake_time = kwargs.pop('_fake_time', None) # If wl was originally a list, the generated fake_time was passed + fake_time = kwargs.pop( + "_fake_time", None + ) # If wl was originally a list, the generated fake_time was passed # Fake time generation is needed : real is a dim or multiple levels - if fake_time is None and not isinstance(wl, (int, float)) or 'realization' in ds.dims: + if ( + fake_time is None + and not isinstance(wl, (int, float)) + or "realization" in ds.dims + ): freq = xr.infer_freq(ds.time) # FIXME: This is because I couldn't think an elegant way to generate a fake_time otherwise. - if not compare_offsets(freq, '==', 'YS'): + if not compare_offsets(freq, "==", "YS"): raise NotImplementedError( "Passing multiple warming levels or vectorizing subsetting along the 'realization' dim is currently not supported for non-annual data" ) - fake_time = xr.date_range('1000-01-01', periods=window, freq=freq, calendar=ds.time.dt.calendar) + fake_time = xr.date_range( + "1000-01-01", periods=window, freq=freq, calendar=ds.time.dt.calendar + ) # If we got a wl sequence, call ourself multiple times and concatenate if not isinstance(wl, (int, float)): - if not wl_dim or (isinstance(wl_dim , str) and '{wl}' not in wl_dim): - raise ValueError("`wl_dim` must be True or a template string including '{wl}' if multiple levels are passed.") + if not wl_dim or (isinstance(wl_dim, str) and "{wl}" not in wl_dim): + raise ValueError( + "`wl_dim` must be True or a template string including '{wl}' if multiple levels are passed." + ) ds_wl = xr.concat( [ - subset_warming_level(ds, wli, to_level=to_level, wl_dim=wl_dim, _fake_time=fake_time, **kwargs) + subset_warming_level( + ds, + wli, + to_level=to_level, + wl_dim=wl_dim, + _fake_time=fake_time, + **kwargs, + ) for wli in wl ], - 'warminglevel' + "warminglevel", ) return ds_wl - + # Creating the warminglevel coordinate if isinstance(wl_dim, str): # a non-empty string wl_crd = xr.DataArray( - [wl_dim.format(wl=wl, period0=tas_baseline_period[0], period1=tas_baseline_period[1])], - dims=('warminglevel',), - name='warminglevel' + [ + wl_dim.format( + wl=wl, + period0=tas_baseline_period[0], + period1=tas_baseline_period[1], + ) + ], + dims=("warminglevel",), + name="warminglevel", ) else: - wl_crd = xr.DataArray([wl], dims=('warminglevel',), name='warminglevel', attrs={'units': 'degC'}) + wl_crd = xr.DataArray( + [wl], dims=("warminglevel",), name="warminglevel", attrs={"units": "degC"} + ) wl_crd.warminglevel.attrs.update( baseline=f"{tas_baseline_period[0]}-{tas_baseline_period[1]}", long_name=f"Warming level for {window}-year periods since {tas_baseline_period[0]}-{tas_baseline_period[1]}", ) - date_cls = xc.core.calendar.datetime_classes[ds.time.dt.calendar] # For generating the bounds coord - if 'realization' in ds.dims: + date_cls = xc.core.calendar.datetime_classes[ + ds.time.dt.calendar + ] # For generating the bounds coord + if "realization" in ds.dims: # Vectorized subset bounds = get_warming_level(ds.realization, wl, return_horizon=True, **kwargs) reals = [] @@ -1189,19 +1222,26 @@ def subset_warming_level( start, end = bounds.sel(realization=real).values if start is not None: data = ds.sel(realization=[real], time=slice(start, end)) - bnds_crd = [date_cls(int(start), 1, 1), date_cls(int(end) + 1, 1, 1) - datetime.timedelta(seconds=1)] + bnds_crd = [ + date_cls(int(start), 1, 1), + date_cls(int(end) + 1, 1, 1) - datetime.timedelta(seconds=1), + ] else: - data = ds.sel(realization=[real]).isel(time=slice(0, fake_time.size)) * np.NaN + data = ( + ds.sel(realization=[real]).isel(time=slice(0, fake_time.size)) + * np.NaN + ) bnds_crd = [None, None] reals.append( - data - .expand_dims(warminglevel=wl_crd) - .assign_coords( + data.expand_dims(warminglevel=wl_crd).assign_coords( time=fake_time, - warminglevel_bounds=(('realization', 'warminglevel', 'bounds'), [[bnds_crd]]) + warminglevel_bounds=( + ("realization", "warminglevel", "bounds"), + [[bnds_crd]], + ), ) ) - ds_wl = xr.concat(reals, 'realization') + ds_wl = xr.concat(reals, "realization") else: # Scalar subset, single level start_yr, end_yr = get_warming_level(ds, wl=wl, return_horizon=True, **kwargs) @@ -1213,18 +1253,26 @@ def subset_warming_level( ds_wl = ds.isel(time=slice(0, fake_time.size)) * np.NaN else: # cut the window selected above and expand dims with wl_crd - ds_wl = ds.sel(time=slice(start_yr, end_yr)).expand_dims(warminglevel=wl_crd) + ds_wl = ds.sel(time=slice(start_yr, end_yr)).expand_dims( + warminglevel=wl_crd + ) if fake_time is not None: # We are in an iteration over multiple levels, put the fake time axis, but remember bounds ds_wl = ds_wl.assign_coords( time=fake_time, warminglevel_bounds=( - ('warminglevel', 'bounds'), - [[date_cls(int(start_yr), 1, 1), date_cls(int(end_yr) + 1, 1, 1) - datetime.timedelta(seconds=1)]] - ) + ("warminglevel", "bounds"), + [ + [ + date_cls(int(start_yr), 1, 1), + date_cls(int(end_yr) + 1, 1, 1) + - datetime.timedelta(seconds=1), + ] + ], + ), ) - + if to_level is not None: ds_wl.attrs["cat:processing_level"] = to_level.format( wl=wl, @@ -1233,7 +1281,7 @@ def subset_warming_level( ) if not wl_dim: - ds_wl = ds_wl.squeeze('warminglevel', drop=True) + ds_wl = ds_wl.squeeze("warminglevel", drop=True) return ds_wl @@ -1500,7 +1548,7 @@ def _restrict_multimembers(catalogs: dict, id_columns: list, restrictions: dict) def _restrict_wl(df, restrictions: dict): """Update the results from search_data_catalogs by removing simulations that are not available in the warming level netCDF.""" - restrictions.setdefault('wl', 0) + restrictions.setdefault("wl", 0) to_keep = get_warming_level(df, return_horizon=False, **restrictions).notnull() removed = pd.unique(df[~to_keep]["id"]) df = df[to_keep]