test_lm_space.py 2.84 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, assert_raises

Martin Reinecke's avatar
Martin Reinecke committed
25
# [lmax, expected]
26
CONSTRUCTOR_CONFIGS = [
27
        [5, None, {
Jait Dixit's avatar
Jait Dixit committed
28
29
30
31
            'lmax': 5,
            'mmax': 5,
            'shape': (36,),
            'harmonic': True,
Martin Reinecke's avatar
Martin Reinecke committed
32
            'size': 36,
Jait Dixit's avatar
Jait Dixit committed
33
            }],
34
        [7, 4, {
Jait Dixit's avatar
Jait Dixit committed
35
            'lmax': 7,
36
37
            'mmax': 4,
            'shape': (52,),
Jait Dixit's avatar
Jait Dixit committed
38
            'harmonic': True,
Martin Reinecke's avatar
Martin Reinecke committed
39
            'size': 52,
Jait Dixit's avatar
Jait Dixit committed
40
            }],
41
        [-1, 28, {
Jait Dixit's avatar
Jait Dixit committed
42
43
44
45
            'error': ValueError
            }]
    ]

Theo Steininger's avatar
Theo Steininger committed
46

47
def _k_length_array_helper(index_arr, lmax):
Martin Reinecke's avatar
Martin Reinecke committed
48
49
50
51
    if index_arr <= lmax:
        index_half = index_arr
    else:
        if (index_arr - lmax) % 2 == 0:
Martin Reinecke's avatar
Martin Reinecke committed
52
            index_half = (index_arr + lmax)//2
Martin Reinecke's avatar
Martin Reinecke committed
53
        else:
Martin Reinecke's avatar
Martin Reinecke committed
54
            index_half = (index_arr + lmax + 1)//2
Martin Reinecke's avatar
Martin Reinecke committed
55

56
57
    m = np.ceil(((2*lmax + 1) - np.sqrt((2*lmax + 1)**2 -
                 8*(index_half - lmax)))/2).astype(int)
Martin Reinecke's avatar
Martin Reinecke committed
58

59
    return index_half - m*(2*lmax + 1 - m)//2
Martin Reinecke's avatar
Martin Reinecke committed
60

Theo Steininger's avatar
Theo Steininger committed
61

62
63
def get_k_length_array_configs():
    da_0 = [_k_length_array_helper(idx, 5) for idx in np.arange(36)]
Martin Reinecke's avatar
Martin Reinecke committed
64
    return [[5, da_0]]
65
66


67
class LMSpaceInterfaceTests(unittest.TestCase):
Jait Dixit's avatar
Jait Dixit committed
68
69
    @expand([['lmax', int],
            ['mmax', int],
Martin Reinecke's avatar
Martin Reinecke committed
70
            ['size', int]])
71
    def test_property_ret_type(self, attribute, expected_type):
Martin Reinecke's avatar
Martin Reinecke committed
72
        l = ift.LMSpace(7, 5)
73
        assert_(isinstance(getattr(l, attribute), expected_type))
Jait Dixit's avatar
Jait Dixit committed
74
75
76


class LMSpaceFunctionalityTests(unittest.TestCase):
77
    @expand(CONSTRUCTOR_CONFIGS)
78
    def test_constructor(self, lmax, mmax, expected):
79
80
        if 'error' in expected:
            with assert_raises(expected['error']):
Martin Reinecke's avatar
Martin Reinecke committed
81
                ift.LMSpace(lmax, mmax)
Jait Dixit's avatar
Jait Dixit committed
82
        else:
Martin Reinecke's avatar
Martin Reinecke committed
83
            l = ift.LMSpace(lmax, mmax)
Martin Reinecke's avatar
Martin Reinecke committed
84
            for key, value in expected.items():
85
                assert_equal(getattr(l, key), value)
Jait Dixit's avatar
Jait Dixit committed
86

87
    def test_dvol(self):
Martin Reinecke's avatar
Martin Reinecke committed
88
        assert_allclose(ift.LMSpace(5).dvol, 1.)
Jait Dixit's avatar
Jait Dixit committed
89

90
91
    @expand(get_k_length_array_configs())
    def test_k_length_array(self, lmax, expected):
Martin Reinecke's avatar
Martin Reinecke committed
92
        l = ift.LMSpace(lmax)
Martin Reinecke's avatar
Martin Reinecke committed
93
        assert_allclose(l.get_k_length_array().to_global_data(), expected)