Repository: British-Oceanographic-Data-Centre/COAsT (language: python)

Issue:
Feature/actions chart

Map out all git actions across the cost and cost-site repo
This should be a flow diagram of how the actions are triggered which branches are used and how they interact across the two repo - cost and coast-site. 



Discussion / hints:

Fix patch:
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..7b36f5a4
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,33 @@
+# Note: keep .gitignore and .dockerignore in sync
+
+# PyCharm
+.idea/
+
+# VSCode
+.vscode/
+.env
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+
+# Distribution / packaging
+build/
+dist/
+public/
+*.egg-info/
+.eggs/
+docs/source/generated
+
+# Unit test / coverage reports
+.tox/
+.coverage
+coverage.xml
+junit.xml
+
+# To ensure tests are not included in the distribution
+# prohibit including an __init__.py
+#/tests/__init__.py
+
+# Environments
+venv/
\ No newline at end of file
diff --git a/.github/workflows/push_docstrings.yml b/.github/workflows/push_docstrings.yml
new file mode 100644
index 00000000..8885f680
--- /dev/null
+++ b/.github/workflows/push_docstrings.yml
@@ -0,0 +1,21 @@
+name: push_docstrings
+
+on:
+  push:
+    branches: master
+    paths:
+      - coast/data/**
+      - coast/_utils/**
+      - coast/diagnostics/**
+jobs:
+  push-docstrings:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Repository Dispatch
+        uses: peter-evans/repository-dispatch@v2
+        with:
+          token: ${{ secrets.COAST_SITE_TOKEN }}
+          repository: British-Oceanographic-Data-Centre/COAsT-site
+          event-type: push-docstring
+          client-payload: '{"deploy_docstring":true}'
+
diff --git a/.github/workflows/push_notebooks.yml b/.github/workflows/push_notebooks.yml
new file mode 100644
index 00000000..cbdaf8e7
--- /dev/null
+++ b/.github/workflows/push_notebooks.yml
@@ -0,0 +1,18 @@
+name: push_notebooks
+
+on:
+  push:
+    branches: master
+    paths:
+      - example_scripts/notebooks/**
+jobs:
+  push-notebooks:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Repository Dispatch
+        uses: peter-evans/repository-dispatch@v2
+        with:
+          token: ${{ secrets.COAST_SITE_TOKEN }}
+          repository: British-Oceanographic-Data-Centre/COAsT-site
+          event-type: push-notebook
+          client-payload: '{"deploy_notebook":true}'
diff --git a/.gitignore b/.gitignore
index b3d96b34..2398bfbe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,11 @@ sandbox.py
 config/nemo_tst_gridded.json
 .coverage
 unit_testing/coverage.txt
+
+docs/source/generated/
+
+docstring2md.log
+
+example_scripts/notebooks/markdown/*
+
+markdown/
diff --git a/CITATION.cff b/CITATION.cff
index 7f0dce23..28122dfe 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -22,8 +22,10 @@ authors:
    orcid: "https://orcid.org/0000-0002-2357-4838"
  - family-names: "Gardner"
    given-names: "Thomas"
+   orcid: "https://orcid.org/0000-0001-5452-5791"
  - family-names: "Cazaly"
    given-names: "Matthew"
+   orcid: "https://orcid.org/0000-0002-0679-4054"
  - family-names: "Hearn"
    given-names: "Malcolm"
  - family-names: "Jennings"
@@ -32,6 +34,8 @@ authors:
    given-names: "Quyen"
  - family-names: "Loch"
    given-names: "Stephen"
+ - family-names: "Gorman"
+   given-names: "Luke"
 title: "British-Oceanographic-Data-Centre/COAsT: v2.0.3"
 version: v2.0.3
 date-released: 2022-04-08
\ No newline at end of file
diff --git a/base.Dockerfile b/base.Dockerfile
new file mode 100644
index 00000000..491d00fc
--- /dev/null
+++ b/base.Dockerfile
@@ -0,0 +1,6 @@
+FROM docker-repo.bodc.me/bodc/conda:latest
+
+RUN /home/bodc/miniconda3/bin/conda install -c conda-forge gcc
+
+ADD requirements.txt requirements.txt
+RUN pip install -r requirements.txt
diff --git a/coast/__init__.py b/coast/__init__.py
index f66d94a4..c8955bf0 100644
--- a/coast/__init__.py
+++ b/coast/__init__.py
@@ -1,31 +1,29 @@
-from .coast import Coast
-from .coast import setup_dask_client
-from .mask_maker import MaskMaker
-from .gridded import Gridded
-from .transect import Transect, TransectF, TransectT
-from .contour import Contour, ContourF, ContourT
-from .eof import compute_eofs, compute_hilbert_eofs
-from .internal_tide import InternalTide
-from .climatology import Climatology
-from . import logging_util
-from . import general_utils
-from . import plot_util
-from . import crps_util
-from .index import Indexed
-from .profile import Profile
-from .profile_analysis import ProfileAnalysis
-from .track import Track
-from .lagrangian import Lagrangian
-from .oceanparcels import Oceanparcels
-from .glider import Glider
-from .argos import Argos
-from .altimetry import Altimetry
-from .timeseries import Timeseries
-from .tidegauge import Tidegauge
-from .tidegauge_analysis import TidegaugeAnalysis
-from .config_parser import ConfigParser
-from .xesmf_convert import xesmf_convert
-from .process_data import Process_data
+from .data.coast import Coast, setup_dask_client
+from ._utils.mask_maker import MaskMaker
+from .data.gridded import Gridded
+from .diagnostics.transect import Transect, TransectF, TransectT
+from .diagnostics.contour import Contour, ContourF, ContourT
+from .diagnostics.eof import compute_eofs, compute_hilbert_eofs
+from .diagnostics.internal_tide import InternalTide
+from .diagnostics.climatology import Climatology
+from ._utils import logging_util, general_utils, plot_util, crps_util
+from .data.index import Indexed
+from .data.profile import Profile
+from .diagnostics.profile_analysis import ProfileAnalysis
+from .data.track import Track
+from .data.lagrangian import Lagrangian
+from .data.oceanparcels import Oceanparcels
+from .data.glider import Glider
+from .data.argos import Argos
+from .data.altimetry import Altimetry
+from .data.timeseries import Timeseries
+from .data.tidegauge import Tidegauge
+from .diagnostics.tidegauge_analysis import TidegaugeAnalysis
+from .data.config_parser import ConfigParser
+from ._utils.xesmf_convert import xesmf_convert
+from ._utils.process_data import Process_data
+from .data.opendap import OpendapInfo
+from .data.copernicus import Copernicus, Product
 
 # Set default for logging level when coast is imported
 import logging
diff --git a/coast/_utils/__init__.py b/coast/_utils/__init__.py
new file mode 100644
index 00000000..2f30e732
--- /dev/null
+++ b/coast/_utils/__init__.py
@@ -0,0 +1,1 @@
+"""Common utils subpackage."""
diff --git a/coast/crps_util.py b/coast/_utils/crps_util.py
old mode 100755
new mode 100644
similarity index 100%
rename from coast/crps_util.py
rename to coast/_utils/crps_util.py
diff --git a/coast/docsy_tools.py b/coast/_utils/docsy_tools.py
similarity index 98%
rename from coast/docsy_tools.py
rename to coast/_utils/docsy_tools.py
index 788432c5..18e7fcdc 100644
--- a/coast/docsy_tools.py
+++ b/coast/_utils/docsy_tools.py
@@ -1,3 +1,6 @@
+"""A class to help with writting markdown."""
+
+
 class DocsyTools:  # TODO All abstract methods should be implemented
     """ """
 
diff --git a/coast/general_utils.py b/coast/_utils/general_utils.py
old mode 100755
new mode 100644
similarity index 99%
rename from coast/general_utils.py
rename to coast/_utils/general_utils.py
index 7b40e974..5a167903
--- a/coast/general_utils.py
+++ b/coast/_utils/general_utils.py
@@ -1,3 +1,4 @@
+"""A general utility file."""
 import xarray as xr
 import numpy as np
 import sklearn.neighbors as nb
diff --git a/coast/logging_util.py b/coast/_utils/logging_util.py
similarity index 98%
rename from coast/logging_util.py
rename to coast/_utils/logging_util.py
index 296c22e2..fe4549c4 100644
--- a/coast/logging_util.py
+++ b/coast/_utils/logging_util.py
@@ -1,3 +1,4 @@
+"""A logging unilty file"""
 import logging
 import sys
 import io
diff --git a/coast/mask_maker.py b/coast/_utils/mask_maker.py
similarity index 99%
rename from coast/mask_maker.py
rename to coast/_utils/mask_maker.py
index dc3a4b51..8eb60a30 100644
--- a/coast/mask_maker.py
+++ b/coast/_utils/mask_maker.py
@@ -1,3 +1,4 @@
+"""Mask maker"""
 import xarray as xr
 import numpy as np
 import skimage.draw as draw
diff --git a/coast/plot_util.py b/coast/_utils/plot_util.py
old mode 100755
new mode 100644
similarity index 100%
rename from coast/plot_util.py
rename to coast/_utils/plot_util.py
diff --git a/coast/process_data.py b/coast/_utils/process_data.py
similarity index 99%
rename from coast/process_data.py
rename to coast/_utils/process_data.py
index 7f755025..ece68cf8 100644
--- a/coast/process_data.py
+++ b/coast/_utils/process_data.py
@@ -1,4 +1,4 @@
-from .gridded import Gridded
+from ..data.gridded import Gridded
 from .logging_util import info, warn, error
 import dask.array as da
 from dask import delayed
diff --git a/coast/seasons.py b/coast/_utils/seasons.py
similarity index 100%
rename from coast/seasons.py
rename to coast/_utils/seasons.py
diff --git a/coast/stats_util.py b/coast/_utils/stats_util.py
old mode 100755
new mode 100644
similarity index 100%
rename from coast/stats_util.py
rename to coast/_utils/stats_util.py
diff --git a/coast/xesmf_convert.py b/coast/_utils/xesmf_convert.py
similarity index 98%
rename from coast/xesmf_convert.py
rename to coast/_utils/xesmf_convert.py
index 30d9ea9f..fa1fa04a 100644
--- a/coast/xesmf_convert.py
+++ b/coast/_utils/xesmf_convert.py
@@ -1,6 +1,7 @@
+"""A class to convert from coast gridded to xesmf."""
 import os.path as path_lib
 import warnings
-from coast import Gridded
+from ..data.gridded import Gridded
 
 # from dask import delayed, compute, visualize
 # import graphviz
diff --git a/coast/data/__init__.py b/coast/data/__init__.py
new file mode 100644
index 00000000..56977072
--- /dev/null
+++ b/coast/data/__init__.py
@@ -0,0 +1,1 @@
+"""Core data subpackage."""
diff --git a/coast/altimetry.py b/coast/data/altimetry.py
similarity index 99%
rename from coast/altimetry.py
rename to coast/data/altimetry.py
index 59a9120f..f9298f6d 100644
--- a/coast/altimetry.py
+++ b/coast/data/altimetry.py
@@ -3,8 +3,8 @@
 import numpy as np
 import xarray as xr
 import sklearn.metrics as metrics
-from . import general_utils, plot_util, crps_util
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils import general_utils, plot_util, crps_util
+from .._utils.logging_util import get_slug, debug, info, warn, warning
 from typing import Union
 from pathlib import Path
 
diff --git a/coast/argos.py b/coast/data/argos.py
similarity index 96%
rename from coast/argos.py
rename to coast/data/argos.py
index 3f55110d..f29c1fb1 100644
--- a/coast/argos.py
+++ b/coast/data/argos.py
@@ -3,7 +3,7 @@
 import numpy as np
 import xarray as xr
 import pandas as pd
-from .logging_util import get_slug, debug
+from .._utils.logging_util import get_slug, debug
 from typing import Union
 from pathlib import Path
 
diff --git a/coast/coast.py b/coast/data/coast.py
similarity index 94%
rename from coast/coast.py
rename to coast/data/coast.py
index d3e3bdd8..63d81e3a 100644
--- a/coast/coast.py
+++ b/coast/data/coast.py
@@ -1,9 +1,11 @@
+"""The coast class is the main access point into this package."""
 from dask import array
 import xarray as xr
 import numpy as np
 from dask.distributed import Client
 import copy
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils.logging_util import get_slug, debug, info, warn, warning
+from .opendap import OpendapInfo
 
 
 def setup_dask_client(workers: int = 2, threads: int = 2, memory_limit_per_worker: str = "2GB"):
@@ -15,11 +17,23 @@ def __init__(
         self,
         file: str = None,
         chunks: dict = None,
-        multiple=False,
+        multiple: bool = False,
         workers: int = 2,  # TODO Do something with this unused parameter or delete it
         threads: int = 2,  # TODO Do something with this unused parameter or delete it
         memory_limit_per_worker: str = "2GB",  # TODO Do something with this unused parameter or delete it
     ):
+        """This is the constructor method.
+
+        This is the access point into the COAsT class. From here all the magic happens.
+
+        Args:
+            file:
+            chunks: how/where to break up the data when reading it in
+            multiple:
+            workers: optional Dask related input
+            threads: optional Dask related input
+            memory_limit_per_worker: optional Dask related input
+        """
         debug(f"Creating a new {get_slug(self)}")
         self.dataset = None
         self.earth_raids = 6371.007176  # Radius of the earth in km TODO Could this be module-level?
@@ -44,12 +58,16 @@ def load(self, file_or_dir, chunks: dict = None, multiple=False):
         Loads a file into a COAsT object's dataset variable using xarray
 
         Args:
-            file_or_dir (str)     : file name or directory to multiple files.
-            chunks (dict)  : Chunks to use in Dask [default None]
+            file_or_dir (str): file name, OPeNDAP accessor, or directory to multiple files.
+            chunks (dict): Chunks to use in Dask [default None]
             multiple (bool): If true, load in multiple files from directory.
                              If false load a single file [default False]
         """
-        if multiple:
+        if (opendap := isinstance(file_or_dir, OpendapInfo)) and multiple:
+            raise NotImplementedError("Loading multiple OPeNDAP datasets is not supported")
+        elif opendap:
+            self.load_dataset(file_or_dir.open_dataset(chunks=chunks))
+        elif multiple:
             self.load_multiple(file_or_dir, chunks)
         else:
             self.load_single(file_or_dir, chunks)
diff --git a/coast/config_parser.py b/coast/data/config_parser.py
similarity index 100%
rename from coast/config_parser.py
rename to coast/data/config_parser.py
diff --git a/coast/config_structure.py b/coast/data/config_structure.py
similarity index 100%
rename from coast/config_structure.py
rename to coast/data/config_structure.py
diff --git a/coast/data/copernicus.py b/coast/data/copernicus.py
new file mode 100644
index 00000000..3b7121d5
--- /dev/null
+++ b/coast/data/copernicus.py
@@ -0,0 +1,64 @@
+"""Functionality for accessing Copernicus datasets via OPeNDAP."""
+
+from dataclasses import dataclass
+from .opendap import OpendapInfo
+
+
+COPERNICUS_CAS = "https://cmems-cas.cls.fr/cas/login"
+COPERNICUS_URL = "https://{}.cmems-du.eu/thredds/dodsC/{}"
+
+
+@dataclass
+class CopernicusBase:
+    """Information required for accessing Copernicus datasets via OPeNDAP."""
+
+    username: str
+    password: str
+    database: str
+    cas_url: str = COPERNICUS_CAS
+    url_template: str = COPERNICUS_URL
+
+    def get_url(self, product_id: str):
+        """Get the URL required to access a Copernicus OPeNDAP dataset.
+
+        Args:
+            product_id: The product ID belonging to the chosen dataset.
+
+        Returns:
+            The constructed URL.
+        """
+        return self.url_template.format(self.database, product_id)
+
+
+class Product(OpendapInfo):
+    """Information required to access and stream data from a Copernicus product."""
+
+    @classmethod
+    def from_copernicus(cls, product_id: str, copernicus: CopernicusBase) -> "Product":
+        """Instantiate a Product using Copernicus information and a specific product ID.
+
+        Args:
+            product_id: The product ID of the chosen Copernicus OPeNDAP dataset.
+            copernicus: A previously instantiated Copernicus info object.
+
+        Returns:
+            An instantiated Product accessor.
+        """
+        return cls.from_cas(
+            copernicus.get_url(product_id), copernicus.cas_url, copernicus.username, copernicus.password
+        )
+
+
+class Copernicus(CopernicusBase):
+    """An object for accessing Copernicus products via OPeNDAP."""
+
+    def get_product(self, product_id: str) -> Product:
+        """Instantiate a Product related to a specific product ID.
+
+        Args:
+            product_id: The product ID of the chosen Copernicus OPeNDAP dataset.
+
+        Returns:
+            The instantiated Product accessor.
+        """
+        return Product.from_copernicus(product_id, self)
diff --git a/coast/glider.py b/coast/data/glider.py
similarity index 94%
rename from coast/glider.py
rename to coast/data/glider.py
index f5ae63dc..2c20ff40 100644
--- a/coast/glider.py
+++ b/coast/data/glider.py
@@ -1,7 +1,7 @@
 """Glider class"""
 from .index import Indexed
 import xarray as xr
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils.logging_util import get_slug, debug, info, warn, warning
 from typing import Union
 from pathlib import Path
 
diff --git a/coast/gridded.py b/coast/data/gridded.py
similarity index 96%
rename from coast/gridded.py
rename to coast/data/gridded.py
index 6b9f86bb..08c0f556 100644
--- a/coast/gridded.py
+++ b/coast/data/gridded.py
@@ -1,3 +1,4 @@
+"""Gridded class"""
 import os.path as path_lib
 import warnings
 
@@ -7,12 +8,10 @@
 import numpy as np
 import xarray as xr
 
-from . import general_utils, stats_util
+from .._utils import general_utils, stats_util
 from .coast import Coast
 from .config_parser import ConfigParser
-from .logging_util import get_slug, debug, info, warn, error, warning
-from . import logging_util
-import logging
+from .._utils.logging_util import get_slug, debug, info, warn, error, warning
 import pandas as pd
 
 
@@ -246,7 +245,7 @@ def set_timezero_depths(self, dataset_domain):
             error(err)
 
     # Add subset method to NEMO class
-    def subset_indices(self, start: tuple, end: tuple) -> tuple:
+    def subset_indices(self, *, start: tuple, end: tuple) -> tuple:
         """
         based on transect_indices, this method looks to return all indices between the given points.
         This results in a 'box' (Quadrilateral) of indices.
@@ -256,15 +255,15 @@ def subset_indices(self, start: tuple, end: tuple) -> tuple:
         :return: list of y indices, list of x indices,
         """
         debug(f"Subsetting {get_slug(self)} indices from {start} to {end}")
-        [j1, i1] = self.find_j_i(start[0], start[1])  # lat , lon
-        [j2, i2] = self.find_j_i(end[0], end[1])  # lat , lon
+        [j1, i1] = self.find_j_i(lat=start[0], lon=start[1])  # lat , lon
+        [j2, i2] = self.find_j_i(lat=end[0], lon=end[1])  # lat , lon
 
         return list(np.arange(j1, j2 + 1)), list(np.arange(i1, i2 + 1))
 
-    def find_j_i(self, lat: float, lon: float):
+    def find_j_i(self, *, lat: float, lon: float):
         """
         A routine to find the nearest y x coordinates for a given latitude and longitude
-        Usage: [y,x] = find_j_i(49, -12)
+        Usage: [y,x] = find_j_i(lat=49, lon=-12)
 
         :param lat: latitude
         :param lon: longitude
@@ -275,16 +274,15 @@ def find_j_i(self, lat: float, lon: float):
         [y, x] = np.unravel_index(dist2.argmin(), dist2.shape)
         return [y, x]
 
-    def find_j_i_domain(self, lat: float, lon: float, dataset_domain: xr.DataArray):
-        # TODO add dataset_domain to docstring and remove nonexistent grid_ref
+    def find_j_i_domain(self, *, lat: float, lon: float, dataset_domain: xr.DataArray):
         """
         A routine to find the nearest y x coordinates for a given latitude and longitude
-        Usage: [y,x] = find_j_i(49, -12, dataset_domain)
+        Usage: [y,x] = find_j_i_domain(lat=49, lon=-12, dataset_domain=dataset_domain)
 
         :param lat: latitude
         :param lon: longitude
-        :param grid_ref: the gphi/glam version a user wishes to search over
-        :return: the y and x coordinates for the given grid_ref variable within the domain file
+        :param dataset_domain: dataset domain
+        :return: the y and x coordinates for the grid_ref variable within the domain file
         """
         debug(f"Finding j,i domain for {lat},{lon} from {get_slug(self)} using {get_slug(dataset_domain)}")
         internal_lat = dataset_domain[self.grid_vars[1]]  # [f"gphi{self.grid_ref.replace('-grid','')}"]
@@ -303,8 +301,8 @@ def transect_indices(self, start: tuple, end: tuple) -> tuple:
         :return: array of y indices, array of x indices, number of indices in transect
         """
         debug(f"Fetching transect indices for {start} to {end} from {get_slug(self)}")
-        [j1, i1] = self.find_j_i(start[0], start[1])  # lat , lon
-        [j2, i2] = self.find_j_i(end[0], end[1])  # lat , lon
+        [j1, i1] = self.find_j_i(lat=start[0], lon=start[1])  # lat , lon
+        [j2, i2] = self.find_j_i(lat=end[0], lon=end[1])  # lat , lon
 
         line_length = max(np.abs(j2 - j1), np.abs(i2 - i1)) + 1
 
@@ -489,8 +487,12 @@ def trim_domain_size(self, dataset_domain):
             )
 
             # Find the corners of the cut out domain.
-            [j0, i0] = self.find_j_i_domain(self.dataset.nav_lat[0, 0], self.dataset.nav_lon[0, 0], dataset_domain)
-            [j1, i1] = self.find_j_i_domain(self.dataset.nav_lat[-1, -1], self.dataset.nav_lon[-1, -1], dataset_domain)
+            [j0, i0] = self.find_j_i_domain(
+                lat=self.dataset.nav_lat[0, 0], lon=self.dataset.nav_lon[0, 0], dataset_domain=dataset_domain
+            )
+            [j1, i1] = self.find_j_i_domain(
+                lat=self.dataset.nav_lat[-1, -1], lon=self.dataset.nav_lon[-1, -1], dataset_domain=dataset_domain
+            )
 
             dataset_subdomain = dataset_domain.isel(y_dim=slice(j0, j1 + 1), x_dim=slice(i0, i1 + 1))
             return dataset_subdomain
diff --git a/coast/index.py b/coast/data/index.py
similarity index 97%
rename from coast/index.py
rename to coast/data/index.py
index e30b3d86..8d71e40d 100644
--- a/coast/index.py
+++ b/coast/data/index.py
@@ -1,7 +1,7 @@
 """Index class."""
 from dask import array
 from dask.distributed import Client
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils.logging_util import get_slug, debug, info, warn, warning
 from typing import Union
 from pathlib import Path
 from ast import literal_eval
diff --git a/coast/lagrangian.py b/coast/data/lagrangian.py
similarity index 100%
rename from coast/lagrangian.py
rename to coast/data/lagrangian.py
diff --git a/coast/oceanparcels.py b/coast/data/oceanparcels.py
similarity index 94%
rename from coast/oceanparcels.py
rename to coast/data/oceanparcels.py
index b81cf5a4..258794f7 100644
--- a/coast/oceanparcels.py
+++ b/coast/data/oceanparcels.py
@@ -1,7 +1,7 @@
 """Oceanparcels class for reading ocean parcels data."""
 from .lagrangian import Lagrangian
 import xarray as xr
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils.logging_util import get_slug, debug, info, warn, warning
 from typing import Union
 from pathlib import Path
 
diff --git a/coast/data/opendap.py b/coast/data/opendap.py
new file mode 100644
index 00000000..ac8138b5
--- /dev/null
+++ b/coast/data/opendap.py
@@ -0,0 +1,57 @@
+"""Functionality for accessing OPeNDAP datasets."""
+
+from dataclasses import dataclass
+from typing import Optional
+from xarray.backends import PydapDataStore
+from xarray import Dataset, open_dataset
+from pydap.client import open_url
+from pydap.cas.get_cookies import setup_session
+import requests
+
+
+CASTGC = "CASTGC"
+
+
+@dataclass
+class OpendapInfo:
+    """A class for accessing streamable OPeNDAP data."""
+
+    url: str
+    session: Optional[requests.Session] = None
+
+    def get_store(self) -> PydapDataStore:
+        """Access an OPeNDAP data store.
+
+        Returns:
+            The OPeNDAP data store accessed from the instance's URL.
+        """
+        return PydapDataStore(open_url(self.url, session=self.session))
+
+    def open_dataset(self, chunks: Optional[dict] = None) -> Dataset:
+        """Open the remote XArray dataset for streaming.
+
+        Args:
+            chunks: Chunks to use in Dask.
+
+        Returns:
+            The opened XArray dataset.
+        """
+        with open_dataset(self.get_store(), chunks=chunks) as dataset:
+            return dataset
+
+    @classmethod
+    def from_cas(cls, url: str, cas_url: str, username: str, password: str) -> "OpendapInfo":
+        """Instantiate OpendapInfo with a session authenticated against CAS.
+
+        Args:
+            url: The OPeNDAP dataset URL.
+            cas_url: The CAS login URL.
+            username: The username to authenticate with.
+            password: The password to authenticate with.
+
+        Returns:
+            The instantiated OPeNDAP accessor.
+        """
+        session = setup_session(cas_url, username, password)
+        session.cookies.set(CASTGC, session.cookies.get_dict()[CASTGC])
+        return cls(url, session)
diff --git a/coast/profile.py b/coast/data/profile.py
old mode 100755
new mode 100644
similarity index 99%
rename from coast/profile.py
rename to coast/data/profile.py
index fe2e08f4..9b94e74b
--- a/coast/profile.py
+++ b/coast/data/profile.py
@@ -2,11 +2,11 @@
 from .index import Indexed
 import numpy as np
 import xarray as xr
-from . import general_utils, plot_util
+from .._utils import general_utils, plot_util
 import matplotlib.pyplot as plt
 import glob
 import datetime
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils.logging_util import get_slug, debug, info, warn, warning
 from typing import Union
 from pathlib import Path
 import pandas as pd
diff --git a/coast/tidegauge.py b/coast/data/tidegauge.py
old mode 100755
new mode 100644
similarity index 99%
rename from coast/tidegauge.py
rename to coast/data/tidegauge.py
index eff5f937..6680faec
--- a/coast/tidegauge.py
+++ b/coast/data/tidegauge.py
@@ -7,8 +7,8 @@
 import glob
 import re
 import pytz
-from . import general_utils, plot_util, crps_util, stats_util
-from .logging_util import get_slug, debug, error, info
+from .._utils import general_utils, plot_util, crps_util, stats_util
+from .._utils.logging_util import get_slug, debug, error, info
 from typing import Union
 from pathlib import Path
 
diff --git a/coast/timeseries.py b/coast/data/timeseries.py
similarity index 87%
rename from coast/timeseries.py
rename to coast/data/timeseries.py
index 56cdb1a4..2e069fd4 100644
--- a/coast/timeseries.py
+++ b/coast/data/timeseries.py
@@ -1,6 +1,5 @@
 """Timeseries Class"""
 from .index import Indexed
-from . import general_utils
 
 
 class Timeseries(Indexed):
diff --git a/coast/track.py b/coast/data/track.py
similarity index 100%
rename from coast/track.py
rename to coast/data/track.py
diff --git a/coast/diagnostics/__init__.py b/coast/diagnostics/__init__.py
new file mode 100644
index 00000000..b18c5895
--- /dev/null
+++ b/coast/diagnostics/__init__.py
@@ -0,0 +1,1 @@
+"""Core diagnostics subpackage."""
diff --git a/coast/climatology.py b/coast/diagnostics/climatology.py
similarity index 98%
rename from coast/climatology.py
rename to coast/diagnostics/climatology.py
index 39a1feb3..94da23aa 100644
--- a/coast/climatology.py
+++ b/coast/diagnostics/climatology.py
@@ -1,3 +1,4 @@
+"""Climatology class"""
 import calendar
 from datetime import date
 import traceback
@@ -8,8 +9,8 @@
 import pandas as pd
 import xarray as xr
 
-from .coast import Coast
-from .logging_util import info, warn, error
+from ..data.coast import Coast
+from .._utils.logging_util import info, warn, error
 
 
 class Climatology(Coast):  # TODO All abstract methods should be implemented
diff --git a/coast/contour.py b/coast/diagnostics/contour.py
old mode 100755
new mode 100644
similarity index 98%
rename from coast/contour.py
rename to coast/diagnostics/contour.py
index 48006743..4e798b58
--- a/coast/contour.py
+++ b/coast/diagnostics/contour.py
@@ -1,3 +1,4 @@
+"""Contour classes"""
 import matplotlib.pyplot as plt
 import xarray as xr
 import xarray.ufuncs as uf
@@ -5,13 +6,13 @@
 import warnings
 import gsw
 import traceback
-from .coast import Coast
-from .gridded import Gridded
+from ..data.coast import Coast
+from ..data.gridded import Gridded
 from scipy import interpolate
 from scipy.integrate import cumtrapz
 from sklearn.neighbors import BallTree
 from skimage import measure
-from .logging_util import warn, error
+from .._utils.logging_util import warn, error
 
 # =============================================================================
 # The contour module is a place for code related to contours only
@@ -25,8 +26,7 @@ class Contour:
 
     @staticmethod
     def get_contours(gridded: Coast, contour_depth: int):
-        """
-        A method to obtain the continuous isbobath contours within a supplied
+        """A method to obtain the continuous isbobath contours within a supplied
         gridded domain as a set of y indices and x indices for the model grid.
 
         Parameters
@@ -53,8 +53,7 @@ def get_contours(gridded: Coast, contour_depth: int):
 
     @staticmethod
     def plot_contour(gridded: Coast, contour: np.ndarray):
-        """
-        Quick plot method to plot a contour over a pcolormesh of the
+        """Quick plot method to plot a contour over a pcolormesh of the
         model bathymetry
 
         Parameters
@@ -82,8 +81,7 @@ def plot_contour(gridded: Coast, contour: np.ndarray):
 
     @staticmethod
     def get_contour_segment(gridded: Coast, contour: np.ndarray, start_coords: np.ndarray, end_coords: np.ndarray):
-        """
-        Method that will take a contour from the list of contours generated by
+        """Method that will take a contour from the list of contours generated by
         coast.Contour.get_contours() and trim it to start at supplied (lat,lon)
         coordinates and end at supplied (lat, lon) coordinates.
 
@@ -147,8 +145,7 @@ def get_contour_segment(gridded: Coast, contour: np.ndarray, start_coords: np.nd
         return y_ind, x_ind, np.vstack((y_ind, x_ind)).T
 
     def __init__(self, gridded: Coast, y_ind, x_ind, depth: int):
-        """
-        Class defining a Contour type, which is a 3d dataset of points between a point A and
+        """Class defining a Contour type, which is a 3d dataset of points between a point A and
         a point B defining an isobath contour. The dataset has a time, depth and contour dimension.
         The contour dimension defines the points along the contour.
         The supplied model Data is subsetted in its entirety along these dimensions and
@@ -193,7 +190,6 @@ def __init__(self, gridded: Coast, y_ind, x_ind, depth: int):
             print(traceback.format_exc())
 
     def process_contour(self, dataset: xr.Dataset, y_ind, x_ind):
-
         """Redefine contour so that each point on the contour defined by
         y_ind and x_ind is seperated from its neighbours by a single index change
         in y or x, but not both.
@@ -269,8 +265,7 @@ def gen_z_levels(max_depth):
 
 
 class ContourF(Contour):
-    """
-    Class defining a Contour type on the f-grid, which is a 3d dataset of points between a point A and
+    """Class defining a Contour type on the f-grid, which is a 3d dataset of points between a point A and
     a point B defining an isobath contour. The dataset has a time, depth and contour dimension.
     The contour dimension defines the points along the contour.
     The supplied model f-grid Data is subsetted in its entirety along these dimensions
@@ -294,8 +289,7 @@ def __init__(self, gridded_f: Coast, y_ind, x_ind, depth):
         self.data_cross_flow = xr.Dataset()
 
     def calc_cross_contour_flow(self, gridded_u: Coast, gridded_v: Coast):
-        """
-        Method that will calculate the flow across the contour and store this data
+        """Method that will calculate the flow across the contour and store this data
         within Contour_f.data_cross_flow, which is an xarray.Dataset. Specifically
         Contour_f.normal_velocities are the velocities across the contour
         (time, depth, position along contour) in m/s
@@ -461,8 +455,7 @@ def _update_cross_flow_latlon(self, ds_u, ds_v, dr_n, dr_s, dr_e, dr_w):
 
     @staticmethod
     def _pressure_gradient_fpoint2(ds_t, ds_t_j1, ds_t_i1, ds_t_j1i1, r_ind, velocity_component):
-        """
-        Calculates the hydrostatic and surface pressure gradients at a set of f-points
+        """Calculates the hydrostatic and surface pressure gradients at a set of f-points
         along the contour, i.e. at a set of specific values of r_dim (but for all time and depth).
         The caller must supply four datasets that contain the variables which define
         the hydrostatic and surface pressure at all vertical z_levels and all time
diff --git a/coast/eof.py b/coast/diagnostics/eof.py
old mode 100755
new mode 100644
similarity index 97%
rename from coast/eof.py
rename to coast/diagnostics/eof.py
index d545ebcb..c3a9befa
--- a/coast/eof.py
+++ b/coast/diagnostics/eof.py
@@ -1,3 +1,4 @@
+"""This is file deals with empirical orthogonal functions."""
 import xarray as xr
 import numpy as np
 from scipy import linalg
@@ -5,7 +6,8 @@
 
 
 def compute_eofs(variable: xr.DataArray, full_matrices: bool = False, time_dim_name: str = "t_dim"):
-    """
+    """Compute some numbers is a helper method.
+
     Computes the Empirical Orthogonal Functions (EOFs) of a variable (time series)
     that has 3 dimensions where one is time, i.e. (x,y,time)
 
@@ -36,7 +38,6 @@ def compute_eofs(variable: xr.DataArray, full_matrices: bool = False, time_dim_n
     from the original data variable are also included
 
     """
-
     variable = variable.transpose(..., time_dim_name, transpose_coords=False)
     i, j, t = np.shape(variable.data)  # TODO Can someone sciencey give me the proper name for these?
     signal = np.reshape(variable.data, (i * j, t))
@@ -82,7 +83,8 @@ def compute_eofs(variable: xr.DataArray, full_matrices: bool = False, time_dim_n
 
 
 def compute_hilbert_eofs(variable: xr.DataArray, full_matrices=False, time_dim_name: str = "t_dim"):
-    """
+    """Compute with hilbert is a helper method.
+
     Computes the complex Hilbert Empirical Orthogonal Functions (HEOFs) of a
     variable (time series) that has 3 dimensions where one is time, i.e. (x,y,time).
     See https://doi.org/10.1002/joc.1499
@@ -174,7 +176,8 @@ def compute_hilbert_eofs(variable: xr.DataArray, full_matrices=False, time_dim_n
 
 
 def _compute(signal, full_matrices, active_ind, number_points):
-    """
+    """Private compute method is a helper method.
+
     Compute eofs, projections and variance explained using a Singular Value Decomposition
 
     Parameters
diff --git a/coast/internal_tide.py b/coast/diagnostics/internal_tide.py
old mode 100755
new mode 100644
similarity index 99%
rename from coast/internal_tide.py
rename to coast/diagnostics/internal_tide.py
index e7f00211..db719335
--- a/coast/internal_tide.py
+++ b/coast/diagnostics/internal_tide.py
@@ -1,8 +1,8 @@
-from .gridded import Gridded
+from ..data.gridded import Gridded
 import numpy as np
 import xarray as xr
 import copy
-from .logging_util import get_slug, debug
+from .._utils.logging_util import get_slug, debug
 
 
 class InternalTide(Gridded):  # TODO All abstract methods should be implemented
diff --git a/coast/profile_analysis.py b/coast/diagnostics/profile_analysis.py
similarity index 98%
rename from coast/profile_analysis.py
rename to coast/diagnostics/profile_analysis.py
index 8e607af5..2110357c 100644
--- a/coast/profile_analysis.py
+++ b/coast/diagnostics/profile_analysis.py
@@ -1,9 +1,11 @@
 """Profile Class"""
-from .index import Indexed
+from ..data.index import Indexed
 import numpy as np
 import xarray as xr
-from . import general_utils, plot_util, Gridded, Profile
-from .logging_util import get_slug, debug, info, warn, warning
+from .._utils import general_utils, plot_util
+from ..data.gridded import Gridded
+from ..data.profile import Profile
+from .._utils.logging_util import get_slug, debug, info, warn, warning
 from scipy import interpolate
 
 
diff --git a/coast/tidegauge_analysis.py b/coast/diagnostics/tidegauge_analysis.py
similarity index 99%
rename from coast/tidegauge_analysis.py
rename to coast/diagnostics/tidegauge_analysis.py
index 96408683..e7bed5b0 100644
--- a/coast/tidegauge_analysis.py
+++ b/coast/diagnostics/tidegauge_analysis.py
@@ -1,10 +1,11 @@
+"""An analysis class for tide gauge."""
 import numpy as np
 import xarray as xr
-from . import Tidegauge, general_utils
+from ..data.tidegauge import Tidegauge
+from .._utils import general_utils, stats_util, crps_util
 import matplotlib.dates as mdates
 import utide as ut
 import scipy.signal as signal
-from coast import stats_util, crps_util
 
 
 class TidegaugeAnalysis:
diff --git a/coast/transect.py b/coast/diagnostics/transect.py
similarity index 99%
rename from coast/transect.py
rename to coast/diagnostics/transect.py
index 7e83bcb2..a38ebcd2 100644
--- a/coast/transect.py
+++ b/coast/diagnostics/transect.py
@@ -1,5 +1,5 @@
-from .coast import Coast
-from .gridded import Gridded
+from ..data.coast import Coast
+from ..data.gridded import Gridded
 from scipy.ndimage import convolve1d
 from scipy import interpolate
 import gsw
@@ -9,7 +9,7 @@
 from scipy.integrate import cumtrapz
 import warnings
 import traceback
-from .logging_util import get_slug, debug, warn, info
+from .._utils.logging_util import get_slug, debug, warn, info
 
 # =============================================================================
 # The TRANSECT module is a place for code related to transects only
diff --git a/conda_dev_requirements.txt b/conda_dev_requirements.txt
index cb9be384..1c68fcab 100644
--- a/conda_dev_requirements.txt
+++ b/conda_dev_requirements.txt
@@ -10,5 +10,8 @@ utide>=0.2.6
 scikit-learn>=1.0.2
 scikit-image>=0.19.2
 statsmodels>=0.13.2
+pydap>=3.2.2
+lxml>=4.9.0
+requests>=2.27.1
 cartopy>=0.20.2
 spyder>=5.1.5
diff --git a/config/example_cmems_grid_t.json b/config/example_cmems_grid_t.json
index 6fe0363e..e9c11771 100644
--- a/config/example_cmems_grid_t.json
+++ b/config/example_cmems_grid_t.json
@@ -9,13 +9,13 @@
 		"dimension_map": {
 			"time": "t_dim",
 			"depth": "z_dim",
-			"lon": "x_dim",
-			"lat": "y_dim"
+			"longitude": "x_dim",
+			"latitude": "y_dim"
 		},
 		"variable_map": {
 			"time": "time",
-			"lon": "longitude",
-			"lat": "latitude",
+			"longitude": "longitude",
+			"latitude": "latitude",
 			"thetao": "temperature",
 			"so": "salinity",
                         "depth": "z_dim",
diff --git a/config/example_cmems_grid_uv.json b/config/example_cmems_grid_uv.json
index 52f25a3b..8f8d39d3 100644
--- a/config/example_cmems_grid_uv.json
+++ b/config/example_cmems_grid_uv.json
@@ -9,13 +9,13 @@
 		"dimension_map": {
 			"time": "t_dim",
 			"depth": "z_dim",
-			"lon": "x_dim",
-			"lat": "y_dim"
+			"longitude": "x_dim",
+			"latitude": "y_dim"
 		},
 		"variable_map": {
 			"time": "time",
-			"lon": "longitude",
-			"lat": "latitude",
+			"longitude": "longitude",
+			"latitude": "latitude",
 			"uo": "u_velocity",
 			"vo": "v_velocity"
 		},
diff --git a/dockerfile b/dockerfile
new file mode 100644
index 00000000..255cedff
--- /dev/null
+++ b/dockerfile
@@ -0,0 +1,9 @@
+FROM docker-repo.bodc.me/bodc/conda:latest
+RUN conda install -c conda-forge gcc cartopy
+COPY --chown=bodc:bodc . .
+COPY requirements.txt .
+RUN python -m pip install --upgrade pip virtualenv
+RUN python -m pip install -r requirements.txt
+RUN pip install dask[complete]
+RUN sh setup_environment.sh
+RUN sh build.sh
\ No newline at end of file
diff --git a/docs.Dockerfile b/docs.Dockerfile
new file mode 100644
index 00000000..53b6a0b2
--- /dev/null
+++ b/docs.Dockerfile
@@ -0,0 +1,4 @@
+FROM docker-repo.bodc.me/bodc/coast:base
+ADD requirements_docs.txt requirements_docs.txt
+ADD docstring2md-0.4.1-py3-none-any.whl docstring2md-0.4.1-py3-none-any.whl
+RUN pip install -r requirements_docs.txt
diff --git a/docs/source/api.rst b/docs/source/api.rst
new file mode 100644
index 00000000..2821d0d9
--- /dev/null
+++ b/docs/source/api.rst
@@ -0,0 +1,8 @@
+API documentation
+=================
+
+.. autosummary::
+   :toctree: generated
+   :recursive:
+
+   coast
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 00000000..c81defae
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,72 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+from datetime import date
+
+from pkg_resources import get_distribution
+
+# -- Project information -----------------------------------------------------
+
+project = "COAsT"
+copyright = f"2022-{date.today().year}, British Oceanographic Data Centre (BODC)"
+author = "British Oceanographic Data Centre (BODC)"
+
+# The short X.Y version
+
+# version = get_distribution("COAsT").version
+
+# The full version, including alpha/beta/rc tags
+release = "2.0.3"  # version
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    "sphinx.ext.autodoc",
+    "sphinx.ext.napoleon",
+    "sphinx.ext.autosummary",
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ["_templates"]
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = []
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = "furo"
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+# html_static_path = ["_static"]
+
+
+# -- Extension configuration -------------------------------------------------
+
+autodoc_default_options = {
+    "members": True,
+}
+autosummary_generate = True
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644
index 00000000..d71ca6d4
--- /dev/null
+++ b/docs/source/index.rst
@@ -0,0 +1,21 @@
+.. qxf data pusher documentation master file, created by
+   sphinx-quickstart
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to COAsT's documentation!
+===========================================================
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
+   api
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docstring2md-0.4.1-py3-none-any.whl b/docstring2md-0.4.1-py3-none-any.whl
new file mode 100644
index 00000000..9624fb6e
Binary files /dev/null and b/docstring2md-0.4.1-py3-none-any.whl differ
diff --git a/example_scripts/amm15_example_plot.py b/example_scripts/amm15_example_plot.py
index 23d1bc83..a87f1759 100755
--- a/example_scripts/amm15_example_plot.py
+++ b/example_scripts/amm15_example_plot.py
@@ -40,9 +40,9 @@
 #################################################
 # Pick out a North Sea subdomain
 print("* Extract North Sea subdomain")
-ind_sci = sci_t.subset_indices([51, -4], [62, 15])
+ind_sci = sci_t.subset_indices(start=[51, -4], end=[62, 15])
 sci_nwes_t = sci_t.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nwes = northwest europe shelf
-ind_sci = sci_w.subset_indices([51, -4], [62, 15])
+ind_sci = sci_w.subset_indices(start=[51, -4], end=[62, 15])
 sci_nwes_w = sci_w.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nwes = northwest europe shelf
 
 #%% Apply masks to temperature and salinity
diff --git a/example_scripts/anchor_plots_of_nsea_wvel.py b/example_scripts/anchor_plots_of_nsea_wvel.py
index eac1aad2..0fe6a909 100755
--- a/example_scripts/anchor_plots_of_nsea_wvel.py
+++ b/example_scripts/anchor_plots_of_nsea_wvel.py
@@ -40,7 +40,7 @@
 #%% subset of data and domain ##
 #################################################
 # Pick out a North Sea subdomain
-ind_sci = sci_w.subset_indices([51, -4], [60, 15])
+ind_sci = sci_w.subset_indices(start=[51, -4], end=[60, 15])
 sci_nwes_w = sci_w.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nswes = northwest europe shelf
 
 #%% Compute a diffusion from w-vel
diff --git a/example_scripts/internal_tide_pycnocline_diagnostics.py b/example_scripts/internal_tide_pycnocline_diagnostics.py
index e338a1d7..c6a34670 100755
--- a/example_scripts/internal_tide_pycnocline_diagnostics.py
+++ b/example_scripts/internal_tide_pycnocline_diagnostics.py
@@ -75,9 +75,9 @@
 #################################################
 # Pick out a North Sea subdomain
 print("* Extract North Sea subdomain")
-ind_sci = sci_t.subset_indices([51, -4], [62, 15])
+ind_sci = sci_t.subset_indices(start=[51, -4], end=[62, 15])
 sci_nwes_t = sci_t.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nwes = northwest europe shelf
-ind_sci = sci_w.subset_indices([51, -4], [62, 15])
+ind_sci = sci_w.subset_indices(start=[51, -4], end=[62, 15])
 sci_nwes_w = sci_w.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nwes = northwest europe shelf
 
 #%% Apply masks to temperature and salinity
diff --git a/example_scripts/notebooks/altimetry_tutorial.ipynb b/example_scripts/notebooks/altimetry_tutorial.ipynb
new file mode 100644
index 00000000..bd95ebdd
--- /dev/null
+++ b/example_scripts/notebooks/altimetry_tutorial.ipynb
@@ -0,0 +1,227 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "5e724b6e-e8e4-42ea-a551-007dbcb4fcde",
+   "metadata": {},
+   "source": [
+    "This is a demonstration script for using the Altimetry object in the COAsT package. This object has strict data formatting requirements, which are outlined in altimetry.py."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f6a8cc62-59b6-47fb-a77f-0a4c95f8ea2a",
+   "metadata": {},
+   "source": [
+    "### Relevant imports and filepath configuration"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4ebcdef5-712f-4e7b-a482-78889740526e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Begin by importing coast and other packages\n",
+    "import coast\n",
+    "\n",
+    "\n",
+    "# And by defining some file paths\n",
+    "dn_files = \"./example_files/\"\n",
+    "fn_nemo_dat = dn_files + \"coast_example_nemo_data.nc\"\n",
+    "fn_nemo_dom = dn_files + \"coast_example_nemo_domain.nc\"\n",
+    "fn_nemo_config = \"./config/example_nemo_grid_t.json\"\n",
+    "fn_altimetry = dn_files + \"coast_example_altimetry_data.nc\"\n",
+    "fn_altimetry_config = \"./config/example_altimetry.json\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ec709212-502a-4c1c-b1b9-2a81377631ca",
+   "metadata": {
+    "tags": []
+   },
+   "source": [
+    "### Loading data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "83d827f6-ac10-4bed-b98b-4369d937ee3f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# We need to load in a NEMO object for doing NEMO things.\n",
+    "nemo = coast.Gridded(fn_nemo_dat, fn_nemo_dom, config=fn_nemo_config)\n",
+    "\n",
+    "# And now we can load in our Altimetry data. By default, Altimetry is set up\n",
+    "# to read in CMEMS netCDF files. However, if no path is supplied, then the\n",
+    "# object's dataset will be initialised as None. Custom data can then be loaded\n",
+    "# if desired, as long as it follows the data formatting for Altimetry.\n",
+    "# altimetry = coast.Altimetry(fn_altimetry)\n",
+    "altimetry = coast.Altimetry(fn_altimetry, config=fn_altimetry_config)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e1ef12d0-eb9f-40d1-95cf-75e0d4fc719c",
+   "metadata": {},
+   "source": [
+    "### Subsetting"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "634e67fe-2ebe-4b16-a785-17ba7c76cb56",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Before going any further, lets just cut out the bit of the altimetry that\n",
+    "# is over the model domain. This can be done using subset_indices_lonlat_box\n",
+    "# to find relevant indices and then isel to extract them. The data has also\n",
+    "# been thinned slightly.\n",
+    "ind = altimetry.subset_indices_lonlat_box([-10, 10], [45, 60])\n",
+    "ind = ind[::4]\n",
+    "altimetry = altimetry.isel(t_dim=ind)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "052796fe-6ee1-4a9c-bc8d-f287dc752102",
+   "metadata": {},
+   "source": [
+    "### Model interpolation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "cbed61f5-f036-4501-b5c3-307070ae1395",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Before comparing our observations to the model, we will interpolate a model\n",
+    "# variable to the same time and geographical space as the altimetry. This is\n",
+    "# done using the obs_operator() method:\n",
+    "altimetry.obs_operator(nemo, mod_var_name=\"ssh\", time_interp=\"nearest\")\n",
+    "\n",
+    "# Doing this has created a new interpolated variable called interp_ssh and\n",
+    "# saved it back into our Altimetry object. Take a look at altimetry.dataset\n",
+    "# to see for yourself."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "afe939d5-f62a-4419-8b46-a6fd11b58424",
+   "metadata": {},
+   "source": [
+    "### Interpolated vs observed"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c11ae399-42b8-470d-b57d-c3f31339c2fb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Next we will compare this interpolated variable to an observed variable\n",
+    "# using some basic metrics. The basic_stats() routine can be used for this,\n",
+    "# which calculates some simple metrics including differences, RMSE and\n",
+    "# correlations. NOTE: This may not be a wise choice of variables.\n",
+    "stats = altimetry.basic_stats(\"ocean_tide_standard_name\", \"interp_ssh\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "72deea38-8d70-45fc-95b4-7a9b38147dfb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Take a look inside stats.dataset to see all of the new variables. When using\n",
+    "# basic stats, the returned object is also an Altimetry object, so all of the\n",
+    "# same methods can be applied. Alternatively, if you want to save the new\n",
+    "# metrics to the original altimetry object, set create_new_object = False.\n",
+    "#\n",
+    "# Now we will do a more complex comparison using the Continuous Ranked\n",
+    "# Probability Score (CRPS). For this, we need to hand over the model object,\n",
+    "# a model variable and an observed variable. We also give it a neighbourhood\n",
+    "# radius in km (nh_radius).\n",
+    "crps = altimetry.crps(nemo, model_var_name=\"ssh\", obs_var_name=\"ocean_tide_standard_name\", nh_radius=20)\n",
+    "\n",
+    "# Again, take a look inside crps.dataset to see some new variables. Similarly\n",
+    "# to basic_stats, create_new_object can be set to false to save output to\n",
+    "# the original altimetry object."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "5eba3a99-64c5-49a2-bb57-487b8ccff901",
+   "metadata": {},
+   "source": [
+    "### Plotting data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ea7ccdfe-27b0-46d3-bad2-6c821032a428",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Altimetry has a ready built quick_plot() routine for taking a look at any\n",
+    "# of the observed or derived quantities above. So to take a look at the\n",
+    "# 'sla_filtered' variable:\n",
+    "fig, ax = altimetry.quick_plot(\"ocean_tide_standard_name\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ac31391e-9cde-4efa-86e9-74e12b55d30c",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# As stats and crps are also Altimetry objects, quick_plot() can also be used:\n",
+    "# crps quick_plot:\n",
+    "fig, ax = crps.quick_plot(\"crps\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "02a98b01-7c09-4214-a514-667bb3fa4d43",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# stats quick_plot:\n",
+    "fig, ax = stats.quick_plot(\"absolute_error\")"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/example_scripts/notebooks/amm15_example_plot.ipynb b/example_scripts/notebooks/amm15_example_plot.ipynb
new file mode 100644
index 00000000..252ad339
--- /dev/null
+++ b/example_scripts/notebooks/amm15_example_plot.ipynb
@@ -0,0 +1,190 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "aa1e3d77-fb21-444a-a36f-58dee7f198fc",
+   "metadata": {},
+   "source": [
+    "Make simple AMM15 SST plot."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "705f7969-91f8-48e2-a941-d71a47374fa5",
+   "metadata": {},
+   "source": [
+    "### Import dependencies"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "5fe3f2c0-f76d-4003-88bd-e5e6acaadbdc",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import coast\n",
+    "import matplotlib.pyplot as plt"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3d1173e7-d246-4d66-bbec-d0e91af73b2a",
+   "metadata": {},
+   "source": [
+    "### Load data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "eb57a73f-6135-4028-b1e6-fa5043683d11",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "config = \"AMM15\"\n",
+    "dir_nam = \"/projectsa/NEMO/gmaya/2013p2/\"\n",
+    "fil_nam = \"20130415_25hourm_grid_T.nc\"\n",
+    "dom_nam = \"/projectsa/NEMO/gmaya/AMM15_GRID/amm15.mesh_mask.cs3x.nc\"\n",
+    "config = \"/work/jelt/GitHub/COAsT/config/example_nemo_grid_t.json\"\n",
+    "\n",
+    "sci_t = coast.Gridded(dir_nam + fil_nam, dom_nam, config=config)  # , chunks=chunks)\n",
+    "chunks = {\n",
+    "    \"x_dim\": 10,\n",
+    "    \"y_dim\": 10,\n",
+    "    \"t_dim\": 10,\n",
+    "}  # Chunks are prescribed in the config json file, but can be adjusted while the data is lazy loaded.\n",
+    "\n",
+    "sci_t.dataset.chunk(chunks)\n",
+    "\n",
+    "# create an empty w-grid object, to store stratification\n",
+    "sci_w = coast.Gridded(fn_domain=dom_nam, config=config.replace(\"t_nemo\", \"w_nemo\"))\n",
+    "sci_w.dataset.chunk({\"x_dim\": 10, \"y_dim\": 10})  # Can reset after loading config json\n",
+    "\n",
+    "print(\"* Loaded \", config, \" data\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b8a8bbf3-b93c-42dc-8a60-47a4404ec809",
+   "metadata": {},
+   "source": [
+    "### Subset data and domain"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "46e333d1-e8f8-4690-9e23-9c92486fb14a",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Pick out a North Sea subdomain\n",
+    "print(\"* Extract North Sea subdomain\")\n",
+    "ind_sci = sci_t.subset_indices(start=[51, -4], end=[62, 15])\n",
+    "sci_nwes_t = sci_t.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nwes = northwest europe shelf\n",
+    "ind_sci = sci_w.subset_indices(start=[51, -4], end=[62, 15])\n",
+    "sci_nwes_w = sci_w.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nwes = northwest europe shelf"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "094300e2-b8a2-420b-a3a2-1f09ed4398cd",
+   "metadata": {},
+   "source": [
+    "### Mask data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "9b524780-e024-4dd4-9136-7f603e61f616",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#%% Apply masks to temperature and salinity\n",
+    "if config == \"AMM15\":\n",
+    "    sci_nwes_t.dataset[\"temperature_m\"] = sci_nwes_t.dataset.temperature.where(\n",
+    "        sci_nwes_t.dataset.mask.expand_dims(dim=sci_nwes_t.dataset[\"t_dim\"].sizes) > 0\n",
+    "    )\n",
+    "    sci_nwes_t.dataset[\"salinity_m\"] = sci_nwes_t.dataset.salinity.where(\n",
+    "        sci_nwes_t.dataset.mask.expand_dims(dim=sci_nwes_t.dataset[\"t_dim\"].sizes) > 0\n",
+    "    )\n",
+    "else:\n",
+    "    # Apply fake masks to temperature and salinity\n",
+    "    sci_nwes_t.dataset[\"temperature_m\"] = sci_nwes_t.dataset.temperature\n",
+    "    sci_nwes_t.dataset[\"salinity_m\"] = sci_nwes_t.dataset.salinity"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "c2151276-956a-4b2b-8b2d-c73f27835293",
+   "metadata": {},
+   "source": [
+    "### Plot data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "225ebfc8-4021-4f47-b683-5741ec1042b1",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#%% Plots\n",
+    "fig = plt.figure()\n",
+    "\n",
+    "plt.pcolormesh(sci_t.dataset.longitude, sci_t.dataset.latitude, sci_t.dataset.temperature.isel(z_dim=0).squeeze())\n",
+    "plt.xlabel('longitude')\n",
+    "plt.ylabel('latitude')\n",
+    "plt.colorbar()\n",
+    "plt.axis(\"off\")\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "79d3b6b6-6a20-4e58-8f5b-b2fdaf53e82c",
+   "metadata": {},
+   "source": [
+    "### Save plot"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "48d99d19-36cf-4eab-a125-2034c4768bcb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fig.savefig(\"AMM15_SST_nocolorbar.png\", dpi=120)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  },
+  "vscode": {
+   "interpreter": {
+    "hash": "edbd2e3cb8183e66d063e2b638973e07e1c11d7f682ee3a27358b79f7159feb3"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/example_scripts/notebooks/anchor_plots_of_nsea_wvel.ipynb b/example_scripts/notebooks/anchor_plots_of_nsea_wvel.ipynb
new file mode 100644
index 00000000..6ad63f4d
--- /dev/null
+++ b/example_scripts/notebooks/anchor_plots_of_nsea_wvel.ipynb
@@ -0,0 +1,280 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Import dependencies"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import coast\n",
+    "import matplotlib.pyplot as plt"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "### Loading and initialising methods \n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "dir_nam = \"/projectsa/anchor/NEMO/AMM60/\"\n",
+    "fil_nam = \"AMM60_1h_20100818_20100822_NorthSea.nc\"\n",
+    "dom_nam = \"/projectsa/FASTNEt/jelt/AMM60/mesh_mask.nc\"\n",
+    "\n",
+    "dir_nam = \"/projectsa/NEMO/jelt/AMM60_ARCHER_DUMP/AMM60smago/EXP_NSea/OUTPUT/\"\n",
+    "fil_nam = \"AMM60_1h_20120204_20120208_NorthSea.nc\"\n",
+    "\n",
+    "config = \"/work/jelt/GitHub/COAsT/config/example_nemo_grid_w.json\"\n",
+    "\n",
+    "chunks = {\n",
+    "    \"x_dim\": 10,\n",
+    "    \"y_dim\": 10,\n",
+    "    \"t_dim\": 10,\n",
+    "}  # Chunks are prescribed in the config json file, but can be adjusted while the data is lazy loaded.\n",
+    "sci_w = coast.Gridded(dir_nam + fil_nam, dom_nam, config=config)\n",
+    "sci_w.dataset.chunk(chunks)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "*NEMO output is not standard with u,v fields included with w-pts.*"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "sci_w.dataset = sci_w.dataset.drop([\"uo\", \"vo\", \"depthv\"])\n",
+    "sci_w.dataset = sci_w.dataset.swap_dims({\"depthw\": \"z_dim\"})\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Subset of data and domain"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "#### Pick out a North Sea subdomain\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ind_sci = sci_w.subset_indices(start=[51, -4], end=[60, 15])\n",
+    "sci_nwes_w = sci_w.isel(y_dim=ind_sci[0], x_dim=ind_sci[1])  # nswes = northwest europe shelf\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Compute a diffusion from w-vel"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "Kz = (sci_nwes_w.dataset.wo * sci_nwes_w.dataset.e3_0).sum(dim=\"z_dim\").mean(dim=\"t_dim\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "#### Plot map\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "lon = sci_nwes_w.dataset.longitude.squeeze()\n",
+    "lat = sci_nwes_w.dataset.latitude.squeeze()\n",
+    "\n",
+    "fig = plt.figure()\n",
+    "plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "\n",
+    "fig = plt.figure()\n",
+    "plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "plt.pcolormesh(lon, lat, Kz.squeeze(), shading=\"auto\", cmap=\"seismic\")\n",
+    "plt.title(\"Kz(w)\")\n",
+    "plt.clim([-50e-3, 50e-3])\n",
+    "plt.colorbar()\n",
+    "# fig.savefig(\"\")\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "#### Transect Method\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tran_w = coast.TransectT(sci_nwes_w, (51, 2.5), (61, 2.5))\n",
+    "\n",
+    "lat_sec = tran_w.data.latitude.expand_dims(dim={\"z_dim\": 51})\n",
+    "dep_sec = tran_w.data.depthw\n",
+    "wo_sec = tran_w.data.wo\n",
+    "# wo_sec = tran.data_F.wo.mean(dim='t_dim')\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "\n",
+    "### Make map and profile plots\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "for i in range(2):\n",
+    "    for lat0 in [54, 57]:\n",
+    "        if lat0 == 54:\n",
+    "            sig0 = 10\n",
+    "            lon0 = 5  # depth level for maps\n",
+    "        if lat0 == 57:\n",
+    "            sig0 = 40\n",
+    "            lon0 = 2\n",
+    "        [JJ, II] = sci_nwes_w.find_j_i(lat=lat0, lon=lon0)\n",
+    "        # short cuts for variable names\n",
+    "        lon = sci_nwes_w.dataset.longitude.squeeze()\n",
+    "        lat = sci_nwes_w.dataset.latitude.squeeze()\n",
+    "        dep = sci_nwes_w.dataset.depth_0[:, :, :]\n",
+    "\n",
+    "        fig = plt.figure()\n",
+    "        plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "\n",
+    "        fig = plt.figure()\n",
+    "        plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "        plt.pcolormesh(lon, lat, sci_nwes_w.dataset.wo[i, sig0, :, :] * 3600 * 24, shading=\"auto\", cmap=\"seismic\")\n",
+    "        plt.plot(lon[JJ, II], lat[JJ, II], \"r+\")\n",
+    "        plt.title(f\"t={str(i)}: w-vel (m/day) at level {sig0}\")\n",
+    "        plt.clim([-5, 5])\n",
+    "        plt.colorbar()\n",
+    "        fig.savefig(f\"w_map_sig{sig0}_{str(i).zfill(3)}.png\")\n",
+    "\n",
+    "        fig = plt.figure()\n",
+    "        plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "\n",
+    "        plt.subplot(1, 2, 1)\n",
+    "        plt.plot(sci_nwes_w.dataset.wo[i, :, JJ, II] * 3600 * 24, dep[:, JJ, II], \"+\")\n",
+    "        plt.title(f\"w-vel (m/day) at ({lat0}N,{lon0}E)\")\n",
+    "        plt.xlim([-15, 15])\n",
+    "        plt.ylabel(\"depth (m)\")\n",
+    "        plt.gca().invert_yaxis()\n",
+    "\n",
+    "        plt.subplot(1, 2, 2)\n",
+    "        plt.plot(sci_nwes_w.dataset.avm[i, :, JJ, II] * 1e3, dep[:, JJ, II], \"+\")\n",
+    "        plt.title(f\"t={str(i)}: avm*1E3\")\n",
+    "        plt.ylabel(\"depth (m)\")\n",
+    "        plt.xlim([0, 40])\n",
+    "        plt.gca().invert_yaxis()\n",
+    "        fig.savefig(f\"w_prof_{lat0}N_{str(i).zfill(3)}.png\")\n",
+    "\n",
+    "    fig = plt.figure()\n",
+    "    plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "    plt.pcolormesh(lat_sec, dep_sec, wo_sec.isel(t_dim=i) * 3600 * 24, shading=\"auto\", cmap=\"seismic\")\n",
+    "    plt.colorbar()\n",
+    "    plt.title(f\"t={str(i)}: w-vel section (m/day)\")\n",
+    "    plt.xlim([51, 60])\n",
+    "    plt.ylim([0, 150])\n",
+    "    plt.xlabel(\"latitude\")\n",
+    "    plt.ylabel(\"depth (m)\")\n",
+    "    plt.clim([-20, 20])\n",
+    "    plt.gca().invert_yaxis()\n",
+    "    fig.savefig(f\"w_section_t_{str(i).zfill(3)}.png\")\n",
+    "\n",
+    "    plt.close(\"all\")\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Plot sections"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "fig = plt.figure()\n",
+    "plt.rcParams[\"figure.figsize\"] = 8, 8\n",
+    "\n",
+    "plt.subplot(1, 1, 1)\n",
+    "\n",
+    "plt.pcolormesh(lat_sec, dep_sec, wo_sec.mean(dim=\"t_dim\") * 3600 * 24, shading=\"auto\", cmap=\"seismic\")\n",
+    "plt.title(\"w-vel t-mean section\")\n",
+    "plt.xlim([51, 60])\n",
+    "plt.ylim([0, 150])\n",
+    "plt.clim([-20, 20])\n",
+    "plt.xlabel(\"latitude\")\n",
+    "plt.ylabel(\"depth (m)\")\n",
+    "plt.gca().invert_yaxis()\n",
+    "plt.colorbar()\n",
+    "fig.savefig(\"w_section_tmean.png\")\n"
+   ]
+  }
+ ],
+ "metadata": {
+  "language_info": {
+   "name": "python"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/example_scripts/notebooks/seasonal_decomp_example.ipynb b/example_scripts/notebooks/seasonal_decomp_example.ipynb
new file mode 100644
index 00000000..2766b57d
--- /dev/null
+++ b/example_scripts/notebooks/seasonal_decomp_example.ipynb
@@ -0,0 +1,2354 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "e0ef9180-a0f6-4fef-a57e-e102cb928f33",
+   "metadata": {
+    "tags": []
+   },
+   "source": [
+    "# Seasonal decomposition\n",
+    "Example usage of the seasonal decomposition function\n",
+    "## Overview\n",
+    "A function within the Process_data class that will decompose time series into trend, seasonal and residual components. The function is a wrapper that adds functionality to the `seasonal_decompose` function contained in the [statsmodels](https://www.statsmodels.org/stable/generated/statsmodels.tsa.seasonal.seasonal_decompose.html#statsmodels.tsa.seasonal.seasonal_decompose) package to make it more convenient for large geospatial datasets.\n",
+    "\n",
+    "Specifically:\n",
+    "1) Multiple time series spread across multiple dimensions, e.g. a gridded dataset, can be processed. The user simply passes in an xarray DataArray that has a \"t_dim\" dimension and 1 or more additional dimensions, for example gridded spatial dimensions\n",
+    "2) Masked locations, such as land points, are handled\n",
+    "3) A [dask](https://www.dask.org/) wrapper is applied to the function that \n",
+    "    a) supports lazy evaluation\n",
+    "    b) allows the dataset to be easily seperated into chunks so that processing can be carried out in parallel (rather than processing every time series sequentially)\n",
+    "4) The decomposed time series are returned as xarray DataArrays within a single coast.Gridded object"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e5a61e97-87f1-4edd-a629-8044b1851f5a",
+   "metadata": {},
+   "source": [
+    "## An example\n",
+    "Below is an example using the `coast.Process_data.seasonal_decomposition` function with the example data. Note that we will artifically extend the length of the example data time series for demonstrative purposes.\n",
+    "\n",
+    "Begin by importing coast, defining paths to the data, and loading the example data into a gridded object:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "5be2d128-95b5-4053-9d9a-992af8e57737",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import coast\n",
+    "import numpy as np\n",
+    "import xarray as xr\n",
+    "\n",
+    "# Path to a data file.\n",
+    "fn_nemo_dat  = \"./example_files/coast_example_nemo_data.nc\"\n",
+    "# Set path for domain file if required.\n",
+    "fn_nemo_dom  = \"./example_files/coast_example_nemo_domain.nc\"\n",
+    "# Set path for model configuration file\n",
+    "config = \"./config/example_nemo_grid_t.json\"\n",
+    "\n",
+    "# Read in data (This example uses NEMO data.)\n",
+    "grd = coast.Gridded(fn_nemo_dat, fn_nemo_dom, config=config)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "25c88e04-77f4-4614-a9e5-adb297f8fe66",
+   "metadata": {},
+   "source": [
+    "The loaded example data only has 7 time stamps, the code below creates a new (fake) extended temperature variable with 48 monthly records. This code is not required to use the function, it is only included here to make a set of time series that are long enough to be interesting."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "786790ba-8666-4ab9-b084-4e74c94b5732",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# create a 4 yr monthly time coordinate array\n",
+    "time_array = np.arange(\n",
+    "    np.datetime64(\"2010-01-01\"), np.datetime64(\"2014-01-01\"), np.timedelta64(1, \"M\"), dtype=\"datetime64[M]\"\n",
+    ").astype(\"datetime64[s]\")\n",
+    "\n",
+    "# create 4 years of monthly temperature data based on the loaded data\n",
+    "temperature_array = (\n",
+    "    (np.arange(0, 48) * 0.05)[:, np.newaxis, np.newaxis, np.newaxis]\n",
+    "    + np.random.normal(0, 0.1, 48)[:, np.newaxis, np.newaxis, np.newaxis]\n",
+    "    + np.tile(grd.dataset.temperature[:-1, :2, :, :], (8, 1, 1, 1))\n",
+    ")\n",
+    "\n",
+    "# create a new temperature DataArray\n",
+    "temperature = xr.DataArray(\n",
+    "    temperature_array,\n",
+    "    coords={\n",
+    "        \"t_dim\": time_array,\n",
+    "        \"depth_0\": grd.dataset.depth_0[:2, :, :],\n",
+    "        \"longitude\": grd.dataset.longitude,\n",
+    "        \"latitude\": grd.dataset.latitude,\n",
+    "    },\n",
+    "    dims=[\"t_dim\", \"z_dim\", \"y_dim\", \"x_dim\"],\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f2698ce2-1eec-4393-a6ea-814ecca6a8e4",
+   "metadata": {},
+   "source": [
+    "Check out the new data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "325db8b4-f848-41f1-b44e-f230d0e6149d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
+       "<defs>\n",
+       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
+       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
+       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
+       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
+       "</symbol>\n",
+       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
+       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
+       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "</symbol>\n",
+       "</defs>\n",
+       "</svg>\n",
+       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
+       " *\n",
+       " */\n",
+       "\n",
+       ":root {\n",
+       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
+       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
+       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
+       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
+       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
+       "  --xr-background-color: var(--jp-layout-color0, white);\n",
+       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
+       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
+       "}\n",
+       "\n",
+       "html[theme=dark],\n",
+       "body.vscode-dark {\n",
+       "  --xr-font-color0: rgba(255, 255, 255, 1);\n",
+       "  --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
+       "  --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
+       "  --xr-border-color: #1F1F1F;\n",
+       "  --xr-disabled-color: #515151;\n",
+       "  --xr-background-color: #111111;\n",
+       "  --xr-background-color-row-even: #111111;\n",
+       "  --xr-background-color-row-odd: #313131;\n",
+       "}\n",
+       "\n",
+       ".xr-wrap {\n",
+       "  display: block !important;\n",
+       "  min-width: 300px;\n",
+       "  max-width: 700px;\n",
+       "}\n",
+       "\n",
+       ".xr-text-repr-fallback {\n",
+       "  /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-header {\n",
+       "  padding-top: 6px;\n",
+       "  padding-bottom: 6px;\n",
+       "  margin-bottom: 4px;\n",
+       "  border-bottom: solid 1px var(--xr-border-color);\n",
+       "}\n",
+       "\n",
+       ".xr-header > div,\n",
+       ".xr-header > ul {\n",
+       "  display: inline;\n",
+       "  margin-top: 0;\n",
+       "  margin-bottom: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-obj-type,\n",
+       ".xr-array-name {\n",
+       "  margin-left: 2px;\n",
+       "  margin-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-obj-type {\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-sections {\n",
+       "  padding-left: 0 !important;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input + label {\n",
+       "  color: var(--xr-disabled-color);\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input:enabled + label {\n",
+       "  cursor: pointer;\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input:enabled + label:hover {\n",
+       "  color: var(--xr-font-color0);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary {\n",
+       "  grid-column: 1;\n",
+       "  color: var(--xr-font-color2);\n",
+       "  font-weight: 500;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary > span {\n",
+       "  display: inline-block;\n",
+       "  padding-left: 0.5em;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:disabled + label {\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in + label:before {\n",
+       "  display: inline-block;\n",
+       "  content: '►';\n",
+       "  font-size: 11px;\n",
+       "  width: 15px;\n",
+       "  text-align: center;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:disabled + label:before {\n",
+       "  color: var(--xr-disabled-color);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked + label:before {\n",
+       "  content: '▼';\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked + label > span {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary,\n",
+       ".xr-section-inline-details {\n",
+       "  padding-top: 4px;\n",
+       "  padding-bottom: 4px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-inline-details {\n",
+       "  grid-column: 2 / -1;\n",
+       "}\n",
+       "\n",
+       ".xr-section-details {\n",
+       "  display: none;\n",
+       "  grid-column: 1 / -1;\n",
+       "  margin-bottom: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-array-wrap {\n",
+       "  grid-column: 1 / -1;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 20px auto;\n",
+       "}\n",
+       "\n",
+       ".xr-array-wrap > label {\n",
+       "  grid-column: 1;\n",
+       "  vertical-align: top;\n",
+       "}\n",
+       "\n",
+       ".xr-preview {\n",
+       "  color: var(--xr-font-color3);\n",
+       "}\n",
+       "\n",
+       ".xr-array-preview,\n",
+       ".xr-array-data {\n",
+       "  padding: 0 5px !important;\n",
+       "  grid-column: 2;\n",
+       "}\n",
+       "\n",
+       ".xr-array-data,\n",
+       ".xr-array-in:checked ~ .xr-array-preview {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-array-in:checked ~ .xr-array-data,\n",
+       ".xr-array-preview {\n",
+       "  display: inline-block;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list {\n",
+       "  display: inline-block !important;\n",
+       "  list-style: none;\n",
+       "  padding: 0 !important;\n",
+       "  margin: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list li {\n",
+       "  display: inline-block;\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list:before {\n",
+       "  content: '(';\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list:after {\n",
+       "  content: ')';\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list li:not(:last-child):after {\n",
+       "  content: ',';\n",
+       "  padding-right: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-has-index {\n",
+       "  font-weight: bold;\n",
+       "}\n",
+       "\n",
+       ".xr-var-list,\n",
+       ".xr-var-item {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-var-item > div,\n",
+       ".xr-var-item label,\n",
+       ".xr-var-item > .xr-var-name span {\n",
+       "  background-color: var(--xr-background-color-row-even);\n",
+       "  margin-bottom: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-var-item > .xr-var-name:hover span {\n",
+       "  padding-right: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-var-list > li:nth-child(odd) > div,\n",
+       ".xr-var-list > li:nth-child(odd) > label,\n",
+       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
+       "  background-color: var(--xr-background-color-row-odd);\n",
+       "}\n",
+       "\n",
+       ".xr-var-name {\n",
+       "  grid-column: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-var-dims {\n",
+       "  grid-column: 2;\n",
+       "}\n",
+       "\n",
+       ".xr-var-dtype {\n",
+       "  grid-column: 3;\n",
+       "  text-align: right;\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-var-preview {\n",
+       "  grid-column: 4;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name,\n",
+       ".xr-var-dims,\n",
+       ".xr-var-dtype,\n",
+       ".xr-preview,\n",
+       ".xr-attrs dt {\n",
+       "  white-space: nowrap;\n",
+       "  overflow: hidden;\n",
+       "  text-overflow: ellipsis;\n",
+       "  padding-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name:hover,\n",
+       ".xr-var-dims:hover,\n",
+       ".xr-var-dtype:hover,\n",
+       ".xr-attrs dt:hover {\n",
+       "  overflow: visible;\n",
+       "  width: auto;\n",
+       "  z-index: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-var-attrs,\n",
+       ".xr-var-data {\n",
+       "  display: none;\n",
+       "  background-color: var(--xr-background-color) !important;\n",
+       "  padding-bottom: 5px !important;\n",
+       "}\n",
+       "\n",
+       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
+       ".xr-var-data-in:checked ~ .xr-var-data {\n",
+       "  display: block;\n",
+       "}\n",
+       "\n",
+       ".xr-var-data > table {\n",
+       "  float: right;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name span,\n",
+       ".xr-var-data,\n",
+       ".xr-attrs {\n",
+       "  padding-left: 25px !important;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs,\n",
+       ".xr-var-attrs,\n",
+       ".xr-var-data {\n",
+       "  grid-column: 1 / -1;\n",
+       "}\n",
+       "\n",
+       "dl.xr-attrs {\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 125px auto;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt,\n",
+       ".xr-attrs dd {\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "  float: left;\n",
+       "  padding-right: 10px;\n",
+       "  width: auto;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt {\n",
+       "  font-weight: normal;\n",
+       "  grid-column: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt:hover span {\n",
+       "  display: inline-block;\n",
+       "  background: var(--xr-background-color);\n",
+       "  padding-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dd {\n",
+       "  grid-column: 2;\n",
+       "  white-space: pre-wrap;\n",
+       "  word-break: break-all;\n",
+       "}\n",
+       "\n",
+       ".xr-icon-database,\n",
+       ".xr-icon-file-text2 {\n",
+       "  display: inline-block;\n",
+       "  vertical-align: middle;\n",
+       "  width: 1em;\n",
+       "  height: 1.5em !important;\n",
+       "  stroke-width: 0;\n",
+       "  stroke: currentColor;\n",
+       "  fill: currentColor;\n",
+       "}\n",
+       "</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray (t_dim: 48, z_dim: 2, y_dim: 375, x_dim: 297)&gt;\n",
+       "array([[[[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.41602644, 15.32911238, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.43067488, 15.82813581, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.40430769, 15.31739363, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.41895613, 15.82813581, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "...\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.23080518, 17.24447705, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.2093208 , 17.03353955, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]]]])\n",
+       "Coordinates:\n",
+       "  * t_dim      (t_dim) datetime64[ns] 2010-01-01 2010-02-01 ... 2013-12-01\n",
+       "    depth_0    (z_dim, y_dim, x_dim) float32 0.5 0.5 0.5 0.5 ... 1.5 1.5 1.5 1.5\n",
+       "    longitude  (y_dim, x_dim) float32 ...\n",
+       "    latitude   (y_dim, x_dim) float32 ...\n",
+       "Dimensions without coordinates: z_dim, y_dim, x_dim</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>t_dim</span>: 48</li><li><span>z_dim</span>: 2</li><li><span>y_dim</span>: 375</li><li><span>x_dim</span>: 297</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-73e28601-f6f8-49cf-bfd5-e4435aeb6293' class='xr-array-in' type='checkbox' checked><label for='section-73e28601-f6f8-49cf-bfd5-e4435aeb6293' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>nan nan nan nan nan nan nan nan ... nan nan nan nan nan nan nan nan</span></div><div class='xr-array-data'><pre>array([[[[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.41602644, 15.32911238, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.43067488, 15.82813581, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.40430769, 15.31739363, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.41895613, 15.82813581, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "...\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.23080518, 17.24447705, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.2093208 , 17.03353955, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]]]])</pre></div></div></li><li class='xr-section-item'><input id='section-e705bea7-5dda-4e40-ad2a-1ca053dbb438' class='xr-section-summary-in' type='checkbox'  checked><label for='section-e705bea7-5dda-4e40-ad2a-1ca053dbb438' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>t_dim</span></div><div class='xr-var-dims'>(t_dim)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2010-01-01 ... 2013-12-01</div><input id='attrs-5c51ac0c-e128-46e6-b7cc-4879e83974fe' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-5c51ac0c-e128-46e6-b7cc-4879e83974fe' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f9de55e9-955d-4dcc-88b0-d39229b65214' class='xr-var-data-in' type='checkbox'><label for='data-f9de55e9-955d-4dcc-88b0-d39229b65214' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2010-01-01T00:00:00.000000000&#x27;, &#x27;2010-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-03-01T00:00:00.000000000&#x27;, &#x27;2010-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-05-01T00:00:00.000000000&#x27;, &#x27;2010-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-07-01T00:00:00.000000000&#x27;, &#x27;2010-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-09-01T00:00:00.000000000&#x27;, &#x27;2010-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-11-01T00:00:00.000000000&#x27;, &#x27;2010-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-01-01T00:00:00.000000000&#x27;, &#x27;2011-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-03-01T00:00:00.000000000&#x27;, &#x27;2011-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-05-01T00:00:00.000000000&#x27;, &#x27;2011-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-07-01T00:00:00.000000000&#x27;, &#x27;2011-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-09-01T00:00:00.000000000&#x27;, &#x27;2011-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-11-01T00:00:00.000000000&#x27;, &#x27;2011-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-01-01T00:00:00.000000000&#x27;, &#x27;2012-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-03-01T00:00:00.000000000&#x27;, &#x27;2012-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-05-01T00:00:00.000000000&#x27;, &#x27;2012-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-07-01T00:00:00.000000000&#x27;, &#x27;2012-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-09-01T00:00:00.000000000&#x27;, &#x27;2012-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-11-01T00:00:00.000000000&#x27;, &#x27;2012-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-01-01T00:00:00.000000000&#x27;, &#x27;2013-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-03-01T00:00:00.000000000&#x27;, &#x27;2013-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-05-01T00:00:00.000000000&#x27;, &#x27;2013-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-07-01T00:00:00.000000000&#x27;, &#x27;2013-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-09-01T00:00:00.000000000&#x27;, &#x27;2013-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-11-01T00:00:00.000000000&#x27;, &#x27;2013-12-01T00:00:00.000000000&#x27;],\n",
+       "      dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>depth_0</span></div><div class='xr-var-dims'>(z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>0.5 0.5 0.5 0.5 ... 1.5 1.5 1.5 1.5</div><input id='attrs-73e426ea-9b3c-4905-bc8c-b90a991fb7d3' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-73e426ea-9b3c-4905-bc8c-b90a991fb7d3' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-706f7534-2a4d-49b2-b047-d51d0d3696a6' class='xr-var-data-in' type='checkbox'><label for='data-706f7534-2a4d-49b2-b047-d51d0d3696a6' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>m</dd><dt><span>standard_name :</span></dt><dd>Depth at time zero on the t-grid</dd></dl></div><div class='xr-var-data'><pre>array([[[0.5       , 0.5       , 0.5       , ..., 0.5       ,\n",
+       "         0.5       , 0.5       ],\n",
+       "        [0.5       , 0.4975586 , 0.4975586 , ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        [0.5       , 0.4975586 , 0.4975586 , ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        ...,\n",
+       "        [0.5       , 0.10009766, 0.10009766, ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        [0.5       , 0.10009766, 0.10009766, ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        [0.5       , 0.5       , 0.5       , ..., 0.5       ,\n",
+       "         0.5       , 0.5       ]],\n",
+       "\n",
+       "       [[1.5       , 1.5       , 1.5       , ..., 1.5       ,\n",
+       "         1.5       , 1.5       ],\n",
+       "        [1.5       , 1.5170898 , 1.5170898 , ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        [1.5       , 1.5170898 , 1.5170898 , ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        ...,\n",
+       "        [1.5       , 0.30029297, 0.30029297, ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        [1.5       , 0.30029297, 0.30029297, ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        [1.5       , 1.5       , 1.5       , ..., 1.5       ,\n",
+       "         1.5       , 1.5       ]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>longitude</span></div><div class='xr-var-dims'>(y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-9ed2cc24-cf9c-4b2f-b47b-8ec8dc9f45fd' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9ed2cc24-cf9c-4b2f-b47b-8ec8dc9f45fd' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7b74c78a-38d3-4b38-a9a5-4a700b49b991' class='xr-var-data-in' type='checkbox'><label for='data-7b74c78a-38d3-4b38-a9a5-4a700b49b991' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>[111375 values with dtype=float32]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>latitude</span></div><div class='xr-var-dims'>(y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-7106c04a-2484-4eda-a7f8-16b5e9154e56' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-7106c04a-2484-4eda-a7f8-16b5e9154e56' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7306da0e-e9e7-4c39-a909-104547baa23f' class='xr-var-data-in' type='checkbox'><label for='data-7306da0e-e9e7-4c39-a909-104547baa23f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>[111375 values with dtype=float32]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-5e239a27-e6e0-43db-a93d-8c1600af0ee6' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-5e239a27-e6e0-43db-a93d-8c1600af0ee6' class='xr-section-summary'  title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
+      ],
+      "text/plain": [
+       "<xarray.DataArray (t_dim: 48, z_dim: 2, y_dim: 375, x_dim: 297)>\n",
+       "array([[[[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.41602644, 15.32911238, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.43067488, 15.82813581, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.40430769, 15.31739363, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.41895613, 15.82813581, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "...\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.23080518, 17.24447705, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.2093208 , 17.03353955, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]]]])\n",
+       "Coordinates:\n",
+       "  * t_dim      (t_dim) datetime64[ns] 2010-01-01 2010-02-01 ... 2013-12-01\n",
+       "    depth_0    (z_dim, y_dim, x_dim) float32 0.5 0.5 0.5 0.5 ... 1.5 1.5 1.5 1.5\n",
+       "    longitude  (y_dim, x_dim) float32 ...\n",
+       "    latitude   (y_dim, x_dim) float32 ...\n",
+       "Dimensions without coordinates: z_dim, y_dim, x_dim"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "temperature"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "744a6f72-3398-43d2-97b9-1fa879b14e50",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<matplotlib.collections.QuadMesh at 0x7fd6340538e0>"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 432x288 with 2 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "temperature[0,0,:,:].plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ab0997fc-1ef7-4e88-b89c-2554676c02a5",
+   "metadata": {},
+   "source": [
+    "Check out time series at 2 different grid points"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "720de2e8-7a6c-47a2-865f-52f614bbffcb",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[<matplotlib.lines.Line2D at 0x7fd62ffaabb0>]"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "temperature[:,0,50,50].plot()\n",
+    "temperature[:,0,200,200].plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f9b80240-f779-42d6-8a66-c218152e41c0",
+   "metadata": {},
+   "source": [
+    "Create a `coast.Process_data` object, and call the `seasonal_decomposition` function, passing in the required arguments. The first two arguments are:\n",
+    "1. The input data, here the temperature data as an xarray DataArray\n",
+    "2. The number of chuncks to split the data into. Here we split the data into 2 chunks so that the dask scheduler will try to run 4 processes in parallel\n",
+    "\n",
+    "The remaining arguments are keyword arguments for the underlying `statsmodels.tsa.seasonal.seasonal_decompose` function, which are documented on the [statsmodels documentation pages](https://www.statsmodels.org/stable/generated/statsmodels.tsa.seasonal.seasonal_decompose.html#statsmodels.tsa.seasonal.seasonal_decompose).  Here we specify:\n",
+    "\n",
+    "3. three The type of model, i.e. an additive model\n",
+    "4. The period of the seasonal cycle, here it is 6 months\n",
+    "5. Extrapolate the trend component to cover the entire range of the time series (this is required because the trend is calculated using a convolution filter) \n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "5dc94b1c-58bb-492e-8ff8-2df5b25f5b2d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "proc_data = coast.Process_data()\n",
+    "grd = proc_data.seasonal_decomposition(temperature, 2, model=\"additive\", period=6, extrapolate_trend=\"freq\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "08457970-bf03-4813-88cc-91ef02b1a3a1",
+   "metadata": {},
+   "source": [
+    "The returned xarray Dataset contains the decomposed time series (trend, seasonal, residual) as dask arrays"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "57206039-b377-4ac0-a3b5-2fc19cd3b5a5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
+       "<defs>\n",
+       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
+       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
+       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
+       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
+       "</symbol>\n",
+       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
+       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
+       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "</symbol>\n",
+       "</defs>\n",
+       "</svg>\n",
+       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
+       " *\n",
+       " */\n",
+       "\n",
+       ":root {\n",
+       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
+       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
+       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
+       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
+       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
+       "  --xr-background-color: var(--jp-layout-color0, white);\n",
+       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
+       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
+       "}\n",
+       "\n",
+       "html[theme=dark],\n",
+       "body.vscode-dark {\n",
+       "  --xr-font-color0: rgba(255, 255, 255, 1);\n",
+       "  --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
+       "  --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
+       "  --xr-border-color: #1F1F1F;\n",
+       "  --xr-disabled-color: #515151;\n",
+       "  --xr-background-color: #111111;\n",
+       "  --xr-background-color-row-even: #111111;\n",
+       "  --xr-background-color-row-odd: #313131;\n",
+       "}\n",
+       "\n",
+       ".xr-wrap {\n",
+       "  display: block !important;\n",
+       "  min-width: 300px;\n",
+       "  max-width: 700px;\n",
+       "}\n",
+       "\n",
+       ".xr-text-repr-fallback {\n",
+       "  /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-header {\n",
+       "  padding-top: 6px;\n",
+       "  padding-bottom: 6px;\n",
+       "  margin-bottom: 4px;\n",
+       "  border-bottom: solid 1px var(--xr-border-color);\n",
+       "}\n",
+       "\n",
+       ".xr-header > div,\n",
+       ".xr-header > ul {\n",
+       "  display: inline;\n",
+       "  margin-top: 0;\n",
+       "  margin-bottom: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-obj-type,\n",
+       ".xr-array-name {\n",
+       "  margin-left: 2px;\n",
+       "  margin-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-obj-type {\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-sections {\n",
+       "  padding-left: 0 !important;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input + label {\n",
+       "  color: var(--xr-disabled-color);\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input:enabled + label {\n",
+       "  cursor: pointer;\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input:enabled + label:hover {\n",
+       "  color: var(--xr-font-color0);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary {\n",
+       "  grid-column: 1;\n",
+       "  color: var(--xr-font-color2);\n",
+       "  font-weight: 500;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary > span {\n",
+       "  display: inline-block;\n",
+       "  padding-left: 0.5em;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:disabled + label {\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in + label:before {\n",
+       "  display: inline-block;\n",
+       "  content: '►';\n",
+       "  font-size: 11px;\n",
+       "  width: 15px;\n",
+       "  text-align: center;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:disabled + label:before {\n",
+       "  color: var(--xr-disabled-color);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked + label:before {\n",
+       "  content: '▼';\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked + label > span {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary,\n",
+       ".xr-section-inline-details {\n",
+       "  padding-top: 4px;\n",
+       "  padding-bottom: 4px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-inline-details {\n",
+       "  grid-column: 2 / -1;\n",
+       "}\n",
+       "\n",
+       ".xr-section-details {\n",
+       "  display: none;\n",
+       "  grid-column: 1 / -1;\n",
+       "  margin-bottom: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-array-wrap {\n",
+       "  grid-column: 1 / -1;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 20px auto;\n",
+       "}\n",
+       "\n",
+       ".xr-array-wrap > label {\n",
+       "  grid-column: 1;\n",
+       "  vertical-align: top;\n",
+       "}\n",
+       "\n",
+       ".xr-preview {\n",
+       "  color: var(--xr-font-color3);\n",
+       "}\n",
+       "\n",
+       ".xr-array-preview,\n",
+       ".xr-array-data {\n",
+       "  padding: 0 5px !important;\n",
+       "  grid-column: 2;\n",
+       "}\n",
+       "\n",
+       ".xr-array-data,\n",
+       ".xr-array-in:checked ~ .xr-array-preview {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-array-in:checked ~ .xr-array-data,\n",
+       ".xr-array-preview {\n",
+       "  display: inline-block;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list {\n",
+       "  display: inline-block !important;\n",
+       "  list-style: none;\n",
+       "  padding: 0 !important;\n",
+       "  margin: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list li {\n",
+       "  display: inline-block;\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list:before {\n",
+       "  content: '(';\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list:after {\n",
+       "  content: ')';\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list li:not(:last-child):after {\n",
+       "  content: ',';\n",
+       "  padding-right: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-has-index {\n",
+       "  font-weight: bold;\n",
+       "}\n",
+       "\n",
+       ".xr-var-list,\n",
+       ".xr-var-item {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-var-item > div,\n",
+       ".xr-var-item label,\n",
+       ".xr-var-item > .xr-var-name span {\n",
+       "  background-color: var(--xr-background-color-row-even);\n",
+       "  margin-bottom: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-var-item > .xr-var-name:hover span {\n",
+       "  padding-right: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-var-list > li:nth-child(odd) > div,\n",
+       ".xr-var-list > li:nth-child(odd) > label,\n",
+       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
+       "  background-color: var(--xr-background-color-row-odd);\n",
+       "}\n",
+       "\n",
+       ".xr-var-name {\n",
+       "  grid-column: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-var-dims {\n",
+       "  grid-column: 2;\n",
+       "}\n",
+       "\n",
+       ".xr-var-dtype {\n",
+       "  grid-column: 3;\n",
+       "  text-align: right;\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-var-preview {\n",
+       "  grid-column: 4;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name,\n",
+       ".xr-var-dims,\n",
+       ".xr-var-dtype,\n",
+       ".xr-preview,\n",
+       ".xr-attrs dt {\n",
+       "  white-space: nowrap;\n",
+       "  overflow: hidden;\n",
+       "  text-overflow: ellipsis;\n",
+       "  padding-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name:hover,\n",
+       ".xr-var-dims:hover,\n",
+       ".xr-var-dtype:hover,\n",
+       ".xr-attrs dt:hover {\n",
+       "  overflow: visible;\n",
+       "  width: auto;\n",
+       "  z-index: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-var-attrs,\n",
+       ".xr-var-data {\n",
+       "  display: none;\n",
+       "  background-color: var(--xr-background-color) !important;\n",
+       "  padding-bottom: 5px !important;\n",
+       "}\n",
+       "\n",
+       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
+       ".xr-var-data-in:checked ~ .xr-var-data {\n",
+       "  display: block;\n",
+       "}\n",
+       "\n",
+       ".xr-var-data > table {\n",
+       "  float: right;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name span,\n",
+       ".xr-var-data,\n",
+       ".xr-attrs {\n",
+       "  padding-left: 25px !important;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs,\n",
+       ".xr-var-attrs,\n",
+       ".xr-var-data {\n",
+       "  grid-column: 1 / -1;\n",
+       "}\n",
+       "\n",
+       "dl.xr-attrs {\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 125px auto;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt,\n",
+       ".xr-attrs dd {\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "  float: left;\n",
+       "  padding-right: 10px;\n",
+       "  width: auto;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt {\n",
+       "  font-weight: normal;\n",
+       "  grid-column: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt:hover span {\n",
+       "  display: inline-block;\n",
+       "  background: var(--xr-background-color);\n",
+       "  padding-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dd {\n",
+       "  grid-column: 2;\n",
+       "  white-space: pre-wrap;\n",
+       "  word-break: break-all;\n",
+       "}\n",
+       "\n",
+       ".xr-icon-database,\n",
+       ".xr-icon-file-text2 {\n",
+       "  display: inline-block;\n",
+       "  vertical-align: middle;\n",
+       "  width: 1em;\n",
+       "  height: 1.5em !important;\n",
+       "  stroke-width: 0;\n",
+       "  stroke: currentColor;\n",
+       "  fill: currentColor;\n",
+       "}\n",
+       "</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
+       "Dimensions:    (t_dim: 48, z_dim: 2, y_dim: 375, x_dim: 297)\n",
+       "Coordinates:\n",
+       "  * t_dim      (t_dim) datetime64[ns] 2010-01-01 2010-02-01 ... 2013-12-01\n",
+       "    depth_0    (z_dim, y_dim, x_dim) float32 dask.array&lt;chunksize=(1, 375, 297), meta=np.ndarray&gt;\n",
+       "    longitude  (y_dim, x_dim) float32 dask.array&lt;chunksize=(375, 297), meta=np.ndarray&gt;\n",
+       "    latitude   (y_dim, x_dim) float32 dask.array&lt;chunksize=(375, 297), meta=np.ndarray&gt;\n",
+       "Dimensions without coordinates: z_dim, y_dim, x_dim\n",
+       "Data variables:\n",
+       "    trend      (t_dim, z_dim, y_dim, x_dim) float64 dask.array&lt;chunksize=(48, 1, 375, 297), meta=np.ndarray&gt;\n",
+       "    seasonal   (t_dim, z_dim, y_dim, x_dim) float64 dask.array&lt;chunksize=(48, 1, 375, 297), meta=np.ndarray&gt;\n",
+       "    residual   (t_dim, z_dim, y_dim, x_dim) float64 dask.array&lt;chunksize=(48, 1, 375, 297), meta=np.ndarray&gt;</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-f2532df0-cf60-456c-baae-636c8c51d412' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-f2532df0-cf60-456c-baae-636c8c51d412' class='xr-section-summary'  title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>t_dim</span>: 48</li><li><span>z_dim</span>: 2</li><li><span>y_dim</span>: 375</li><li><span>x_dim</span>: 297</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-31b5f116-74f9-4edf-a495-016365826584' class='xr-section-summary-in' type='checkbox'  checked><label for='section-31b5f116-74f9-4edf-a495-016365826584' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>t_dim</span></div><div class='xr-var-dims'>(t_dim)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2010-01-01 ... 2013-12-01</div><input id='attrs-2920728d-aa29-487e-b859-6e06e9f773de' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-2920728d-aa29-487e-b859-6e06e9f773de' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f31a55a4-5bf0-4ed0-ac2c-e301e49f844a' class='xr-var-data-in' type='checkbox'><label for='data-f31a55a4-5bf0-4ed0-ac2c-e301e49f844a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2010-01-01T00:00:00.000000000&#x27;, &#x27;2010-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-03-01T00:00:00.000000000&#x27;, &#x27;2010-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-05-01T00:00:00.000000000&#x27;, &#x27;2010-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-07-01T00:00:00.000000000&#x27;, &#x27;2010-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-09-01T00:00:00.000000000&#x27;, &#x27;2010-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-11-01T00:00:00.000000000&#x27;, &#x27;2010-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-01-01T00:00:00.000000000&#x27;, &#x27;2011-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-03-01T00:00:00.000000000&#x27;, &#x27;2011-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-05-01T00:00:00.000000000&#x27;, &#x27;2011-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-07-01T00:00:00.000000000&#x27;, &#x27;2011-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-09-01T00:00:00.000000000&#x27;, &#x27;2011-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-11-01T00:00:00.000000000&#x27;, &#x27;2011-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-01-01T00:00:00.000000000&#x27;, &#x27;2012-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-03-01T00:00:00.000000000&#x27;, &#x27;2012-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-05-01T00:00:00.000000000&#x27;, &#x27;2012-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-07-01T00:00:00.000000000&#x27;, &#x27;2012-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-09-01T00:00:00.000000000&#x27;, &#x27;2012-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-11-01T00:00:00.000000000&#x27;, &#x27;2012-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-01-01T00:00:00.000000000&#x27;, &#x27;2013-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-03-01T00:00:00.000000000&#x27;, &#x27;2013-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-05-01T00:00:00.000000000&#x27;, &#x27;2013-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-07-01T00:00:00.000000000&#x27;, &#x27;2013-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-09-01T00:00:00.000000000&#x27;, &#x27;2013-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-11-01T00:00:00.000000000&#x27;, &#x27;2013-12-01T00:00:00.000000000&#x27;],\n",
+       "      dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>depth_0</span></div><div class='xr-var-dims'>(z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1, 375, 297), meta=np.ndarray&gt;</div><input id='attrs-4ad94dfd-66c5-4496-b05c-99ab5eac8e7f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-4ad94dfd-66c5-4496-b05c-99ab5eac8e7f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4ace5eca-3520-46af-98c1-3b102551f751' class='xr-var-data-in' type='checkbox'><label for='data-4ace5eca-3520-46af-98c1-3b102551f751' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>m</dd><dt><span>standard_name :</span></dt><dd>Depth at time zero on the t-grid</dd></dl></div><div class='xr-var-data'><table>\n",
+       "    <tr>\n",
+       "        <td>\n",
+       "            <table>\n",
+       "                <thead>\n",
+       "                    <tr>\n",
+       "                        <td> </td>\n",
+       "                        <th> Array </th>\n",
+       "                        <th> Chunk </th>\n",
+       "                    </tr>\n",
+       "                </thead>\n",
+       "                <tbody>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Bytes </th>\n",
+       "                        <td> 870.12 kiB </td>\n",
+       "                        <td> 435.06 kiB </td>\n",
+       "                    </tr>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Shape </th>\n",
+       "                        <td> (2, 375, 297) </td>\n",
+       "                        <td> (1, 375, 297) </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                        <th> Count </th>\n",
+       "                        <td> 2 Tasks </td>\n",
+       "                        <td> 2 Chunks </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                    <th> Type </th>\n",
+       "                    <td> float32 </td>\n",
+       "                    <td> numpy.ndarray </td>\n",
+       "                    </tr>\n",
+       "                </tbody>\n",
+       "            </table>\n",
+       "        </td>\n",
+       "        <td>\n",
+       "        <svg width=\"169\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"10\" y1=\"120\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"127\" />\n",
+       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,134.9485979497544 10.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"10\" y1=\"0\" x2=\"105\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"17\" y1=\"7\" x2=\"112\" y2=\"7\" />\n",
+       "  <line x1=\"24\" y1=\"14\" x2=\"119\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"105\" y1=\"0\" x2=\"119\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"10.0,0.0 105.04,0.0 119.9885979497544,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"24\" y1=\"14\" x2=\"119\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"24\" y1=\"134\" x2=\"119\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"119\" y1=\"14\" x2=\"119\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"24.9485979497544,14.948597949754403 119.9885979497544,14.948597949754403 119.9885979497544,134.9485979497544 24.9485979497544,134.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"72.468598\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >297</text>\n",
+       "  <text x=\"139.988598\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,139.988598,74.948598)\">375</text>\n",
+       "  <text x=\"7.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,147.474299)\">2</text>\n",
+       "</svg>\n",
+       "        </td>\n",
+       "    </tr>\n",
+       "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>longitude</span></div><div class='xr-var-dims'>(y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(375, 297), meta=np.ndarray&gt;</div><input id='attrs-554a763e-ba5b-46e4-9f00-b3a2f6614c66' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-554a763e-ba5b-46e4-9f00-b3a2f6614c66' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9f7e39be-3701-4aaf-bd29-e57da491e7af' class='xr-var-data-in' type='checkbox'><label for='data-9f7e39be-3701-4aaf-bd29-e57da491e7af' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
+       "    <tr>\n",
+       "        <td>\n",
+       "            <table>\n",
+       "                <thead>\n",
+       "                    <tr>\n",
+       "                        <td> </td>\n",
+       "                        <th> Array </th>\n",
+       "                        <th> Chunk </th>\n",
+       "                    </tr>\n",
+       "                </thead>\n",
+       "                <tbody>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Bytes </th>\n",
+       "                        <td> 435.06 kiB </td>\n",
+       "                        <td> 435.06 kiB </td>\n",
+       "                    </tr>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Shape </th>\n",
+       "                        <td> (375, 297) </td>\n",
+       "                        <td> (375, 297) </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                        <th> Count </th>\n",
+       "                        <td> 2 Tasks </td>\n",
+       "                        <td> 1 Chunks </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                    <th> Type </th>\n",
+       "                    <td> float32 </td>\n",
+       "                    <td> numpy.ndarray </td>\n",
+       "                    </tr>\n",
+       "                </tbody>\n",
+       "            </table>\n",
+       "        </td>\n",
+       "        <td>\n",
+       "        <svg width=\"145\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"95\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"0\" y1=\"120\" x2=\"95\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"95\" y1=\"0\" x2=\"95\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"0.0,0.0 95.04,0.0 95.04,120.0 0.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"47.520000\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >297</text>\n",
+       "  <text x=\"115.040000\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,115.040000,60.000000)\">375</text>\n",
+       "</svg>\n",
+       "        </td>\n",
+       "    </tr>\n",
+       "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>latitude</span></div><div class='xr-var-dims'>(y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(375, 297), meta=np.ndarray&gt;</div><input id='attrs-701b5860-2484-434c-9e7c-9061d616bde8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-701b5860-2484-434c-9e7c-9061d616bde8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5a326446-63ab-4a3f-8caf-0c408ba77422' class='xr-var-data-in' type='checkbox'><label for='data-5a326446-63ab-4a3f-8caf-0c408ba77422' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
+       "    <tr>\n",
+       "        <td>\n",
+       "            <table>\n",
+       "                <thead>\n",
+       "                    <tr>\n",
+       "                        <td> </td>\n",
+       "                        <th> Array </th>\n",
+       "                        <th> Chunk </th>\n",
+       "                    </tr>\n",
+       "                </thead>\n",
+       "                <tbody>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Bytes </th>\n",
+       "                        <td> 435.06 kiB </td>\n",
+       "                        <td> 435.06 kiB </td>\n",
+       "                    </tr>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Shape </th>\n",
+       "                        <td> (375, 297) </td>\n",
+       "                        <td> (375, 297) </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                        <th> Count </th>\n",
+       "                        <td> 2 Tasks </td>\n",
+       "                        <td> 1 Chunks </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                    <th> Type </th>\n",
+       "                    <td> float32 </td>\n",
+       "                    <td> numpy.ndarray </td>\n",
+       "                    </tr>\n",
+       "                </tbody>\n",
+       "            </table>\n",
+       "        </td>\n",
+       "        <td>\n",
+       "        <svg width=\"145\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"95\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"0\" y1=\"120\" x2=\"95\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"95\" y1=\"0\" x2=\"95\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"0.0,0.0 95.04,0.0 95.04,120.0 0.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"47.520000\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >297</text>\n",
+       "  <text x=\"115.040000\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,115.040000,60.000000)\">375</text>\n",
+       "</svg>\n",
+       "        </td>\n",
+       "    </tr>\n",
+       "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-14ce287c-c5c5-412e-92b2-6dcea1c60ed8' class='xr-section-summary-in' type='checkbox'  checked><label for='section-14ce287c-c5c5-412e-92b2-6dcea1c60ed8' class='xr-section-summary' >Data variables: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>trend</span></div><div class='xr-var-dims'>(t_dim, z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(48, 1, 375, 297), meta=np.ndarray&gt;</div><input id='attrs-5d98bcb0-3bab-41c8-b0c5-df61fd50e531' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-5d98bcb0-3bab-41c8-b0c5-df61fd50e531' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9485bbf8-ce7a-40f9-b71a-108b8f873600' class='xr-var-data-in' type='checkbox'><label for='data-9485bbf8-ce7a-40f9-b71a-108b8f873600' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
+       "    <tr>\n",
+       "        <td>\n",
+       "            <table>\n",
+       "                <thead>\n",
+       "                    <tr>\n",
+       "                        <td> </td>\n",
+       "                        <th> Array </th>\n",
+       "                        <th> Chunk </th>\n",
+       "                    </tr>\n",
+       "                </thead>\n",
+       "                <tbody>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Bytes </th>\n",
+       "                        <td> 81.57 MiB </td>\n",
+       "                        <td> 40.79 MiB </td>\n",
+       "                    </tr>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Shape </th>\n",
+       "                        <td> (48, 2, 375, 297) </td>\n",
+       "                        <td> (48, 1, 375, 297) </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                        <th> Count </th>\n",
+       "                        <td> 22 Tasks </td>\n",
+       "                        <td> 2 Chunks </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                    <th> Type </th>\n",
+       "                    <td> float64 </td>\n",
+       "                    <td> numpy.ndarray </td>\n",
+       "                    </tr>\n",
+       "                </tbody>\n",
+       "            </table>\n",
+       "        </td>\n",
+       "        <td>\n",
+       "        <svg width=\"377\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"39\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"0\" y1=\"25\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"39\" y1=\"0\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"0.0,0.0 39.91615976667903,0.0 39.91615976667903,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"19.958080\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >48</text>\n",
+       "  <text x=\"59.916160\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,59.916160,12.706308)\">1</text>\n",
+       "\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"123\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"109\" y1=\"120\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"109\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"116\" y1=\"7\" x2=\"116\" y2=\"127\" />\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"109.0,0.0 123.9485979497544,14.948597949754403 123.9485979497544,134.9485979497544 109.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"204\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"116\" y1=\"7\" x2=\"211\" y2=\"7\" />\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"123\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"204\" y1=\"0\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"109.0,0.0 204.04000000000002,0.0 218.98859794975442,14.948597949754403 123.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"123\" y1=\"134\" x2=\"218\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"218\" y1=\"14\" x2=\"218\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"123.9485979497544,14.948597949754403 218.98859794975442,14.948597949754403 218.98859794975442,134.9485979497544 123.9485979497544,134.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"171.468598\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >297</text>\n",
+       "  <text x=\"238.988598\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,238.988598,74.948598)\">375</text>\n",
+       "  <text x=\"106.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,106.474299,147.474299)\">2</text>\n",
+       "</svg>\n",
+       "        </td>\n",
+       "    </tr>\n",
+       "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>seasonal</span></div><div class='xr-var-dims'>(t_dim, z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(48, 1, 375, 297), meta=np.ndarray&gt;</div><input id='attrs-c06c7d2e-d140-4f43-bf31-47723985e7d0' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-c06c7d2e-d140-4f43-bf31-47723985e7d0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-fb0fc353-1c56-4104-a777-efcbb55de8b0' class='xr-var-data-in' type='checkbox'><label for='data-fb0fc353-1c56-4104-a777-efcbb55de8b0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
+       "    <tr>\n",
+       "        <td>\n",
+       "            <table>\n",
+       "                <thead>\n",
+       "                    <tr>\n",
+       "                        <td> </td>\n",
+       "                        <th> Array </th>\n",
+       "                        <th> Chunk </th>\n",
+       "                    </tr>\n",
+       "                </thead>\n",
+       "                <tbody>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Bytes </th>\n",
+       "                        <td> 81.57 MiB </td>\n",
+       "                        <td> 40.79 MiB </td>\n",
+       "                    </tr>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Shape </th>\n",
+       "                        <td> (48, 2, 375, 297) </td>\n",
+       "                        <td> (48, 1, 375, 297) </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                        <th> Count </th>\n",
+       "                        <td> 22 Tasks </td>\n",
+       "                        <td> 2 Chunks </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                    <th> Type </th>\n",
+       "                    <td> float64 </td>\n",
+       "                    <td> numpy.ndarray </td>\n",
+       "                    </tr>\n",
+       "                </tbody>\n",
+       "            </table>\n",
+       "        </td>\n",
+       "        <td>\n",
+       "        <svg width=\"377\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"39\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"0\" y1=\"25\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"39\" y1=\"0\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"0.0,0.0 39.91615976667903,0.0 39.91615976667903,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"19.958080\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >48</text>\n",
+       "  <text x=\"59.916160\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,59.916160,12.706308)\">1</text>\n",
+       "\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"123\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"109\" y1=\"120\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"109\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"116\" y1=\"7\" x2=\"116\" y2=\"127\" />\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"109.0,0.0 123.9485979497544,14.948597949754403 123.9485979497544,134.9485979497544 109.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"204\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"116\" y1=\"7\" x2=\"211\" y2=\"7\" />\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"123\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"204\" y1=\"0\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"109.0,0.0 204.04000000000002,0.0 218.98859794975442,14.948597949754403 123.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"123\" y1=\"134\" x2=\"218\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"218\" y1=\"14\" x2=\"218\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"123.9485979497544,14.948597949754403 218.98859794975442,14.948597949754403 218.98859794975442,134.9485979497544 123.9485979497544,134.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"171.468598\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >297</text>\n",
+       "  <text x=\"238.988598\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,238.988598,74.948598)\">375</text>\n",
+       "  <text x=\"106.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,106.474299,147.474299)\">2</text>\n",
+       "</svg>\n",
+       "        </td>\n",
+       "    </tr>\n",
+       "</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>residual</span></div><div class='xr-var-dims'>(t_dim, z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(48, 1, 375, 297), meta=np.ndarray&gt;</div><input id='attrs-f98791fb-47aa-4ced-b65c-cc9431958e37' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f98791fb-47aa-4ced-b65c-cc9431958e37' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5e803c04-8220-4bfc-b716-062b907af010' class='xr-var-data-in' type='checkbox'><label for='data-5e803c04-8220-4bfc-b716-062b907af010' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
+       "    <tr>\n",
+       "        <td>\n",
+       "            <table>\n",
+       "                <thead>\n",
+       "                    <tr>\n",
+       "                        <td> </td>\n",
+       "                        <th> Array </th>\n",
+       "                        <th> Chunk </th>\n",
+       "                    </tr>\n",
+       "                </thead>\n",
+       "                <tbody>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Bytes </th>\n",
+       "                        <td> 81.57 MiB </td>\n",
+       "                        <td> 40.79 MiB </td>\n",
+       "                    </tr>\n",
+       "                    \n",
+       "                    <tr>\n",
+       "                        <th> Shape </th>\n",
+       "                        <td> (48, 2, 375, 297) </td>\n",
+       "                        <td> (48, 1, 375, 297) </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                        <th> Count </th>\n",
+       "                        <td> 22 Tasks </td>\n",
+       "                        <td> 2 Chunks </td>\n",
+       "                    </tr>\n",
+       "                    <tr>\n",
+       "                    <th> Type </th>\n",
+       "                    <td> float64 </td>\n",
+       "                    <td> numpy.ndarray </td>\n",
+       "                    </tr>\n",
+       "                </tbody>\n",
+       "            </table>\n",
+       "        </td>\n",
+       "        <td>\n",
+       "        <svg width=\"377\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"39\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"0\" y1=\"25\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"39\" y1=\"0\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"0.0,0.0 39.91615976667903,0.0 39.91615976667903,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"19.958080\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >48</text>\n",
+       "  <text x=\"59.916160\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,59.916160,12.706308)\">1</text>\n",
+       "\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"123\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"109\" y1=\"120\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"109\" y2=\"120\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"116\" y1=\"7\" x2=\"116\" y2=\"127\" />\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"109.0,0.0 123.9485979497544,14.948597949754403 123.9485979497544,134.9485979497544 109.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"204\" y2=\"0\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"116\" y1=\"7\" x2=\"211\" y2=\"7\" />\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"109\" y1=\"0\" x2=\"123\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"204\" y1=\"0\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"109.0,0.0 204.04000000000002,0.0 218.98859794975442,14.948597949754403 123.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Horizontal lines -->\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"218\" y2=\"14\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"123\" y1=\"134\" x2=\"218\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Vertical lines -->\n",
+       "  <line x1=\"123\" y1=\"14\" x2=\"123\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "  <line x1=\"218\" y1=\"14\" x2=\"218\" y2=\"134\" style=\"stroke-width:2\" />\n",
+       "\n",
+       "  <!-- Colored Rectangle -->\n",
+       "  <polygon points=\"123.9485979497544,14.948597949754403 218.98859794975442,14.948597949754403 218.98859794975442,134.9485979497544 123.9485979497544,134.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
+       "\n",
+       "  <!-- Text -->\n",
+       "  <text x=\"171.468598\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >297</text>\n",
+       "  <text x=\"238.988598\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,238.988598,74.948598)\">375</text>\n",
+       "  <text x=\"106.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,106.474299,147.474299)\">2</text>\n",
+       "</svg>\n",
+       "        </td>\n",
+       "    </tr>\n",
+       "</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-35b5e0d0-a65e-450b-8b7a-5d49773e5d19' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-35b5e0d0-a65e-450b-8b7a-5d49773e5d19' class='xr-section-summary'  title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
+      ],
+      "text/plain": [
+       "<xarray.Dataset>\n",
+       "Dimensions:    (t_dim: 48, z_dim: 2, y_dim: 375, x_dim: 297)\n",
+       "Coordinates:\n",
+       "  * t_dim      (t_dim) datetime64[ns] 2010-01-01 2010-02-01 ... 2013-12-01\n",
+       "    depth_0    (z_dim, y_dim, x_dim) float32 dask.array<chunksize=(1, 375, 297), meta=np.ndarray>\n",
+       "    longitude  (y_dim, x_dim) float32 dask.array<chunksize=(375, 297), meta=np.ndarray>\n",
+       "    latitude   (y_dim, x_dim) float32 dask.array<chunksize=(375, 297), meta=np.ndarray>\n",
+       "Dimensions without coordinates: z_dim, y_dim, x_dim\n",
+       "Data variables:\n",
+       "    trend      (t_dim, z_dim, y_dim, x_dim) float64 dask.array<chunksize=(48, 1, 375, 297), meta=np.ndarray>\n",
+       "    seasonal   (t_dim, z_dim, y_dim, x_dim) float64 dask.array<chunksize=(48, 1, 375, 297), meta=np.ndarray>\n",
+       "    residual   (t_dim, z_dim, y_dim, x_dim) float64 dask.array<chunksize=(48, 1, 375, 297), meta=np.ndarray>"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "grd.dataset"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "78cb6dd3-224e-4174-be0d-07d72c86f0e7",
+   "metadata": {},
+   "source": [
+    "Execute the computation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "fa9efc0f-6f5d-4436-b489-a44dd5f30bf4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
+       "<defs>\n",
+       "<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
+       "<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
+       "<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
+       "<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
+       "</symbol>\n",
+       "<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
+       "<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
+       "<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
+       "</symbol>\n",
+       "</defs>\n",
+       "</svg>\n",
+       "<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
+       " *\n",
+       " */\n",
+       "\n",
+       ":root {\n",
+       "  --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
+       "  --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
+       "  --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
+       "  --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
+       "  --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
+       "  --xr-background-color: var(--jp-layout-color0, white);\n",
+       "  --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
+       "  --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
+       "}\n",
+       "\n",
+       "html[theme=dark],\n",
+       "body.vscode-dark {\n",
+       "  --xr-font-color0: rgba(255, 255, 255, 1);\n",
+       "  --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
+       "  --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
+       "  --xr-border-color: #1F1F1F;\n",
+       "  --xr-disabled-color: #515151;\n",
+       "  --xr-background-color: #111111;\n",
+       "  --xr-background-color-row-even: #111111;\n",
+       "  --xr-background-color-row-odd: #313131;\n",
+       "}\n",
+       "\n",
+       ".xr-wrap {\n",
+       "  display: block !important;\n",
+       "  min-width: 300px;\n",
+       "  max-width: 700px;\n",
+       "}\n",
+       "\n",
+       ".xr-text-repr-fallback {\n",
+       "  /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-header {\n",
+       "  padding-top: 6px;\n",
+       "  padding-bottom: 6px;\n",
+       "  margin-bottom: 4px;\n",
+       "  border-bottom: solid 1px var(--xr-border-color);\n",
+       "}\n",
+       "\n",
+       ".xr-header > div,\n",
+       ".xr-header > ul {\n",
+       "  display: inline;\n",
+       "  margin-top: 0;\n",
+       "  margin-bottom: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-obj-type,\n",
+       ".xr-array-name {\n",
+       "  margin-left: 2px;\n",
+       "  margin-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-obj-type {\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-sections {\n",
+       "  padding-left: 0 !important;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input + label {\n",
+       "  color: var(--xr-disabled-color);\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input:enabled + label {\n",
+       "  cursor: pointer;\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-section-item input:enabled + label:hover {\n",
+       "  color: var(--xr-font-color0);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary {\n",
+       "  grid-column: 1;\n",
+       "  color: var(--xr-font-color2);\n",
+       "  font-weight: 500;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary > span {\n",
+       "  display: inline-block;\n",
+       "  padding-left: 0.5em;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:disabled + label {\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in + label:before {\n",
+       "  display: inline-block;\n",
+       "  content: '►';\n",
+       "  font-size: 11px;\n",
+       "  width: 15px;\n",
+       "  text-align: center;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:disabled + label:before {\n",
+       "  color: var(--xr-disabled-color);\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked + label:before {\n",
+       "  content: '▼';\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked + label > span {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary,\n",
+       ".xr-section-inline-details {\n",
+       "  padding-top: 4px;\n",
+       "  padding-bottom: 4px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-inline-details {\n",
+       "  grid-column: 2 / -1;\n",
+       "}\n",
+       "\n",
+       ".xr-section-details {\n",
+       "  display: none;\n",
+       "  grid-column: 1 / -1;\n",
+       "  margin-bottom: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-section-summary-in:checked ~ .xr-section-details {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-array-wrap {\n",
+       "  grid-column: 1 / -1;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 20px auto;\n",
+       "}\n",
+       "\n",
+       ".xr-array-wrap > label {\n",
+       "  grid-column: 1;\n",
+       "  vertical-align: top;\n",
+       "}\n",
+       "\n",
+       ".xr-preview {\n",
+       "  color: var(--xr-font-color3);\n",
+       "}\n",
+       "\n",
+       ".xr-array-preview,\n",
+       ".xr-array-data {\n",
+       "  padding: 0 5px !important;\n",
+       "  grid-column: 2;\n",
+       "}\n",
+       "\n",
+       ".xr-array-data,\n",
+       ".xr-array-in:checked ~ .xr-array-preview {\n",
+       "  display: none;\n",
+       "}\n",
+       "\n",
+       ".xr-array-in:checked ~ .xr-array-data,\n",
+       ".xr-array-preview {\n",
+       "  display: inline-block;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list {\n",
+       "  display: inline-block !important;\n",
+       "  list-style: none;\n",
+       "  padding: 0 !important;\n",
+       "  margin: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list li {\n",
+       "  display: inline-block;\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list:before {\n",
+       "  content: '(';\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list:after {\n",
+       "  content: ')';\n",
+       "}\n",
+       "\n",
+       ".xr-dim-list li:not(:last-child):after {\n",
+       "  content: ',';\n",
+       "  padding-right: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-has-index {\n",
+       "  font-weight: bold;\n",
+       "}\n",
+       "\n",
+       ".xr-var-list,\n",
+       ".xr-var-item {\n",
+       "  display: contents;\n",
+       "}\n",
+       "\n",
+       ".xr-var-item > div,\n",
+       ".xr-var-item label,\n",
+       ".xr-var-item > .xr-var-name span {\n",
+       "  background-color: var(--xr-background-color-row-even);\n",
+       "  margin-bottom: 0;\n",
+       "}\n",
+       "\n",
+       ".xr-var-item > .xr-var-name:hover span {\n",
+       "  padding-right: 5px;\n",
+       "}\n",
+       "\n",
+       ".xr-var-list > li:nth-child(odd) > div,\n",
+       ".xr-var-list > li:nth-child(odd) > label,\n",
+       ".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
+       "  background-color: var(--xr-background-color-row-odd);\n",
+       "}\n",
+       "\n",
+       ".xr-var-name {\n",
+       "  grid-column: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-var-dims {\n",
+       "  grid-column: 2;\n",
+       "}\n",
+       "\n",
+       ".xr-var-dtype {\n",
+       "  grid-column: 3;\n",
+       "  text-align: right;\n",
+       "  color: var(--xr-font-color2);\n",
+       "}\n",
+       "\n",
+       ".xr-var-preview {\n",
+       "  grid-column: 4;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name,\n",
+       ".xr-var-dims,\n",
+       ".xr-var-dtype,\n",
+       ".xr-preview,\n",
+       ".xr-attrs dt {\n",
+       "  white-space: nowrap;\n",
+       "  overflow: hidden;\n",
+       "  text-overflow: ellipsis;\n",
+       "  padding-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name:hover,\n",
+       ".xr-var-dims:hover,\n",
+       ".xr-var-dtype:hover,\n",
+       ".xr-attrs dt:hover {\n",
+       "  overflow: visible;\n",
+       "  width: auto;\n",
+       "  z-index: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-var-attrs,\n",
+       ".xr-var-data {\n",
+       "  display: none;\n",
+       "  background-color: var(--xr-background-color) !important;\n",
+       "  padding-bottom: 5px !important;\n",
+       "}\n",
+       "\n",
+       ".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
+       ".xr-var-data-in:checked ~ .xr-var-data {\n",
+       "  display: block;\n",
+       "}\n",
+       "\n",
+       ".xr-var-data > table {\n",
+       "  float: right;\n",
+       "}\n",
+       "\n",
+       ".xr-var-name span,\n",
+       ".xr-var-data,\n",
+       ".xr-attrs {\n",
+       "  padding-left: 25px !important;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs,\n",
+       ".xr-var-attrs,\n",
+       ".xr-var-data {\n",
+       "  grid-column: 1 / -1;\n",
+       "}\n",
+       "\n",
+       "dl.xr-attrs {\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "  display: grid;\n",
+       "  grid-template-columns: 125px auto;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt,\n",
+       ".xr-attrs dd {\n",
+       "  padding: 0;\n",
+       "  margin: 0;\n",
+       "  float: left;\n",
+       "  padding-right: 10px;\n",
+       "  width: auto;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt {\n",
+       "  font-weight: normal;\n",
+       "  grid-column: 1;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dt:hover span {\n",
+       "  display: inline-block;\n",
+       "  background: var(--xr-background-color);\n",
+       "  padding-right: 10px;\n",
+       "}\n",
+       "\n",
+       ".xr-attrs dd {\n",
+       "  grid-column: 2;\n",
+       "  white-space: pre-wrap;\n",
+       "  word-break: break-all;\n",
+       "}\n",
+       "\n",
+       ".xr-icon-database,\n",
+       ".xr-icon-file-text2 {\n",
+       "  display: inline-block;\n",
+       "  vertical-align: middle;\n",
+       "  width: 1em;\n",
+       "  height: 1.5em !important;\n",
+       "  stroke-width: 0;\n",
+       "  stroke: currentColor;\n",
+       "  fill: currentColor;\n",
+       "}\n",
+       "</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
+       "Dimensions:    (t_dim: 48, z_dim: 2, y_dim: 375, x_dim: 297)\n",
+       "Coordinates:\n",
+       "  * t_dim      (t_dim) datetime64[ns] 2010-01-01 2010-02-01 ... 2013-12-01\n",
+       "    depth_0    (z_dim, y_dim, x_dim) float32 0.5 0.5 0.5 0.5 ... 1.5 1.5 1.5 1.5\n",
+       "    longitude  (y_dim, x_dim) float32 -19.89 -19.78 -19.67 ... 12.78 12.89 13.0\n",
+       "    latitude   (y_dim, x_dim) float32 40.07 40.07 40.07 40.07 ... 65.0 65.0 65.0\n",
+       "Dimensions without coordinates: z_dim, y_dim, x_dim\n",
+       "Data variables:\n",
+       "    trend      (t_dim, z_dim, y_dim, x_dim) float64 nan nan nan ... nan nan nan\n",
+       "    seasonal   (t_dim, z_dim, y_dim, x_dim) float64 nan nan nan ... nan nan nan\n",
+       "    residual   (t_dim, z_dim, y_dim, x_dim) float64 nan nan nan ... nan nan nan</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-ebbd1870-34b6-4f4a-99ae-b3121b124c61' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-ebbd1870-34b6-4f4a-99ae-b3121b124c61' class='xr-section-summary'  title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>t_dim</span>: 48</li><li><span>z_dim</span>: 2</li><li><span>y_dim</span>: 375</li><li><span>x_dim</span>: 297</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-5edb387d-f446-4014-960e-799150666a94' class='xr-section-summary-in' type='checkbox'  checked><label for='section-5edb387d-f446-4014-960e-799150666a94' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>t_dim</span></div><div class='xr-var-dims'>(t_dim)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2010-01-01 ... 2013-12-01</div><input id='attrs-d61b47d6-e8ba-447e-b1b1-ae7845e8dda4' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-d61b47d6-e8ba-447e-b1b1-ae7845e8dda4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-53e1d41b-5427-4b82-8a42-46a8fa3fc67c' class='xr-var-data-in' type='checkbox'><label for='data-53e1d41b-5427-4b82-8a42-46a8fa3fc67c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2010-01-01T00:00:00.000000000&#x27;, &#x27;2010-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-03-01T00:00:00.000000000&#x27;, &#x27;2010-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-05-01T00:00:00.000000000&#x27;, &#x27;2010-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-07-01T00:00:00.000000000&#x27;, &#x27;2010-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-09-01T00:00:00.000000000&#x27;, &#x27;2010-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2010-11-01T00:00:00.000000000&#x27;, &#x27;2010-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-01-01T00:00:00.000000000&#x27;, &#x27;2011-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-03-01T00:00:00.000000000&#x27;, &#x27;2011-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-05-01T00:00:00.000000000&#x27;, &#x27;2011-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-07-01T00:00:00.000000000&#x27;, &#x27;2011-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-09-01T00:00:00.000000000&#x27;, &#x27;2011-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2011-11-01T00:00:00.000000000&#x27;, &#x27;2011-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-01-01T00:00:00.000000000&#x27;, &#x27;2012-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-03-01T00:00:00.000000000&#x27;, &#x27;2012-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-05-01T00:00:00.000000000&#x27;, &#x27;2012-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-07-01T00:00:00.000000000&#x27;, &#x27;2012-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-09-01T00:00:00.000000000&#x27;, &#x27;2012-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2012-11-01T00:00:00.000000000&#x27;, &#x27;2012-12-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-01-01T00:00:00.000000000&#x27;, &#x27;2013-02-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-03-01T00:00:00.000000000&#x27;, &#x27;2013-04-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-05-01T00:00:00.000000000&#x27;, &#x27;2013-06-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-07-01T00:00:00.000000000&#x27;, &#x27;2013-08-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-09-01T00:00:00.000000000&#x27;, &#x27;2013-10-01T00:00:00.000000000&#x27;,\n",
+       "       &#x27;2013-11-01T00:00:00.000000000&#x27;, &#x27;2013-12-01T00:00:00.000000000&#x27;],\n",
+       "      dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>depth_0</span></div><div class='xr-var-dims'>(z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>0.5 0.5 0.5 0.5 ... 1.5 1.5 1.5 1.5</div><input id='attrs-7a107fab-0c52-4e76-86af-8e01e1ef8183' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7a107fab-0c52-4e76-86af-8e01e1ef8183' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ebe138f1-d6d0-456e-91b4-39006e9890fa' class='xr-var-data-in' type='checkbox'><label for='data-ebe138f1-d6d0-456e-91b4-39006e9890fa' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>m</dd><dt><span>standard_name :</span></dt><dd>Depth at time zero on the t-grid</dd></dl></div><div class='xr-var-data'><pre>array([[[0.5       , 0.5       , 0.5       , ..., 0.5       ,\n",
+       "         0.5       , 0.5       ],\n",
+       "        [0.5       , 0.4975586 , 0.4975586 , ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        [0.5       , 0.4975586 , 0.4975586 , ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        ...,\n",
+       "        [0.5       , 0.10009766, 0.10009766, ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        [0.5       , 0.10009766, 0.10009766, ..., 0.10009766,\n",
+       "         0.10009766, 0.5       ],\n",
+       "        [0.5       , 0.5       , 0.5       , ..., 0.5       ,\n",
+       "         0.5       , 0.5       ]],\n",
+       "\n",
+       "       [[1.5       , 1.5       , 1.5       , ..., 1.5       ,\n",
+       "         1.5       , 1.5       ],\n",
+       "        [1.5       , 1.5170898 , 1.5170898 , ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        [1.5       , 1.5170898 , 1.5170898 , ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        ...,\n",
+       "        [1.5       , 0.30029297, 0.30029297, ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        [1.5       , 0.30029297, 0.30029297, ..., 0.30029297,\n",
+       "         0.30029297, 1.5       ],\n",
+       "        [1.5       , 1.5       , 1.5       , ..., 1.5       ,\n",
+       "         1.5       , 1.5       ]]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>longitude</span></div><div class='xr-var-dims'>(y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-19.89 -19.78 -19.67 ... 12.89 13.0</div><input id='attrs-4af5de56-aa6e-4e0d-a92e-badf0c3b2a35' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4af5de56-aa6e-4e0d-a92e-badf0c3b2a35' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-144ad9fb-124d-4cd9-8ad1-3792e9188b17' class='xr-var-data-in' type='checkbox'><label for='data-144ad9fb-124d-4cd9-8ad1-3792e9188b17' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[-19.888672, -19.777344, -19.666992, ...,  12.777344,  12.888672,\n",
+       "         13.      ],\n",
+       "       [-19.888672, -19.777344, -19.666992, ...,  12.777344,  12.888672,\n",
+       "         13.      ],\n",
+       "       [-19.888672, -19.777344, -19.666992, ...,  12.777344,  12.888672,\n",
+       "         13.      ],\n",
+       "       ...,\n",
+       "       [-19.888672, -19.777344, -19.666992, ...,  12.777344,  12.888672,\n",
+       "         13.      ],\n",
+       "       [-19.888672, -19.777344, -19.666992, ...,  12.777344,  12.888672,\n",
+       "         13.      ],\n",
+       "       [-19.888672, -19.777344, -19.666992, ...,  12.777344,  12.888672,\n",
+       "         13.      ]], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>latitude</span></div><div class='xr-var-dims'>(y_dim, x_dim)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>40.07 40.07 40.07 ... 65.0 65.0</div><input id='attrs-b0cbb1cb-fccc-4fbd-9087-ce3ef8a464ae' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b0cbb1cb-fccc-4fbd-9087-ce3ef8a464ae' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a5cdb68e-aa19-4bd9-83a8-2e3febb91b4f' class='xr-var-data-in' type='checkbox'><label for='data-a5cdb68e-aa19-4bd9-83a8-2e3febb91b4f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[40.066406, 40.066406, 40.066406, ..., 40.066406, 40.066406,\n",
+       "        40.066406],\n",
+       "       [40.13379 , 40.13379 , 40.13379 , ..., 40.13379 , 40.13379 ,\n",
+       "        40.13379 ],\n",
+       "       [40.200195, 40.200195, 40.200195, ..., 40.200195, 40.200195,\n",
+       "        40.200195],\n",
+       "       ...,\n",
+       "       [64.868164, 64.868164, 64.868164, ..., 64.868164, 64.868164,\n",
+       "        64.868164],\n",
+       "       [64.93457 , 64.93457 , 64.93457 , ..., 64.93457 , 64.93457 ,\n",
+       "        64.93457 ],\n",
+       "       [65.00098 , 65.00098 , 65.00098 , ..., 65.00098 , 65.00098 ,\n",
+       "        65.00098 ]], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-f72ad60c-7662-4fa2-9f5e-70a931d08c37' class='xr-section-summary-in' type='checkbox'  checked><label for='section-f72ad60c-7662-4fa2-9f5e-70a931d08c37' class='xr-section-summary' >Data variables: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>trend</span></div><div class='xr-var-dims'>(t_dim, z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-1f4cb564-1208-47e7-8180-d0b8abfdd427' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-1f4cb564-1208-47e7-8180-d0b8abfdd427' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b14a4026-f27f-4258-aab7-a33d19400422' class='xr-var-data-in' type='checkbox'><label for='data-b14a4026-f27f-4258-aab7-a33d19400422' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[[[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.3063922 , 15.30313699, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.29532449, 15.46313048, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.30541564, 15.30232319, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 15.29418517, 15.46703673, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "...\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.63321618, 17.63012374, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, 17.62198572, 17.79483728, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]]]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>seasonal</span></div><div class='xr-var-dims'>(t_dim, z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-466f776e-1108-4edf-8bca-9747c8bd5eee' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-466f776e-1108-4edf-8bca-9747c8bd5eee' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8eb1923c-b71a-470a-9784-aa2435e28056' class='xr-var-data-in' type='checkbox'><label for='data-8eb1923c-b71a-470a-9784-aa2435e28056' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[[[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.03760243, -0.04605643, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.06331857,  0.29297352, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.02686024, -0.05696138, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.05273914,  0.28906727, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "...\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, -0.29785804, -0.28109372, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, -0.30811195, -0.65674476, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]]]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>residual</span></div><div class='xr-var-dims'>(t_dim, z_dim, y_dim, x_dim)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-4f68d921-4b87-425f-8d46-f32892fa404b' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4f68d921-4b87-425f-8d46-f32892fa404b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0389e40f-4549-484f-ac6f-5dc4bfe226ba' class='xr-var-data-in' type='checkbox'><label for='data-0389e40f-4549-484f-ac6f-5dc4bfe226ba' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([[[[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.07203182,  0.07203182, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.07203182,  0.07203182, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.07203182,  0.07203182, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,  0.07203182,  0.07203182, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "...\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]],\n",
+       "\n",
+       "        [[        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, -0.10455297, -0.10455297, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan, -0.10455297, -0.10455297, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         ...,\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan],\n",
+       "         [        nan,         nan,         nan, ...,         nan,\n",
+       "                  nan,         nan]]]])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-9126ae5d-47a6-4dfd-8405-f889fcbe2a2a' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-9126ae5d-47a6-4dfd-8405-f889fcbe2a2a' class='xr-section-summary'  title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
+      ],
+      "text/plain": [
+       "<xarray.Dataset>\n",
+       "Dimensions:    (t_dim: 48, z_dim: 2, y_dim: 375, x_dim: 297)\n",
+       "Coordinates:\n",
+       "  * t_dim      (t_dim) datetime64[ns] 2010-01-01 2010-02-01 ... 2013-12-01\n",
+       "    depth_0    (z_dim, y_dim, x_dim) float32 0.5 0.5 0.5 0.5 ... 1.5 1.5 1.5 1.5\n",
+       "    longitude  (y_dim, x_dim) float32 -19.89 -19.78 -19.67 ... 12.78 12.89 13.0\n",
+       "    latitude   (y_dim, x_dim) float32 40.07 40.07 40.07 40.07 ... 65.0 65.0 65.0\n",
+       "Dimensions without coordinates: z_dim, y_dim, x_dim\n",
+       "Data variables:\n",
+       "    trend      (t_dim, z_dim, y_dim, x_dim) float64 nan nan nan ... nan nan nan\n",
+       "    seasonal   (t_dim, z_dim, y_dim, x_dim) float64 nan nan nan ... nan nan nan\n",
+       "    residual   (t_dim, z_dim, y_dim, x_dim) float64 nan nan nan ... nan nan nan"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "grd.dataset.compute()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "6054b3f3-9ccb-4452-a8c8-e420a420eb2f",
+   "metadata": {},
+   "source": [
+    "Plot the decomposed time series"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "458a31ef-f164-4197-a151-d183dd28b98f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[<matplotlib.lines.Line2D at 0x7fd62f641610>,\n",
+       " <matplotlib.lines.Line2D at 0x7fd62f673a60>,\n",
+       " <matplotlib.lines.Line2D at 0x7fd62f673910>]"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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D5iIdAFOxp7kZYwxba45VT3rPK9ab3j+HsxNXA8Dv93XPETkcuBygIyMjINYlDHGGG/Nac55ly8XKCLTgd2qulBEJu9juTOBmeCqenwZgzHGBLPmtOoZBdwGdPOeXlveLfM44FQROQmIBOJFZLaqXtDC+RljjDkAzanqeQ7XsmcZUHOwC1TVW/B0+OYp8d9gSd8YY9pOcxJ/pqq+2eqRGGOMaRPNadVzh4g8JSI/E5Eza1++WLiqzrU2/MaYw8Gll17KypUr9xo+a9Ysrr766hbPNzY29mDCalRzSvwXA/1x/fDXVvUo8KrPozHGmABR26FZSEjznjv11FOHTuv05nyjoao6SlUvUtWLPa9LWj0yY4xpYxs3bmTAgAH88pe/ZMSIEdxzzz2MHj2aIUOG1HWP3Fj3zVD/ISlPP/00ffv2ZdKkSXz55Zd1858xYwavvPJK3f+1pfmioiKmTp3KiBEjGDx4MG+88QatqTkl/q9F5AhV3fscxhhjDjM//vgjTz/9NKeffjqvvPIK3377LarKqaeeyueff05mZiadOnXinXfeASA/P7/e53fs2MEdd9zBwoULSUhIYMqUKQwfPnyfy4yMjOS1114jPj6erKwsxo4dy6mnnoqItMp3bE7iHw9cJCIbgHJcR216EM05jTFmnx749gF+yPnBp/Psn9Sfm468ab/TdevWjbFjx3LDDTfw4Ycf1iXtoqIi1qxZw4QJE+p13zxhwoR6n//mm2+YPHkyqampAJxzzjl13TA3RVW59dZb+fzzzwkJCWHbtm3s2rWLjh07tvDb7ltzEv8JrbJkY4wJQDEx7iGDqsott9zCL37xi72m8e6++fjjj+f222+vN76pknpYWBg1NTV186+oqADgueeeIzMzk4ULFxIeHk737t193hVzvTj2N4GqbhKR8UAfVX1aRFIB319mNsYYj+aUzFvbtGnT+P3vf8/5559PbGws27ZtIzw8nKqqqnrdN8+aNave58aMGcM111xDdnY28fHxvPzyywwdOhSA7t27s3DhQn7605/yxhtvUFlZCbjqorS0NMLDw/n000/ZtGlTq3635ty5eweuF81+wNO41j2zcXfgGmPMYen4449n1apVHHXUUYC7EDt79mzWrl27V/fN3tLT07nzzjs56qijSE9PZ8SIEVRXVwNw2WWXcdppp3HkkUcyderUurOL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\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "component = xr.DataArray( [\"trend\",\"seasonal\",\"residual\"], dims=\"component\", name=\"component\" )\n",
+    "temp_decomp = xr.concat( \n",
+    "    [grd.dataset.trend, grd.dataset.seasonal,grd.dataset.residual], dim=component \n",
+    ")\n",
+    "temp_decomp.name = \"temperature\"\n",
+    "temp_decomp[:,:,0,200,200].plot(hue=\"component\")"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "coast_dev_38",
+   "language": "python",
+   "name": "coast_dev_38"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/example_scripts/notebooks/tideguage_validation_tutorial.ipynb b/example_scripts/notebooks/tideguage_validation_tutorial.ipynb
new file mode 100644
index 00000000..b231aee6
--- /dev/null
+++ b/example_scripts/notebooks/tideguage_validation_tutorial.ipynb
@@ -0,0 +1,322 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "56cbe624-02d9-4615-975b-408c97f9b97c",
+   "metadata": {},
+   "source": [
+    "This script gives an overview of some of validation tools available when\n",
+    "using the TidegaugeMultiple object in COAsT.\n",
+    "\n",
+    "For this a script, a premade netcdf file containing tide gauge data is used."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e10c23ed-dce8-410b-acf0-733b248be2ad",
+   "metadata": {},
+   "source": [
+    "### Import necessary libraries\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "b15ab58f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import xarray as xr\n",
+    "import numpy as np\n",
+    "import coast\n",
+    "import datetime"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2ebbe06c-6788-4c49-aafb-4a476a4be685",
+   "metadata": {},
+   "source": [
+    "### Define paths\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d8727892",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fn_dom = \"<PATH_TO_NEMO_DOMAIN>\"\n",
+    "fn_dat = \"<PATH_TO_NEMO_DATA>\"\n",
+    "fn_config = \"<PATH_TO_CONFIG.json>\"\n",
+    "fn_tg = \"<PATH_TO_TIDEGAUGE_NETCDF>\"  # This should already be processed, on the same time dimension\n",
+    "\n",
+    "# Change this to 0 to not use default files.\n",
+    "if 1:\n",
+    "    print(f\"Use default files\")\n",
+    "    dir = \"./example_files/\"\n",
+    "    fn_dom = dir + \"coast_example_nemo_domain.nc\"\n",
+    "    fn_dat = dir + \"coast_example_nemo_data.nc\"\n",
+    "    fn_config = \"./config/example_nemo_grid_t.json\"\n",
+    "    fn_tg = dir + \"tg_amm15.nc\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8b143cc4-7ae9-4edf-8d0b-92c189c18bd7",
+   "metadata": {},
+   "source": [
+    "### Create gridded object and load data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d5f05c40",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "nemo = coast.Gridded(fn_dat, fn_dom, multiple=True, config=fn_config)\n",
+    "\n",
+    "# Create a landmask array and put it into the nemo object.\n",
+    "# Here, using the bottom_level == 0 variable from the domain file is enough.\n",
+    "nemo.dataset[\"landmask\"] = nemo.dataset.bottom_level == 0\n",
+    "\n",
+    "# Rename depth_0 to be depth\n",
+    "nemo.dataset = nemo.dataset.rename({\"depth_0\": \"depth\"})\n",
+    "nemo.dataset = nemo.dataset[[\"ssh\", \"landmask\"]]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ad8d0be3-7941-40ba-af6f-ef747ae2912d",
+   "metadata": {},
+   "source": [
+    "### Create TidegaugeMultiple object\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "cbcee060",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "# Create the object and then inset the netcdf dataset\n",
+    "obs = coast.Tidegauge(dataset=xr.open_dataset(fn_tg))\n",
+    "obs.dataset = obs.dataset.set_coords(\"time\")\n",
+    "\n",
+    "# Shift the timestamp so it overlaps with the tidegauge data - Not ideal but this is only a demo\n",
+    "obs.dataset.coords[\"time\"] = obs.dataset.coords[\"time\"] + 1000000000 * 3600 * 24 * 365 * 3\n",
+    "\n",
+    "# Cut down data to be only in 2018 to match model data.\n",
+    "start_date = datetime.datetime(2007, 1, 1)\n",
+    "end_date = datetime.datetime(2007, 1, 31)\n",
+    "obs = obs.time_slice(start_date, end_date)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ae46af6e-94eb-4e5f-b2aa-7d6abf11e30c",
+   "metadata": {},
+   "source": [
+    "### Interpolate model data onto obs locations"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "4eac4319",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model_timeseries = obs.obs_operator(nemo)\n",
+    "\n",
+    "# In this case, transpose the interpolated dataset\n",
+    "model_timeseries.dataset = model_timeseries.dataset.transpose()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a272f401-3021-49b8-88e6-254ee53914e0",
+   "metadata": {},
+   "source": [
+    "### Do some processing"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "2ec2fed0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# This routine searches for missing values in each dataset and applies them\n",
+    "# equally to each corresponding dataset\n",
+    "tganalysis = coast.TidegaugeAnalysis()\n",
+    "obs_new, model_new = tganalysis.match_missing_values(obs.dataset.ssh, model_timeseries.dataset.ssh)\n",
+    "\n",
+    "# Subtract means from all time series\n",
+    "obs_new = tganalysis.demean_timeseries(obs_new.dataset)\n",
+    "model_new = tganalysis.demean_timeseries(model_new.dataset)\n",
+    "\n",
+    "# Now you have equivalent and comparable sets of time series that can be\n",
+    "# easily compared."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "2df64464-45cc-45a3-85fc-437fc2309743",
+   "metadata": {},
+   "source": [
+    "## Calculate non tidal residuals\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "d96b9c94",
+   "metadata": {},
+   "source": [
+    "\n",
+    "### First, do a harmonic analysis. This routine uses utide\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "658f7a9a",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ha_mod = tganalysis.harmonic_analysis_utide(model_new.dataset.ssh, min_datapoints=1)\n",
+    "ha_obs = tganalysis.harmonic_analysis_utide(obs_new.dataset.ssh, min_datapoints=1)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ff6d86b3",
+   "metadata": {},
+   "source": [
+    "\n",
+    "### Create new TidegaugeMultiple objects containing reconstructed tides\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "36bad30b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tide_mod = tganalysis.reconstruct_tide_utide(model_new.dataset.time, ha_mod)\n",
+    "tide_obs = tganalysis.reconstruct_tide_utide(obs_new.dataset.time, ha_obs)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "ac23e4ee",
+   "metadata": {},
+   "source": [
+    "\n",
+    "### Get new TidegaugeMultiple objects containing non tidal residuals.\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "84e7a3fb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ntr_mod = tganalysis.calculate_non_tidal_residuals(model_new.dataset.ssh, tide_mod.dataset.reconstructed)\n",
+    "ntr_obs = tganalysis.calculate_non_tidal_residuals(obs_new.dataset.ssh, tide_obs.dataset.reconstructed)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "101abcf1",
+   "metadata": {},
+   "source": [
+    "\n",
+    "### Other interesting applications here included only reconstructing specified tidal frequency bands and validating this."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a1193d91-debf-4f80-b877-e8ca4bf3ae6d",
+   "metadata": {},
+   "source": [
+    "#### Calculate errors\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c4231f71",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "# The difference() routine will calculate differences, absolute_differences\n",
+    "# and squared differenced for all variables:\n",
+    "ntr_diff = tganalysis.difference(ntr_obs.dataset, ntr_mod.dataset)\n",
+    "ssh_diff = tganalysis.difference(obs_new.dataset, model_new.dataset)\n",
+    "\n",
+    "# We can then easily get mean errors, MAE and MSE\n",
+    "mean_stats = ntr_diff.dataset.mean(dim=\"t_dim\", skipna=True)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b9e45f07-043d-4c46-9d82-27127e66ddde",
+   "metadata": {},
+   "source": [
+    "### Threshold Statistics for Non-tidal residuals\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "38a120a4",
+   "metadata": {},
+   "source": [
+    "\n",
+    "#### This is a simple extreme value analysis of whatever data you use. It will count the number of peaks and the total time spent over each threshold provided. It will also count the numbers of daily and monthly maxima over each threshold\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "6dba7711",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "thresh_mod = tganalysis.threshold_statistics(ntr_mod.dataset, thresholds=np.arange(0, 2, 0.2))\n",
+    "thresh_obs = tganalysis.threshold_statistics(ntr_obs.dataset, thresholds=np.arange(0, 2, 0.2))"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/example_scripts/notebooks/tidetable_tutorial.ipynb b/example_scripts/notebooks/tidetable_tutorial.ipynb
new file mode 100644
index 00000000..b433629b
--- /dev/null
+++ b/example_scripts/notebooks/tidetable_tutorial.ipynb
@@ -0,0 +1,249 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "This script gives an overview of some of validation tools available when\n",
+    "using the TidegaugeMultiple object in COAsT.\n",
+    "\n",
+    "For this a script, a premade netcdf file containing tide gauge data is used."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Import dependencies"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import xarray as xr\n",
+    "import numpy as np\n",
+    "import coast\n",
+    "import datetime"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Define filepaths"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# You can alter these paths if you do not want to use the default data files.\n",
+    "dir = \"./example_files/\"\n",
+    "fn_dom = dir + \"coast_example_nemo_domain.nc\"\n",
+    "fn_dat = dir + \"coast_example_nemo_data.nc\"\n",
+    "fn_config = \"./config/example_nemo_grid_t.json\"\n",
+    "fn_tg = dir + \"tg_amm15.nc\"  # This should already be processed, on the same time dimension"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Load data"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#%% 3. Create gridded object and load data\n",
+    "nemo = coast.Gridded(fn_dat, fn_dom, multiple=True, config=fn_config)\n",
+    "\n",
+    "# Create a landmask array and put it into the nemo object.\n",
+    "# Here, using the bottom_level == 0 variable from the domain file is enough.\n",
+    "nemo.dataset[\"landmask\"] = nemo.dataset.bottom_level == 0\n",
+    "\n",
+    "# Rename depth_0 to be depth\n",
+    "nemo.dataset = nemo.dataset.rename({\"depth_0\": \"depth\"})\n",
+    "nemo.dataset = nemo.dataset[[\"ssh\", \"landmask\"]]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Create TidegaugeMultiple object"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Create the object and then inset the netcdf dataset\n",
+    "obs = coast.Tidegauge(dataset=xr.open_dataset(fn_tg))\n",
+    "obs.dataset = obs.dataset.set_coords(\"time\")\n",
+    "\n",
+    "# Shift the timestamp so it overlaps with the tidegauge data - Not ideal but this is only a demo\n",
+    "obs.dataset.coords[\"time\"] = obs.dataset.coords[\"time\"] + 1000000000 * 3600 * 24 * 365 * 3\n",
+    "\n",
+    "# Cut down data to be only in 2018 to match model data.\n",
+    "start_date = datetime.datetime(2007, 1, 1)\n",
+    "end_date = datetime.datetime(2007, 1, 31)\n",
+    "obs = obs.time_slice(start_date, end_date)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Interpolate model data onto obs locations"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model_timeseries = obs.obs_operator(nemo)\n",
+    "\n",
+    "# In this case, transpose the interpolated dataset\n",
+    "model_timeseries.dataset = model_timeseries.dataset.transpose()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Data processing"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# This routine searches for missing values in each dataset and applies them\n",
+    "# equally to each corresponding dataset\n",
+    "tganalysis = coast.TidegaugeAnalysis()\n",
+    "obs_new, model_new = tganalysis.match_missing_values(obs.dataset.ssh, model_timeseries.dataset.ssh)\n",
+    "\n",
+    "# Subtract means from all time series\n",
+    "obs_new = tganalysis.demean_timeseries(obs_new.dataset)\n",
+    "model_new = tganalysis.demean_timeseries(model_new.dataset)\n",
+    "\n",
+    "# Now you have equivalent and comparable sets of time series that can be\n",
+    "# easily compared."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Calculate non-tidal residuals"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# First, do a harmonic analysis. This routine uses utide\n",
+    "ha_mod = tganalysis.harmonic_analysis_utide(model_new.dataset.ssh, min_datapoints=1)\n",
+    "ha_obs = tganalysis.harmonic_analysis_utide(obs_new.dataset.ssh, min_datapoints=1)\n",
+    "\n",
+    "# Create new TidegaugeMultiple objects containing reconstructed tides\n",
+    "tide_mod = tganalysis.reconstruct_tide_utide(model_new.dataset.time, ha_mod)\n",
+    "tide_obs = tganalysis.reconstruct_tide_utide(obs_new.dataset.time, ha_obs)\n",
+    "\n",
+    "# Get new TidegaugeMultiple objects containing non tidal residuals.\n",
+    "ntr_mod = tganalysis.calculate_non_tidal_residuals(model_new.dataset.ssh, tide_mod.dataset.reconstructed)\n",
+    "ntr_obs = tganalysis.calculate_non_tidal_residuals(obs_new.dataset.ssh, tide_obs.dataset.reconstructed)\n",
+    "\n",
+    "# Other interesting applications here included only reconstructing specified\n",
+    "# tidal frequency bands and validating this."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Calculate errors"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# The difference() routine will calculate differences, absolute_differences\n",
+    "# and squared differenced for all variables:\n",
+    "ntr_diff = tganalysis.difference(ntr_obs.dataset, ntr_mod.dataset)\n",
+    "ssh_diff = tganalysis.difference(obs_new.dataset, model_new.dataset)\n",
+    "\n",
+    "# We can then easily get mean errors, MAE and MSE\n",
+    "mean_stats = ntr_diff.dataset.mean(dim=\"t_dim\", skipna=True)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Threshold Statistics for non-tidal residuals"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# This is a simple extreme value analysis of whatever data you use.\n",
+    "# It will count the number of peaks and the total time spent over each\n",
+    "# threshold provided. It will also count the numbers of daily and monthly\n",
+    "# maxima over each threshold\n",
+    "\n",
+    "thresh_mod = tganalysis.threshold_statistics(ntr_mod.dataset, thresholds=np.arange(0, 2, 0.2))\n",
+    "thresh_obs = tganalysis.threshold_statistics(ntr_obs.dataset, thresholds=np.arange(0, 2, 0.2))"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.13"
+  },
+  "vscode": {
+   "interpreter": {
+    "hash": "edbd2e3cb8183e66d063e2b638973e07e1c11d7f682ee3a27358b79f7159feb3"
+   }
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/example_scripts/wod_bgc_ragged_example.py b/example_scripts/wod_bgc_ragged_example.py
index a921241a..2f0e957c 100644
--- a/example_scripts/wod_bgc_ragged_example.py
+++ b/example_scripts/wod_bgc_ragged_example.py
@@ -15,7 +15,7 @@
 import datetime
 import numpy as np
 import xarray as xr
-import coast.general_utils as general_utils
+import coast._utils.general_utils as general_utils
 import scipy as sp
 
 # ====================== UNIV PARAMS ===========================
diff --git a/github-actions-flowchart.md b/github-actions-flowchart.md
new file mode 100644
index 00000000..1fc1814e
--- /dev/null
+++ b/github-actions-flowchart.md
@@ -0,0 +1,109 @@
+# GitHub actions diagram
+
+This is a collection of flowcharts for all the GitHub actions used across the COAsT and COAsT-site repos
+## COAsT
+### building Packages
+```mermaid
+graph LR;    
+    subgraph publish_package - runs on push to master
+    A1[Setup python]-- 3.8 -->B1;    
+    B1[Install dependencies]-->C1;
+    C1[Setup Enviroment]-->D1;
+    D1[Build package]-->E1;
+    E1[Test Package Install]-->F1
+    F1[Publish to pypi]-->G1
+    G1[Generate Conda Metadata]-->H1
+    H1[Publish to Anaconda]
+    end;
+    
+    subgraph build_package - runs on push to non-master 
+    A[Setup python]-- 3.8 and 3.9 -->B;    
+    B[Install dependencies]-->C;
+    C[Setup Enviroment]-->D;
+    D[Build package]-->E;
+    E[Test Package Install]-->F
+    F[Generate Conda Metadata] 
+    end;
+```
+
+### Verification and Formatting
+```mermaid
+graph LR
+
+    subgraph formatting - runs on pull requests
+    A[Setup python]-- 3.9 -->B;    
+    B[Install black]-->C;
+    C[Check formatting]--> D;
+    D[Apply formatting]
+    end;
+    
+    subgraph verifiy_package - runs for every push
+    A1[Setup python]-- 3.8 and 3.9 -->B1;    
+    B1[Install dependencies]-->C1;
+    C1[Lint]-->D1;
+    D1[Test]
+    end;
+    click B1 "https://www.github.com" "tooltip"
+```
+
+### interactions with other repos
+```mermaid
+flowchart LR
+    subgraph b1[push_notebooks - runs on push to master]
+        direction LR
+        subgraph b2[COAsT site - markdown ]
+            direction TB
+            a[checkout docsy site] -->b
+            b[checkout coast] -->c
+            c[add python] -->d
+            d[covert notebooks] -->e
+            e[commit changes]            
+         end
+    t[Repository Dispatch] -- event pushed --> b2    
+    end
+    click a "https://github.com/British-Oceanographic-Data-Centre/COAsT-site" "Docsy site for COAsT repo"
+```
+```mermaid
+flowchart LR
+    subgraph b3[push_docstrings - runs on push to master]
+        direction LR
+        subgraph b4[COAsT site - docstrings ]
+            direction TB
+            a1[checkout docsy site] -->b1
+            b1[checkout coast] -->c1
+            c1[add python] -->d1
+            d1[covert docstrings] -->e1
+            e1[commit changes]            
+        end
+    r[Repository Dispatch] -- event pushed --> b4       
+    end
+    click a1 "https://github.com/British-Oceanographic-Data-Centre/COAsT-site" "Docsy site for COAsT repo"
+```
+### Generate unit test contents file
+```mermaid
+graph LR
+    subgraph generate-test-contents - runs on pull_request
+    A[checkout COAsT]-->B;    
+    B[install package]-->C;
+    C[make example files dir]--> D;
+    D[run generate_unit_test_contents.py]-->E
+    E[commit changes]
+    end;
+```
+## COAsT-site
+These are the actions used on the COAsT-site repo. 
+
+### Convert to markdown
+See [Interactions with other repos](#interactions-with-other-repos) for the related markdown and docstring workflows
+
+### Build site
+```mermaid
+graph LR
+    subgraph hugo - runs on push to master
+    A[checkout site]-->B;    
+    B[Setup Hugo] -- v0.70.0 -->C;
+    C[Setup Nodejs]-- v12 --> D;
+    D[Build]-->E
+    E[Deploy]
+    end;
+```
diff --git a/markdown_doc_builder.py b/markdown_doc_builder.py
new file mode 100644
index 00000000..445f6d13
--- /dev/null
+++ b/markdown_doc_builder.py
@@ -0,0 +1,72 @@
+"""Script to turn google docstrings into markdown"""
+from pathlib import Path
+from datetime import date
+from typing import Generator, List, Optional
+from time import time
+from docstring2md import DocString2MD
+
+# Pre-formatted Hugo markdown header to which we can dynamically add dates and file names
+MARKDOWN_HEADER = """---
+title: "{0}"
+linkTitle: "{0}"
+date: {1}
+description: >
+  Docstrings for the {0} class
+---"""
+
+
+class MarkdownBuilder:
+    def __init__(self, package: str, glob: str = "**/*.py"):
+        self.package: str = package
+        self.glob: str = glob
+
+    @property
+    def directory(self) -> Path:
+        """Make sure we have a markdown folder to write to."""
+        (directory := Path("markdown").resolve(strict=False)).mkdir(exist_ok=True, parents=True)
+        return directory
+
+    @property
+    def files(self) -> Generator[Path, None, None]:
+        """Return all the Python modules within the target package."""
+        return Path(self.package).resolve(strict=True).glob(self.glob)
+
+    def generate_docs(self) -> List[Path]:
+        """Generate docs for selected Python modules and output to Markdown files of the same name."""
+        outputs = []
+        for file in self.files:
+            if (stem := file.stem) == "__init__":
+                # We might have more than one __init__.py file depending on package structure and these files shouldn't
+                # contain methods, so we don't want to convert them
+                continue
+
+            if not (doc := get_doc(file)):
+                continue  # No docstring returned, skip this file
+            doc = doc[33:]  # First 33 characters are not required for our docs
+
+            # Write the output we've generated to a file
+            (output := self.directory / f"{stem}.md").write_text(generate_header(stem) + doc)
+            outputs.append(output)
+        return outputs
+
+
+def generate_header(name: str) -> str:
+    """Generate the Hugo-required header for our Markdown string."""
+    return MARKDOWN_HEADER.format(name.capitalize(), date.today())
+
+
+def get_doc(file: Path) -> Optional[str]:
+    module = DocString2MD(module_name=str(file.resolve(strict=True)))
+    module.import_module()
+    return module.get_doc()
+
+
+def main() -> None:
+    start = time()
+    builder = MarkdownBuilder("coast")
+    outputs = builder.generate_docs()
+    print(f"Generated {len(outputs)} Markdown files in {round(time() - start, 2)} seconds!")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/notebook_to_md.sh b/notebook_to_md.sh
new file mode 100644
index 00000000..87f6bacc
--- /dev/null
+++ b/notebook_to_md.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# Install jupyter dep.
+pip install jupyter
+# Convert ipynb files to markdown.
+jupyter nbconvert --to markdown ./example_scripts/notebooks/*.ipynb --output-dir ./example_scripts/notebooks/markdown/
+
+# Loop through generated markdown files.
+for FILE in ./example_scripts/notebooks/markdown/*.md; do 
+    # Get filename information.
+    fullname=$(basename $FILE)
+    filename=${fullname%.*}
+    formatted_filename=${filename//[_]/ }   # Strip out underscores.
+    formatted_filename=${formatted_filename^}   # Capitalize.
+    # Generate Hugo header for Markdown files.
+    read -r -d '' VAR <<-EOM
+---
+    title: "$formatted_filename"
+    linkTitle: "$formatted_filename"
+    weight: 5
+
+    description: >
+        $formatted_filename example.
+---
+EOM
+    # Echo hugo header to beginning of generated md file.
+    echo "$VAR" | cat - $FILE > temp && mv temp $FILE
+done
diff --git a/requirements.txt b/requirements.txt
index 3d17093d..845d005a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,7 @@
-.
 PyYAML==6.0
 oyaml==1.0
 pytest==7.1.1
+pytest-mock==3.7.0
 numpy>=1.22.3
 dask>=2022.3.0
 dask[complete]>=2022.3.0
@@ -14,3 +14,6 @@ utide>=0.2.6
 scikit-learn>=1.0.2
 scikit-image>=0.19.2
 statsmodels>=0.13.2
+pydap>=3.2.2
+lxml>=4.9.0  # Required for pydap CAS parsing
+requests>=2.27.1
diff --git a/requirements_docs.txt b/requirements_docs.txt
new file mode 100644
index 00000000..93703412
--- /dev/null
+++ b/requirements_docs.txt
@@ -0,0 +1,1 @@
+docstring2md-0.4.1-py3-none-any.whl
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 7fea0d31..f773e0ce 100644
--- a/setup.py
+++ b/setup.py
@@ -25,6 +25,10 @@
         "keywords": ["NEMO", "shallow water", "ocean assessment"],
         "project_urls": {"documentation": "https://british-oceanographic-data-centre.github.io/COAsT/"},
         "install_requires": [
+            "PyYAML==6.0",
+            "oyaml==1.0",
+            "pytest==7.1.1",
+            "pytest-mock==3.7.0",
             "numpy>=1.22.3",
             "dask>=2022.3.0",
             "dask[complete]>=2022.3.0",
@@ -37,9 +41,12 @@
             "scikit-learn>=1.0.2",
             "scikit-image>=0.19.2",
             "statsmodels>=0.13.2",
+            "pydap>=3.2.2",
+            "lxml>=4.9.0",  # Required for pydap CAS parsing,
+            "requests>=2.27.1",
         ],
-        "python_requires": ">=3.8",
-        "packages": ["coast"],
+        "python_requires": ">=3.8,<3.10",  # Pydap not currently compatible with 3.10
+        "packages": ["coast", "coast.data", "coast._utils", "coast.diagnostics"],
         "include_package_data": True,
         "github": "British-Oceanographic-Data-Centre",
     }


Test patch:
diff --git a/.github/workflows/unit_test_contents.yml b/.github/workflows/unit_test_contents.yml
new file mode 100644
index 00000000..78bbfb82
--- /dev/null
+++ b/.github/workflows/unit_test_contents.yml
@@ -0,0 +1,32 @@
+name: Generate and commit unit test contents file.
+
+on: pull_request
+
+jobs:
+  generate-test-contents:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        python-version: [ 3.8 ]
+
+    steps:
+      - uses: actions/checkout@v1
+      - name: Set up Python ${{ matrix.python-version }} for running python script.
+        uses: actions/setup-python@v1
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Generate contents.
+        run: |
+          pip install .
+          mkdir -p example_files
+          python unit_testing/generate_unit_test_contents.py
+      - name: Commit changes
+        run: |
+          git config --global user.name "ContentsBot"
+          git config --global author.name "ContentsBot"
+          git config --global user.email "bodcsoft@bodc.ac.uk"
+          git config --global author.email "bodcsoft@bodc.ac.uk"
+          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
+          git checkout $GITHUB_HEAD_REF
+          git diff-index --quiet $GITHUB_HEAD_REF || git commit -am "Commit generated unit test contents."
+          git push origin $GITHUB_HEAD_REF
diff --git a/tests/config_parser_test.py b/tests/config_parser_test.py
index b073486c..b037b747 100644
--- a/tests/config_parser_test.py
+++ b/tests/config_parser_test.py
@@ -3,8 +3,8 @@
 import os
 from pathlib import Path
 import pytest
-from coast.config_parser import ConfigParser
-from coast.config_structure import (
+from coast.data.config_parser import ConfigParser
+from coast.data.config_structure import (
     ConfigTypes,
     ConfigKeys,
     GriddedConfig,
diff --git a/tests/test_climatology.py b/tests/test_climatology.py
index cfbab213..8b470967 100644
--- a/tests/test_climatology.py
+++ b/tests/test_climatology.py
@@ -5,8 +5,8 @@
 import pandas as pd
 import xarray as xr
 
-from coast import seasons
-from coast.climatology import Climatology
+from coast._utils import seasons
+from coast.diagnostics.climatology import Climatology
 
 
 YEARS = [2000, 2001]
diff --git a/tests/test_copernicus.py b/tests/test_copernicus.py
new file mode 100644
index 00000000..ed58938c
--- /dev/null
+++ b/tests/test_copernicus.py
@@ -0,0 +1,50 @@
+"""Unit tests for Copernicus functionality."""
+
+import pytest
+from coast import Copernicus, Product
+
+
+@pytest.fixture(name="copernicus")
+def copernicus_fixture(mocker) -> Copernicus:
+    """Return a Copernicus accessor with mocked parameters."""
+    mocker.sentinel.template = mocker.Mock()
+    mocker.sentinel.template.format.return_value = mocker.sentinel.url
+    return Copernicus(
+        mocker.sentinel.username,
+        mocker.sentinel.password,
+        mocker.sentinel.database,
+        cas_url=mocker.sentinel.cas_url,
+        url_template=mocker.sentinel.template,
+    )
+
+
+def test_get_url(copernicus, mocker):
+    """Test that a URL is generated with the correct parameters."""
+    url = copernicus.get_url(mocker.sentinel.product)
+
+    assert url == mocker.sentinel.url
+    assert mocker.sentinel.template.format.called_with(mocker.sentinel.database, mocker.sentinel.product)
+
+
+def test_from_copernicus(copernicus, mocker):
+    """Test that a Product is instantiated with the correct parameters."""
+    from_cas = mocker.patch("coast.data.opendap.OpendapInfo.from_cas", return_value=mocker.sentinel.product)
+
+    product = Product.from_copernicus(mocker.sentinel.product_id, copernicus)
+
+    assert product == mocker.sentinel.product
+    from_cas.assert_called_with(
+        mocker.sentinel.url, mocker.sentinel.cas_url, mocker.sentinel.username, mocker.sentinel.password
+    )
+
+
+def test_get_product(copernicus, mocker):
+    """Test that a Product is instantiated with the correct parameters."""
+    from_copernicus = mocker.patch(
+        "coast.data.copernicus.Product.from_copernicus", return_value=mocker.sentinel.product
+    )
+
+    product = copernicus.get_product(mocker.sentinel.product_id)
+
+    assert product == mocker.sentinel.product
+    from_copernicus.assert_called_once_with(mocker.sentinel.product_id, copernicus)
diff --git a/tests/test_copernicus_integration.py b/tests/test_copernicus_integration.py
new file mode 100644
index 00000000..4e6ece3f
--- /dev/null
+++ b/tests/test_copernicus_integration.py
@@ -0,0 +1,52 @@
+"""Integration tests for Copernicus functionality."""
+
+import logging
+from pathlib import Path
+from os import environ
+import pytest
+import numpy
+from xarray import Dataset
+from coast import Copernicus, Gridded
+
+
+DATABASE = "nrt"
+PRODUCT_ID = "global-analysis-forecast-phy-001-024"
+CONFIG = (Path(__file__).parent.parent / "config" / "example_cmems_grid_t.json").resolve(strict=True)
+
+USERNAME = environ.get("COPERNICUS_USERNAME")
+PASSWORD = environ.get("COPERNICUS_PASSWORD")
+
+CREDENTIALS = USERNAME is not None and PASSWORD is not None
+
+if not CREDENTIALS:
+    logging.warning("https://marine.copernicus.eu/ credentials not set, integration tests will not be run!")
+
+
+@pytest.fixture(name="copernicus")
+def copernicus_fixture() -> Copernicus:
+    """Return a functional Copernicus data accessor."""
+    return Copernicus(USERNAME, PASSWORD, DATABASE)
+
+
+@pytest.mark.skipif(condition=not CREDENTIALS, reason="Copernicus credentials are not set.")
+def test_get_product(copernicus):
+    """Connect to Copernicus, access some metadata and data values and ingest into a Gridded object."""
+    product = copernicus.get_product(PRODUCT_ID)
+    nemo_t = Gridded(fn_data=product, config=str(CONFIG))
+
+    # Check that the dataset has been initialised as expected
+    assert isinstance(nemo_t.dataset, Dataset)
+    # Check for some expected CMEMS metadata
+    assert nemo_t.dataset.attrs["comment"] == "CMEMS product"
+    assert nemo_t.dataset.attrs["easting"] == "longitude"
+    assert nemo_t.dataset.attrs["northing"] == "latitude"
+    assert nemo_t.dataset.attrs["institution"] == "MERCATOR OCEAN"
+    # Verify that dimensions have been mapped correctly
+    dimensions = nemo_t.dataset.dims
+    assert "x_dim" in dimensions
+    assert "y_dim" in dimensions
+    assert "z_dim" in dimensions
+    assert "t_dim" in dimensions
+    # Download and inspect some values
+    latitude = nemo_t.dataset.latitude[:-100].values
+    assert all(isinstance(value, numpy.float32) and not numpy.isnan(value) for value in latitude)
diff --git a/tests/test_logging_util.py b/tests/test_logging_util.py
index 8ea6d9b6..bd676b36 100644
--- a/tests/test_logging_util.py
+++ b/tests/test_logging_util.py
@@ -1,6 +1,6 @@
 # Test with PyTest
 
-from coast import logging_util
+from coast._utils import logging_util
 import logging
 
 
diff --git a/tests/test_opendap.py b/tests/test_opendap.py
new file mode 100644
index 00000000..dbc57d45
--- /dev/null
+++ b/tests/test_opendap.py
@@ -0,0 +1,59 @@
+"""Unit tests for OPeNDAP functionality."""
+
+import pytest
+from coast import OpendapInfo
+from coast.data.opendap import CASTGC
+
+
+@pytest.fixture(name="opendap_info")
+def opendap_info_fixture(mocker) -> OpendapInfo:
+    """Return an OPeNDAP accessor with mocked parameters."""
+    return OpendapInfo(mocker.sentinel.url, session=mocker.sentinel.session)
+
+
+def test_get_store(opendap_info, mocker) -> None:
+    """Test that a store is instantiated with the correct parameters."""
+    open_url = mocker.patch("coast.data.opendap.open_url", return_value=mocker.sentinel.dataset)
+    pydap_data_store = mocker.patch("coast.data.opendap.PydapDataStore", return_value=mocker.sentinel.returned_store)
+
+    store = opendap_info.get_store()
+
+    open_url.assert_called_with(mocker.sentinel.url, session=mocker.sentinel.session)
+    pydap_data_store.assert_called_with(mocker.sentinel.dataset)
+    assert store == mocker.sentinel.returned_store
+
+
+@pytest.mark.parametrize(["chunking"], [(True,), (False,)])
+def test_open_dataset(opendap_info, mocker, chunking):
+    """Test that a dataset is initialised with the correct parameters."""
+    get_store = mocker.patch("coast.data.opendap.OpendapInfo.get_store", return_value=mocker.sentinel.store)
+    dataset = mocker.Mock()
+    dataset.__enter__ = mocker.Mock()  # Requirement of context manager
+    dataset.__exit__ = mocker.Mock()  # Requirement of context manager
+    open_dataset = mocker.patch("coast.data.opendap.open_dataset", return_value=dataset)
+    chunks = mocker.Mock() if chunking else None
+
+    dataset = opendap_info.open_dataset(chunks=chunks)
+
+    assert dataset == dataset
+    get_store.assert_called_once_with()
+    open_dataset.assert_called_with(mocker.sentinel.store, chunks=chunks)
+
+
+def test_from_cas(mocker):
+    """Test that an OPeNDAP accessor is instantiated with the correct parameters."""
+    mocker.sentinel.session = mocker.Mock()
+    mocker.sentinel.session.cookies.get_dict.return_value = {"CASTGC": mocker.sentinel.castgc}
+
+    setup_session = mocker.patch("coast.data.opendap.setup_session", return_value=mocker.sentinel.session)
+
+    opendap_info = OpendapInfo.from_cas(
+        mocker.sentinel.url, mocker.sentinel.cas_url, mocker.sentinel.username, mocker.sentinel.password
+    )
+
+    assert isinstance(opendap_info, OpendapInfo)
+    assert opendap_info.url == mocker.sentinel.url
+    assert opendap_info.session == mocker.sentinel.session
+    assert setup_session.called_with(mocker.sentinel.cas_url, mocker.sentinel.username, mocker.sentinel.password)
+    assert mocker.sentinel.session.cookies.set.called_with(CASTGC, mocker.sentinel.castgc)
+    assert opendap_info.session == mocker.sentinel.session
diff --git a/tests/test_tidetable.py b/tests/test_tidetable.py
index 0e07ea88..ce81a623 100644
--- a/tests/test_tidetable.py
+++ b/tests/test_tidetable.py
@@ -5,7 +5,7 @@
 import xarray as xr
 import datetime
 import logging
-import coast.general_utils as general_utils
+import coast._utils.general_utils as general_utils
 
 
 # -----------------------------------------------------------------------------#
diff --git a/unit_testing/generate_unit_test_contents.py b/unit_testing/generate_unit_test_contents.py
index fe46be35..6765904e 100644
--- a/unit_testing/generate_unit_test_contents.py
+++ b/unit_testing/generate_unit_test_contents.py
@@ -85,7 +85,7 @@
     for test in tests_to_do:
         test_name = test.__name__
         file.write("{0}. {1}\n".format(test_count, test_name))
-        method_count = 97
+        method_count = 97  # alphabetical method counter: a, b, c ...
 
         # Loop over methods in module. If begins with 'test_' then write to file
         for method in dir(test):
diff --git a/unit_testing/test_altimetry_methods.py b/unit_testing/test_altimetry_methods.py
index 0cf62c07..f82b4cca 100644
--- a/unit_testing/test_altimetry_methods.py
+++ b/unit_testing/test_altimetry_methods.py
@@ -4,7 +4,7 @@
 
 # IMPORT modules. Must have unittest, and probably coast.
 import coast
-from coast import general_utils
+from coast._utils import general_utils
 import unittest
 import numpy as np
 import os.path as path
diff --git a/unit_testing/test_general_utils.py b/unit_testing/test_general_utils.py
index a912bc3f..90773012 100644
--- a/unit_testing/test_general_utils.py
+++ b/unit_testing/test_general_utils.py
@@ -4,7 +4,7 @@
 
 # IMPORT modules. Must have unittest, and probably coast.
 import coast
-from coast import general_utils
+from coast._utils import general_utils
 import unittest
 import numpy as np
 import pytz
diff --git a/unit_testing/test_object_manipulation.py b/unit_testing/test_object_manipulation.py
index f39d5aa4..6b9d0f54 100644
--- a/unit_testing/test_object_manipulation.py
+++ b/unit_testing/test_object_manipulation.py
@@ -4,7 +4,7 @@
 
 # IMPORT modules. Must have unittest, and probably coast.
 import coast
-from coast import general_utils
+from coast._utils import general_utils
 import unittest
 import numpy as np
 import os.path as path
diff --git a/unit_testing/test_plot_utilities.py b/unit_testing/test_plot_utilities.py
index 12111706..625b1796 100644
--- a/unit_testing/test_plot_utilities.py
+++ b/unit_testing/test_plot_utilities.py
@@ -3,7 +3,7 @@
 """
 
 # IMPORT modules. Must have unittest, and probably coast.
-from coast import plot_util
+from coast._utils import plot_util
 import unittest
 import numpy as np
 import matplotlib.pyplot as plt
diff --git a/unit_testing/test_profile_methods.py b/unit_testing/test_profile_methods.py
index 4b44981a..47d46280 100644
--- a/unit_testing/test_profile_methods.py
+++ b/unit_testing/test_profile_methods.py
@@ -29,7 +29,7 @@ def test_load_process_and_compare_profile_data(self):
             processed = profile.process_en4()
             processed.dataset.load()
 
-            check1 = type(processed) == coast.profile.Profile
+            check1 = type(processed) == coast.Profile
             check2 = np.isnan(processed.dataset.temperature.values[0, 0])
             check3 = processed.dataset.dims["id_dim"] == 111
 
@@ -86,7 +86,7 @@ def test_compare_processed_profile_with_model(self):
             difference = pa.difference(processed, model_interpolated)
             difference.dataset.load()
 
-            check1 = type(difference) == coast.profile.Profile
+            check1 = type(difference) == coast.Profile
             check2 = np.isclose(difference.dataset.diff_temperature.values[22, 2], 2.2567890882492065)
             self.assertTrue(check1, "check1")
             self.assertTrue(check2, "check2")
diff --git a/unit_testing/test_stats_utilities.py b/unit_testing/test_stats_utilities.py
index f3403843..d9cc9bd2 100644
--- a/unit_testing/test_stats_utilities.py
+++ b/unit_testing/test_stats_utilities.py
@@ -5,7 +5,7 @@
 # IMPORT modules. Must have unittest, and probably coast.
 import unittest
 import coast
-from coast import stats_util
+from coast._utils import stats_util
 import numpy as np
 import unit_test_files as files
 import datetime
diff --git a/unit_testing/test_transect_methods.py b/unit_testing/test_transect_methods.py
index cc593d69..fa0b55f9 100644
--- a/unit_testing/test_transect_methods.py
+++ b/unit_testing/test_transect_methods.py
@@ -4,7 +4,7 @@
 
 # IMPORT modules. Must have unittest, and probably coast.
 import coast
-from coast import general_utils
+from coast._utils import general_utils
 import unittest
 import numpy as np
 import os.path as path
diff --git a/unit_testing/test_wod_read_data.py b/unit_testing/test_wod_read_data.py
index bb9bb03a..5f0a434a 100644
--- a/unit_testing/test_wod_read_data.py
+++ b/unit_testing/test_wod_read_data.py
@@ -32,7 +32,7 @@ def test_reshape_wod(self):
             my_list = ["dic", "temperature", "alkalinity"]
             wod_profile = coast.Profile.reshape_2d(wod_profile_1D, my_list)
 
-            check1 = type(wod_profile) == coast.profile.Profile
+            check1 = type(wod_profile) == coast.Profile
             check2 = list(wod_profile.dataset.coords) == ["time", "latitude", "longitude"]
 
             self.assertTrue(check1, "check1")
diff --git a/unit_testing/unit_test.py b/unit_testing/unit_test.py
index 08cd6f4c..84c62016 100644
--- a/unit_testing/unit_test.py
+++ b/unit_testing/unit_test.py
@@ -59,7 +59,7 @@
     test_wod_read_data,
     test_bgc_gridded_initialisation,
     test_process_data_methods,
-    test_example_scripts,
+    # test_example_scripts,
 ]
 
 
diff --git a/unit_testing/unit_test_BGC.py b/unit_testing/unit_test_BGC.py
index 11482e3c..56490d79 100644
--- a/unit_testing/unit_test_BGC.py
+++ b/unit_testing/unit_test_BGC.py
@@ -39,9 +39,9 @@
 import datetime
 import os.path as path
 import logging
-import coast.general_utils as general_utils
-import coast.plot_util as plot_util
-import coast.stats_util as stats_util
+import coast._utils.general_utils as general_utils
+import coast._utils.plot_util as plot_util
+import coast._utils.stats_util as stats_util
 from socket import gethostname  # to get hostname
 import traceback
 import xarray.ufuncs as uf
diff --git a/unit_testing/unit_test_OLD.py b/unit_testing/unit_test_OLD.py
index 3be40331..dccdc3e8 100755
--- a/unit_testing/unit_test_OLD.py
+++ b/unit_testing/unit_test_OLD.py
@@ -42,9 +42,9 @@
 import datetime
 import os.path as path
 import logging
-import coast.general_utils as general_utils
-import coast.plot_util as plot_util
-import coast.stats_util as stats_util
+import coast._utils.general_utils as general_utils
+import coast._utils.plot_util as plot_util
+import coast._utils.stats_util as stats_util
 from socket import gethostname  # to get hostname
 import traceback
 import xarray.ufuncs as uf
diff --git a/unit_testing/unit_test_contents.txt b/unit_testing/unit_test_contents.txt
index aa4c9471..49dd2ac7 100755
--- a/unit_testing/unit_test_contents.txt
+++ b/unit_testing/unit_test_contents.txt
@@ -18,12 +18,12 @@
       d. day_of_week
       e. getitem
 
-3. test_xesmf_convert
-      a. basic_conversion_to_xesmf
-
-4. test_gridded_harmonics
+3. test_gridded_harmonics
       a. combine_and_convert_harmonics
 
+4. test_xesmf_convert
+      a. basic_conversion_to_xesmf
+
 5. test_diagnostic_methods
       a. compute_vertical_spatial_derivative
       b. construct_density
@@ -54,61 +54,52 @@
       h. time_slice
       i. time_std
 
-10. test_tidegauge_analysis
-      a. difference
-      b. harmonic_analysis_utide
-      c. match_missing_values
-      d. threshold_statistics
-
-11. test_eof_methods
+10. test_eof_methods
       a. compute_heofs
       b. compute_regular_eof
 
-12. test_contour_f_methods
+11. test_contour_f_methods
       a. calculate_flow_across_contour
       b. calculate_pressure_gradient_driven_flow
       c. extract_isobath_contour_between_two_points
 
-13. test_contour_t_methods
+12. test_contour_t_methods
       a. along_contour_2d_flow
       b. along_contour_flow
       c. calculate_pressure_along_contour
 
-14. test_profile_methods
+13. test_profile_methods
       a. compare_processed_profile_with_model
       b. load_process_and_compare_profile_data
 
-15. test_plot_utilities
+14. test_plot_utilities
       a. determine_clim_by_stdev
       b. determine_colorbar_extension
       c. geo_axes
       d. scatter_with_fit
 
-16. test_stats_utilities
+15. test_stats_utilities
       a. find_maxima
 
-17. test_maskmaker_methods
+16. test_maskmaker_methods
       a. fill_polygon_by_index
       b. fill_polygon_by_lonlat
 
-18. test_climatology
+17. test_climatology
       a. monthly_and_seasonal_climatology
 
-19. test_wod_read_data
+18. test_wod_read_data
       a. load_wod
       b. reshape_wod
 
-20. test_bgc_gridded_initialisation
+19. test_bgc_gridded_initialisation
       a. gridded_load_bgc_data
       b. gridded_load_bgc_data_and_domain
       c. gridded_load_bgc_dimensions_correctly_renamed
       d. gridded_load_bgc_domain_only
       e. gridded_load_bgc_variables_correctly_renamed
 
-21. test_process_data_methods
-      a. statsmodel_seasonal_decompose
-
-22. test_example_scripts
+20. test_example_scripts
       a. altimetry_tutorial
       b. amm15_example_plot
       c. anchor_plots_of_nsea_wvel
@@ -118,8 +109,9 @@
       g. internal_tide_pycnocline_diagnostics
       h. seasia_dic_example_plot
       i. seasia_r12_example_plot
-      j. tidetable_tutorial
-      k. transect_tutorial
-      l. wcssp_india_example_plot
-      m. wod_bgc_ragged_example
+      j. tidegauge_validation_tutorial
+      k. tidetable_tutorial
+      l. transect_tutorial
+      m. wcssp_india_example_plot
+      n. wod_bgc_ragged_example
 
diff --git a/unit_testing/unit_test_files.py b/unit_testing/unit_test_files.py
index 71e2ce94..2d7101e5 100644
--- a/unit_testing/unit_test_files.py
+++ b/unit_testing/unit_test_files.py
@@ -9,7 +9,8 @@
     get_dom = unit_test_files.fn_nemo_dom
 """
 
-import os.path as path
+from os import path
+
 
 # All directories relative to unit_testing diretory
 dn_files = "./example_files/"  # Example data directory