code: def _find_evil(self):
          
          M, N, L = self.M, self.N, self.L
          proc = self._proc0
          evil = []
          cells = [(x, y) for x in range(M) for y in range(N)]
          spots = [(u, v) for u in range(L) for v in range(L)]
          for x, y in cells:
              for u, v in spots:
                  p = (x, y, 0, u)
                  q = (x, y, 1, v)
                  if p in proc and q in proc and p not in proc[q]:
                      evil.append((p, q))
          self._evil = evil
docs: A utility function that computes a list of missing couplers which
          should connect two working qubits in the same cell.  The presence
          of (a nonconstant number of) these breaks the polynomial-time
          claim for our algorithm.  Note: we're only actually hurt by missing
          intercell couplers.