def test_figarch_recursion(self): nobs, resids, = self.nobs, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([1.0, 0.2, 0.4, 0.3]) fresids = resids**2 p = q = 1 trunc_lag = 1000 rec.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) lam = rec.figarch_weights(parameters[1:], p, q, truncation=trunc_lag) lam_rev = lam[::-1] omega_tilde = parameters[0] / (1 - parameters[-1]) sigma2_direct = np.empty_like(sigma2) for t in range(nobs): backcasts = trunc_lag - t sigma2_direct[t] = omega_tilde if backcasts: sigma2_direct[t] += backcast * lam_rev[:backcasts].sum() if t: sigma2_direct[t] += np.sum(lam_rev[-t:] * fresids[max(0, t - 1000):t]) assert_almost_equal(sigma2_direct, sigma2) recpy.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) sigma2_numba = sigma2.copy() recpy.figarch_recursion_python(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) assert_almost_equal(sigma2_numba, sigma2) assert_almost_equal(sigma2_python, sigma2)
def test_figarch_recursion(self): nobs, resids, = self.nobs, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([1.0, 0.2, 0.4, 0.3]) fresids = resids ** 2 p = q = 1 trunc_lag = 1000 rec.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) lam = rec.figarch_weights(parameters[1:], p, q, truncation=trunc_lag) lam_rev = lam[::-1] omega_tilde = parameters[0] / (1 - parameters[-1]) sigma2_direct = np.empty_like(sigma2) for t in range(nobs): backcasts = trunc_lag - t sigma2_direct[t] = omega_tilde if backcasts: sigma2_direct[t] += backcast * lam_rev[:backcasts].sum() if t: sigma2_direct[t] += np.sum(lam_rev[-t:] * fresids[max(0, t - 1000):t]) assert_almost_equal(sigma2_direct, sigma2) recpy.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) sigma2_numba = sigma2.copy() recpy.figarch_recursion_python(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, self.var_bounds) assert_almost_equal(sigma2_numba, sigma2) assert_almost_equal(sigma2_python, sigma2)
def test_figarch_performance(self): midas_setup = """ p = q = 1 trunc_lag = 1000 parameters = np.array([1.0, 0.2, 0.2, 0.04]) fresids = resids ** 2.0 """ midas_first = """ recpy.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, var_bounds) """ midas_second = """ rec.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, var_bounds) """ timer = Timer( midas_first, "Numba", midas_second, "Cython", "FIGARCH", self.timer_setup + midas_setup, ) timer.display() assert timer.ratio < 10.0 if not (missing_numba or CYTHON_COVERAGE): assert 0.1 < timer.ratio
def test_figarch_performance(self): midas_setup = """ p = q = 1 trunc_lag = 1000 parameters = np.array([1.0, 0.2, 0.2, 0.04]) fresids = resids ** 2.0 """ midas_first = """ recpy.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, var_bounds) """ midas_second = """ rec.figarch_recursion(parameters, fresids, sigma2, p, q, nobs, trunc_lag, backcast, var_bounds) """ timer = Timer(midas_first, 'Numba', midas_second, 'Cython', 'FIGARCH', self.timer_setup + midas_setup) timer.display() assert timer.ratio < 10.0 if not (missing_numba or CYTHON_COVERAGE): assert 0.1 < timer.ratio