From 47d7302ee99e69ade270563775e71559147a9ccb Mon Sep 17 00:00:00 2001 From: Anton Akhmerov <anton.akhmerov@gmail.com> Date: Thu, 25 Jun 2020 22:56:13 +0200 Subject: [PATCH] clarify and streamline the logic of eradicate dangling --- kwant/builder.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/kwant/builder.py b/kwant/builder.py index 396784c5..cc53563f 100644 --- a/kwant/builder.py +++ b/kwant/builder.py @@ -886,32 +886,32 @@ class Builder: Sites are considered as dangling when less than two hoppings lead to them. """ - to_fd = self.symmetry.to_fd sites = list(site for site in self.H if self._out_degree(site) < 2) for site in sites: + # We could have deleted the site already if there was e.g. an + # isolated hopping. if site not in self.H: continue - while site: - if site not in self.H: - site = to_fd(site) + + while self._out_degree(site) < 2: neighbors = tuple(self._out_neighbors(site)) - if neighbors: - assert len(neighbors) == 1 - neighbor = neighbors[0] - # test if neighbor in fundamental domain - if neighbor in self.H: - self._del_edge(neighbor, site) - if self._out_degree(neighbor) > 1: - neighbor = False - else: - self._del_edge(*to_fd(neighbor, site)) - if self._out_degree(to_fd(neighbor)) > 1: - neighbor = False + if not neighbors: + del self.H[site] + break + + (neighbor,) = neighbors + if neighbor in self.H: + # neighbor is in the fundamental domain + edge = (neighbor, site) else: - neighbor = False + edge = self.symmetry.to_fd(neighbor, site) + neighbor = self.symmetry.to_fd(neighbor) + self._del_edge(*edge) + del self.H[site] + # Neighbor could become dangling now. site = neighbor def __iter__(self): -- GitLab