Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions lenapy/utils/time.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from typing import Union

import netCDF4
import numpy as np
import pandas as pd
Expand All @@ -9,6 +11,33 @@
from lenapy.utils.climato import Coeffs_climato


def is_dimension_chunked(da: Union[xr.DataArray, xr.Dataset], dim: str):
"""
Check if a dimension of an xarray DataArray or Dataset is chunked.

Parameters
----------
da : xarray.DataArray or xarray.Dataset
The object to check.
dim : str
The name of the dimension to check.

Returns
-------
bool
True if the dimension is chunked, False if it is non-chunked.
"""
if dim not in da.dims:
raise ValueError(f"Dimension '{dim}' does not exist in the DataArray/Dataset")

if da.chunks is None:
return False

dim_index = da.get_axis_num(dim)
chunks_dim = da.chunks[dim_index]
return len(chunks_dim) > 1 or chunks_dim[0] != da.sizes[dim]


def filter(
data, filter_name="lanczos", time_coord="time", annual_cycle=False, q=3, **kwargs
):
Expand Down Expand Up @@ -146,6 +175,9 @@ def climato(
The requested components as an xarray.Dataset. If `return_coeffs=True`,
returns a tuple `(dataset, coeffs)` where `coeffs` contains the cycle and trend coefficients.
"""
if is_dimension_chunked(data, "time"):
raise ValueError("time dimension must be unchunked")

a = Coeffs_climato(xr.Dataset(dict(measure=data)), Nmin=Nmin)
res = a.solve("measure", t_min=t_min, t_max=t_max)
ret = []
Expand Down
Loading