code: def cesfcst(
      states, i, m, season, f, h, alpha_0, alpha_1, beta_0, beta_1
  ):
      # obs:
      # forecast are obtained in a recursive manner
      # this is not standard, for example in ets
      # forecasts
      new_states = np.zeros((m + h, states.shape[1]), dtype=np.float32)
      new_states[:m] = states[(i - m) : i]
      for i_h in range(m, m + h):
          if season in [NONE, PARTIAL, FULL]:
              f[i_h - m] = new_states[i_h - 1, 0]
          else:
              f[i_h - m] = new_states[i_h - m, 0]
          if season > SIMPLE:
              f[i_h - m] += new_states[i_h - m, 2]
          cesupdate(
              new_states,
              i_h,
              m,
              season,
              alpha_0,
              alpha_1,
              beta_0,
              beta_1,
              f[i_h - m],
          )
      return new_states
  
imports: import math
  from typing import Tuple
  import numpy
  from numba import njit
  from statsmodels.tsa.seasonal import seasonal_decompose
  from .ets import restrict_to_bounds, results
  from .utils import CACHE, NOGIL
label_desc: Use image node_id 3 for calling a global function with example usage: cesfcst(states, i, m, season, f, h, alpha_0, alpha_1, beta_0, beta_1) and returns: new_states