❗️ This notebook refers to WaPOR 3.4 and is outdated ❗️

Introduction

Installation

The pywapor package depends on several other packages, most of them get installed automatically when we install pywapor. The GDAL package needs to be installed manually however. Luckily, it is already installed on the backend computer used by Google Colab. We can verify that GDAL is installed by running the following commands.

[1]:
from osgeo import gdal
print("Using gdal version", gdal.__version__)
Using gdal version 3.7.2

Now that we know that Python is able to import the GDAL package, we can install pywapor by running the following command.

[ ]:
!pip install pywapor --quiet

If everything went well, we can now import pywapor in Python, let’s try it (fingers crossed)!

[2]:
import pywapor
print("Using pywapor version:", pywapor.__version__)
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
Using pywapor version: 3.4.3

ETLook Input

In order to run the ETLook model, we first need to collect the necessary inputs. For your convenience, the pywapor package has a function that can collect all this data from selected sources and make sure the data is stored in the correct format.

First we define a time period through timelim, our boundingbox through latlim and lonlim and we give a project_folder in which all our data will be stored. Here I’ve chosen an period of 3 days. The given boundingbox will show us the Fayoum irrigation scheme in Egypt.

Note that for latlim the first value refers to the southern border of your AOI, so this value should always be smaller than the second. For lonlim, the first value refers to the western border of your AOI.

Finally, I’ve selected a level "level_2_v3", this determines which products (and resolution) are used. Available options are "level_2_v3 (default), "level_3_v3", "level_1", "level_2" and "level_3". Customizing these levels is also possible, check the sideload notebook for hints on how to do this.

[3]:
project_folder = r"/Users/hmcoerver/introduction"
timelim = ["2021-07-01", "2021-07-11"]
latlim = [28.9, 29.7]
lonlim = [30.2, 31.2]
level = "level_2_v3"

Then we can run pywapor.pre_et_look.main() to start the downloading. If you haven’t entered your passwords yet, you will be prompted to enter them when they are needed. You can also enter them beforehand, see the notebook called passwords for instructions.

[4]:
ds  = pywapor.pre_et_look.main(project_folder, latlim, lonlim, timelim, sources = level)
--> lonlim: [30.2, 31.2]
--> latlim: [28.9, 29.7]
--> timelim: ['2021-07-01', '2021-07-11']
> PRE_ET_LOOK
    --> Collecting `ndvi`, `r0` from `SENTINEL2.S2MSI2A_R60m`.
        --> Searching nodes for 27 `SENTINEL-2.S2MSI2A` scenes.
        --> 162 nodes required.
        --> Downloading 72 missing nodes.
            --> Requesting access token.
        --> Processing 27 scenes.
            --> Creating example dataset.
                > peak-memory-usage: 19.9KB, execution-time: 0:00:00.089581.
                > chunksize|dimsize: [], crs: EPSG:4326
            --> (1/27) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RTS_20230201T002854.SAFE to netCDF.
                > peak-memory-usage: 49.6MB, execution-time: 0:00:02.444481.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (2/27) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RTT_20230201T002854.SAFE to netCDF.
                > peak-memory-usage: 51.6MB, execution-time: 0:00:02.668822.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (3/27) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RUS_20230201T002854.SAFE to netCDF.
                > peak-memory-usage: 47.0MB, execution-time: 0:00:02.428100.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (4/27) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RUT_20230201T002854.SAFE to netCDF.
                > peak-memory-usage: 46.0MB, execution-time: 0:00:02.507665.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (5/27) Processing S2A_MSIL2A_20210705T083601_N0500_R064_T35RQN_20230201T181236.SAFE to netCDF.
                > peak-memory-usage: 45.7MB, execution-time: 0:00:02.435830.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (6/27) Processing S2A_MSIL2A_20210705T083601_N0500_R064_T36RTS_20230201T181236.SAFE to netCDF.
                > peak-memory-usage: 45.3MB, execution-time: 0:00:02.441689.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (7/27) Processing S2A_MSIL2A_20210705T083601_N0500_R064_T36RUT_20230201T181236.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.428168.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (8/27) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RTS_20230206T022510.SAFE to netCDF.
                > peak-memory-usage: 46.8MB, execution-time: 0:00:02.481756.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (9/27) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RTT_20230206T022510.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.662608.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (10/27) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RUS_20230206T022510.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.425712.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (11/27) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RUT_20230206T022510.SAFE to netCDF.
                > peak-memory-usage: 46.0MB, execution-time: 0:00:02.500881.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (12/27) Processing S2A_MSIL2A_20210715T083601_N0301_R064_T36RTS_20210715T115536.SAFE to netCDF.
                > peak-memory-usage: 43.2MB, execution-time: 0:00:02.429338.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (13/27) Processing S2A_MSIL2A_20210715T083601_N0500_R064_T35RQN_20230207T164304.SAFE to netCDF.
                > peak-memory-usage: 42.2MB, execution-time: 0:00:02.430520.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (14/27) Processing S2A_MSIL2A_20210715T083601_N0500_R064_T36RTT_20230207T164304.SAFE to netCDF.
                > peak-memory-usage: 45.2MB, execution-time: 0:00:02.619181.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (15/27) Processing S2A_MSIL2A_20210715T083601_N0500_R064_T36RUT_20230207T164304.SAFE to netCDF.
                > peak-memory-usage: 46.8MB, execution-time: 0:00:02.434340.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (16/27) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T35RQN_20230319T153615.SAFE to netCDF.
                > peak-memory-usage: 44.6MB, execution-time: 0:00:02.424773.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (17/27) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T36RTS_20230319T153615.SAFE to netCDF.
                > peak-memory-usage: 51.6MB, execution-time: 0:00:02.435106.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (18/27) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T36RTT_20230319T153615.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.629323.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (19/27) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T36RUT_20230319T153615.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.448801.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (20/27) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RTS_20230203T023851.SAFE to netCDF.
                > peak-memory-usage: 45.2MB, execution-time: 0:00:02.452672.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (21/27) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RTT_20230203T023851.SAFE to netCDF.
                > peak-memory-usage: 46.0MB, execution-time: 0:00:02.652211.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (22/27) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RUS_20230203T023851.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.433478.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (23/27) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RUT_20230203T023851.SAFE to netCDF.
                > peak-memory-usage: 48.8MB, execution-time: 0:00:02.521066.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (24/27) Processing S2B_MSIL2A_20210710T083559_N0301_R064_T35RQN_20210710T113001.SAFE to netCDF.
                > peak-memory-usage: 49.6MB, execution-time: 0:00:02.436720.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (25/27) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T36RTS_20230204T201644.SAFE to netCDF.
                > peak-memory-usage: 48.3MB, execution-time: 0:00:02.442564.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (26/27) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T36RTT_20230204T201644.SAFE to netCDF.
                > peak-memory-usage: 45.9MB, execution-time: 0:00:02.626286.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            --> (27/27) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T36RUT_20230204T201644.SAFE to netCDF.
                > peak-memory-usage: 44.6MB, execution-time: 0:00:02.448206.
                > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
        --> Applying 'calc_normalized_difference' to `ndvi`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
        --> Applying 'gap_fill' to `ndvi`.
        --> Applying 'calc_r0' to `r0`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
        --> Applying 'gap_fill' to `r0`.
        --> Merging files.
            > peak-memory-usage: 304.2MB, execution-time: 0:00:02.321647.
            > chunksize|dimsize: [time: 1|7, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
            > timesize: 7 [2021-06-30T08:35, ..., 2021-07-15T08:36]
    --> Collecting `p` from `CHIRPS.P05`.
        --> Saving merged data.
            > peak-memory-usage: 215.2KB, execution-time: 0:00:02.090874.
            > chunksize|dimsize: [time: 18|18, y: 18|18, x: 22|22], crs: EPSG:4326
            > timesize: 18 [2021-06-28T00:30, ..., 2021-07-15T00:30]
    --> Collecting `z` from `COPERNICUS.GLO90`.
        --> Merging tiles.
            > peak-memory-usage: 22.0MB, execution-time: 0:00:02.149459.
            > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
        --> Saving GLO90.nc
            > peak-memory-usage: 26.4MB, execution-time: 0:00:02.146524.
            > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
    --> Collecting `t_air`, `t_air_min`, `t_air_max`, `u`, `vp`, `ra` from `ERA5.sis-agrometeorological-indicators`.
        --> Directing CDS logging to file.
        --> Applying 'kelvin_to_celsius' to `t_air`.
        --> Applying 'kelvin_to_celsius' to `t_air_min`.
        --> Applying 'kelvin_to_celsius' to `t_air_max`.
        --> Applying 'adjust_wind_height' to `u`.
        --> Applying 'jouleperday_to_watt' to `ra`.
        --> Merging files.
            > peak-memory-usage: 174.8KB, execution-time: 0:00:02.183912.
            > chunksize|dimsize: [time: 18|18, y: 10|10, x: 12|12], crs: EPSG:4326
            > timesize: 18 [2021-06-28T12:00, ..., 2021-07-15T12:00]
    --> Collecting `p_air`, `p_air_0` from `ERA5.reanalysis-era5-single-levels`.
        --> Directing CDS logging to file.
        --> Applying 'pa_to_kpa' to `p_air`.
        --> Applying 'pa_to_kpa' to `p_air_0`.
        --> Merging files.
            > peak-memory-usage: 210.4KB, execution-time: 0:00:02.073319.
            > chunksize|dimsize: [time: 432|432, y: 5|5, x: 5|5], crs: EPSG:4326
            > timesize: 432 [2021-06-28T00:00, ..., 2021-07-15T23:00]
    --> Collecting `z_oro`, `rn_offset`, `rn_slope`, `t_amp_year`, `t_opt`, `vpd_slope`, `land_mask`, `rs_min`, `z_obst_max` from `STATICS.WaPOR2`.
        --> Saving WaPOR2.nc.
            > peak-memory-usage: 21.3MB, execution-time: 0:00:02.217443.
            > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
    --> Collecting `lw_offset`, `lw_slope` from `STATICS.WaPOR3`.
        --> Saving WaPOR3.nc.
            > peak-memory-usage: 7.6MB, execution-time: 0:00:02.086221.
            > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
    --> Collecting `se_root` from `se_root.v3`.
        > PRE_SE_ROOT
            --> Collecting `bt` from `VIIRSL1.VNP02IMG`.
                --> Found 27 VIIRS scenes.
                    --> (1/27) Processing 'VNP02IMG.A2021192.1118.002.2022266061139.nc'.
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.069104.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (2/27) Processing 'VNP02IMG.A2021191.1136.002.2022266055031.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.074177.
                            > chunksize|dimsize: [number_of_lines: 5835|6496, number_of_pixels: 5749|6400], crs: None
                    --> (3/27) Processing 'VNP02IMG.A2021186.1130.002.2022266025723.nc'.
                    --> (4/27) Processing 'VNP02IMG.A2021184.1024.002.2022266015001.nc'.
                    --> (5/27) Processing 'VNP02IMG.A2021189.1030.002.2022266044459.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.073800.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (6/27) Processing 'VNP02IMG.A2021180.1000.002.2022265234312.nc'.
                    --> (7/27) Processing 'VNP02IMG.A2021195.1200.002.2022266080321.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.072618.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (8/27) Processing 'VNP02IMG.A2021187.1112.002.2022266033837.nc'.
                    --> (9/27) Processing 'VNP02IMG.A2021182.1100.002.2022266004754.nc'.
                    --> (10/27) Processing 'VNP02IMG.A2021185.1148.002.2022266022934.nc'.
                    --> (11/27) Processing 'VNP02IMG.A2021191.0954.002.2022266054717.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.074505.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (12/27) Processing 'VNP02IMG.A2021190.1012.002.2022266050738.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.068276.
                            > chunksize|dimsize: [number_of_lines: 5835|6496, number_of_pixels: 5749|6400], crs: None
                    --> (13/27) Processing 'VNP02IMG.A2021185.1006.002.2022266022712.nc'.
                    --> (14/27) Processing 'VNP02IMG.A2021196.1000.002.2022266083209.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.075852.
                            > chunksize|dimsize: [number_of_lines: 5835|6496, number_of_pixels: 5749|6400], crs: None
                    --> (15/27) Processing 'VNP02IMG.A2021193.1054.002.2022266065455.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.069140.
                            > chunksize|dimsize: [number_of_lines: 5835|6496, number_of_pixels: 5749|6400], crs: None
                    --> (16/27) Processing 'VNP02IMG.A2021190.1154.002.2022266050940.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.067378.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (17/27) Processing 'VNP02IMG.A2021182.1106.002.2022266004910.nc'.
                    --> (18/27) Processing 'VNP02IMG.A2021196.1142.002.2022266083432.nc'.
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.067122.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (19/27) Processing 'VNP02IMG.A2021195.1018.002.2022266080202.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.071429.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
                    --> (20/27) Processing 'VNP02IMG.A2021179.1018.002.2022265231121.nc'.
                    --> (21/27) Processing 'VNP02IMG.A2021180.1142.002.2022265234532.nc'.
                    --> (22/27) Processing 'VNP02IMG.A2021188.1048.002.2022266040420.nc'.
                    --> (23/27) Processing 'VNP02IMG.A2021184.1206.002.2022266015027.nc'.
                    --> (24/27) Processing 'VNP02IMG.A2021183.1042.002.2022266011042.nc'.
                    --> (25/27) Processing 'VNP02IMG.A2021179.1200.002.2022265231326.nc'.
                    --> (26/27) Processing 'VNP02IMG.A2021181.1124.002.2022266001003.nc'.
                    --> (27/27) Processing 'VNP02IMG.A2021194.1036.002.2022266073750.nc'.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/general/processing_functions.py:301: UserWarning: Variable(s) referenced in grid_mapping not in variables: ['spatial_ref']
  ds = xr.open_dataset(fp, decode_coords = decode_coords, chunks = chunks, **kwargs)
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/rioxarray/_io.py:1132: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
  warnings.warn(str(rio_warning.message), type(rio_warning.message))  # type: ignore
                        --> Combining data.
                            > peak-memory-usage: 1.5GB, execution-time: 0:00:02.076309.
                            > chunksize|dimsize: [number_of_lines: 5821|6464, number_of_pixels: 5763|6400], crs: None
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/pywapor/collect/product/VIIRSL1.py:244: UserWarning: Converting non-nanosecond precision datetime values to nanosecond precision. This behavior can eventually be relaxed in xarray, as it is an artifact from pandas which is now beginning to support non-nanosecond precision values. This warning is caused by passing non-nanosecond np.datetime64 or np.timedelta64 values to the DataArray or Variable constructor; it can be silenced by converting the values to nanosecond precision ahead of time.
  return ds.expand_dims("time").assign_coords({"time": [date]})
                --> Applying 'drop_empty_times' to `bt`.
                --> Merging files.
                    > peak-memory-usage: 37.2MB, execution-time: 0:00:02.231400.
                    > chunksize|dimsize: [time: 26|26, y: 245|245, x: 306|306], crs: EPSG:4326
                    > timesize: 26 [2021-06-28T10:18, ..., 2021-07-15T11:42]
            --> Collecting `ndvi`, `mndwi`, `psri`, `vari_red_edge`, `bsi`, `nmdi`, `green`, `nir` from `SENTINEL2.S2MSI2A_R60m`.
                --> Searching nodes for 28 `SENTINEL-2.S2MSI2A` scenes.
                --> 252 nodes required.
                --> Downloading 69 missing nodes.
                    --> Requesting access token.
                --> Processing 28 scenes.
                    --> (1/28) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RTS_20230201T002854.SAFE to netCDF.
                        > peak-memory-usage: 44.6MB, execution-time: 0:00:02.675939.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (2/28) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RTT_20230201T002854.SAFE to netCDF.
                        > peak-memory-usage: 48.8MB, execution-time: 0:00:03.054895.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (3/28) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RUS_20230201T002854.SAFE to netCDF.
                        > peak-memory-usage: 43.2MB, execution-time: 0:00:02.664275.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (4/28) Processing S2A_MSIL2A_20210702T082601_N0500_R021_T36RUT_20230201T002854.SAFE to netCDF.
                        > peak-memory-usage: 44.9MB, execution-time: 0:00:02.793693.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (5/28) Processing S2A_MSIL2A_20210705T083601_N0301_R064_T36RTT_20210705T114309.SAFE to netCDF.
                        > peak-memory-usage: 42.5MB, execution-time: 0:00:03.005613.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (6/28) Processing S2A_MSIL2A_20210705T083601_N0500_R064_T35RQN_20230201T181236.SAFE to netCDF.
                        > peak-memory-usage: 47.4MB, execution-time: 0:00:02.670049.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (7/28) Processing S2A_MSIL2A_20210705T083601_N0500_R064_T36RTS_20230201T181236.SAFE to netCDF.
                        > peak-memory-usage: 51.6MB, execution-time: 0:00:02.652412.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (8/28) Processing S2A_MSIL2A_20210705T083601_N0500_R064_T36RUT_20230201T181236.SAFE to netCDF.
                        > peak-memory-usage: 45.0MB, execution-time: 0:00:02.660684.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (9/28) Processing S2A_MSIL2A_20210712T082611_N0301_R021_T36RTS_20210712T105153.SAFE to netCDF.
                        > peak-memory-usage: 48.8MB, execution-time: 0:00:02.668614.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (10/28) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RTT_20230206T022510.SAFE to netCDF.
                        > peak-memory-usage: 48.1MB, execution-time: 0:00:03.054904.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (11/28) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RUS_20230206T022510.SAFE to netCDF.
                        > peak-memory-usage: 50.9MB, execution-time: 0:00:02.662659.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (12/28) Processing S2A_MSIL2A_20210712T082611_N0500_R021_T36RUT_20230206T022510.SAFE to netCDF.
                        > peak-memory-usage: 43.4MB, execution-time: 0:00:02.791957.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (13/28) Processing S2A_MSIL2A_20210715T083601_N0301_R064_T36RTT_20210715T115536.SAFE to netCDF.
                        > peak-memory-usage: 48.8MB, execution-time: 0:00:02.991143.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (14/28) Processing S2A_MSIL2A_20210715T083601_N0500_R064_T35RQN_20230207T164304.SAFE to netCDF.
                        > peak-memory-usage: 48.0MB, execution-time: 0:00:02.668442.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (15/28) Processing S2A_MSIL2A_20210715T083601_N0500_R064_T36RTS_20230207T164304.SAFE to netCDF.
                        > peak-memory-usage: 48.8MB, execution-time: 0:00:02.677730.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (16/28) Processing S2A_MSIL2A_20210715T083601_N0500_R064_T36RUT_20230207T164304.SAFE to netCDF.
                        > peak-memory-usage: 45.8MB, execution-time: 0:00:02.693889.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (17/28) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T35RQN_20230319T153615.SAFE to netCDF.
                        > peak-memory-usage: 44.8MB, execution-time: 0:00:02.651182.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (18/28) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T36RTS_20230319T153615.SAFE to netCDF.
                        > peak-memory-usage: 44.0MB, execution-time: 0:00:02.691508.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (19/28) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T36RTT_20230319T153615.SAFE to netCDF.
                        > peak-memory-usage: 41.4MB, execution-time: 0:00:02.991438.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (20/28) Processing S2B_MSIL2A_20210630T083559_N0500_R064_T36RUT_20230319T153615.SAFE to netCDF.
                        > peak-memory-usage: 48.8MB, execution-time: 0:00:02.667460.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (21/28) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RTS_20230203T023851.SAFE to netCDF.
                        > peak-memory-usage: 51.6MB, execution-time: 0:00:02.659496.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (22/28) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RTT_20230203T023851.SAFE to netCDF.
                        > peak-memory-usage: 44.1MB, execution-time: 0:00:03.054808.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (23/28) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RUS_20230203T023851.SAFE to netCDF.
                        > peak-memory-usage: 45.7MB, execution-time: 0:00:02.678737.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (24/28) Processing S2B_MSIL2A_20210707T082609_N0500_R021_T36RUT_20230203T023851.SAFE to netCDF.
                        > peak-memory-usage: 50.6MB, execution-time: 0:00:02.804561.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (25/28) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T35RQN_20230204T201644.SAFE to netCDF.
                        > peak-memory-usage: 47.3MB, execution-time: 0:00:02.670422.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (26/28) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T36RTS_20230204T201644.SAFE to netCDF.
                        > peak-memory-usage: 48.1MB, execution-time: 0:00:02.670952.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (27/28) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T36RTT_20230204T201644.SAFE to netCDF.
                        > peak-memory-usage: 48.1MB, execution-time: 0:00:02.986862.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    --> (28/28) Processing S2B_MSIL2A_20210710T083559_N0500_R064_T36RUT_20230204T201644.SAFE to netCDF.
                        > peak-memory-usage: 50.9MB, execution-time: 0:00:02.661803.
                        > chunksize|dimsize: [time: 1|1, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                --> Applying 'calc_normalized_difference' to `mndwi`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
                --> Applying 'gap_fill' to `mndwi`.
                --> Applying 'calc_psri' to `psri`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
                --> Applying 'gap_fill' to `psri`.
                --> Applying 'calc_vari_red_egde' to `vari_red_edge`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
                --> Applying 'gap_fill' to `vari_red_edge`.
                --> Applying 'calc_bsi' to `bsi`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
                --> Applying 'gap_fill' to `bsi`.
                --> Applying 'calc_nmdi' to `nmdi`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: divide by zero encountered in divide
  return func(*(_execute_task(a, cache) for a in args))
                --> Applying 'gap_fill' to `nmdi`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
                --> Applying 'gap_fill' to `green`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/numpy/lib/nanfunctions.py:1217: RuntimeWarning: All-NaN slice encountered
  return function_base._ureduce(a, func=_nanmedian, keepdims=keepdims,
                --> Applying 'gap_fill' to `nir`.
                --> Merging files.
                    --> Appending data to an existing file.
                    > peak-memory-usage: 321.4MB, execution-time: 0:00:06.915486.
                    > chunksize|dimsize: [time: 1|7, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
                    > timesize: 7 [2021-06-30T08:35, ..., 2021-07-15T08:36]
            --> Collecting `u`, `t_dew`, `p_air_0`, `p_air`, `t_air`, `wv` from `ERA5.reanalysis-era5-single-levels`.
                --> Directing CDS logging to file.
                --> Applying 'windspeed' to `u`.
                --> Applying 'adjust_wind_height' to `u`.
                --> Applying 'kelvin_to_celsius' to `t_dew`.
                --> Applying 'pa_to_kpa' to `p_air_0`.
                --> Applying 'pa_to_kpa' to `p_air`.
                --> Applying 'kelvin_to_celsius' to `t_air`.
                --> Merging files.
                    > peak-memory-usage: 636.7KB, execution-time: 0:00:02.120746.
                    > chunksize|dimsize: [time: 432|432, y: 5|5, x: 5|5], crs: EPSG:4326
                    > timesize: 432 [2021-06-28T00:00, ..., 2021-07-15T23:00]
            --> Collecting `z`, `slope`, `aspect` from `COPERNICUS.GLO90`.
                --> Merging tiles.
                    > peak-memory-usage: 22.0MB, execution-time: 0:00:02.154514.
                    > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
                --> Applying 'calc_slope_or_aspect' to `slope`.
                --> Applying 'calc_slope_or_aspect' to `aspect`.
                --> Saving GLO90.nc
                    --> Appending data to an existing file.
                    > peak-memory-usage: 20.9MB, execution-time: 0:00:02.244928.
                    > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
            --> Collecting `r0_bare`, `r0_full` from `STATICS.WaPOR2`.
                --> Saving WaPOR2.nc.
                    --> Appending data to an existing file.
                    > peak-memory-usage: 7.9MB, execution-time: 0:00:02.142586.
                    > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
            --> Aligning times in `bsi` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:02:00.229357.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `green` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:02:00.855967.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `mndwi` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:02:00.284722.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `ndvi` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:02:00.395346.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `nir` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:01:57.408799.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `nmdi` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:02:00.504057.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `p_air` (432) with `bt` (26, linear).
                > peak-memory-usage: 397.2KB, execution-time: 0:00:02.080376.
                > chunksize|dimsize: [time: 26|26, y: 5|5, x: 5|5], crs: EPSG:4326
                > shape: (26, 5, 5), kwargs: [].
            --> Aligning times in `p_air_0` (432) with `bt` (26, linear).
                > peak-memory-usage: 387.4KB, execution-time: 0:00:02.091279.
                > chunksize|dimsize: [time: 26|26, y: 5|5, x: 5|5], crs: EPSG:4326
                > shape: (26, 5, 5), kwargs: [].
            --> Aligning times in `psri` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:01:58.179793.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `t_air` (432) with `bt` (26, linear).
                > peak-memory-usage: 212.6KB, execution-time: 0:00:02.083618.
                > chunksize|dimsize: [time: 26|26, y: 5|5, x: 5|5], crs: EPSG:4326
                > shape: (26, 5, 5), kwargs: [].
            --> Aligning times in `t_dew` (432) with `bt` (26, linear).
                > peak-memory-usage: 374.8KB, execution-time: 0:00:02.082593.
                > chunksize|dimsize: [time: 26|26, y: 5|5, x: 5|5], crs: EPSG:4326
                > shape: (26, 5, 5), kwargs: [].
            --> Aligning times in `u` (432) with `bt` (26, linear).
                > peak-memory-usage: 396.8KB, execution-time: 0:00:02.085038.
                > chunksize|dimsize: [time: 26|26, y: 5|5, x: 5|5], crs: EPSG:4326
                > shape: (26, 5, 5), kwargs: [].
            --> Aligning times in `vari_red_edge` (7) with `bt` (26, linear).
                > peak-memory-usage: 1.6GB, execution-time: 0:01:58.415052.
                > chunksize|dimsize: [time: 26|26, y: 500|1368, x: 500|1709], crs: EPSG:4326
                > shape: (26, 1368, 1709), kwargs: [].
            --> Aligning times in `wv` (432) with `bt` (26, linear).
                > peak-memory-usage: 396.7KB, execution-time: 0:00:02.065087.
                > chunksize|dimsize: [time: 26|26, y: 5|5, x: 5|5], crs: EPSG:4326
                > shape: (26, 5, 5), kwargs: [].
            --> Calculating `cos_solar_zangle`.
                > peak-memory-usage: 2.6GB, execution-time: 0:00:02.154191.
                > chunksize|dimsize: [time: 21|26, y: 799|961, x: 998|1201], crs: EPSG:4326
            --> Sharpening 26 `bt` images.
                --> (1/26) Sharpening `lowres_input_20210628_101800.vrt` with `highres_input_20210628_101800.vrt`.
                    --> Number of training elements for window 0 is 43502, representing 84% of avaiable low-resolution data.
                    --> Low res. residual bias = nan and RMSD = nan.
                    > peak-memory-usage: 646.7MB, execution-time: 0:00:23.522843.
                --> (2/26) Sharpening `lowres_input_20210628_120000.vrt` with `highres_input_20210628_120000.vrt`.
                    --> Number of training elements for window 0 is 25973, representing 86% of avaiable low-resolution data.
                    --> Low res. residual bias = nan and RMSD = nan.
                    > peak-memory-usage: 676.1MB, execution-time: 0:00:18.118430.
                --> (3/26) Sharpening `lowres_input_20210629_100000.vrt` with `highres_input_20210629_100000.vrt`.
                    --> Number of training elements for window 0 is 22343, representing 84% of avaiable low-resolution data.
                    --> Low res. residual bias = nan and RMSD = nan.
                    > peak-memory-usage: 622.9MB, execution-time: 0:00:18.777055.
                --> (4/26) Sharpening `lowres_input_20210629_114200.vrt` with `highres_input_20210629_114200.vrt`.
                    --> Number of training elements for window 0 is 38176, representing 85% of avaiable low-resolution data.
                    --> Low res. residual bias = nan and RMSD = nan.
                    > peak-memory-usage: 672.5MB, execution-time: 0:00:18.858314.
                --> (5/26) Sharpening `lowres_input_20210630_112400.vrt` with `highres_input_20210630_112400.vrt`.
                    --> Number of training elements for window 0 is 32071, representing 73% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.105 and RMSD = 2.713.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:21.838335.
                --> (6/26) Sharpening `lowres_input_20210701_110000.vrt` with `highres_input_20210701_110000.vrt`.
                    --> Number of training elements for window 0 is 20578, representing 68% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.090 and RMSD = 3.068.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:20.544929.
                --> (7/26) Sharpening `lowres_input_20210701_110600.vrt` with `highres_input_20210701_110600.vrt`.
                    --> Number of training elements for window 0 is 8829, representing 82% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.010 and RMSD = 1.036.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:19.509160.
                --> (8/26) Sharpening `lowres_input_20210702_104200.vrt` with `highres_input_20210702_104200.vrt`.
                    --> Number of training elements for window 0 is 31211, representing 57% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.025 and RMSD = 2.745.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:23.332387.
                --> (9/26) Sharpening `lowres_input_20210703_102400.vrt` with `highres_input_20210703_102400.vrt`.
                    --> Number of training elements for window 0 is 31508, representing 54% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.066 and RMSD = 2.061.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:23.755014.
                --> (10/26) Sharpening `lowres_input_20210704_100600.vrt` with `highres_input_20210704_100600.vrt`.
                    --> Number of training elements for window 0 is 18191, representing 52% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.149 and RMSD = 1.936.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:21.838824.
                --> (11/26) Sharpening `lowres_input_20210704_114800.vrt` with `highres_input_20210704_114800.vrt`.
                    --> Number of training elements for window 0 is 22986, representing 56% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.104 and RMSD = 1.906.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:21.838659.
                --> (12/26) Sharpening `lowres_input_20210705_113000.vrt` with `highres_input_20210705_113000.vrt`.
                    --> Number of training elements for window 0 is 26323, representing 56% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.053 and RMSD = 1.857.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:22.495603.
                --> (13/26) Sharpening `lowres_input_20210706_111200.vrt` with `highres_input_20210706_111200.vrt`.
                    --> Number of training elements for window 0 is 24339, representing 62% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.072 and RMSD = 2.252.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:22.110186.
                --> (14/26) Sharpening `lowres_input_20210707_104800.vrt` with `highres_input_20210707_104800.vrt`.
                    --> Number of training elements for window 0 is 27980, representing 59% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.049 and RMSD = 2.326.
                    > peak-memory-usage: 597.7MB, execution-time: 0:00:22.582298.
                --> (15/26) Sharpening `lowres_input_20210708_103000.vrt` with `highres_input_20210708_103000.vrt`.
                    --> Number of training elements for window 0 is 33721, representing 53% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.069 and RMSD = 2.296.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:23.533122.
                --> (16/26) Sharpening `lowres_input_20210709_101200.vrt` with `highres_input_20210709_101200.vrt`.
                    --> Number of training elements for window 0 is 23457, representing 53% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.001 and RMSD = 2.286.
                    > peak-memory-usage: 597.6MB, execution-time: 0:00:22.607903.
                --> (17/26) Sharpening `lowres_input_20210709_115400.vrt` with `highres_input_20210709_115400.vrt`.
                    --> Number of training elements for window 0 is 18171, representing 58% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.022 and RMSD = 2.109.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:21.574860.
                --> (18/26) Sharpening `lowres_input_20210710_095400.vrt` with `highres_input_20210710_095400.vrt`.
                    --> Number of training elements for window 0 is 4375, representing 44% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.058 and RMSD = 1.494.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:20.175782.
                --> (19/26) Sharpening `lowres_input_20210710_113600.vrt` with `highres_input_20210710_113600.vrt`.
                    --> Number of training elements for window 0 is 26124, representing 54% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.036 and RMSD = 2.165.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:22.985384.
                --> (20/26) Sharpening `lowres_input_20210711_111800.vrt` with `highres_input_20210711_111800.vrt`.
                    --> Number of training elements for window 0 is 25270, representing 59% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.100 and RMSD = 2.779.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:22.843672.
                --> (21/26) Sharpening `lowres_input_20210712_105400.vrt` with `highres_input_20210712_105400.vrt`.
                    --> Number of training elements for window 0 is 32864, representing 75% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.004 and RMSD = 2.315.
                    > peak-memory-usage: 597.4MB, execution-time: 0:00:21.847997.
                --> (22/26) Sharpening `lowres_input_20210713_103600.vrt` with `highres_input_20210713_103600.vrt`.
                    --> Number of training elements for window 0 is 44279, representing 72% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.160 and RMSD = 2.937.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:21.626976.
                --> (23/26) Sharpening `lowres_input_20210714_101800.vrt` with `highres_input_20210714_101800.vrt`.
                    --> Number of training elements for window 0 is 35806, representing 70% of avaiable low-resolution data.
                    --> Low res. residual bias = -0.078 and RMSD = 1.995.
                    > peak-memory-usage: 597.7MB, execution-time: 0:00:21.231090.
                --> (24/26) Sharpening `lowres_input_20210714_120000.vrt` with `highres_input_20210714_120000.vrt`.
                    --> Number of training elements for window 0 is 20119, representing 71% of avaiable low-resolution data.
                    --> Low res. residual bias = 0.131 and RMSD = 1.886.
                    > peak-memory-usage: 597.5MB, execution-time: 0:00:20.591963.
                --> (25/26) Sharpening `lowres_input_20210715_100000.vrt` with `highres_input_20210715_100000.vrt`.
                    --> Number of training elements for window 0 is 22614, representing 85% of avaiable low-resolution data.
                    --> Low res. residual bias = nan and RMSD = nan.
                    > peak-memory-usage: 634.9MB, execution-time: 0:00:19.013937.
                --> (26/26) Sharpening `lowres_input_20210715_114200.vrt` with `highres_input_20210715_114200.vrt`.
                    --> Number of training elements for window 0 is 39093, representing 85% of avaiable low-resolution data.
                    --> Low res. residual bias = nan and RMSD = nan.
                    > peak-memory-usage: 654.6MB, execution-time: 0:00:18.824181.
            --> Merging sharpened `bt` files.
                > peak-memory-usage: 1.1GB, execution-time: 0:00:04.112410.
                > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Using `S2MSI2A_R60m.nc` as reprojecting example.
                > shape: (1368, 1709), res: 0.0006° x 0.0006°.
            --> Selected `reproject_chunk` for reprojection of GLO90.nc.
                --> Correcting src_ds.
                    > peak-memory-usage: 44.0MB, execution-time: 0:00:02.160486.
                    > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 5.4KB, execution-time: 0:00:00.123949.
                --> Saving reprojected data from GLO90_fixed.nc:aspect (bilinear).
                    > peak-memory-usage: 71.3MB, execution-time: 0:00:02.226770.
                    > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of p_air_i.nc.
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 5.6KB, execution-time: 0:00:02.468400.
                --> Saving reprojected data from p_air_i.nc:p_air (bilinear).
                    > peak-memory-usage: 1.7GB, execution-time: 0:00:02.478343.
                    > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of p_air_0_i.nc.
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 5.6KB, execution-time: 0:00:02.441121.
                --> Saving reprojected data from p_air_0_i.nc:p_air_0 (bilinear).
                    > peak-memory-usage: 1.7GB, execution-time: 0:00:02.423246.
                    > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of WaPOR2.nc.
                --> Correcting src_ds.
                    > peak-memory-usage: 6.1MB, execution-time: 0:00:02.083337.
                    > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 4.8KB, execution-time: 0:00:00.122951.
                --> Saving reprojected data from WaPOR2_fixed.nc:r0_bare (bilinear).
                    > peak-memory-usage: 71.3MB, execution-time: 0:00:02.179732.
                    > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of WaPOR2.nc.
                --> Correcting src_ds.
                    > peak-memory-usage: 6.1MB, execution-time: 0:00:02.078993.
                    > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 4.8KB, execution-time: 0:00:00.119452.
                --> Saving reprojected data from WaPOR2_fixed.nc:r0_full (bilinear).
                    > peak-memory-usage: 71.3MB, execution-time: 0:00:02.178190.
                    > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of GLO90.nc.
                --> Correcting src_ds.
                    > peak-memory-usage: 44.0MB, execution-time: 0:00:02.146942.
                    > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 4.8KB, execution-time: 0:00:00.122022.
                --> Saving reprojected data from GLO90_fixed.nc:slope (bilinear).
                    > peak-memory-usage: 71.3MB, execution-time: 0:00:02.194254.
                    > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of t_air_i.nc.
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 6.1KB, execution-time: 0:00:02.392653.
                --> Saving reprojected data from t_air_i.nc:t_air (bilinear).
                    > peak-memory-usage: 1.8GB, execution-time: 0:00:02.465326.
                    > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of t_dew_i.nc.
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 6.8KB, execution-time: 0:00:02.381942.
                --> Saving reprojected data from t_dew_i.nc:t_dew (bilinear).
                    > peak-memory-usage: 1.7GB, execution-time: 0:00:02.454545.
                    > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of u_i.nc.
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 6.3KB, execution-time: 0:00:02.377742.
                --> Saving reprojected data from u_i.nc:u (bilinear).
                    > peak-memory-usage: 1.5GB, execution-time: 0:00:02.425301.
                    > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of wv_i.nc.
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 6.8KB, execution-time: 0:00:02.383185.
                --> Saving reprojected data from wv_i.nc:wv (bilinear).
                    > peak-memory-usage: 1.7GB, execution-time: 0:00:02.473776.
                    > chunksize|dimsize: [time: 16|26, y: 916|1368, x: 1143|1709], crs: EPSG:4326
            --> Selected `reproject_chunk` for reprojection of GLO90.nc.
                --> Correcting src_ds.
                    > peak-memory-usage: 44.0MB, execution-time: 0:00:02.148521.
                    > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
                --> Warping VRT to netCDF.
                    > peak-memory-usage: 4.8KB, execution-time: 0:00:00.125879.
                --> Saving reprojected data from GLO90_fixed.nc:z (bilinear).
                    > peak-memory-usage: 71.3MB, execution-time: 0:00:02.201696.
                    > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
            --> Applying 'rename_meteo'.
            --> Applying 'remove_empty_statics'.
            --> Applying 'add_constants_new'.
            --> Applying 'bt_to_lst'.
            --> Applying 'drop_empty_times'.
            --> Creating merged file `se_root_in.nc`.
                > peak-memory-usage: 1.2GB, execution-time: 0:00:37.376153.
                > chunksize|dimsize: [y: 978|1368, x: 1223|1709, time: 14|20], crs: EPSG:4326
        < PRE_SE_ROOT (1:00:49.168017)
        > SE_ROOT
            --> Running `se_root` (v3).
            --> Calculating `seasonal_correction`.
            --> Calculating `declination`.
            --> Calculating `day_angle`.
            --> Calculating `air_pressure_kpa2mbar`.
            --> Calculating `air_pressure_kpa2mbar`.
            --> Calculating `vegetation_cover`.
            --> Calculating `air_temperature_kelvin_inst`.
            --> Calculating `air_temperature_kelvin`.
            --> Insufficient data found for `vapour_pressure_from_specific_humidity_inst`, missing [`qv_i`]
            --> Calculating `vapour_pressure_from_dewpoint_inst`.
            --> Calculating `saturated_vapour_pressure`.
            --> Calculating `specific_humidity_from_vapour_pressure`.
            --> Calculating `moist_air_density_inst`.
            --> Calculating `moist_air_density`.
            --> Calculating `dry_air_density_inst`.
            --> Calculating `dry_air_density`.
            --> Calculating `air_density_inst`.
            --> Calculating `air_density`.
            --> Calculating `wind_speed_blending_height_bare`.
            --> Calculating `longitude_rad`.
            --> Calculating `latitude_rad`.
            --> Calculating `hour_angle`.
            --> Calculating `inverse_earth_sun_distance`.
            --> Calculating `solar_elevation_angle`.
            --> Calculating `solar_elevation_angle_refracted`.
            --> Calculating `relative_optical_airmass`.
            --> Calculating `rayleigh_optical_thickness`.
            --> Calculating `linke_turbidity`.
            --> Calculating `extraterrestrial_irradiance_normal`.
            --> Calculating `beam_irradiance_normal_clear`.
            --> Calculating `beam_irradiance_horizontal_clear`.
            --> Calculating `diffuse_irradiance_horizontal_clear`.
            --> Calculating `ra_clear_horizontal`.
            --> Calculating `atmospheric_emissivity_inst`.
            --> Calculating `net_radiation_bare`.
            --> Calculating `net_radiation_full`.
            --> Calculating `sensible_heat_flux_bare`.
            --> Calculating `sensible_heat_flux_full`.
            --> Calculating `wind_speed_blending_height_full_inst`.
            --> Calculating `friction_velocity_bare_inst`.
            --> Calculating `friction_velocity_full_inst`.
            --> Calculating `monin_obukhov_length_bare`.
            --> Calculating `monin_obukhov_length_full`.
            --> Calculating `wind_speed_soil_inst`.
            --> Calculating `psi_m`.
            --> Calculating `aerodynamical_resistance_forced_convection_soil`.
            --> Calculating `aerodynamical_resistance_forced_convection_bare`.
            --> Calculating `psi_m`.
            --> Calculating `psi_h`.
            --> Calculating `aerodynamical_resistance_forced_convection_full`.
            --> Calculating `psi_m`.
            --> Calculating `psi_m`.
            --> Calculating `psi_h`.
            --> Calculating `psi_h`.
            --> Calculating `aerodynamical_resistance_free_convection_bare`.
            --> Calculating `aerodynamical_resistance_free_convection_full`.
            --> Calculating `aerodynamical_resistance_bare`.
            --> Calculating `aerodynamical_resistance_full`.
            --> Calculating `maximum_temperature_bare`.
            --> Calculating `maximum_temperature_full`.
            --> Calculating `wet_bulb_temperature_inst_new`.
            --> Calculating `maximum_temperature`.
            --> Calculating `wet_bulb_temperature_kelvin_inst`.
            --> Calculating `air_temperature_kelvin`.
            --> Calculating `minimum_temperature`.
            --> Calculating `soil_moisture_from_maximum_temperature`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in power
  return func(*(_execute_task(a, cache) for a in args))
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/core.py:127: RuntimeWarning: invalid value encountered in log
  return func(*(_execute_task(a, cache) for a in args))
            --> Saving output to `se_root_out.nc`.
                > peak-memory-usage: 6.6GB, execution-time: 0:00:32.696426.
                > chunksize|dimsize: [time: 1|20, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
        < SE_ROOT (0:00:59.606380)
            > timesize: 20 [2021-06-30T11:24, ..., 2021-07-14T12:00]
    --> Compositing 24 variables.
        --> (1/24) Compositing `ndvi` (mean).
            --> Applying whittaker smoothing.
                > shape: (7, 1368, 1709), kwargs: ['valid_drange', 'max_dist', 'lmbdas'].
            --> Minimum of `ndvi_smoothed` is smaller than `valid_drange` min (-1.05 < -1.0).
            --> Maximum of `ndvi_smoothed` is larger than `valid_drange` max (1.06 > 1.0).
            --> Saving `ndvi` composites.
[########################################] | 100% Completed | 16m 6s
                > peak-memory-usage: 1.6GB, execution-time: 0:16:06.170473.
                > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
        --> (2/24) Compositing `r0` (mean).
            --> Applying whittaker smoothing.
                > shape: (7, 1368, 1709), kwargs: ['valid_drange', 'max_dist', 'lmbdas'].
            --> Minimum of `r0_smoothed` is smaller than `valid_drange` min (-0.03 < 0.0).
            --> Saving `r0` composites.
[########################################] | 100% Completed | 15m 30s
                > peak-memory-usage: 1.6GB, execution-time: 0:15:30.298572.
                > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
        --> (3/24) Compositing `se_root` (mean).
            --> Applying whittaker smoothing.
                > shape: (20, 1368, 1709), kwargs: ['valid_drange', 'max_dist', 'lmbdas'].
            --> Minimum of `se_root_smoothed` is smaller than `valid_drange` min (-0.15 < 0.0).
            --> Maximum of `se_root_smoothed` is larger than `valid_drange` max (1.17 > 1.0).
            --> Saving `se_root` composites.
[########################################] | 100% Completed | 16m 58s
                > peak-memory-usage: 2.3GB, execution-time: 0:16:58.564797.
                > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
        --> (4/24) Compositing `p` (mean).
            --> Saving `p` composites.
                > peak-memory-usage: 201.7KB, execution-time: 0:00:02.085223.
                > chunksize|dimsize: [time_bins: 11|11, y: 18|18, x: 22|22], crs: EPSG:4326
        --> (5/24) Compositing `z` (None).
            --> Saving `z` composites.
                > peak-memory-usage: 116.7MB, execution-time: 0:00:02.065134.
                > chunksize|dimsize: [y: 961|961, x: 1201|1201], crs: EPSG:4326
        --> (6/24) Compositing `t_air` (mean).
            --> Using `sis-agrometeorological-indicators.nc` as reprojecting example.
                > shape: (10, 12), res: 0.1000° x 0.1000°.
            --> Selected `reproject_bulk` for reprojection of reanalysis-era5-single-levels.nc.
                --> Applying `reproject_bulk` to reanalysis-era5-single-levels.nc:t_air (bilinear).
                    > peak-memory-usage: 616.1KB, execution-time: 0:00:02.093968.
                    > chunksize|dimsize: [time: 432|432, y: 10|10, x: 12|12], crs: EPSG:4326
            --> Multiple `t_air` images for an identical datetime found, reducing those with 'median'.
            --> Saving `t_air` composites.
                > peak-memory-usage: 1.6MB, execution-time: 0:00:02.532013.
                > chunksize|dimsize: [time_bins: 11|11, y: 10|10, x: 12|12], crs: EPSG:4326
        --> (7/24) Compositing `t_air_min` (min).
            --> Saving `t_air_min` composites.
                > peak-memory-usage: 37.5KB, execution-time: 0:00:02.083370.
                > chunksize|dimsize: [time_bins: 11|11, y: 10|10, x: 12|12], crs: EPSG:4326
        --> (8/24) Compositing `t_air_max` (max).
            --> Saving `t_air_max` composites.
                > peak-memory-usage: 39.2KB, execution-time: 0:00:02.089623.
                > chunksize|dimsize: [time_bins: 11|11, y: 10|10, x: 12|12], crs: EPSG:4326
        --> (9/24) Compositing `u` (mean).
            --> Using `sis-agrometeorological-indicators.nc` as reprojecting example.
                > shape: (10, 12), res: 0.1000° x 0.1000°.
            --> Selected `reproject_bulk` for reprojection of reanalysis-era5-single-levels.nc.
                --> Applying `reproject_bulk` to reanalysis-era5-single-levels.nc:u (bilinear).
                    > peak-memory-usage: 614.9KB, execution-time: 0:00:02.081312.
                    > chunksize|dimsize: [time: 432|432, y: 10|10, x: 12|12], crs: EPSG:4326
            --> Multiple `u` images for an identical datetime found, reducing those with 'median'.
            --> Saving `u` composites.
                > peak-memory-usage: 1.6MB, execution-time: 0:00:02.524455.
                > chunksize|dimsize: [time_bins: 11|11, y: 10|10, x: 12|12], crs: EPSG:4326
        --> (10/24) Compositing `vp` (mean).
            --> Saving `vp` composites.
                > peak-memory-usage: 39.8KB, execution-time: 0:00:02.082645.
                > chunksize|dimsize: [time_bins: 11|11, y: 10|10, x: 12|12], crs: EPSG:4326
        --> (11/24) Compositing `ra` (mean).
            --> Saving `ra` composites.
                > peak-memory-usage: 61.7KB, execution-time: 0:00:02.083712.
                > chunksize|dimsize: [time_bins: 11|11, y: 10|10, x: 12|12], crs: EPSG:4326
        --> (12/24) Compositing `p_air` (mean).
            --> Saving `p_air` composites.
                > peak-memory-usage: 143.9KB, execution-time: 0:00:02.084399.
                > chunksize|dimsize: [time_bins: 11|11, y: 5|5, x: 5|5], crs: EPSG:4326
        --> (13/24) Compositing `p_air_0` (mean).
            --> Saving `p_air_0` composites.
                > peak-memory-usage: 145.6KB, execution-time: 0:00:02.083647.
                > chunksize|dimsize: [time_bins: 11|11, y: 5|5, x: 5|5], crs: EPSG:4326
        --> (14/24) Compositing `z_oro` (None).
            --> Saving `z_oro` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.070961.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (15/24) Compositing `rn_offset` (None).
            --> Saving `rn_offset` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.070275.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (16/24) Compositing `rn_slope` (None).
            --> Saving `rn_slope` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.063751.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (17/24) Compositing `t_amp_year` (None).
            --> Saving `t_amp_year` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.074677.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (18/24) Compositing `t_opt` (None).
            --> Saving `t_opt` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.070804.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (19/24) Compositing `vpd_slope` (None).
            --> Saving `vpd_slope` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.069015.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (20/24) Compositing `land_mask` (None).
            --> Saving `land_mask` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.070582.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (21/24) Compositing `rs_min` (None).
            --> Saving `rs_min` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.067287.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (22/24) Compositing `z_obst_max` (None).
            --> Saving `z_obst_max` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.067815.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (23/24) Compositing `lw_offset` (None).
            --> Saving `lw_offset` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.075255.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
        --> (24/24) Compositing `lw_slope` (None).
            --> Saving `lw_slope` composites.
                > peak-memory-usage: 20.1MB, execution-time: 0:00:02.075466.
                > chunksize|dimsize: [y: 403|403, x: 493|493], crs: EPSG:4326
    --> Using `S2MSI2A_R60m.nc` as reprojecting example.
        > shape: (1368, 1709), res: 0.0006° x 0.0006°.
    --> Selected `reproject_chunk` for reprojection of p_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.035662.
        --> Saving reprojected data from p_bin.nc:p (bilinear).
            > peak-memory-usage: 981.0MB, execution-time: 0:00:02.362647.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of z_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.124597.
        --> Saving reprojected data from z_bin.nc:z (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.208503.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of t_air_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 6.1KB, execution-time: 0:00:01.018074.
        --> Saving reprojected data from t_air_bin.nc:t_air (bilinear).
            > peak-memory-usage: 945.4MB, execution-time: 0:00:02.482951.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of t_air_min_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.034619.
        --> Saving reprojected data from t_air_min_bin.nc:t_air_min (bilinear).
            > peak-memory-usage: 945.4MB, execution-time: 0:00:02.557140.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of t_air_max_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.027108.
        --> Saving reprojected data from t_air_max_bin.nc:t_air_max (bilinear).
            > peak-memory-usage: 981.0MB, execution-time: 0:00:02.562156.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of u_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.020699.
        --> Saving reprojected data from u_bin.nc:u (bilinear).
            > peak-memory-usage: 945.4MB, execution-time: 0:00:02.482822.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of vp_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.027336.
        --> Saving reprojected data from vp_bin.nc:vp (bilinear).
            > peak-memory-usage: 945.4MB, execution-time: 0:00:02.600753.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of ra_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.024767.
        --> Saving reprojected data from ra_bin.nc:ra (bilinear).
            > peak-memory-usage: 981.0MB, execution-time: 0:00:02.692059.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of p_air_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.005459.
        --> Saving reprojected data from p_air_bin.nc:p_air (bilinear).
            > peak-memory-usage: 981.0MB, execution-time: 0:00:02.456848.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of p_air_0_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.1KB, execution-time: 0:00:01.011270.
        --> Saving reprojected data from p_air_0_bin.nc:p_air_0 (bilinear).
            > peak-memory-usage: 945.4MB, execution-time: 0:00:02.391265.
            > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of z_oro_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.116394.
        --> Saving reprojected data from z_oro_bin.nc:z_oro (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.126187.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of rn_offset_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.116038.
        --> Saving reprojected data from rn_offset_bin.nc:rn_offset (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.141927.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of rn_slope_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.8KB, execution-time: 0:00:00.119163.
        --> Saving reprojected data from rn_slope_bin.nc:rn_slope (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.124527.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of t_amp_year_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.115239.
        --> Saving reprojected data from t_amp_year_bin.nc:t_amp_year (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.127904.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of t_opt_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.118620.
        --> Saving reprojected data from t_opt_bin.nc:t_opt (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.124165.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of vpd_slope_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.9KB, execution-time: 0:00:00.113627.
        --> Saving reprojected data from vpd_slope_bin.nc:vpd_slope (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.121717.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of land_mask_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.114134.
        --> Saving reprojected data from land_mask_bin.nc:land_mask (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.122126.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of rs_min_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.115734.
        --> Saving reprojected data from rs_min_bin.nc:rs_min (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.127927.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of z_obst_max_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 5.5KB, execution-time: 0:00:00.112632.
        --> Saving reprojected data from z_obst_max_bin.nc:z_obst_max (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.121975.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of lw_offset_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.116015.
        --> Saving reprojected data from lw_offset_bin.nc:lw_offset (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.126484.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Selected `reproject_chunk` for reprojection of lw_slope_bin.nc.
        --> Warping VRT to netCDF.
            > peak-memory-usage: 4.8KB, execution-time: 0:00:00.115509.
        --> Saving reprojected data from lw_slope_bin.nc:lw_slope (bilinear).
            > peak-memory-usage: 71.3MB, execution-time: 0:00:02.129717.
            > chunksize|dimsize: [y: 1368|1368, x: 1709|1709], crs: EPSG:4326
    --> Calculating local means (r = 0.25°) of `z`.
    --> Applying 'lapse_rate'.
    --> Applying 'rename_vars'.
    --> Applying 'fill_attrs'.
    --> Applying 'calc_doys'.
    --> Applying 'remove_empty_statics'.
    --> Applying 'add_constants_new'.
    --> Creating merged file `et_look_in.nc`.
        > peak-memory-usage: 497.2MB, execution-time: 0:00:43.138524.
        > chunksize|dimsize: [time_bins: 9|11, y: 1220|1368, x: 1525|1709], crs: EPSG:4326
< PRE_ET_LOOK (2:13:07.188927)

Once you see the output line < PRE_ET_LOOK, the code has finished. The function has created a bunch of files in you project_folder and returned a variables ds. This variable contains a xarray.Dataset. XArray is an Python-package that let’s you work with large multi-dimensional datasets. We can see the file this dataset is stored in like this.

[5]:
fh = ds.encoding["source"]
print(fh)
/Users/hmcoerver/introduction/et_look_in.nc

As you can see, the dataset is stored inside a file called et_look_in.nc, this file contains all the data we need to run the et_look model!

We can have a closer look at the contents of the datasets by simply calling ds like this.

[6]:
ds
[6]:
<xarray.Dataset>
Dimensions:              (time_bins: 11, y: 1368, x: 1709)
Coordinates:
  * x                    (x) float64 30.2 30.2 30.2 30.2 ... 31.2 31.2 31.2 31.2
  * y                    (y) float64 29.7 29.7 29.7 29.7 ... 28.9 28.9 28.9 28.9
    spatial_ref          int64 ...
  * time_bins            (time_bins) datetime64[ns] 2021-07-01 ... 2021-07-11
Data variables: (12/76)
    ndvi                 (time_bins, y, x) float64 dask.array<chunksize=(9, 1220, 1525), meta=np.ndarray>
    r0                   (time_bins, y, x) float64 dask.array<chunksize=(9, 1220, 1525), meta=np.ndarray>
    se_root              (time_bins, y, x) float64 dask.array<chunksize=(9, 1220, 1525), meta=np.ndarray>
    p_24                 (time_bins, y, x) float64 dask.array<chunksize=(9, 1220, 1525), meta=np.ndarray>
    z                    (y, x) float64 dask.array<chunksize=(1368, 1709), meta=np.ndarray>
    t_air_24             (time_bins, y, x) float64 dask.array<chunksize=(9, 1220, 1525), meta=np.ndarray>
    ...                   ...
    o2                   float64 ...
    co2_ref              int64 ...
    gcgdm                float64 ...
    phot_eff             float64 ...
    r0_bare              float64 ...
    r0_full              float64 ...

The output of calling ds is interactive. It contains several parts, at the top you’ll see Dimensions, which gives information about the dimensions of our dataset. In the W-E (or x) direction, the dataset contains 1709 values, while in the S-N (y) direction 1368, i.e. we have 2,337,912 pixels. Finally, there is an time_bins-dimension, which is of size 11.

Then there is a part called Data variables, you might have to click on it to expand its information. Once you do that, you’ll see a list of variables for which the data is stored inside the file specified by fh. After each variable name, you can see it’s dimensions. E.g. ndvi is a 3-dimensional variable, while z is 2-dimensional. To get more information about a variable, you can click on the little ‘paper’-icon at the end of the line. If you look at the info for ndvi for example, you should see that ndvi stands for “Normalized difference vegetation index” and its unit is [-].

Finally, just like geotiff files, this dataset also contains information like it’s coordinate reference system and boundaries. We can access that information like this.

[19]:
print(ds.rio.crs)
print(ds.rio.bounds())
print(ds.rio.resolution())
EPSG:4326
(30.19991077934741, 28.89977044647788, 31.200276867795377, 29.70053159861177)
(0.0005853517193961209, -0.0005853517193961205)

XArray datasets are also easy to plot, for example, we can create a map of z like this (Note that XArray is smart enough to automatically fill in the units and the description of the variable!).

[8]:
ds.z.plot()
[8]:
<matplotlib.collections.QuadMesh at 0x108007710>
../../_images/notebooks_pyWaPOR_introduction_19_1.png

If we want to make a map of a 3-dimensional variable, we’ll have to select for which time (i.e. time_bins) we want to create the map. Here I’m selecting the sixth map, i.e. at index 5.

[10]:
ds.se_root.isel(time_bins = 5).plot()
[10]:
<matplotlib.collections.QuadMesh at 0x17a89bcd0>
../../_images/notebooks_pyWaPOR_introduction_21_1.png

If for some reason you have lost the variable ds (maybe you restarted you computer) and don’t want to run pre_et_look again, you can simply open the file specified by fh like this. (The decode_coords keyword is used to make sure the CRS information is loaded correctly.)

[11]:
import xarray as xr
ds = xr.open_dataset(fh, decode_coords = "all")

Running ETLook

Now that we have created the input file for the model, we can run the model! We simply pass the ds to pywapor.et_look.main().

[12]:
ds_out = pywapor.et_look.main(ds)
> ET_LOOK
    --> Running `et_look` (v2).
    --> Calculating `declination`.
    --> Calculating `inverse_earth_sun_distance`.
    --> Calculating `vegetation_cover`.
    --> Calculating `leaf_area_index`.
    --> Calculating `effective_leaf_area_index`.
    --> Calculating `soil_fraction`.
    --> Calculating `latitude_rad`.
    --> Calculating `sunset_hour_angle`.
    --> Calculating `daily_solar_radiation_toa_flat`.
    --> Calculating `transmissivity`.
    --> Calculating `stress_radiation`.
    --> Calculating `air_pressure_kpa2mbar`.
    --> Calculating `air_pressure_daily`.
    --> Calculating `air_pressure`.
    --> Calculating `saturated_vapour_pressure`.
    --> Calculating `vapour_pressure_deficit_daily`.
    --> Calculating `vapour_pressure_deficit`.
    --> Calculating `stress_vpd`.
    --> Calculating `stress_temperature`.
    --> Calculating `atmospheric_canopy_resistance`.
    --> Calculating `air_temperature_kelvin_daily`.
    --> Calculating `air_temperature_kelvin`.
    --> Calculating `longwave_radiation_fao`.
    --> Calculating `interception_mm`.
    --> Calculating `latent_heat_daily`.
    --> Calculating `latent_heat`.
    --> Calculating `interception_wm2`.
    --> Calculating `net_radiation`.
    --> Calculating `net_radiation_canopy`.
    --> Calculating `stress_moisture`.
    --> Calculating `canopy_resistance`.
    --> Calculating `obstacle_height`.
    --> Calculating `roughness_length`.
    --> Calculating `initial_canopy_aerodynamic_resistance`.
    --> Calculating `wind_speed_blending_height_daily`.
    --> Calculating `wind_speed_blending_height`.
    --> Calculating `dry_air_density_daily`.
    --> Calculating `dry_air_density`.
    --> Calculating `moist_air_density_daily`.
    --> Calculating `moist_air_density`.
    --> Calculating `air_density_daily`.
    --> Calculating `air_density`.
    --> Calculating `psychrometric_constant_daily`.
    --> Calculating `psychrometric_constant`.
    --> Calculating `slope_saturated_vapour_pressure_daily`.
    --> Calculating `slope_saturated_vapour_pressure`.
    --> Calculating `saturated_vapour_pressure`.
    --> Calculating `initial_daily_transpiration`.
    --> Calculating `initial_sensible_heat_flux_canopy_daily`.
    --> Calculating `displacement_height`.
    --> Calculating `initial_friction_velocity_daily`.
    --> Calculating `transpiration`.
    --> Calculating `transpiration_mm`.
    --> Calculating `net_radiation_soil`.
    --> Calculating `soil_resistance`.
    --> Calculating `initial_soil_aerodynamic_resistance`.
    --> Calculating `initial_friction_velocity_soil_daily`.
    --> Calculating `soil_thermal_conductivity`.
    --> Calculating `volumetric_heat_capacity`.
    --> Calculating `damping_depth`.
    --> Calculating `bare_soil_heat_flux`.
    --> Calculating `soil_heat_flux`.
    --> Calculating `initial_daily_evaporation`.
    --> Calculating `initial_sensible_heat_flux_soil_daily`.
    --> Calculating `evaporation`.
    --> Calculating `evaporation_mm`.
    --> Calculating `et_actual_mm`.
    --> Calculating `net_radiation_grass`.
    --> Calculating `et_reference`.
    --> Calculating `et_reference_mm`.
    --> Calculating `air_temperature_kelvin_daily`.
    --> Calculating `air_temperature_kelvin`.
    --> Calculating `air_temperature_kelvin_daily`.
    --> Calculating `air_temperature_kelvin`.
    --> Calculating `mean_temperature_kelvin_daytime`.
    --> Calculating `temperature_dependency`.
    --> Calculating `affinity_constant_co2`.
    --> Calculating `inhibition_constant_o2`.
    --> Calculating `co2_o2_specificity_ratio`.
    --> Calculating `co2_level_annual`.
    --> Calculating `autotrophic_respiration`.
    --> Calculating `par`.
    --> Calculating `fpar`.
    --> Calculating `co2_fertilisation`.
    --> Calculating `net_primary_production_max`.
    --> Calculating `net_primary_production`.
    --> Saving output to `et_look_out.nc`.
        > peak-memory-usage: 4.5GB, execution-time: 0:02:38.703771.
        > chunksize|dimsize: [time_bins: 1|11, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
< ET_LOOK (0:35:00.085361)

Again, we can see a new netCDF file has been created.

[13]:
fh_out = ds_out.encoding["source"]
print(fh_out)
/Users/hmcoerver/introduction/et_look_out.nc

And we can check the contents of the new dataset just like we did before.

[14]:
ds_out
[14]:
<xarray.Dataset>
Dimensions:       (time_bins: 11, y: 1368, x: 1709)
Coordinates:
  * x             (x) float64 30.2 30.2 30.2 30.2 30.2 ... 31.2 31.2 31.2 31.2
  * y             (y) float64 29.7 29.7 29.7 29.7 29.7 ... 28.9 28.9 28.9 28.9
    spatial_ref   int64 ...
  * time_bins     (time_bins) datetime64[ns] 2021-07-01 ... 2021-07-11
Data variables:
    int_mm        (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>
    t_24_mm       (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>
    e_24_mm       (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>
    et_24_mm      (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>
    et_ref_24_mm  (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>
    se_root       (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>
    npp           (time_bins, y, x) float64 dask.array<chunksize=(1, 1000, 1000), meta=np.ndarray>

As you can see, the Dimensions and Attributes parts are the same. The Data variables however, now contain our output variables. We can plot them in the same way as we did with the input dataset or create a dekadal composite like this.

[22]:
ds_out.et_24_mm.mean(dim = "time_bins").plot()
[22]:
<matplotlib.collections.QuadMesh at 0x2aaffd810>
../../_images/notebooks_pyWaPOR_introduction_31_1.png

If you want to do some calulcations with the data, you can get easily get a numpy-array (e.g. for et_24_mm). Note that this loads the array into you working memory.

[23]:
import numpy as np

et_data = ds_out.et_24_mm.isel(time_bins = 5).values

print("resolution:", et_data.shape)
print("total pixels:", et_data.size)
print("number of pixels with missing data:", np.sum(np.isnan(et_data)))
print("maximum value: {0:.2f}".format(np.nanmax(et_data)))
print("minimum value: {0:.2f}".format(np.nanmin(et_data)))
print("mean: {0:.2f}".format(np.nanmean(et_data)))
print("median: {0:.2f}".format(np.nanmedian(et_data)))
resolution: (1368, 1709)
total pixels: 2337912
number of pixels with missing data: 308069
maximum value: 11.45
minimum value: 0.00
mean: 2.07
median: 0.07

As we could see, the output dataset only contained 6 variables. If you’d want to output all the variables that ET_Look calculated however, you could run pywapor.et_look.main like this.

[17]:
ds_out_all = pywapor.et_look.main(fh, export_vars = "all")
> ET_LOOK
    --> Running `et_look` (v2).
    --> Calculating `declination`.
    --> Calculating `inverse_earth_sun_distance`.
    --> Calculating `vegetation_cover`.
    --> Calculating `leaf_area_index`.
    --> Calculating `effective_leaf_area_index`.
    --> Calculating `soil_fraction`.
    --> Calculating `latitude_rad`.
    --> Calculating `sunset_hour_angle`.
    --> Calculating `daily_solar_radiation_toa_flat`.
    --> Calculating `transmissivity`.
    --> Calculating `stress_radiation`.
    --> Calculating `air_pressure_kpa2mbar`.
    --> Calculating `air_pressure_daily`.
    --> Calculating `air_pressure`.
    --> Calculating `saturated_vapour_pressure`.
    --> Calculating `vapour_pressure_deficit_daily`.
    --> Calculating `vapour_pressure_deficit`.
    --> Calculating `stress_vpd`.
    --> Calculating `stress_temperature`.
    --> Calculating `atmospheric_canopy_resistance`.
    --> Calculating `air_temperature_kelvin_daily`.
    --> Calculating `air_temperature_kelvin`.
    --> Calculating `longwave_radiation_fao`.
    --> Calculating `interception_mm`.
    --> Calculating `latent_heat_daily`.
    --> Calculating `latent_heat`.
    --> Calculating `interception_wm2`.
    --> Calculating `net_radiation`.
    --> Calculating `net_radiation_canopy`.
    --> Calculating `stress_moisture`.
    --> Calculating `canopy_resistance`.
    --> Calculating `obstacle_height`.
    --> Calculating `roughness_length`.
    --> Calculating `initial_canopy_aerodynamic_resistance`.
    --> Calculating `wind_speed_blending_height_daily`.
    --> Calculating `wind_speed_blending_height`.
    --> Calculating `dry_air_density_daily`.
    --> Calculating `dry_air_density`.
    --> Calculating `moist_air_density_daily`.
    --> Calculating `moist_air_density`.
    --> Calculating `air_density_daily`.
    --> Calculating `air_density`.
    --> Calculating `psychrometric_constant_daily`.
    --> Calculating `psychrometric_constant`.
    --> Calculating `slope_saturated_vapour_pressure_daily`.
    --> Calculating `slope_saturated_vapour_pressure`.
    --> Calculating `saturated_vapour_pressure`.
    --> Calculating `initial_daily_transpiration`.
    --> Calculating `initial_sensible_heat_flux_canopy_daily`.
    --> Calculating `displacement_height`.
    --> Calculating `initial_friction_velocity_daily`.
    --> Calculating `transpiration`.
    --> Calculating `transpiration_mm`.
    --> Calculating `net_radiation_soil`.
    --> Calculating `soil_resistance`.
    --> Calculating `initial_soil_aerodynamic_resistance`.
    --> Calculating `initial_friction_velocity_soil_daily`.
    --> Calculating `soil_thermal_conductivity`.
    --> Calculating `volumetric_heat_capacity`.
    --> Calculating `damping_depth`.
    --> Calculating `bare_soil_heat_flux`.
    --> Calculating `soil_heat_flux`.
    --> Calculating `initial_daily_evaporation`.
    --> Calculating `initial_sensible_heat_flux_soil_daily`.
    --> Calculating `evaporation`.
    --> Calculating `evaporation_mm`.
    --> Calculating `et_actual_mm`.
    --> Calculating `net_radiation_grass`.
    --> Calculating `et_reference`.
    --> Calculating `et_reference_mm`.
    --> Calculating `air_temperature_kelvin_daily`.
    --> Calculating `air_temperature_kelvin`.
    --> Calculating `air_temperature_kelvin_daily`.
    --> Calculating `air_temperature_kelvin`.
    --> Calculating `mean_temperature_kelvin_daytime`.
    --> Calculating `temperature_dependency`.
    --> Calculating `affinity_constant_co2`.
    --> Calculating `inhibition_constant_o2`.
    --> Calculating `co2_o2_specificity_ratio`.
    --> Calculating `co2_level_annual`.
    --> Calculating `autotrophic_respiration`.
    --> Calculating `par`.
    --> Calculating `fpar`.
    --> Calculating `co2_fertilisation`.
    --> Calculating `net_primary_production_max`.
    --> Calculating `net_primary_production`.
    --> Saving output to `et_look_out.nc`.
/Users/hmcoerver/miniconda3/envs/pywapor_343/lib/python3.11/site-packages/dask/array/chunk.py:278: RuntimeWarning: invalid value encountered in cast
  return x.astype(astype_dtype, **kwargs)
        > peak-memory-usage: 3.9GB, execution-time: 0:04:08.561319.
        > chunksize|dimsize: [time_bins: 1|11, y: 1000|1368, x: 1000|1709], crs: EPSG:4326
< ET_LOOK (0:36:29.389829)

Now ds_out_all contains all the variables calculated by ET_Look.

[18]:
list(ds_out_all.data_vars)
[18]:
['ndvi',
 'r0',
 'se_root',
 'p_24',
 'z',
 't_air_24',
 't_air_min_24',
 't_air_max_24',
 'u_24',
 'vp_24',
 'ra_24',
 'p_air_24',
 'p_air_0_24',
 'z_oro',
 'rn_offset',
 'rn_slope',
 't_amp_year',
 't_opt',
 'vpd_slope',
 'land_mask',
 'rs_min',
 'z_obst_max',
 'lw_offset',
 'lw_slope',
 't_diff',
 'doy',
 'nd_min',
 'nd_max',
 'vc_pow',
 'vc_min',
 'vc_max',
 'lai_pow',
 'diffusion_slope',
 'diffusion_intercept',
 't_min',
 't_max',
 'vp_slope',
 'vp_offset',
 'int_max',
 'tenacity',
 'rcan_max',
 'ndvi_obs_min',
 'ndvi_obs_max',
 'obs_fr',
 'z_obs',
 'z_b',
 'c1',
 'iter_h',
 'r_soil_pow',
 'r_soil_min',
 'se_top',
 'porosity',
 'r0_grass',
 'eps_a',
 'z0m_full',
 'z0m_bare',
 'aod550_i',
 'fraction_h_bare',
 'fraction_h_full',
 'disp_bare',
 'disp_full',
 'r0_bare_wet',
 'IO',
 'dh_ap',
 'd_s',
 'dh_dp',
 'ar_slo',
 'ar_int',
 'fpar_slope',
 'fpar_offset',
 'o2',
 'co2_ref',
 'gcgdm',
 'phot_eff',
 'r0_bare',
 'r0_full',
 'ad_24',
 'ad_dry_24',
 'ad_moist_24',
 'dd',
 'decl',
 'disp',
 'e_24',
 'e_24_init',
 'e_24_mm',
 'et_24_mm',
 'et_ref_24',
 'et_ref_24_mm',
 'g0_24',
 'g0_bs',
 'h_canopy_24_init',
 'h_soil_24_init',
 'iesd',
 'int_mm',
 'int_wm2',
 'l_net',
 'lai',
 'lai_eff',
 'lat_rad',
 'lh_24',
 'npp',
 'apar',
 'p_air_0_24_mbar',
 'psy_24',
 'r_canopy',
 'r_canopy_0',
 'r_soil',
 'ra_24_toa_flat',
 'ra_canopy_init',
 'ra_soil_init',
 'rn_24',
 'rn_24_canopy',
 'rn_24_grass',
 'rn_24_soil',
 'sf_soil',
 'ssvp_24',
 'stc',
 'stress_moist',
 'stress_rad',
 'stress_temp',
 'stress_vpd',
 'svp_24',
 't_24',
 't_24_init',
 't_24_mm',
 't_air_k_24',
 'trans_24',
 'u_b_24',
 'u_star_24_init',
 'u_star_24_soil_init',
 'vc',
 'vhc',
 'vpd_24',
 'ws',
 'z0m',
 'z_obst',
 'tau_co2_o2',
 'year',
 't_air_k_min',
 't_air_k_max',
 't_air_k_12',
 't_dep',
 'k_m',
 'k_0',
 'npp_max',
 'co2_fert',
 'f_par',
 'a_d',
 'co2_act']