Source code for tests.test_transformations
import importlib.resources
import unittest
import numpy as np
from picometer.atom import AtomSet
[docs]
class TestTransformations(unittest.TestCase):
rot3_at_cobalt_code = '1-y,1+x-y,z'
rot6_at_origin_code = 'x-y,x,z'
[docs]
@classmethod
def setUpClass(cls) -> None:
with importlib.resources.path('tests', 'cobalt.cif') as cif_path:
cls.atoms = AtomSet.from_cif(str(cif_path))
[docs]
def test_transform_coordinates(self) -> None:
t = self.atoms.table
t3 = self.atoms.transform(self.rot3_at_cobalt_code).table
t6 = self.atoms.transform(self.rot6_at_origin_code).table
self.assertAlmostEqual(t.at['Co1', 'fract_x'], t3.at['Co1', 'fract_x'], places=3)
self.assertAlmostEqual(t.at['Co1', 'fract_y'], t3.at['Co1', 'fract_y'], places=3)
self.assertAlmostEqual(t.at['Co1', 'fract_z'], t3.at['Co1', 'fract_z'], places=3)
self.assertNotAlmostEqual(t.at['Co1', 'fract_x'], t6.at['Co1', 'fract_x'], places=3)
self.assertNotAlmostEqual(t.at['Co1', 'fract_y'], t6.at['Co1', 'fract_y'], places=3)
self.assertAlmostEqual(t.at['Co1', 'fract_z'], t6.at['Co1', 'fract_z'], places=3)
[docs]
def test_transform_u_matrix(self) -> None:
t = self.atoms.table
t3 = self.atoms.transform(self.rot3_at_cobalt_code).table
t6 = self.atoms.transform(self.rot6_at_origin_code).table
us = ['U11', 'U22', 'U33', 'U12', 'U13', 'U23']
np.testing.assert_allclose(t.loc['Co1', us], t3.loc['Co1', us], rtol=0.01)
np.testing.assert_allclose(t.loc['Co1', us], t6.loc['Co1', us], rtol=0.01)
with np.testing.assert_raises(AssertionError):
np.testing.assert_allclose(t.loc['O1', us], t3.loc['O1', us], rtol=0.1)
np.testing.assert_equal(t.loc['O1', us], np.array([.067,.066,.018,.031,-.007,-.008]))
if __name__ == '__main__':
unittest.main()