code: def test_figarch_analytical(self):
      vol = FIGARCH(truncation=50)
      resids = self.resid
      backcast = vol.backcast(resids)
      var_bounds = vol.variance_bounds(resids)
      params = np.array([0.1, 0.2, 0.4, 0.2])
      forecast = vol.forecast(
          params, resids, backcast, var_bounds, horizon=10, start=0
      )
      lam = figarch_weights(params[1:], 1, 1, vol.truncation)
      arch_params = np.r_[params[0] / (1 - params[-1]), lam]
      expected = _simple_direct_gjrgarch_forecaster(
          resids, arch_params, 50, 0, 0, backcast, var_bounds, 10
      )
      assert_allclose(forecast.forecasts, expected)
  
      forecast = vol.forecast(
          params, resids, backcast, var_bounds, horizon=1, start=0
      )
      assert forecast.forecasts.shape[1] == 1
  
      vol = FIGARCH(truncation=50, power=1.0)
      with pytest.raises(ValueError):
          vol.forecast(
              params,
              resids,
              backcast,
              var_bounds,
              horizon=2,
              method="analytic",
          )
  
imports: import numpy
  from numpy.random import RandomState
  from numpy.testing import assert_allclose
  import pandas
  import pytest
  from arch.univariate import arch_model
  from arch.univariate.distribution import Normal, StudentsT
  from arch.univariate.mean import ConstantMean
  from arch.univariate.volatility import APARCH, EGARCH, FIGARCH, GARCH, HARCH, BootstrapRng, ConstantVariance, EWMAVariance, FixedVariance, MIDASHyperbolic, RiskMetrics2006
label_desc: Use image node_id 38 for calling the TestVarianceForecasts obj's underlying member method code with example usage: obj.test_figarch_analytical() without return types