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()