Time chunks

class weatherbenchX.time_chunks.TimeChunks(init_times: ndarray, lead_times: ndarray | slice, init_time_chunk_size: int | None = None, lead_time_chunk_size: int | None = None)[source]

Iterable defining chunks in init and lead time.

Init.

Parameters:
  • init_times – Numpy array of init_times (dtype: np.datetime64).

  • lead_times – To specify exact lead times, array of np.timedelta64. For a lead_time interval, specify slice of np.timedelta64’s. End point is inclusive following pandas/xarray conventions. start and stop are mandatory for slice. step parameter is not used.

  • init_time_chunk_size – Chunk size in init_time dimension. None or zero specifies a single chunk (default).

  • lead_time_chunk_size – Chunk size in lead_time dimension. None or zero specifies a single chunk (default). Must be None in the case of a single lead_time slice.

Iterator returns tuples of (init_times, lead_times) chunks. The chunks are products of the individual init_times and lead_times chunks. See example below.

init_time is an array of np.datetime64’s. For exact lead times, lead_time is an array of np.timedelta64’s. For lead time intervals, lead_time is a slice indicating start and stop as np.timedelta64’s.

Example 1: Exact lead times
>>> from weatherbenchX import time_chunks
>>> init_times = np.arange(
>>>     '2020-01-01T00',
>>>     '2020-01-02T00',
>>>     np.timedelta64(6, 'h'),
>>>     dtype="datetime64"
>>>     )
>>> lead_times = np.arange(0, 18, 6, dtype='timedelta64[h]')
>>> times = time_chunks.TimeChunks(
>>>     init_times,
>>>     lead_times,
>>>     init_time_chunk_size=2,
>>>     lead_time_chunk_size=2
>>>     )
>>> list(times)
[(array(['2020-01-01T00', '2020-01-01T06'], dtype='datetime64[h]'),
array([0, 6], dtype='timedelta64[h]')),
(array(['2020-01-01T00', '2020-01-01T06'], dtype='datetime64[h]'),
array([12], dtype='timedelta64[h]')),
(array(['2020-01-01T12', '2020-01-01T18'], dtype='datetime64[h]'),
array([0, 6], dtype='timedelta64[h]')),
(array(['2020-01-01T12', '2020-01-01T18'], dtype='datetime64[h]'),
array([12], dtype='timedelta64[h]'))]
Example 2: Lead time interval
>>> lead_times = slice(np.timedelta64(0), np.timedelta64(6, 'h'))
>>> times = time_chunks.TimeChunks(
>>>     init_times,
>>>     lead_times,
>>>     init_time_chunk_size=2,
>>>     lead_time_chunk_size=None   # Must be None for slice
>>>     )
>>> list(times)
[(array(['2020-01-01T00', '2020-01-01T06'], dtype='datetime64[h]'),
  slice(numpy.timedelta64(0), numpy.timedelta64(6,'h'), None)),
(array(['2020-01-01T12', '2020-01-01T18'], dtype='datetime64[h]'),
  slice(numpy.timedelta64(0), numpy.timedelta64(6,'h'), None))]