Source code for darts.utils.onnx_utils
from typing import Optional
import numpy as np
from darts import TimeSeries
[docs]def prepare_onnx_inputs(
model,
series: TimeSeries,
past_covariates: Optional[TimeSeries] = None,
future_covariates: Optional[TimeSeries] = None,
) -> tuple[np.ndarray, Optional[np.ndarray], Optional[np.ndarray]]:
"""Helper function to slice and concatenate the input features.
In order to remove the dependency on the `model` argument, it can be decomposed into
the following arguments (and simplified depending on the characteristics of the model used):
- model_icl
- model_ocl
- model_uses_past_covs
- model_uses_future_covs
- model_uses_static_covs
"""
past_feats, future_feats, static_feats = None, None, None
# get input & output windows
past_start = series.end_time() - (model.input_chunk_length - 1) * series.freq
past_end = series.end_time()
future_start = past_end + 1 * series.freq
future_end = past_end + model.output_chunk_length * series.freq
# extract all historic and future features from target, past and future covariates
past_feats = series[past_start:past_end].values()
if past_covariates and model.uses_past_covariates:
# extract past covariates
past_feats = np.concatenate(
[past_feats, past_covariates[past_start:past_end].values()], axis=1
)
if future_covariates and model.uses_future_covariates:
# extract past part of future covariates
past_feats = np.concatenate(
[past_feats, future_covariates[past_start:past_end].values()], axis=1
)
# extract future part of future covariates
future_feats = future_covariates[future_start:future_end].values()
# add batch dimension -> (batch, n time steps, n components)
past_feats = np.expand_dims(past_feats, axis=0).astype(series.dtype)
future_feats = np.expand_dims(future_feats, axis=0).astype(series.dtype)
# extract static covariates
if series.has_static_covariates and model.uses_static_covariates:
static_feats = np.expand_dims(series.static_covariates_values(), axis=0).astype(
series.dtype
)
return past_feats, future_feats, static_feats