docs: def _decompose_(self, qubits):
          """An adjacency-respecting decomposition.
  
          0: ───p───@──────────────@───────@──────────@──────────
                    │              │       │          │
          1: ───p───X───@───p^-1───X───@───X──────@───X──────@───
                        │              │          │          │
          2: ───p───────X───p──────────X───p^-1───X───p^-1───X───
  
          where p = T**self._exponent
          """
          if protocols.is_parameterized(self):
              return NotImplemented
  
          a, b, c = qubits
  
          # Hacky magic: avoid the non-adjacent edge.
          if hasattr(b, 'is_adjacent'):
              if not b.is_adjacent(a):
                  b, c = c, b
              elif not b.is_adjacent(c):
                  a, b = b, a
  
          p = common_gates.T**self._exponent
          sweep_abc = [common_gates.CNOT(a, b),
                       common_gates.CNOT(b, c)]
  
          return [
              p(a), p(b), p(c),
              sweep_abc,
              p(b)**-1, p(c),
              sweep_abc,
              p(c)**-1,
              sweep_abc,
              p(c)**-1,
              sweep_abc,
          ]