Commit edab13c6 authored by Jait Dixit's avatar Jait Dixit

Finish tests for all Space classes

parent f46fca01
Pipeline #10127 failed with stage
in 20 minutes and 4 seconds
import d2o
import numpy as np
from nose_parameterized import parameterized
from nifty import RGSpace, LMSpace, HPSpace, GLSpace
from nifty import RGSpace, LMSpace, HPSpace, GLSpace, PowerSpace
from nifty.config import dependency_injector as di
from string import strip
def pretty_str(obj):
if type(obj) == list:
return " ".join(pretty_str(x) for x in obj)
if type(obj) == tuple:
return " ".join(pretty_str(x) for x in obj)
if type(obj) == RGSpace:
return type(obj).__name__
elif type(obj) == LMSpace:
......@@ -16,6 +19,8 @@ def pretty_str(obj):
return type(obj).__name__
elif type(obj) == GLSpace:
return type(obj).__name__
elif type(obj) == PowerSpace:
return type(obj).__name__
elif isinstance(obj, d2o.distributed_data_object):
return 'd2o'
elif type(obj) == dict:
......@@ -40,3 +45,16 @@ def custom_name_func(testcase_func, param_num, param):
def expand(*args, **kwargs):
return parameterized.expand(*args, testcase_func_name=custom_name_func,
**kwargs)
def generate_spaces():
spaces = [RGSpace(4), PowerSpace(RGSpace((4, 4), harmonic=True))]
if 'healpy' in di:
spaces.append(HPSpace(4))
if 'libsharp_wrapper_gl' in di:
spaces.append(GLSpace(4))
if 'healpy' in di or 'libsharp_wrapper_gl' in di:
spaces.append(LMSpace(5))
return spaces
#!/usr/bin/env python
from __future__ import division
import numpy as np
# deterministic
np.random.seed(42)
def distance_array_helper(index_arr, lmax):
if index_arr <= lmax:
index_half = index_arr
else:
if (index_arr - lmax) % 2 == 0:
index_half = (index_arr + lmax) / 2
else:
index_half = (index_arr + lmax + 1) / 2
m = (
np.ceil(((2 * lmax + 1) - np.sqrt((2 * lmax + 1)**2 -
8 * (index_half - lmax))) / 2)
).astype(int)
return index_half - m * (2 * lmax + 1 - m) // 2
# for LMSpace(5)
da_0 = [distance_array_helper(idx, 5) for idx in np.arange(36)]
# random input for weight
w_0_x = np.random.rand(32, 16, 6)
# random input for hermitian
h_0_res_real = np.random.rand(32, 16, 6).astype(np.complex128)
h_0_res_imag = np.random.rand(32, 16, 6).astype(np.complex128)
h_0_x = h_0_res_real + h_0_res_imag * 1j
# write everything to disk
np.savez('lm_space', da_0=da_0, w_0_x=w_0_x, w_0_res=w_0_x, h_0_x=h_0_x,
h_0_res_real=h_0_res_real, h_0_res_imag=h_0_res_imag)
#!/usr/bin/env python
from __future__ import division
import numpy as np
# deterministic
np.random.seed(42)
# for now directly the kindex
# RGSpace((4, 4), harmonic=True)
da_0 = np.array([0, 1.0, 1.41421356, 2., 2.23606798, 2.82842712])
# power 1
w_0_x = np.random.rand(32, 16, 6)
# RGSpace((4, 4), harmonic=True)
# using rho directly
weight_0 = np.array([1, 4, 4, 2, 4, 1])
weight_0 = weight_0.reshape([1, 1, 6])
w_0_res = w_0_x * weight_0
# write everything to disk
np.savez('power_space',
da_0=da_0,
w_0_x=w_0_x,
w_0_res=w_0_res)
#!/usr/bin/env python
from __future__ import division
import numpy as np
# deterministic
np.random.seed(42)
# for RGSpace(shape=(4, 4), distances=None, zerocenter=[False, False])
cords_0 = np.ogrid[0:4, 0:4]
da_0 = ((cords_0[0] - 4 // 2) * 0.25)**2
da_0 = np.fft.fftshift(da_0)
temp = ((cords_0[1] - 4 // 2) * 0.25)**2
temp = np.fft.fftshift(temp)
da_0 = da_0 + temp
da_0 = np.sqrt(da_0)
# for RGSpace(shape=(4, 4), distances=None, zerocenter=[True, True])
da_1 = ((cords_0[0] - 4 // 2) * 0.25)**2
temp = ((cords_0[1] - 4 // 2) * 0.25)**2
da_1 = da_1 + temp
da_1 = np.sqrt(da_1)
# for RGSpace(shape=(4, 4), distances=(12, 12), zerocenter=[True, True])
da_2 = ((cords_0[0] - 4 // 2) * 12)**2
temp = ((cords_0[1] - 4 // 2) * 12)**2
da_2 = da_2 + temp
da_2 = np.sqrt(da_2)
# power 1
w_0_x = np.random.rand(32, 12, 6)
# for RGSpace(shape=(11,11), distances=None, harmonic=False)
w_0_res = w_0_x * (1/11 * 1/11)
# for RGSpace(shape=(11, 11), distances=(1.3,1.3), harmonic=False)
w_1_res = w_0_x * (1.3 * 1.3)
# for RGSpace(shape=(11,11), distances=None, harmonic=True)
w_2_res = w_0_x * (1.0 * 1.0)
# for RGSpace(shape=(11,11), distances=(1.3, 1,3), harmonic=True)
w_3_res = w_0_x * (1.3 * 1.3)
# hermitianization
h_0_x = np.array([
[0.88250339+0.12102381j, 0.54293435+0.7345584j, 0.87057998+0.20515315j,
0.16602950+0.09396132j],
[0.83853902+0.17974696j, 0.79735933+0.37104425j, 0.22057732+0.9498977j,
0.14329183+0.47899678j],
[0.96934284+0.3792878j, 0.13118669+0.45643055j, 0.16372149+0.48235714j,
0.66141537+0.20383357j],
[0.49168197+0.77572178j, 0.09570420+0.14219071j, 0.69735595+0.33017333j,
0.83692452+0.18544449j]])
h_0_res_real = np.array([
[0.88250339+0.j, 0.35448193+0.32029854j, 0.87057998+0.j,
0.35448193-0.32029854j],
[0.66511049-0.29798741j, 0.81714193+0.09279988j, 0.45896664+0.30986218j,
0.11949801+0.16840303j],
[0.96934284+0.j, 0.39630103+0.12629849j, 0.16372149+0.j,
0.39630103-0.12629849j],
[0.66511049+0.29798741j, 0.11949801-0.16840303j, 0.45896664-0.30986218j,
0.81714193-0.09279988j]])
h_0_res_imag = np.array([
[0.12102381+0.j, 0.41425986-0.18845242j, 0.20515315+0.j,
0.41425986+0.18845242j],
[0.47773437-0.17342852j, 0.27824437+0.0197826j, 0.64003551+0.23838932j,
0.31059374-0.02379381j],
[0.37928780+0.j, 0.33013206+0.26511434j, 0.48235714+0.j,
0.33013206-0.26511434j],
[0.47773437+0.17342852j, 0.31059374+0.02379381j, 0.64003551-0.23838932j,
0.27824437-0.0197826j]])
h_1_x = np.array([
[[0.23987021+0.41617749j, 0.34605012+0.55462234j, 0.07947035+0.73360723j,
0.22853748+0.39275304j],
[0.90254910+0.02107809j, 0.28195470+0.56031588j, 0.23004043+0.33873536j,
0.56398377+0.68913034j],
[0.81897406+0.2050369j, 0.88724852+0.8137488j, 0.84645004+0.0059284j,
0.14950377+0.50013099j]],
[[0.93491597+0.73251066j, 0.74764790+0.11539037j, 0.48090736+0.04352568j,
0.49363732+0.97233093j],
[0.72761881+0.74636216j, 0.46390134+0.4343401j, 0.88436859+0.79415269j,
0.67027606+0.85498234j],
[0.86318727+0.19076379j, 0.36859448+0.89842333j, 0.73407193+0.85091112j,
0.44187657+0.08936409j]]
])
h_1_res_real = np.array([
[[0.23987021+0.j, 0.28729380+0.08093465j, 0.07947035+0.j,
0.28729380-0.08093465j],
[0.90254910+0.j, 0.42296924-0.06440723j, 0.23004043+0.j,
0.42296924+0.06440723j],
[0.81897406+0.j, 0.51837614+0.1568089j, 0.84645004+0.j,
0.51837614-0.1568089j]],
[[0.93491597+0.j, 0.62064261-0.42847028j, 0.48090736+0.j,
0.62064261+0.42847028j],
[0.72761881+0.j, 0.56708870-0.21032112j, 0.88436859+0.j,
0.56708870+0.21032112j],
[0.86318727+0.j, 0.40523552+0.40452962j, 0.73407193+0.j,
0.40523552-0.40452962j]]
])
h_1_res_imag = np.array([
[[0.41617749+0.j, 0.47368769-0.05875632j, 0.73360723+0.j,
0.47368769+0.05875632j],
[0.02107809+0.j, 0.62472311+0.14101454j, 0.33873536+0.j,
0.62472311-0.14101454j],
[0.20503690+0.j, 0.65693990-0.36887238j, 0.00592840+0.j,
0.65693990+0.36887238j]],
[[0.73251066+0.j, 0.54386065-0.12700529j, 0.04352568+0.j,
0.54386065+0.12700529j],
[0.74636216+0.j, 0.64466122+0.10318736j, 0.79415269+0.j,
0.64466122-0.10318736j],
[0.19076379+0.j, 0.49389371+0.03664104j, 0.85091112+0.j,
0.49389371-0.03664104j]]
])
# write everything to disk
np.savez('rg_space',
da_0=da_0,
da_1=da_1,
da_2=da_2,
w_0_x=w_0_x,
w_0_res=w_0_res,
w_1_res=w_1_res,
w_2_res=w_2_res,
w_3_res=w_3_res,
h_0_x=h_0_x,
h_0_res_real=h_0_res_real,
h_0_res_imag=h_0_res_imag,
h_1_x=h_1_x,
h_1_res_real=h_1_res_real,
h_1_res_imag=h_1_res_imag)
No preview for this file type
No preview for this file type
import unittest
from numpy.testing import assert_equal
from keepers import Repository
from test.common import expand, generate_spaces
class SpaceSerializationTests(unittest.TestCase):
# variable to hold the repository
_repo = None
@classmethod
def setUpClass(cls):
cls._repo = Repository('test.h5')
@expand([[space] for space in generate_spaces()])
def test_serialization(self, space):
self._repo.add(space, 'space')
self._repo.commit()
assert_equal(space, self._repo.get('space'))
......@@ -38,7 +38,7 @@ def get_weight_configs():
return [
[npzfile['w_0_x'], 1, None, False, npzfile['w_0_res']],
[npzfile['w_0_x'], 1, None, True, npzfile['w_0_res']],
[npzfile['w_1_x'], 1, None, True, npzfile['w_1_res']],
[npzfile['w_1_x'], 1, (2,), True, npzfile['w_1_res']],
]
......
......@@ -2,25 +2,12 @@ import unittest
import numpy as np
from itertools import product
from d2o import distributed_data_object
from types import LambdaType
from numpy.testing import assert_, assert_raises, assert_equal
from nifty import RGSpace, LMSpace, GLSpace, HPSpace
from nose.plugins.skip import SkipTest
from nifty import LMSpace, GLSpace, HPSpace
from nifty.config import dependency_injector as di
from test.common import expand
def generate_spaces():
spaces = [RGSpace(4)]
if 'healpy' in di:
spaces.append(HPSpace(4))
if 'libsharp_wrapper_gl' in di:
spaces.append(GLSpace(4))
if 'healpy' in di or 'libsharp_wrapper_gl' in di:
spaces.append(LMSpace(5))
return spaces
from test.common import expand, generate_spaces
class SpaceInterfaceTests(unittest.TestCase):
......@@ -53,6 +40,12 @@ class SpaceInterfaceTests(unittest.TestCase):
['get_fft_smoothing_kernel_function', 2.0, LambdaType],
]))
def test_method_ret_type(self, space, method_expected_type):
# handle exceptions here
try:
getattr(
space, method_expected_type[0])(*method_expected_type[1:-1])
except NotImplementedError:
raise SkipTest
assert_equal(
type(getattr(
......@@ -61,3 +54,10 @@ class SpaceInterfaceTests(unittest.TestCase):
),
method_expected_type[-1]
)
@expand([[space] for space in generate_spaces()])
def test_copy(self, space):
# make sure it's a deep copy
assert_(space is not space.copy())
# make sure contents are the same
assert_equal(space, space.copy())
import unittest
import numpy as np
from numpy.testing import assert_, assert_equal, assert_raises
from numpy.testing import assert_, assert_equal, assert_raises,\
assert_almost_equal
from nose.plugins.skip import SkipTest
from d2o import distributed_data_object
from nifty import LMSpace
from nifty.config import dependency_injector as di
from test.common import expand
# [lmax, dtype, expected]
INIT_CONFIGS = [
CONSTRUCTOR_CONFIGS = [
[5, None, {
'lmax': 5,
'mmax': 5,
......@@ -33,20 +35,40 @@ INIT_CONFIGS = [
]
def get_distance_array_configs():
npzfile = np.load('test/data/lm_space.npz')
return [[5, None, npzfile['da_0']]]
def get_weight_configs():
npzfile = np.load('test/data/lm_space.npz')
return [
[npzfile['w_0_x'], 1, None, False, npzfile['w_0_res']],
[npzfile['w_0_x'], 1, None, True, npzfile['w_0_res']]
]
def get_hermitian_configs():
npzfile = np.load('test/data/lm_space.npz')
return [
[npzfile['h_0_x'], npzfile['h_0_res_real'], npzfile['h_0_res_imag']]
]
class LMSpaceIntefaceTests(unittest.TestCase):
@expand([['lmax', int],
['mmax', int],
['dim', int]])
def test_properties(self, attribute, expected_type):
def test_property_ret_type(self, attribute, expected_type):
try:
x = LMSpace(7)
l = LMSpace(7)
except ImportError:
raise SkipTest
assert_(isinstance(getattr(x, attribute), expected_type))
assert_(isinstance(getattr(l, attribute), expected_type))
class LMSpaceFunctionalityTests(unittest.TestCase):
@expand(INIT_CONFIGS)
@expand(CONSTRUCTOR_CONFIGS)
def test_constructor(self, lmax, dtype, expected):
if 'libsharp_wrapper_gl' not in di or 'healpy' not in di:
raise SkipTest
......@@ -59,11 +81,34 @@ class LMSpaceFunctionalityTests(unittest.TestCase):
for key, value in expected.iteritems():
assert_equal(getattr(l, key), value)
def test_hermitian_decomposition(self):
pass
@expand(get_hermitian_configs())
def test_hermitian_decomposition(self, x, real, imag):
if 'libsharp_wrapper_gl' not in di or 'healpy' not in di:
raise SkipTest
else:
l = LMSpace(5)
assert_almost_equal(
l.hermitian_decomposition(distributed_data_object(x))[0],
real)
assert_almost_equal(
l.hermitian_decomposition(distributed_data_object(x))[1],
imag)
def test_weight(self):
pass
@expand(get_weight_configs())
def test_weight(self, x, power, axes, inplace, expected):
if 'libsharp_wrapper_gl' not in di or 'healpy' not in di:
raise SkipTest
else:
l = LMSpace(5)
res = l.weight(x, power, axes, inplace)
assert_almost_equal(res, expected)
if inplace:
assert_(x is res)
def test_distance_array(self):
pass
@expand(get_distance_array_configs())
def test_distance_array(self, lmax, dtype, expected):
if 'libsharp_wrapper_gl' not in di or 'healpy' not in di:
raise SkipTest
else:
l = LMSpace(lmax, dtype)
assert_almost_equal(l.get_distance_array('not').data, expected)
from __future__ import division
import unittest
import numpy as np
from d2o import distributed_data_object
from numpy.testing import assert_, assert_equal, assert_almost_equal,\
assert_raises
from nifty import PowerSpace, RGSpace, LMSpace, Space
from types import NoneType
from test.common import expand
# [harmonic_domain, distribution_strategy,
# log, nbin, binbounds, dtype, expected]
CONSTRUCTOR_CONFIGS = [
[1, 'not', False, None, None, None, {'error': ValueError}],
[RGSpace((8,)), 'not', False, None, None, None, {'error': ValueError}],
[RGSpace((8,), harmonic=True), 'not', False, None, None, None, {
'harmonic': True,
'shape': (5,),
'dim': 5,
'total_volume': 8.0,
'harmonic_domain': RGSpace((8,), harmonic=True),
'log': False,
'nbin': None,
'binbounds': None,
'pindex': distributed_data_object([0, 1, 2, 3, 4, 3, 2, 1]),
'kindex': np.array([0., 1., 2., 3., 4.]),
'rho': np.array([1, 2, 2, 2, 1]),
'pundex': np.array([0, 1, 2, 3, 4]),
'k_array': np.array([0., 1., 2., 3., 4., 3., 2., 1.]),
'dtype': np.dtype('float64')
}],
[RGSpace((8,), harmonic=True), 'not', True, None, None, None, {
'harmonic': True,
'shape': (2,),
'dim': 2,
'total_volume': 8.0,
'harmonic_domain': RGSpace((8,), harmonic=True),
'log': True,
'nbin': None,
'binbounds': None,
'pindex': distributed_data_object([0, 1, 1, 1, 1, 1, 1, 1]),
'kindex': np.array([0., 2.28571429]),
'rho': np.array([1, 7]),
'pundex': np.array([0, 1]),
'k_array': np.array([0., 2.28571429, 2.28571429, 2.28571429,
2.28571429, 2.28571429, 2.28571429, 2.28571429]),
'dtype': np.dtype('float64')
}],
]
def get_distance_array_configs():
npzfile = np.load('test/data/power_space.npz')
return [
[RGSpace((4, 4), harmonic=True), npzfile['da_0']],
]
def get_weight_configs():
npzfile = np.load('test/data/power_space.npz')
return [
[RGSpace((4, 4), harmonic=True),
npzfile['w_0_x'], 1, (2,), False, npzfile['w_0_res']],
[RGSpace((4, 4), harmonic=True),
npzfile['w_0_x'], 1, (2,), True, npzfile['w_0_res']],
]
class PowerSpaceInterfaceTest(unittest.TestCase):
@expand([
['harmonic_domain', Space],
['log', bool],
['nbin', (int, NoneType)],
['binbounds', (list, NoneType)],
['pindex', distributed_data_object],
['kindex', np.ndarray],
['rho', np.ndarray],
['pundex', np.ndarray],
['k_array', distributed_data_object],
])
def test_property_ret_type(self, attribute, expected_type):
r = RGSpace((4, 4), harmonic=True)
p = PowerSpace(r)
assert_(isinstance(getattr(p, attribute), expected_type))
class PowerSpaceFunctionalityTest(unittest.TestCase):
@expand(CONSTRUCTOR_CONFIGS)
def test_constructor(self, harmonic_domain, distribution_strategy, log,
nbin, binbounds, dtype, expected):
if 'error' in expected:
with assert_raises(expected['error']):
PowerSpace(harmonic_domain=harmonic_domain,
distribution_strategy=distribution_strategy,
log=log, nbin=nbin, binbounds=binbounds,
dtype=dtype)
else:
p = PowerSpace(harmonic_domain=harmonic_domain,
distribution_strategy=distribution_strategy,
log=log, nbin=nbin, binbounds=binbounds,
dtype=dtype)
for key, value in expected.iteritems():
if isinstance(value, np.ndarray):
assert_almost_equal(getattr(p, key), value)
else:
assert_equal(getattr(p, key), value)
@expand(get_distance_array_configs())
def test_distance_array(self, harmonic_domain, expected):
p = PowerSpace(harmonic_domain=harmonic_domain)
assert_almost_equal(p.get_distance_array('not'), expected)
@expand(get_weight_configs())
def test_weight(self, harmonic_domain, x, power, axes,
inplace, expected):
p = PowerSpace(harmonic_domain=harmonic_domain)
res = p.weight(x, power, axes, inplace)
assert_almost_equal(res, expected)
if inplace:
assert_(x is res)
......@@ -3,12 +3,12 @@ from __future__ import division
import unittest
import numpy as np
from numpy.testing import assert_, assert_equal
from numpy.testing import assert_, assert_equal, assert_almost_equal
from nifty import RGSpace
from test.common import expand
# [shape, zerocenter, distances, harmonic, dtype, expected]
INIT_CONFIGS = [
CONSTRUCTOR_CONFIGS = [
[(8,), False, None, False, None,
{
'shape': (8,),
......@@ -73,27 +73,79 @@ INIT_CONFIGS = [
]
def get_distance_array_configs():
npzfile = np.load('test/data/rg_space.npz')
return [
[(4, 4), None, [False, False], npzfile['da_0']],
[(4, 4), None, [True, True], npzfile['da_1']],
[(4, 4), (12, 12), [True, True], npzfile['da_2']]
]
def get_weight_configs():
npzfile = np.load('test/data/rg_space.npz')
return [
[(11, 11), None, False,
npzfile['w_0_x'], 1, None, False, npzfile['w_0_res']],
[(11, 11), None, False,
npzfile['w_0_x'], 1, None, True, npzfile['w_0_res']],
[(11, 11), (1.3, 1.3), False,
npzfile['w_0_x'], 1, None, False, npzfile['w_1_res']],
[(11, 11), (1.3, 1.3), False,
npzfile['w_0_x'], 1, None, True, npzfile['w_1_res']],
[(11, 11), None, True,
npzfile['w_0_x'], 1, None, False, npzfile['w_2_res']],
[(11, 11), None, True