def test_gruber_fails_on_singular_matrix(): from numpy import array from pylada.crystal.cutilities import gruber from pylada import error from pytest import raises with raises(error.ValueError): gruber(array([[0, 0, 0], [1, 2, 0], [4, 5, 6]]))
def test_gruber_reached_maximum_iterations(): from numpy import array from pylada.crystal.cutilities import gruber from pylada import error from pytest import raises with raises(error.RuntimeError): gruber(array([[1, 0, 0], [1, 1, 0], [4, 5, 1]]), itermax=2)
def test_gruber(): from numpy import dot from numpy.linalg import inv from pylada.crystal.cutilities import gruber cell = [[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]] lim = 5 for a00 in [-1, 1]: for a10 in range(-lim, lim + 1): for a11 in [-1, 1]: for a20 in range(-lim, lim + 1): for a21 in range(-lim, lim + 1): for a22 in [-1, 1]: a = [[a00, 0, 0], [a10, a11, 0], [a20, a21, a22]] g = gruber(dot(cell, a)) assert is_integer(dot(inv(cell), g)) assert is_integer(dot(inv(g), cell))