기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
회로 검사
Amazon Braket의 양자 회로에는 Moments라고 하는 의사 시간 개념이 있습니다. 각 qubit는 Moment당 단일 게이트를 경험할 수 있습니다. Moments의 목적은 회로와 게이트를 더 쉽게 처리하고 시간 구조를 제공하는 것입니다.
참고
모멘트는 일반적으로 QPU에서 게이트가 실행되는 실제 시간과 일치하지 않습니다.
회로의 깊이는 해당 회로의 총 모멘트 수에 따라 결정됩니다. 다음 예제와 같이 메서드 circuit.depth를 직접적으로 호출하는 회로 깊이를 볼 수 있습니다.
from braket.circuits import Circuit # Define a circuit with parametrized gates circ = Circuit().rx(0, 0.15).ry(1, 0.2).cnot(0, 2).zz(1, 3, 0.15).x(0) print(circ) print('Total circuit depth:', circ.depth)
T : │ 0 │ 1 │ 2 │ ┌──────────┐ ┌───┐ q0 : ─┤ Rx(0.15) ├───●────────────────┤ X ├─ └──────────┘ │ └───┘ ┌──────────┐ │ ┌──────────┐ q1 : ─┤ Ry(0.20) ├───┼───┤ ZZ(0.15) ├─────── └──────────┘ │ └────┬─────┘ ┌─┴─┐ │ q2 : ──────────────┤ X ├──────┼───────────── └───┘ │ ┌────┴─────┐ q3 : ────────────────────┤ ZZ(0.15) ├─────── └──────────┘ T : │ 0 │ 1 │ 2 │ Total circuit depth: 3
위 회로의 총 회로 깊이는 3입니다(모멘트 0, 1 및 2로 표시됨). 각 모멘트의 게이트 연산을 확인할 수 있습니다.
Moments는 키-값 쌍의 딕셔너리 역할을 합니다.
-
키는 의사 시간과 qubit 정보가 포함된
MomentsKey()입니다. -
값은
Instructions()유형으로 할당됩니다.
moments = circ.moments for key, value in moments.items(): print(key) print(value, "\n")
MomentsKey(time=0, qubits=QubitSet([Qubit(0)]), moment_type=<MomentType.GATE: 'gate'>, noise_index=0, subindex=0) Instruction('operator': Rx('angle': 0.15, 'qubit_count': 1), 'target': QubitSet([Qubit(0)]), 'control': QubitSet([]), 'control_state': (), 'power': 1) MomentsKey(time=0, qubits=QubitSet([Qubit(1)]), moment_type=<MomentType.GATE: 'gate'>, noise_index=0, subindex=0) Instruction('operator': Ry('angle': 0.2, 'qubit_count': 1), 'target': QubitSet([Qubit(1)]), 'control': QubitSet([]), 'control_state': (), 'power': 1) MomentsKey(time=1, qubits=QubitSet([Qubit(0), Qubit(2)]), moment_type=<MomentType.GATE: 'gate'>, noise_index=0, subindex=0) Instruction('operator': CNot('qubit_count': 2), 'target': QubitSet([Qubit(0), Qubit(2)]), 'control': QubitSet([]), 'control_state': (), 'power': 1) MomentsKey(time=1, qubits=QubitSet([Qubit(1), Qubit(3)]), moment_type=<MomentType.GATE: 'gate'>, noise_index=0, subindex=0) Instruction('operator': ZZ('angle': 0.15, 'qubit_count': 2), 'target': QubitSet([Qubit(1), Qubit(3)]), 'control': QubitSet([]), 'control_state': (), 'power': 1) MomentsKey(time=2, qubits=QubitSet([Qubit(0)]), moment_type=<MomentType.GATE: 'gate'>, noise_index=0, subindex=0) Instruction('operator': X('qubit_count': 1), 'target': QubitSet([Qubit(0)]), 'control': QubitSet([]), 'control_state': (), 'power': 1)
Moments를 통해 회로에 게이트를 추가할 수도 있습니다.
from braket.circuits import Instruction, Gate new_circ = Circuit() instructions = [Instruction(Gate.S(), 0), Instruction(Gate.CZ(), [1, 0]), Instruction(Gate.H(), 1) ] new_circ.moments.add(instructions) print(new_circ)
T : │ 0 │ 1 │ 2 │ ┌───┐ ┌───┐ q0 : ─┤ S ├─┤ Z ├─────── └───┘ └─┬─┘ │ ┌───┐ q1 : ─────────●───┤ H ├─ └───┘ T : │ 0 │ 1 │ 2 │