test_rg_space.py 3.69 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Theo Steininger's avatar
Theo Steininger committed
13
#
14
# Copyright(C) 2013-2019 Max-Planck-Society
Theo Steininger's avatar
Theo Steininger committed
15
#
16
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik.
17

Jait Dixit's avatar
Jait Dixit committed
18
19
20
import unittest
from test.common import expand

21
22
23
24
import nifty5 as ift
import numpy as np
from numpy.testing import assert_, assert_allclose, assert_equal

Martin Reinecke's avatar
Martin Reinecke committed
25
# [shape, distances, harmonic, expected]
26
CONSTRUCTOR_CONFIGS = [
Martin Reinecke's avatar
Martin Reinecke committed
27
        [(8,), None, False,
Jait Dixit's avatar
Jait Dixit committed
28
29
30
31
            {
                'shape': (8,),
                'distances': (0.125,),
                'harmonic': False,
Martin Reinecke's avatar
Martin Reinecke committed
32
                'size': 8,
Jait Dixit's avatar
Jait Dixit committed
33
            }],
Martin Reinecke's avatar
Martin Reinecke committed
34
        [(8,), None, True,
Jait Dixit's avatar
Jait Dixit committed
35
36
37
38
            {
                'shape': (8,),
                'distances': (1.0,),
                'harmonic': True,
Martin Reinecke's avatar
Martin Reinecke committed
39
                'size': 8,
Jait Dixit's avatar
Jait Dixit committed
40
            }],
Martin Reinecke's avatar
Martin Reinecke committed
41
        [(8,), (12,), True,
Jait Dixit's avatar
Jait Dixit committed
42
43
44
45
            {
                'shape': (8,),
                'distances': (12.0,),
                'harmonic': True,
Martin Reinecke's avatar
Martin Reinecke committed
46
                'size': 8,
Jait Dixit's avatar
Jait Dixit committed
47
            }],
Martin Reinecke's avatar
Martin Reinecke committed
48
        [(11, 11), None, False,
Jait Dixit's avatar
Jait Dixit committed
49
50
51
52
            {
                'shape': (11, 11),
                'distances': (1/11, 1/11),
                'harmonic': False,
Martin Reinecke's avatar
Martin Reinecke committed
53
                'size': 121,
Jait Dixit's avatar
Jait Dixit committed
54
            }],
Martin Reinecke's avatar
Martin Reinecke committed
55
        [(12, 12), (1.3, 1.3), True,
Jait Dixit's avatar
Jait Dixit committed
56
            {
Theo Steininger's avatar
Theo Steininger committed
57
                'shape': (12, 12),
Jait Dixit's avatar
Jait Dixit committed
58
59
                'distances': (1.3, 1.3),
                'harmonic': True,
Martin Reinecke's avatar
Martin Reinecke committed
60
                'size': 144,
Jait Dixit's avatar
Jait Dixit committed
61
62
63
64
65
            }]

    ]


66
def get_k_length_array_configs():
Martin Reinecke's avatar
Martin Reinecke committed
67
    # for RGSpace(shape=(4, 4), distances=(0.25,0.25))
Martin Reinecke's avatar
Martin Reinecke committed
68
69
70
71
72
73
74
    cords_0 = np.ogrid[0:4, 0:4]
    da_0 = ((cords_0[0] - 4 // 2) * 0.25)**2
    da_0 = np.fft.ifftshift(da_0)
    temp = ((cords_0[1] - 4 // 2) * 0.25)**2
    temp = np.fft.ifftshift(temp)
    da_0 = da_0 + temp
    da_0 = np.sqrt(da_0)
75
    return [
Martin Reinecke's avatar
Martin Reinecke committed
76
        [(4, 4), (0.25, 0.25), da_0],
77
78
79
        ]


80
def get_dvol_configs():
Martin Reinecke's avatar
Martin Reinecke committed
81
    np.random.seed(42)
82
    return [
83
84
85
86
87
88
89
90
        [(11, 11), None, False, 1],
        [(11, 11), None, False, 1],
        [(11, 11), (1.3, 1.3), False, 1],
        [(11, 11), (1.3, 1.3), False, 1],
        [(11, 11), None, True, 1],
        [(11, 11), None, True, 1],
        [(11, 11), (1.3, 1.3), True, 1],
        [(11, 11), (1.3, 1.3), True, 1]
91
92
93
        ]


Jait Dixit's avatar
Jait Dixit committed
94
class RGSpaceInterfaceTests(unittest.TestCase):
Martin Reinecke's avatar
Martin Reinecke committed
95
    @expand([['distances', tuple]])
96
    def test_property_ret_type(self, attribute, expected_type):
Martin Reinecke's avatar
Martin Reinecke committed
97
        x = ift.RGSpace(1)
Jait Dixit's avatar
Jait Dixit committed
98
99
100
101
        assert_(isinstance(getattr(x, attribute), expected_type))


class RGSpaceFunctionalityTests(unittest.TestCase):
102
    @expand(CONSTRUCTOR_CONFIGS)
Martin Reinecke's avatar
Martin Reinecke committed
103
    def test_constructor(self, shape, distances,
Martin Reinecke's avatar
Martin Reinecke committed
104
                         harmonic, expected):
Martin Reinecke's avatar
Martin Reinecke committed
105
        x = ift.RGSpace(shape, distances, harmonic)
Martin Reinecke's avatar
Martin Reinecke committed
106
        for key, value in expected.items():
Jait Dixit's avatar
Jait Dixit committed
107
108
            assert_equal(getattr(x, key), value)

109
110
    @expand(get_k_length_array_configs())
    def test_k_length_array(self, shape, distances, expected):
Martin Reinecke's avatar
Martin Reinecke committed
111
        r = ift.RGSpace(shape=shape, distances=distances, harmonic=True)
Martin Reinecke's avatar
Martin Reinecke committed
112
        assert_allclose(r.get_k_length_array().to_global_data(), expected)
Jait Dixit's avatar
Jait Dixit committed
113

114
115
    @expand(get_dvol_configs())
    def test_dvol(self, shape, distances, harmonic, power):
Martin Reinecke's avatar
Martin Reinecke committed
116
        r = ift.RGSpace(shape=shape, distances=distances, harmonic=harmonic)
Martin Reinecke's avatar
Martin Reinecke committed
117
        assert_allclose(r.dvol, np.prod(r.distances)**power)