code: def test_garch_performance(self):
      garch_setup = """
  parameters = np.array([.1, .4, .3, .2])
  fresids = resids ** 2.0
  sresids = np.sign(resids)
          """
  
      garch_first = """
  recpy.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, nobs,
  backcast, var_bounds)
          """
      garch_second = """
  rec.garch_recursion(parameters, fresids, sresids, sigma2, 1, 1, 1, nobs, backcast,
  var_bounds)
          """
      timer = Timer(
          garch_first,
          "Numba",
          garch_second,
          "Cython",
          "GARCH",
          self.timer_setup + garch_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 19 for calling the TestRecursions obj's underlying member method code with example usage: obj.test_garch_performance() without return types