diff --git a/qsymm/hamiltonian_generator.py b/qsymm/hamiltonian_generator.py index ebda7e9e28007254d3cf164dbb8741e08aafe2c2..5e01e13f71d545f48b349389eb91f69a1ae7501f 100644 --- a/qsymm/hamiltonian_generator.py +++ b/qsymm/hamiltonian_generator.py @@ -353,19 +353,28 @@ def check_symmetry(family, symmetries, num_digits=None): In the case that the input family has been rounded, num_digits should be the number of significant digits to which the family was rounded. - """ + Raises + ------ + ValueError + If the family does not satisfy the symmetry. + """ + def fail(): + raise ValueError(f'Member {member} does not satisfy symmetry {symmetry}.') for symmetry in symmetries: # Iterate over all members of the family for member in family: if isinstance(symmetry, PointGroupElement): if num_digits is None: - assert symmetry.apply(member) == member + if symmetry.apply(member) != member: + fail() else: - assert symmetry.apply(member).around(num_digits) == member.around(num_digits) + if symmetry.apply(member).around(num_digits) != member.around(num_digits): + fail() elif isinstance(symmetry, ContinuousGroupGenerator): # Continous symmetry if applying it returns zero - assert symmetry.apply(member) == {} + if symmetry.apply(member) != {}: + fail() def constrain_family(symmetries, family, sparse_linalg=False): diff --git a/qsymm/tests/test_hamiltonian_generator.py b/qsymm/tests/test_hamiltonian_generator.py index 3563fd58322a1d714e1158f3fc91f7ddd0427c86..28e574b0a221cedd94c946453bcc30637a71049a 100644 --- a/qsymm/tests/test_hamiltonian_generator.py +++ b/qsymm/tests/test_hamiltonian_generator.py @@ -1,3 +1,5 @@ +from pytest import raises + import sympy import numpy as np import scipy.linalg as la @@ -58,6 +60,13 @@ def test_check_symmetry(): else: # Symmetry commutes assert np.allclose(Left - Right, 0) + # Test correctly raising a ValueError + with raises(ValueError): + check_symmetry( + [Model({1: np.eye(2)}, momenta=["k_x"])], + [chiral(1, np.diag([1, -1]))] + ) + def test_bloch_generator(): """Square lattice with time reversal and rotation symmetry, such that all hoppings are real. """