주 콘텐츠로 건너뛰기

Circuit 시각화

패키지 버전

이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것을 권장합니다.

qiskit[all]~=2.3.0

생성 중인 Circuit을 확인하는 것은 매우 유용합니다. Qiskit Circuit을 표시하려면 다음 옵션을 사용하세요.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit

양자 Circuit 그리기

QuantumCircuit 클래스는 draw() 메서드를 통해 또는 Circuit 객체를 출력하여 Circuit 그리기를 지원합니다. 기본적으로 두 방법 모두 Circuit 다이어그램의 ASCII 아트 버전을 렌더링합니다.

printNone을 반환하지만 다이어그램을 출력하는 부수 효과가 있는 반면, QuantumCircuit.draw는 부수 효과 없이 다이어그램을 반환합니다. Jupyter 노트북은 각 셀의 마지막 줄 출력을 표시하므로, 두 방법은 동일한 효과를 갖는 것처럼 보입니다.

# Build a quantum circuit
circuit = QuantumCircuit(3, 3)
circuit.x(1)
circuit.h(range(3))
circuit.cx(0, 1)
circuit.measure(range(3), range(3));
print(circuit)
┌───┐          ┌─┐   
q_0: ┤ H ├───────■──┤M├───
├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
└───┘ └╥┘ ║ ║
c: 3/═══════╩════════╩══╩═
2 0 1
circuit.draw()
┌───┐          ┌─┐   
q_0: ┤ H ├───────■──┤M├───
├───┤┌───┐┌─┴─┐└╥┘┌─┐
q_1: ┤ X ├┤ H ├┤ X ├─╫─┤M├
├───┤└┬─┬┘└───┘ ║ └╥┘
q_2: ┤ H ├─┤M├───────╫──╫─
└───┘ └╥┘ ║ ║
c: 3/═══════╩════════╩══╩═
2 0 1

대체 렌더러

텍스트 출력은 Circuit을 개발하는 동안 출력을 빠르게 확인하는 데 유용하지만, 가장 유연한 방법은 아닙니다. 양자 Circuit에는 두 가지 대체 출력 렌더러가 있습니다. 하나는 Matplotlib을 사용하고 다른 하나는 LaTeX을 사용합니다. LaTeX 렌더러는 qcircuit 패키지가 필요합니다. "output" 인수를 문자열 mpllatex로 설정하여 이 렌더러를 선택하세요.

OSX 사용자는 mactex 패키지를 통해 필요한 LaTeX 패키지를 얻을 수 있습니다.

# Matplotlib drawing
circuit.draw(output="mpl")

Output of the previous code cell

# Latex drawing
circuit.draw(output="latex")

Output of the previous code cell

출력 저장

Jupyter 노트북에서 대규모 Circuit을 인라인으로 그리는 것은 느리거나 읽기 어려울 수 있습니다. 다이어그램을 파일에 직접 저장한 다음 이미지 뷰어에서 열어 필요에 따라 확대할 수 있습니다.

# Save as an image using the Matplotlib drawer
circuit.draw(output="mpl", filename="circuit-mpl.jpeg")

Output of the previous code cell

# Or save a LaTeX rendering
circuit.draw(output="latex", filename="circuit-latex.pdf")

Output of the previous code cell

Circuit 그리기 제어

기본적으로 draw() 메서드는 렌더링된 이미지를 객체로 반환하며 아무것도 출력하지 않습니다. 반환되는 정확한 클래스는 지정된 출력에 따라 다릅니다: 'text'(기본값)는 TextDrawer 객체를 반환하고, 'mpl'matplotlib.Figure 객체를 반환하며, latexPIL.Image 객체를 반환합니다. Jupyter 노트북은 이러한 반환 유형을 이해하고 적절히 렌더링하지만, Jupyter 외부에서 실행할 때는 이미지가 자동으로 표시되지 않습니다.

draw() 메서드에는 출력을 표시하거나 저장하는 선택적 인수가 있습니다. filename kwarg가 지정되면 렌더링된 출력을 저장할 경로를 받습니다. 또는 mpl 또는 latex 출력을 사용하는 경우 interactive kwarg를 사용하여 새 창에서 이미지를 열 수 있습니다(노트북 내에서는 항상 작동하지 않을 수 있습니다).

출력 사용자 정의

출력에 따라 Circuit 다이어그램을 사용자 정의하는 옵션도 있습니다.

플롯 배리어 비활성화 및 비트 순서 반전

처음 두 옵션은 세 가지 백엔드 모두에서 공유됩니다. 비트 순서와 배리어 그리기 여부를 모두 구성할 수 있습니다. 이는 각각 reverse_bits kwarg와 plot_barriers kwarg로 설정할 수 있습니다. 다음 예제는 모든 출력 렌더러에서 작동합니다. 여기서는 간결함을 위해 mpl을 사용합니다.

from qiskit import QuantumRegister, ClassicalRegister

# Draw a new circuit with barriers and more registers
q_a = QuantumRegister(3, name="a")
q_b = QuantumRegister(5, name="b")
c_a = ClassicalRegister(3)
c_b = ClassicalRegister(5)

circuit = QuantumCircuit(q_a, q_b, c_a, c_b)
circuit.x(q_a[1])
circuit.x(q_b[1])
circuit.x(q_b[2])
circuit.x(q_b[4])
circuit.barrier()
circuit.h(q_a)
circuit.barrier(q_a)
circuit.h(q_b)
circuit.cswap(q_b[0], q_b[1], q_b[2])
circuit.cswap(q_b[2], q_b[3], q_b[4])
circuit.cswap(q_b[3], q_b[4], q_b[0])
circuit.barrier(q_b)
circuit.measure(q_a, c_a)
circuit.measure(q_b, c_b);
# Draw the circuit
circuit.draw(output="mpl")

Output of the previous code cell

# Draw the circuit with reversed bit order
circuit.draw(output="mpl", reverse_bits=True)

Output of the previous code cell

# Draw the circuit without barriers
circuit.draw(output="mpl", plot_barriers=False)

Output of the previous code cell

렌더러별 사용자 정의

일부 사용 가능한 사용자 정의 옵션은 특정 렌더러에 한정됩니다.

fold 인수는 출력의 최대 너비를 설정합니다. text 렌더러에서는 다음 줄로 줄 바꿈되기 전 다이어그램 줄의 길이를 설정합니다. mpl 렌더러를 사용할 때는 다음 줄로 접기 전의 (시각적) 레이어 수입니다.

mpl 렌더러에는 색상과 윤곽선을 변경하는 style kwarg가 있습니다. 자세한 내용은 API 문서를 참조하세요.

scale 옵션은 mpllatex 렌더러의 출력을 스케일링합니다.

circuit = QuantumCircuit(1)
for _ in range(10):
circuit.h(0)
# limit line length to 40 characters
circuit.draw(output="text", fold=40)
┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐»
q: ┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├┤ H ├»
└───┘└───┘└───┘└───┘└───┘└───┘└───┘»
« ┌───┐┌───┐┌───┐
«q: ┤ H ├┤ H ├┤ H ├
« └───┘└───┘└───┘
# Change the background color in mpl

style = {"backgroundcolor": "lightgreen"}
circuit.draw(output="mpl", style=style)

Output of the previous code cell

# Scale the mpl output to 1/2 the normal size
circuit.draw(output="mpl", scale=0.5)

Output of the previous code cell

독립 실행형 Circuit 그리기 함수

Circuit 객체의 메서드 대신 독립 실행형 함수로 Circuit을 그리는 것을 선호하는 애플리케이션이 있다면, qiskit.visualization의 공개 안정 인터페이스의 일부인 circuit_drawer() 함수를 직접 사용할 수 있습니다. 이 함수는 Circuit 객체를 필수 인수로 받는다는 점을 제외하면 circuit.draw() 메서드와 동일하게 동작합니다.

from qiskit.visualization import circuit_drawer

circuit_drawer(circuit, output="mpl", plot_barriers=False)

Output of the previous code cell

다음 단계

권장 사항