"""Example: minimal OLS

"""

import numpy as np
from numpy.testing import assert_allclose, assert_almost_equal

import statsmodels.api as sm


def test_HC_use():
    np.random.seed(0)
    nsample = 100
    x = np.linspace(0, 10, 100)
    X = sm.add_constant(np.column_stack((x, x**2)), prepend=False)
    beta = np.array([1, 0.1, 10])
    y = np.dot(X, beta) + np.random.normal(size=nsample)

    results = sm.OLS(y, X).fit()

    # test cov_params
    idx = np.array([1, 2])
    cov12 = results.cov_params(column=[1, 2], cov_p=results.cov_HC0)
    assert_almost_equal(cov12, results.cov_HC0[idx[:, None], idx], decimal=15)

    # test t_test
    tvals = results.params/results.HC0_se
    ttest = results.t_test(np.eye(3), cov_p=results.cov_HC0)
    assert_almost_equal(ttest.tvalue, tvals, decimal=14)
    assert_almost_equal(ttest.sd, results.HC0_se, decimal=14)

    # test f_test
    ftest = results.f_test(np.eye(3)[:-1], cov_p=results.cov_HC0)
    slopes = results.params[:-1]
    idx = np.array([0, 1])
    cov_slopes = results.cov_HC0[idx[:, None], idx]
    fval = np.dot(slopes, np.dot(np.linalg.inv(cov_slopes), slopes))/len(idx)
    assert_allclose(ftest.fvalue, fval, rtol=12)
