Skip to content

Commit

Permalink
adding read for statistics tendencies
Browse files Browse the repository at this point in the history
  • Loading branch information
floriankrb committed May 3, 2024
1 parent 64378e2 commit 69256c0
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/anemoi/datasets/create/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ def __init__(self, name="", **kwargs):
super().__init__(**kwargs)
self.name = name

storage_path = os.path.join(self.path + ".tmp_data", name)
storage_path = f"{self.path}.tmp_storage_{name}"
self.tmp_storage = build_storage(directory=storage_path, create=True)

def initialise(self):
Expand Down Expand Up @@ -725,6 +725,8 @@ class TendenciesStatisticsDeltaNotMultipleOfFrequency(ValueError):


class TendenciesStatisticsAddition(GenericAdditions):
DATASET_NAME_PATTERN = "statistics_tendencies_{delta}"

def __init__(self, path, delta=None, **kwargs):
full_ds = open_dataset(path)
self.variables = full_ds.variables
Expand All @@ -739,7 +741,7 @@ def __init__(self, path, delta=None, **kwargs):
)
idelta = delta // frequency

super().__init__(path=path, name=f"tendencies_statistics_{delta}h", **kwargs)
super().__init__(path=path, name=self.DATASET_NAME_PATTERN.format(delta=f"{delta}h"), **kwargs)

z = zarr.open(self.path, mode="r")
start = z.attrs["statistics_start_date"]
Expand Down
5 changes: 5 additions & 0 deletions src/anemoi/datasets/data/forewards.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ def variables(self):
def statistics(self):
return self.forward.statistics

def statistics_tendencies(self, delta=None):
if delta is None:
delta = self.frequency
return self.forward.statistics_tendencies(delta)

@property
def shape(self):
return self.forward.shape
Expand Down
8 changes: 8 additions & 0 deletions src/anemoi/datasets/data/join.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,14 @@ def statistics(self):
k: np.concatenate([d.statistics[k] for d in self.datasets], axis=0) for k in self.datasets[0].statistics
}

def statistics_tendencies(self, delta=None):
if delta is None:
delta = self.frequency
return {
k: np.concatenate([d.statistics_tendencies(delta)[k] for d in self.datasets], axis=0)
for k in self.datasets[0].statistics_tendencies(delta)
}

def source(self, index):
i = index
for dataset in self.datasets:
Expand Down
5 changes: 5 additions & 0 deletions src/anemoi/datasets/data/select.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ def name_to_index(self):
def statistics(self):
return {k: v[self.indices] for k, v in self.dataset.statistics.items()}

def statistics_tendencies(self, delta=None):
if delta is None:
delta = self.frequency
return {k: v[self.indices] for k, v in self.dataset.statistics_tendencies(delta).items()}

def metadata_specific(self, **kwargs):
return super().metadata_specific(indices=self.indices, **kwargs)

Expand Down
5 changes: 5 additions & 0 deletions src/anemoi/datasets/data/statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ def __init__(self, dataset, statistic):
def statistics(self):
return self._statistic.statistics

def statistics_tendencies(self, delta=None):
if delta is None:
delta = self.frequency
return self._statistic.statistics_tendencies(delta)

def metadata_specific(self, **kwargs):
return super().metadata_specific(
statistics=self._statistic.metadata_specific(),
Expand Down
15 changes: 15 additions & 0 deletions src/anemoi/datasets/data/stores.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,21 @@ def statistics(self):
minimum=self.z.minimum[:],
)

def statistics_tendencies(self, delta=None):
if delta is None:
delta = self.frequency
if isinstance(delta, int):
delta = f"{delta}h"
from anemoi.datasets.create.loaders import TendenciesStatisticsAddition

prefix = TendenciesStatisticsAddition.DATASET_NAME_PATTERN.format(delta=delta) + "_"
return dict(
mean=self.z[f"{prefix}mean"][:],
stdev=self.z[f"{prefix}stdev"][:],
maximum=self.z[f"{prefix}maximum"][:],
minimum=self.z[f"{prefix}minimum"][:],
)

@property
def resolution(self):
return self.z.attrs["resolution"]
Expand Down
4 changes: 4 additions & 0 deletions src/anemoi/datasets/data/unchecked.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ def variables(self):
def statistics(self):
raise NotImplementedError()

@check("check_same_variables")
def statistics_tendencies(self, delta=None):
raise NotImplementedError()

@property
def shape(self):
raise NotImplementedError()
Expand Down

0 comments on commit 69256c0

Please sign in to comment.