code: def test_egarch_performance(self):
      egarch_setup = """
  parameters = np.array([0.0, 0.1, -0.1, 0.95])
  p = o = q = 1
  backcast = 0.0
  lnsigma2 = np.empty_like(sigma2)
  std_resids = np.empty_like(sigma2)
  abs_std_resids = np.empty_like(sigma2)
          """
  
      egarch_first = """
  recpy.egarch_recursion(parameters, resids, sigma2, p, o, q, nobs, backcast,
  var_bounds, lnsigma2, std_resids, abs_std_resids)
  """
  
      egarch_second = """
  rec.egarch_recursion(parameters, resids, sigma2, p, o, q, nobs, backcast,
  var_bounds, lnsigma2, std_resids, abs_std_resids)
  """
      timer = Timer(
          egarch_first,
          "Numba",
          egarch_second,
          "Cython",
          "EGARCH",
          self.timer_setup + egarch_setup,
      )
      timer.display()
      assert timer.ratio < 10.0
      if not (MISSING_NUMBA or CYTHON_COVERAGE):
          assert 0.1 < timer.ratio
  
imports: import os
  import pickle
  import timeit
  import types
  import numpy
  from numpy.random import RandomState
  from numpy.testing import assert_allclose, assert_almost_equal
  import pytest
  from scipy.special import gamma
  import arch.univariate.recursions_python
  from arch.univariate.volatility import RiskMetrics2006
label_desc: Use image node_id 21 for calling the TestRecursions obj's underlying member method code with example usage: obj.test_egarch_performance() without return types