Source code for icenet.data.processors.meta
import numpy as np
import pandas as pd
import xarray as xr
from icenet.data.cli import process_args
from icenet.data.process import IceNetPreProcessor
from icenet.data.sic.mask import Masks
"""
"""
[docs]
class IceNetMetaPreProcessor(IceNetPreProcessor):
    """
    :param name:
    :param include_circday:
    :param include_land:
    """
    def __init__(self,
                 name: str,
                 include_circday: bool = True,
                 include_land: bool = True,
                 **kwargs):
        super().__init__(abs_vars=[],
                         anom_vars=[],
                         identifier="meta",
                         linear_trends=tuple(),
                         name=name,
                         test_dates=[],
                         train_dates=[],
                         val_dates=[],
                         **kwargs)
        self._include_circday = include_circday
        self._include_land = include_land
[docs]
    def init_source_data(self,
                         lag_days: object = None,
                         lead_days: object = None):
        """
        :param lag_days:
        :param lead_days:
        """
        raise NotImplementedError("No need to execute implementation for meta")
[docs]
    def process(self):
        """
        """
        if self._include_circday:
            self._save_circday()
        if self._include_land:
            self._save_land()
        # FIXME: this is a bit messy, clarify meta_vars and interface between
        #  processing and dataset generation
        if self._update_loader:
            self.update_loader_config()
    def _save_land(self):
        """
        """
        land_mask = Masks(north=self.north, south=self.south).get_land_mask()
        land_map = np.ones(self._data_shape, dtype=self._dtype)
        land_map[~land_mask] = -1.
        if "land" not in self._meta_vars:
            self._meta_vars.append("land")
        da = xr.DataArray(data=land_map,
                          dims=["yc", "xc"],
                          attrs=dict(description="IceNet land mask metadata"))
        land_path = self.save_processed_file("land", "land.nc", da)
        return land_path
    def _save_circday(self):
        """
        """
        cos = []
        sin = []
        paths = []
        for date in pd.date_range(start='2012-1-1', end='2012-12-31'):
            if self.north:
                circday = date.dayofyear
            else:
                circday = date.dayofyear + 365.25 / 2
            cos.append(np.cos(2 * np.pi * circday / 366, dtype=self._dtype))
            sin.append(np.sin(2 * np.pi * circday / 366, dtype=self._dtype))
        for var_name in ["sin", "cos"]:
            if var_name not in self._meta_vars:
                self._meta_vars.append(var_name)
            da = xr.DataArray(
                data=eval(var_name),
                dims=["time"],
                coords=dict(
                    time=pd.date_range(start='2012-1-1', end='2012-12-31')),
                attrs=dict(
                    description="IceNet {} mask metadata".format(var_name)))
            paths.append(
                self.save_processed_file(var_name, "{}.nc".format(var_name),
                                         da))
        return paths
[docs]
def main():
    args = process_args(dates=False, ref_option=False)
    IceNetMetaPreProcessor(args.name,
                           north=args.hemisphere == "north",
                           south=args.hemisphere == "south").process()