diff --git a/kwant/builder.py b/kwant/builder.py index c43236e6b9dcffac9155ee97183b688e77d09c02..6a9b129fb6962578b0d4548015e7596bdbbfdc39 100644 --- a/kwant/builder.py +++ b/kwant/builder.py @@ -54,7 +54,9 @@ class Site(tuple): group = property(operator.itemgetter(0)) tag = property(operator.itemgetter(1)) - def __new__(cls, group, tag): + def __new__(cls, group, tag, _i_know_what_i_do=False): + if _i_know_what_i_do: + return tuple.__new__(cls, (group, tag)) try: tag = group.normalize_tag(tag) except (TypeError, ValueError): @@ -885,7 +887,7 @@ class Builder(object): for site0 in self.H: if site0.group is not group_a: continue - site1 = site0.shifted(d, group_b) + site1 = Site(group_b, site0.tag + d, True) if symtofd(site1) in H: # if site1 in self yield site0, site1 diff --git a/kwant/lattice.py b/kwant/lattice.py index c105073422a1315373170c5d00889b366c3bad3d..f0b0bf4afadaf22abcf341b70ab486402ff4bc51 100644 --- a/kwant/lattice.py +++ b/kwant/lattice.py @@ -96,6 +96,8 @@ class PolyatomicLattice(object): sites : sequence of `Site` objects all the sites that belong to the lattice and fit inside the shape. """ + Site = builder.Site + dim = len(start) if dim != self.prim_vecs.shape[1]: raise ValueError('Dimensionality of start position does not match' @@ -125,7 +127,7 @@ class PolyatomicLattice(object): for sl in sls: if not function(vec + sl.offset): continue - yield sl(*tag) + yield Site(sl, tag, True) any_hits = True if not any_hits: continue @@ -313,7 +315,7 @@ class TranslationalSymmetry(builder.Symmetry): try: det_x_inv_m_part, m_part, det_m = self.site_group_data[a.group] except KeyError: - self.add_site_group(gr) + self.add_site_group(a.group) return self.act(element, a, b) try: delta = ta.dot(m_part, element) @@ -321,9 +323,10 @@ class TranslationalSymmetry(builder.Symmetry): msg = 'Expecting a {0}-tuple group element, but got `{1}` instead.' raise ValueError(msg.format(self.num_directions, element)) if b is None: - return a.shifted(delta) + return builder.Site(a.group, a.tag + delta, True) else: - return a.shifted(delta), b.shifted(delta) + return builder.Site(a.group, a.tag + delta, True), \ + builder.Site(b.group, b.tag + delta, True) def to_fd(self, a, b=None): return self.act(-self.which(a), a, b)