def test_least_squares_oracle_2():
    A = np.array([[1.0, 2.0], [3.0, 4.0]])
    b = np.array([1.0, -1.0])

    matvec_Ax = lambda x: A.dot(x)
    matvec_ATx = lambda x: A.T.dot(x)
    oracle = oracles.LeastSquaresOracle(matvec_Ax, matvec_ATx, b)

    # Checks at point x = [1, 2]
    x = np.array([1.0, 2.0])
    assert_almost_equal(oracle.func(x), 80.0)
    ok_(np.allclose(oracle.grad(x), np.array([40., 56.])))
    ok_(isinstance(oracle.grad(x), np.ndarray))
def test_least_squares_oracle():
    A = np.eye(3)
    b = np.array([1, 2, 3])

    matvec_Ax = lambda x: A.dot(x)
    matvec_ATx = lambda x: A.T.dot(x)
    oracle = oracles.LeastSquaresOracle(matvec_Ax, matvec_ATx, b)

    # Checks at point x = [0, 0, 0]
    x = np.zeros(3)
    assert_almost_equal(oracle.func(x), 7.0)
    ok_(np.allclose(oracle.grad(x), np.array([-1., -2., -3.])))
    ok_(isinstance(oracle.grad(x), np.ndarray))

    # Checks at point x = [1, 1, 1]
    x = np.ones(3)
    assert_almost_equal(oracle.func(x), 2.5)
    ok_(np.allclose(oracle.grad(x), np.array([0., -1., -2.])))
    ok_(isinstance(oracle.grad(x), np.ndarray))