from __future__ import annotations import numpy as np class ShapeError(ValueError): pass def validate_forecast_request(target, horizon, past_only, past_future, cfg): if target.size == 0 or target.shape[-1] == 0: raise ShapeError("Empty input rejected.") if target.ndim != 2: raise ShapeError("target must be (V, T)") v, c = target.shape if v > cfg.max_variates: raise ShapeError(f"variates {v} exceed {cfg.max_variates}") if horizon <= 0: raise ShapeError("Invalid horizon.") if horizon > cfg.max_horizon: raise ShapeError("horizon exceeds max") if c > cfg.max_context: raise ShapeError("context exceeds max") if past_only is not None: po = np.asarray(past_only) if po.ndim != 2 or po.shape[-1] != c: raise ShapeError("past-only covariates must have length context") if past_future is not None: pf = np.asarray(past_future) if pf.ndim != 2 or pf.shape[-1] != c + horizon: raise ShapeError("past-future covariates must have length context+horizon")