Source code for tests.test_nistlat

'''
test_nistlat.py 
===============
Tests the two NIST*LATTICE binaries, LATTIC and convcell using
their Python wrappers in module nistlat.py
'''

import os
import sys
import tempfile
import numpy.testing as npt

import importlib.util
G2loc = None
try: 
    G2loc = importlib.util.find_spec('GSASII.nistlat')
except ModuleNotFoundError:
    print('ModuleNotFound for GSASII.nistlat')

home = os.path.dirname(__file__)
if G2loc is None: # fixup path if GSASII not installed into Python
    print('GSAS-II not installed in Python; Hacking sys.path')
    sys.path.append(os.path.dirname(home))

import GSASII
import GSASII.nistlat as nistlat
import GSASII.GSASIIlattice as G2lat
V = lambda cell: float(G2lat.calc_V(G2lat.cell2A(cell)))

work = tempfile.gettempdir()

[docs] def test_CellSymSearch(): 'test_CellSymSearch(): nistlat.CellSymSearch' print('test_CellSymSearch(): nistlat.CellSymSearch') cell = [14.259, 22.539, 8.741, 90., 114.1, 90.] center = 'C' # test CellSymSearch with out sub- & supercells (default mode) msg = "CellSymSearch #1 reduced cell" res = nistlat.CellSymSearch(cell, center) npt.assert_allclose(res[0][1][0], [8.741, 13.3353, 13.3393, 115.369, 102.638, 102.61], rtol=0.001,err_msg=msg) assert res[0][1][1] == 'P',msg msg = "CellSymSearch #1 centered cell" npt.assert_allclose(res[0][2][0], [22.5417, 22.5417, 8.741, 90.0, 90.0, 120.0], rtol=0.001,err_msg=msg) assert res[0][2][1] == 'R' and res[0][2][2] == 'H',msg # now test CellSymSearch in mode=3 (w/sub- & supercells) msg = "CellSymSearch #2 centered cell w/sub & supercells" res = nistlat.CellSymSearch(cell, center, mode=3) vPrim = [V(r[1][0])/V(cell) for r in res] # cell Vol of primitive cell npt.assert_allclose(vPrim, [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], rtol=0.001,err_msg=msg) vCent = [V(r[2][0])/V(cell) for r in res] # cell Vol of full cell npt.assert_allclose(vCent, [1.5, 1.0, 1.0, 4.0, 3.0, 1.0, 4.0, 4.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.75], rtol=0.001,err_msg=msg) print('OK')
[docs] def test_CompareCell(): 'test_CompareCell(): nistlat.CompareCell' print('test_CompareCell(): nistlat.CompareCell') cell1 = (5.03461,5.03461,13.74753,90,90,120) center1 = 'R' cell2 = (7.40242,5.03461,5.42665,90,84.14,90) center2 = 'P' center2 = 'I' tolerance = 3*[0.1]+3*[.5] res = nistlat.CompareCell(cell1, center1, cell2, center2, tolerance) msg = "CompareCell number of matches" assert len(res) == 6, msg for i,r in enumerate(res): msg = f"CompareCell result #{i}" # check the forward and reverse cell transforms npt.assert_allclose(cell1, G2lat.TransformCell(cell2,r[5])[:6], rtol=0.001,err_msg=msg) npt.assert_allclose(cell2, G2lat.TransformCell(cell1,r[4])[:6], rtol=0.001,err_msg=msg) print('OK')
[docs] def test_ConvCell(): 'test_ConvCell(): nistlat.ConvCell' print('test_ConvCell(): nistlat.ConvCell') # convert a rhombohedral cell to hexagonal setting cellin = [5.,5.,5.,85.,85.,85.,] cellout = nistlat.ConvCell(cellin) msg = "ConvCell rhomb->hex cell" assert cellout[1] == 'R' and cellout[2] == 'H',msg npt.assert_allclose(cellout[0], [6.7559, 6.7559, 9.3847, 90.0, 90.0, 120.0], rtol=0.001,err_msg=msg) # a hexagonal cell is unchanged msg = "ConvCell unchanged hex cell" cellin = cellout[0] cellout = nistlat.ConvCell(cellin) assert cellout[1] == 'P',msg npt.assert_allclose(cellout[0],cellin, rtol=0.001,err_msg=msg) print('OK')
[docs] def test_ReduceCell(): 'test_ReduceCell(): nistlat.ReduceCell' print('test_ReduceCell(): nistlat.ReduceCell') res = nistlat.ReduceCell('I',[3,3,5,90,90,90]) # body-center tetragonal rcell= res['output'][0][1] msg = "ReduceCell body-center tetragonal cell" npt.assert_allclose(rcell,[3.0, 3.0, 3.2787, 117.226, 117.226, 90.0], rtol=0.001,err_msg=msg) ocell = nistlat.ConvCell(rcell) assert ocell[1] == 'I',msg npt.assert_allclose(ocell[0],[3.,3.,5.,90.,90.,90.], rtol=0.001,err_msg=msg) print('OK')
if __name__ == '__main__': test_ConvCell() test_ReduceCell() test_CellSymSearch() test_CompareCell()