Skip to content
Snippets Groups Projects
Forked from empyre / empyre
279 commits behind the upstream repository.
test_phasemapper.py 9.21 KiB
# -*- coding: utf-8 -*-
"""Testcase for the phasemapper module."""

import os
import unittest

import numpy as np
from numpy.testing import assert_allclose

from pyramid.kernel import Kernel
from pyramid.phasemapper import PhaseMapperRDFC, PhaseMapperFDFC, PhaseMapperMIP, PhaseMapperCharge
from pyramid import load_phasemap, load_vectordata, load_scalardata


class TestCasePhaseMapperRDFC(unittest.TestCase):
    def setUp(self):
        self.path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test_phasemapper')
        self.mag_proj = load_vectordata(os.path.join(self.path, 'mag_proj.hdf5'))
        self.mapper = PhaseMapperRDFC(Kernel(self.mag_proj.a, self.mag_proj.dim[1:]))

    def tearDown(self):
        self.path = None
        self.mag_proj = None
        self.mapper = None

    def test_PhaseMapperRDFC_call(self):
        phase_ref = load_phasemap(os.path.join(self.path, 'phasemap.hdf5'))
        phasemap = self.mapper(self.mag_proj)
        assert_allclose(phasemap.phase, phase_ref.phase, atol=1E-7,
                        err_msg='Unexpected behavior in __call__()!')
        assert_allclose(phasemap.a, phase_ref.a, err_msg='Unexpected behavior in __call__()!')

    def test_PhaseMapperRDFC_jac_dot(self):
        phase = self.mapper(self.mag_proj).phase
        mag_proj_vec = self.mag_proj.field[:2, ...].ravel()
        phase_jac = self.mapper.jac_dot(mag_proj_vec).reshape(self.mapper.kernel.dim_uv)
        assert_allclose(phase, phase_jac, atol=1E-7,
                        err_msg='Inconsistency between __call__() and jac_dot()!')
        n = self.mapper.n
        jac = np.array([self.mapper.jac_dot(np.eye(n)[:, i]) for i in range(n)]).T
        jac_ref = np.load(os.path.join(self.path, 'jac.npy'))
        assert_allclose(jac, jac_ref, atol=1E-7,
                        err_msg='Unexpected behaviour in the the jacobi matrix!')

    def test_PhaseMapperRDFC_jac_T_dot(self):
        m = self.mapper.m
        jac_T = np.array([self.mapper.jac_T_dot(np.eye(m)[:, i]) for i in range(m)]).T
        jac_T_ref = np.load(os.path.join(self.path, 'jac.npy')).T
        assert_allclose(jac_T, jac_T_ref, atol=1E-7,
                        err_msg='Unexpected behaviour in the the transposed jacobi matrix!')


class TestCasePhaseMapperFDFCpad0(unittest.TestCase):
    def setUp(self):
        self.path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test_phasemapper')
        self.mag_proj = load_vectordata(os.path.join(self.path, 'mag_proj.hdf5'))
        self.mapper = PhaseMapperFDFC(self.mag_proj.a, self.mag_proj.dim[1:], padding=0)

    def tearDown(self):
        self.path = None
        self.mag_proj = None
        self.mapper = None

    def test_PhaseMapperFDFC_call(self):
        phase_ref = load_phasemap(os.path.join(self.path, 'phasemap_fc.hdf5'))
        phasemap = self.mapper(self.mag_proj)
        assert_allclose(phasemap.phase, phase_ref.phase, atol=1E-7,
                        err_msg='Unexpected behavior in __call__()!')
        assert_allclose(phasemap.a, phase_ref.a, err_msg='Unexpected behavior in __call__()!')

    def test_PhaseMapperFDFC_jac_dot(self):
        phase = self.mapper(self.mag_proj).phase
        mag_proj_vec = self.mag_proj.field[:2, ...].ravel()
        phase_jac = self.mapper.jac_dot(mag_proj_vec).reshape(self.mapper.dim_uv)
        assert_allclose(phase, phase_jac, atol=1E-7,
                        err_msg='Inconsistency between __call__() and jac_dot()!')
        n = self.mapper.n
        jac = np.array([self.mapper.jac_dot(np.eye(n)[:, i]) for i in range(n)]).T
        jac_ref = np.load(os.path.join(self.path, 'jac_fc.npy'))
        assert_allclose(jac, jac_ref, atol=1E-7,
                        err_msg='Unexpected behaviour in the the jacobi matrix!')

    def test_PhaseMapperFDFC_jac_T_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_T_dot, None)


class TestCasePhaseMapperFDFCpad1(unittest.TestCase):
    def setUp(self):
        self.path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test_phasemapper')
        self.mag_proj = load_vectordata(os.path.join(self.path, 'mag_proj.hdf5'))
        self.mapper = PhaseMapperFDFC(self.mag_proj.a, self.mag_proj.dim[1:], padding=1)

    def tearDown(self):
        self.path = None
        self.mag_proj = None
        self.mapper = None

    def test_PhaseMapperFDFC_call(self):
        phase_ref = load_phasemap(os.path.join(self.path, 'phasemap_fc_pad1.hdf5'))
        phasemap = self.mapper(self.mag_proj)
        assert_allclose(phasemap.phase, phase_ref.phase, atol=1E-7,
                        err_msg='Unexpected behavior in __call__()!')
        assert_allclose(phasemap.a, phase_ref.a, err_msg='Unexpected behavior in __call__()!')

    def test_PhaseMapperFDFC_jac_dot(self):
        phase = self.mapper(self.mag_proj).phase
        mag_proj_vec = self.mag_proj.field[:2, ...].ravel()
        phase_jac = self.mapper.jac_dot(mag_proj_vec).reshape(self.mapper.dim_uv)
        assert_allclose(phase, phase_jac, atol=1E-7,
                        err_msg='Inconsistency between __call__() and jac_dot()!')
        n = self.mapper.n
        jac = np.array([self.mapper.jac_dot(np.eye(n)[:, i]) for i in range(n)]).T
        jac_ref = np.load(os.path.join(self.path, 'jac_fc_pad1.npy'))
        assert_allclose(jac, jac_ref, atol=1E-7,
                        err_msg='Unexpected behaviour in the the jacobi matrix!')

    def test_PhaseMapperFDFC_jac_T_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_T_dot, None)


class TestCasePhaseMapperFDFCpad10(unittest.TestCase):
    def setUp(self):
        self.path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test_phasemapper')
        self.mag_proj = load_vectordata(os.path.join(self.path, 'mag_proj.hdf5'))
        self.mapper = PhaseMapperFDFC(self.mag_proj.a, self.mag_proj.dim[1:], padding=200)

    def tearDown(self):
        self.path = None
        self.mag_proj = None
        self.mapper = None

    def test_PhaseMapperFDFC_call(self):
        phase_ref = load_phasemap(os.path.join(self.path, 'phasemap_fc_pad10.hdf5'))
        phasemap = self.mapper(self.mag_proj)
        assert_allclose(phasemap.phase, phase_ref.phase, atol=1E-7,
                        err_msg='Unexpected behavior in __call__()!')
        assert_allclose(phasemap.a, phase_ref.a, err_msg='Unexpected behavior in __call__()!')

    def test_PhaseMapperFDFC_jac_dot(self):
        phase = self.mapper(self.mag_proj).phase
        mag_proj_vec = self.mag_proj.field[:2, ...].ravel()
        phase_jac = self.mapper.jac_dot(mag_proj_vec).reshape(self.mapper.dim_uv)
        assert_allclose(phase, phase_jac, atol=1E-7,
                        err_msg='Inconsistency between __call__() and jac_dot()!')
        n = self.mapper.n
        jac = np.array([self.mapper.jac_dot(np.eye(n)[:, i]) for i in range(n)]).T
        jac_ref = np.load(os.path.join(self.path, 'jac_fc_pad10.npy'))
        assert_allclose(jac, jac_ref, atol=1E-7,
                        err_msg='Unexpected behaviour in the the jacobi matrix!')

    def test_PhaseMapperFDFC_jac_T_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_T_dot, None)


class TestCasePhaseMapperMIP(unittest.TestCase):
    def setUp(self):
        self.path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test_phasemapper')
        self.elec_proj = load_scalardata(os.path.join(self.path, 'elec_proj.hdf5'))
        self.mapper = PhaseMapperMIP(self.elec_proj.a, self.elec_proj.dim[1:])

    def tearDown(self):
        self.path = None
        self.elec_proj = None
        self.mapper = None

    def test_call(self):
        phase_ref = load_phasemap(os.path.join(self.path, 'phasemap_elec.hdf5'))
        phasemap = self.mapper(self.elec_proj)
        assert_allclose(phasemap.phase, phase_ref.phase, atol=1E-7,
                        err_msg='Unexpected behavior in __call__()!')
        assert_allclose(phasemap.a, phase_ref.a, err_msg='Unexpected behavior in __call__()!')

    def test_jac_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_dot, None)

    def test_jac_T_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_T_dot, None)


class TestCasePhaseMapperCharge(unittest.TestCase):
    def setUp(self):
        self.path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'test_phasemapper')
        self.charge_proj = load_scalardata(os.path.join(self.path, 'charge_proj.hdf5'))
        self.mapper = PhaseMapperCharge(self.charge_proj.a, self.charge_proj.dim[1:])

    def tearDown(self):
        self.path = None
        self.charge_proj = None
        self.mapper = None

    def test_call(self):
        charge_phase_ref = load_phasemap(os.path.join(self.path, 'charge_phase_ref.hdf5'))
        phasemap = self.mapper(self.charge_proj)
        assert_allclose(phasemap.phase, charge_phase_ref.phase, atol=1E-7,
                        err_msg='Unexpected behavior in __call__()!')
        assert_allclose(phasemap.a, charge_phase_ref.a, err_msg='Unexpected behavior in __call__()!')

    def test_jac_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_dot, None)

    def test_jac_T_dot(self):
        self.assertRaises(NotImplementedError, self.mapper.jac_T_dot, None)


if __name__ == '__main__':
    import nose
    nose.run(defaultTest=__name__)