test_adoint.py 1.21 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import unittest
import nifty2go as ift
import numpy as np
from itertools import product
from test.common import expand
from numpy.testing import assert_allclose


def _check_adjointness(op, dtype=np.float64):
    f1 = ift.Field.from_random("normal",domain=op.domain, dtype=dtype)
    f2 = ift.Field.from_random("normal",domain=op.target, dtype=dtype)
    assert_allclose(f1.vdot(op.adjoint_times(f2)), op.times(f1).vdot(f2),
                    rtol=1e-8)

_harmonic_spaces = [ ift.RGSpace(7, distances=0.2, harmonic=True),
                     ift.RGSpace((12,46), distances=(0.2, 0.3), harmonic=True),
                     ift.LMSpace(17) ]

class Adjointness_Tests(unittest.TestCase):
    @expand(product(_harmonic_spaces, [np.float64, np.complex128]))
    def testPPO(self, sp, dtype):
        op = ift.PowerProjectionOperator(sp)
        _check_adjointness(op, dtype)
        ps = ift.PowerSpace(sp, ift.PowerSpace.useful_binbounds(sp, logarithmic=False, nbin=3))
        op = ift.PowerProjectionOperator(sp, ps)
        _check_adjointness(op, dtype)
        ps = ift.PowerSpace(sp, ift.PowerSpace.useful_binbounds(sp, logarithmic=True, nbin=3))
        op = ift.PowerProjectionOperator(sp, ps)
        _check_adjointness(op, dtype)