def test_midas_hyperbolic_update(self): nobs, resids = self.nobs, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([0.1, 0.6, 0.2]) j = np.arange(1, 22 + 1) weights = gamma(j + 0.6) / (gamma(j + 1) * gamma(0.6)) weights = weights / weights.sum() recpy.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) sigma2_ref = sigma2.copy() sigma2[:] = np.nan parameters = np.array([0.1, 0.6, 0.2, 0.6]) mu = recpy.MIDASUpdater(22, True) mu.initialize_update(parameters, backcast, nobs) for t in range(nobs): mu._update_tester(t, parameters, resids, sigma2, self.var_bounds) if t == nobs // 2: mu = pickle.loads(pickle.dumps(mu)) mu.initialize_update(parameters, backcast, nobs) assert_allclose(sigma2, sigma2_ref) sigma2[:] = np.nan mu = recpy.MIDASUpdater(22, True) mu.initialize_update(parameters, backcast, nobs) for t in range(nobs): mu._update_tester(t, parameters, resids, sigma2, self.var_bounds) if t == nobs // 2: mu = pickle.loads(pickle.dumps(mu)) mu.initialize_update(parameters, backcast, nobs) assert_allclose(sigma2, sigma2_ref)
def test_midas_hyperbolic(self): nobs, resids = self.nobs, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([0.1, 0.8, 0]) j = np.arange(1, 22 + 1) weights = gamma(j + 0.6) / (gamma(j + 1) * gamma(0.6)) weights = weights / weights.sum() recpy.midas_recursion( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) sigma2_numba = sigma2.copy() recpy.midas_recursion_python( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) sigma2_python = sigma2.copy() rec.midas_recursion( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) assert_almost_equal(sigma2_numba, sigma2) assert_almost_equal(sigma2_python, sigma2) mod_resids = resids.copy() mod_resids[:10] = np.inf recpy.midas_recursion_python( parameters, weights, mod_resids, sigma2, nobs, backcast, self.var_bounds ) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) parameters = np.array([0.1, 10e10, 0]) j = np.arange(1, 22 + 1) weights = gamma(j + 0.6) / (gamma(j + 1) * gamma(0.6)) weights = weights / weights.sum() recpy.midas_recursion_python( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) rec.midas_recursion( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) parameters = np.array([0.1, -0.4, 0]) recpy.midas_recursion_python( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) rec.midas_recursion( parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds ) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1])
def test_midas_performance(self): midas_setup = """ from scipy.special import gamma parameters = np.array([.1, 0.8, 0]) j = np.arange(1,22+1) weights = gamma(j+0.6) / (gamma(j+1) * gamma(0.6)) weights = weights / weights.sum() """ midas_first = """ recpy.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, var_bounds) """ midas_second = """ rec.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, var_bounds) """ timer = Timer( midas_first, "Numba", midas_second, "Cython", "MIDAS", 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_midas_hyperbolic(self): nobs, resids, = self.nobs, self.resids sigma2, backcast = self.sigma2, self.backcast parameters = np.array([.1, 0.8, 0]) j = np.arange(1, 22 + 1) weights = gamma(j + 0.6) / (gamma(j + 1) * gamma(0.6)) weights = weights / weights.sum() recpy.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) sigma2_numba = sigma2.copy() recpy.midas_recursion_python(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) sigma2_python = sigma2.copy() rec.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) assert_almost_equal(sigma2_numba, sigma2) assert_almost_equal(sigma2_python, sigma2) mod_resids = resids.copy() mod_resids[:10] = np.inf recpy.midas_recursion_python(parameters, weights, mod_resids, sigma2, nobs, backcast, self.var_bounds) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) parameters = np.array([.1, 10e10, 0]) j = np.arange(1, 22 + 1) weights = gamma(j + 0.6) / (gamma(j + 1) * gamma(0.6)) weights = weights / weights.sum() recpy.midas_recursion_python(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) rec.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) parameters = np.array([.1, -0.4, 0]) recpy.midas_recursion_python(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1]) rec.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, self.var_bounds) assert np.all(sigma2 >= self.var_bounds[:, 0]) assert np.all(sigma2 <= 2 * self.var_bounds[:, 1])
def test_midas_performance(self): midas_setup = """ from scipy.special import gamma parameters = np.array([.1, 0.8, 0]) j = np.arange(1,22+1) weights = gamma(j+0.6) / (gamma(j+1) * gamma(0.6)) weights = weights / weights.sum() """ midas_first = """ recpy.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, var_bounds) """ midas_second = """ rec.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, var_bounds) """ timer = Timer(midas_first, 'Numba', midas_second, 'Cython', 'GARCH', self.timer_setup + midas_setup) timer.display() assert timer.ratio < 10.0
def test_midas_performance(self): midas_setup = """ from scipy.special import gamma parameters = np.array([.1, 0.8, 0]) j = np.arange(1,22+1) weights = gamma(j+0.6) / (gamma(j+1) * gamma(0.6)) weights = weights / weights.sum() """ midas_first = """ recpy.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, var_bounds) """ midas_second = """ rec.midas_recursion(parameters, weights, resids, sigma2, nobs, backcast, var_bounds) """ timer = Timer(midas_first, 'Numba', midas_second, 'Cython', 'MIDAS', self.timer_setup + midas_setup) timer.display() assert timer.ratio < 10.0 if not (missing_numba or CYTHON_COVERAGE): assert 0.1 < timer.ratio