diff --git a/toargridding/metadata.py b/toargridding/metadata.py index 41464983f6cbddce395e69dc7debbd986263ee45..72f91eef46b5bbbd90ecf46d5ebb11e27bcb2648 100644 --- a/toargridding/metadata.py +++ b/toargridding/metadata.py @@ -7,16 +7,17 @@ import xarray as xr date_created = datetime.utcnow().strftime("%Y-%m-dT%H:%M:%SZ") -DATA_VARIABLES = ["latitude", "longitude", "time"] -COORDINATE_VARIABLES = ["mean", "std", "n"] +COORDINATE_VARIABLES = ["latitude", "longitude", "time"] +DATA_VARIABLES = ["mean", "std", "n"] DataVariables = Enum("DataVariables", DATA_VARIABLES) +Coordinates = Enum("Coordinates", COORDINATE_VARIABLES) Variables = Enum("Variables", [*DATA_VARIABLES, *COORDINATE_VARIABLES]) @dataclass class Variable: - name: str + var: Variables data: np.ndarray attributes: dict[str, str] encoding: dict[str, str] @@ -24,15 +25,19 @@ class Variable: @classmethod def from_data(cls, data, variable: Variables, **kwargs): metadata = Variable.get_metadata(variable) - return cls(variable.name, data, **metadata, **kwargs) + return cls(variable, data, **metadata, **kwargs) @staticmethod def get_metadata(variable: Variables): - return VARIABLE_METADATA[variable] + return VARIABLE_METADATA[variable.name] def as_data_array(self, dims): return xr.DataArray(self.data, name=self.name, dims=dims, attrs=self.attributes) + @property + def name(self): + return self.var.name + @property def size(self): return self.data.size @@ -74,7 +79,7 @@ def get_variable_attributes(variable: Variables): VARIABLE_METADATA = { - Variables.latitude: { + Variables.latitude.name: { "attributes": { "standard_name": "latitude", "long_name": "latitude in degrees north", @@ -86,7 +91,7 @@ VARIABLE_METADATA = { "_FillValue": -1000, }, }, - Variables.longitude: { + Variables.longitude.name: { "attributes": { "standard_name": "longitude", "long_name": "longitude in degrees east", @@ -98,7 +103,7 @@ VARIABLE_METADATA = { "_FillValue": -1000, }, }, - Variables.time: { + Variables.time.name: { "attributes": { "units": "time since ...", "long_name": "time", @@ -107,11 +112,11 @@ VARIABLE_METADATA = { }, "encoding": {"dtype": "int32", "_FillValue": None}, }, - Variables.mean: { + Variables.mean.name: { "attributes": {}, "encoding": {"dtype": "float32", "_FillValue": np.nan, "zlib": False}, }, - Variables.std: { + Variables.std.name: { "attributes": {}, "encoding": { "dtype": "float32", @@ -119,7 +124,7 @@ VARIABLE_METADATA = { "zlib": False, }, }, - Variables.n: { + Variables.n.name: { "attributes": {}, "encoding": { "dtype": "int32",