양자 회로 다이어그램은 양자 연산의 시각적 표현입니다. 회로 다이어그램은 프로그램이 큐비트에 적용되는 게이트 및 측정값을 포함하여 양자 프로그램을 통해 큐비트의 흐름을 보여 줍니다.
이 문서에서는 Azure Quantum Development Kit (QDK)에서 Visual Studio Code를 사용하여 VS Code 양자 알고리즘을 양자 회로 다이어그램으로 시각적으로 표현하는 방법에 대해 알아봅니다.
양자 회로 다이어그램에 대한 자세한 내용은 양자 회로 규칙을 참조하세요.
필수 조건
최신 버전의 VS Code 또는 VS Code 웹용으로 엽니다.
최신 버전의 QDK 확장, Python 확장 및 Jupyter 확장 이 설치되어 있습니다 VS Code.
최신 버전의
qdkPython 라이브러리 및 선택적jupyter추가 기능.python -m pip install --upgrade "qdk[jupyter]"
VS Code에서 양자 회로를 시각화하기
Q# 프로그램의 VS Code양자 회로를 시각화하려면 다음 단계를 완료합니다.
Q# 프로그램의 회로 다이어그램 보기
Q# 파일을 VS Code열거나 양자 샘플 중 하나를 로드합니다.
진입점 작업 앞에 오는 코드 렌즈에서 회로 명령을 선택합니다.
Q# 회로 창이 나타나고 프로그램의 회로 다이어그램이 표시됩니다. 예를 들어 다음 회로는 큐비트를 중첩 상태로 두고 큐비트를 측정하는 작업에 해당합니다. 회로 다이어그램은 $\ket$ 상태로 초기화된 하나의 큐비트{0} 레지스터를 보여줍니다. 그런 다음, 하다마드 게이트가 큐비트에 적용되고 측정 연산이 이어지며 측정기 기호로 표시됩니다. 이 경우 측정 결과는 0입니다.
팁 (조언)
Q# 및 OpenQASM 파일에서 회로 다이어그램에서 요소를 선택하여 회로 요소를 만드는 코드를 강조 표시합니다.
개별 작업에 대한 회로 다이어그램 보기
Q# 파일에서 개별 작업에 대한 양자 회로를 시각화하려면 작업 앞에 오는 코드 렌즈에서 회로 명령을 선택합니다.
디버깅할 때 회로 다이어그램 보기
Q# 프로그램에서 디버거를 사용하는 VS Code 경우 현재 디버거 중단점의 프로그램 상태에 따라 양자 회로를 시각화할 수 있습니다.
- 진입점 작업 앞에 오는 코드 렌즈에서 디버그 명령을 선택합니다.
- 실행 및 디버그 창에서 변수 메뉴의 Quantum 회로 드롭다운을 확장합니다. QDK 프로그램을 단계별로 진행하는 동안 회로가 표시되는 회로 패널이 열립니다.
- 중단점을 설정하고 코드를 단계별로 실행하여 프로그램이 실행되면서 회로가 업데이트되는 방식을 확인합니다.
의 양자 회로 Jupyter Notebook
Jupyter Notebook에서 qdk.qsharp 및 qdk.widgets Python 모듈을 사용하여 양자 회로를 시각화할 수 있습니다. 이 모듈은 widgets 양자 회로 다이어그램을 SVG 이미지로 렌더링하는 위젯을 제공합니다.
항목 식에 대한 회로 다이어그램 보기
에서 VS Code보기 메뉴를 열고 명령 팔레트를 선택합니다.
새로 만들기 Jupyter Notebook를 입력하고 선택합니다.
첫 번째 노트북 셀에서 다음 코드를 실행하여
qsharp패키지를 가져옵니다.from qdk import qsharp새 셀을 만들고 Q# 코드를 입력합니다. 예를 들어 다음 코드는 벨 상태를 준비합니다.
%%qsharp // Prepare a Bell State. operation BellState() : Unit { use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]); }프로그램의 현재 상태에 따라 간단한 양자 회로를 표시하려면 진입점 식을 함수에
qsharp.circuit전달합니다. 예를 들어 이전 코드의 회로 다이어그램에는 $\ket$ 상태로 초기화된 두 개의 큐비트{0} 레지스터가 표시됩니다. 그런 다음, 첫 번째 큐비트에 Hadamard 게이트가 적용됩니다. 마지막으로, 첫 번째 큐비트가 점으로 표현되는 컨트롤이고 두 번째 큐비트가 X로 표시되는 대상인 경우 CNOT 게이트가 적용됩니다.qsharp.circuit("BellState()")q_0 ── H ──── ● ── q_1 ───────── X ──양자 회로를 SVG 이미지로 시각화하려면 모듈을
widgets사용합니다. 새 셀을 만든 다음 다음 코드를 실행하여 이전 셀에서 만든 회로를 시각화합니다.from qdk.widgets import Circuit Circuit(qsharp.circuit("BellState()"))
큐비트를 사용하여 작업에 대한 회로 다이어그램 보기
큐비트 또는 큐비트 배열을 입력으로 사용하는 작업의 회로 다이어그램을 생성할 수 있습니다. 다이어그램은 작업 내에서 할당하는 추가 큐비트에 대한 와이어와 함께 각 입력 큐비트에 대한 와이어를 보여 줍니다. 작업이 큐비트의 (Qubit[])배열을 사용하는 경우 회로는 배열을 2큐비트의 레지스터로 표시합니다.
새 셀을 추가한 다음 다음 Q# 코드를 복사하여 실행합니다. 이 코드는 cat 상태를 준비합니다.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }새 셀을 추가하고 다음 코드를 실행하여 작업의 회로를 시각화합니다
PrepareCatState.Circuit(qsharp.circuit(operation="PrepareCatState"))
동적 회로에 대한 회로 다이어그램
회로 다이어그램은 Q# 프로그램 내에서 클래식 논리를 실행하고 할당되고 적용된 모든 게이트를 추적하여 생성됩니다. 루프 및 조건부가 클래식 값만 처리할 때 지원됩니다.
그러나 큐비트 측정 결과를 사용하는 루프 및 조건식을 포함하는 프로그램은 회로 다이어그램으로 표현하기 더 까다롭습니다. 예를 들어 다음 식을 고려합니다.
if (M(q) == One) {
X(q)
}
게이트는 측정 결과에 조건부이므로 이 식을 간단한 회로 다이어그램으로 나타낼 수 없습니다. 측정 결과에 따라 게이트가 있는 회로를 동적 회로라고 합니다.
양자 시뮬레이터에서 프로그램을 실행하고 적용된 게이트를 추적하여 동적 회로에 대한 다이어그램을 생성할 수 있습니다. 이는 시뮬레이션이 수행될 때 큐비트와 게이트가 추적되기 때문에 추적 모드라고 합니다.
추적된 회로의 단점은 단일 시뮬레이션을 위해 측정 결과 및 결과 게이트 애플리케이션만 캡처한다는 것입니다. 위의 예제에서 측정 결과가 Zero있으면 게이트가 X 다이어그램에 없습니다. 시뮬레이션을 다시 실행하면 다른 회로가 발생할 수 있습니다.