code: def test_invalid_horizon():
      res = arch_model(SP500).fit(disp="off")
      with pytest.raises(ValueError, match="horizon must be"):
          res.forecast(horizon=-1)
      with pytest.raises(ValueError, match="horizon must be"):
          res.forecast(horizon=1.0)
      with pytest.raises(ValueError, match="horizon must be"):
          res.forecast(horizon="5")
  
imports: import datetime
  from itertools import product
  import numpy
  from numpy.random import RandomState
  from numpy.testing import assert_allclose
  import pandas
  from pandas.testing import assert_frame_equal
  import pytest
  from arch.data import sp500
  from arch.tests.univariate.test_variance_forecasting import preserved_state
  from arch.univariate import APARCH, ARX, EGARCH, FIGARCH, GARCH, HARCH, HARX, ConstantMean, ConstantVariance, EWMAVariance, MIDASHyperbolic, RiskMetrics2006, ZeroMean, arch_model
  from arch.univariate.mean import _ar_forecast, _ar_to_impulse
label_desc: Use image node_id 4 for calling a global function with example usage: test_invalid_horizon() without return types