Bristlecone의 기본 운영은 CNOT가 아닌 CZ입니다. 그러나 Hadamard 게이트로 둘 사이를 변환 할 수 있으므로 사소한 차이가 있습니다.
Bristlecone은 그리드에서 인접한 큐빗 쌍 사이에서 CZ를 수행 할 수 있습니다. cirq 를 설치 하고 Bristlecone 장치를 인쇄 하여 격자를 볼 수 있습니다 .
$ pip install cirq
$ python
>>> import cirq
>>> print(cirq.google.Bristlecone)
(0, 5)────(0, 6)
│ │
│ │
(1, 4)───(1, 5)────(1, 6)────(1, 7)
│ │ │ │
│ │ │ │
(2, 3)───(2, 4)───(2, 5)────(2, 6)────(2, 7)───(2, 8)
│ │ │ │ │ │
│ │ │ │ │ │
(3, 2)───(3, 3)───(3, 4)───(3, 5)────(3, 6)────(3, 7)───(3, 8)───(3, 9)
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
(4, 1)───(4, 2)───(4, 3)───(4, 4)───(4, 5)────(4, 6)────(4, 7)───(4, 8)───(4, 9)───(4, 10)
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
(5, 0)───(5, 1)───(5, 2)───(5, 3)───(5, 4)───(5, 5)────(5, 6)────(5, 7)───(5, 8)───(5, 9)───(5, 10)───(5, 11)
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │
(6, 1)───(6, 2)───(6, 3)───(6, 4)───(6, 5)────(6, 6)────(6, 7)───(6, 8)───(6, 9)───(6, 10)
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
(7, 2)───(7, 3)───(7, 4)───(7, 5)────(7, 6)────(7, 7)───(7, 8)───(7, 9)
│ │ │ │ │ │
│ │ │ │ │ │
(8, 3)───(8, 4)───(8, 5)────(8, 6)────(8, 7)───(8, 8)
│ │ │ │
│ │ │ │
(9, 4)───(9, 5)────(9, 6)────(9, 7)
│ │
│ │
(10, 5)───(10, 6)
허용 된 CZ 작업이 포함 된 집합을 얻는 방법은 다음과 같습니다.
qubits = cirq.google.Bristlecone.qubits
allowed = {cirq.CZ(a, b)
for a in qubits
for b in qubits
if a.is_adjacent(b)}
세트에는 121 개의 요소가 있으며 세트에 CZ (x, y) 또는 CZ (y, x)가 있는지 여부는 다소 임의적이므로 여기에 세트의 출력물을 포함하지 않습니다.
명심해야 할 또 다른 제약은 두 개의 CZ를 동시에 나란히 수행 할 수 없다는 것입니다. Cirq는 Bristlecone을 대상으로하는 회로를 만들 때이를 고려합니다. 예를 들면 다음과 같습니다.
import cirq
device = cirq.google.Bristlecone
a, b, c, d, e = device.col(6)[:5]
circuit = cirq.Circuit.from_ops(
cirq.CZ(a, b),
cirq.CZ(c, d),
cirq.CZ(a, b),
cirq.CZ(d, e),
device=device)
print(circuit)
# (0, 6): ───@───────@───
# │ │
# (1, 6): ───@───────@───
#
# (2, 6): ───────@───────
# │
# (3, 6): ───────@───@───
# │
# (4, 6): ───────────@───
처음 두 작업은 CZ에 인접 해 있기 때문에 엇갈 렸지만 두 번째 작업은 그렇지 않은 것이 아닙니다.