Skip to content
Snippets Groups Projects
Commit b9f43ec4 authored by Anton Akhmerov's avatar Anton Akhmerov Committed by Christoph Groth
Browse files

fix bug in TranslationalSymmetry.reversed

parent 964e9b51
No related branches found
No related tags found
No related merge requests found
......@@ -245,6 +245,7 @@ class TranslationalSymmetry(builder.Symmetry):
# A dictionary containing cached data required for applying the
# symmetry to different site groups.
self.site_group_data = {}
self.is_reversed = False
def add_site_group(self, gr, other_vectors=None):
"""
......@@ -326,7 +327,8 @@ class TranslationalSymmetry(builder.Symmetry):
def which(self, site):
det_x_inv_m_part, det_m = self._get_site_group_data(site.group)[-2:]
return ta.dot(det_x_inv_m_part, site.tag) // det_m
result = ta.dot(det_x_inv_m_part, site.tag) // det_m
return -result if self.is_reversed else result
def act(self, element, a, b=None):
m_part = self._get_site_group_data(a.group)[0]
......@@ -335,6 +337,8 @@ class TranslationalSymmetry(builder.Symmetry):
except ValueError:
msg = 'Expecting a {0}-tuple group element, but got `{1}` instead.'
raise ValueError(msg.format(self.num_directions, element))
if self.is_reversed:
delta *= -1
if b is None:
return builder.Site(a.group, a.tag + delta, True)
elif b.group is a.group:
......@@ -348,6 +352,8 @@ class TranslationalSymmetry(builder.Symmetry):
msg = 'Expecting a {0}-tuple group element, ' + \
'but got `{1}` instead.'
raise ValueError(msg.format(self.num_directions, element))
if self.is_reversed:
delta2 *= -1
return builder.Site(a.group, a.tag + delta, True), \
builder.Site(b.group, b.tag + delta2, True)
......@@ -357,20 +363,12 @@ class TranslationalSymmetry(builder.Symmetry):
def reversed(self):
"""Return a reversed copy of the symmetry.
The result is identical to creating a new symmetry with all the
period vectors opposite to the original but with the same fundamental
domain.
The resulting symmetry has all the period vectors opposite to the
original and an identical fundamental domain.
"""
periods = [[-i for i in j] for j in self.periods]
result = TranslationalSymmetry(*periods)
for gr in self.site_group_data:
m_part, det_x_inv_m_part, det_m = self.site_group_data[gr]
if self.num_directions % 2:
det_m = -det_m
else:
det_x_inv_m_part = -det_x_inv_m_part
m_part = -m_part
result.site_group_data[gr] = (m_part, det_x_inv_m_part, det_m)
result = TranslationalSymmetry(*self.periods)
result.site_group_data = self.site_group_data
result.is_reversed = not self.is_reversed
return result
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment