Example #1
0
def test_vector_inner():
    rn = odl.CudaRn(5)
    xarr, yarr, x, y = _vectors(rn, 2)

    weight_vec = _pos_array(odl.Rn(5))
    weight_elem = rn.element(weight_vec)

    weighting_vec = CudaFnVectorWeighting(weight_vec)
    weighting_elem = CudaFnVectorWeighting(weight_elem)

    true_inner = np.vdot(yarr, xarr * weight_vec)

    assert almost_equal(weighting_vec.inner(x, y), true_inner)
    assert almost_equal(weighting_elem.inner(x, y), true_inner)

    # Same with free function
    inner_vec = odl.cu_weighted_inner(weight_vec)
    inner_elem = odl.cu_weighted_inner(weight_elem)

    assert almost_equal(inner_vec(x, y), true_inner)
    assert almost_equal(inner_elem(x, y), true_inner)

    # Exponent != 2 -> no inner product, should raise
    with pytest.raises(NotImplementedError):
        CudaFnVectorWeighting(weight_vec, exponent=1.0).inner(x, y)
Example #2
0
def test_vector_inner():
    rn = CudaRn(5)
    [xarr, yarr], [x, y] = example_vectors(rn, 2)

    weight = _pos_vector(CudaRn(5))

    weighting = CudaFnVectorWeighting(weight)

    true_inner = np.vdot(yarr, xarr * weight.asarray())

    assert almost_equal(weighting.inner(x, y), true_inner)

    # Same with free function
    inner_vec = odl.cu_weighted_inner(weight)

    assert almost_equal(inner_vec(x, y), true_inner)

    # Exponent != 2 -> no inner product, should raise
    with pytest.raises(NotImplementedError):
        CudaFnVectorWeighting(weight, exponent=1.0).inner(x, y)