Skip to main content
IBM Quantum Platform

OpenQASM 3 그리고 Qiskit SDK

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

    qiskit[all]~=2.5.2
    

키스킷 SDK는 양자 프로그램의 OpenQASM 표현과 QuantumCircuit 클래스 간 변환을 위한 몇 가지 도구를 제공합니다. 이러한 도구는 아직 탐색적 개발 단계에 있으며, OpenQASM 3에서 표현한 동적 회로 기능에 대한 키스킷의 지원이 증가함에 따라 계속 발전할 것입니다.

Note

이 기능은 아직 탐색 단계에 있습니다. 따라서 구문과 기능이 진화할 가능성이 높습니다.


OpenQASM 3 프로그램을 Qiskit으로 가져오기

이 기능을 사용하려면 qiskit_qasm3_import 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치합니다.

pip install qiskit-qasm3-import

현재 OpenQASM 3에서 키스킷으로 가져올 수 있는 두 가지 상위 수준 함수를 사용할 수 있습니다. 이러한 함수는 파일 이름을 받는 load() 과 프로그램 자체를 문자열로 받는 loads() 입니다:

import qiskit.qasm3
qiskit.qasm3.load(file_name)
qiskit.qasm3.loads(program_string)

이 예제에서는 OpenQASM 3을 사용하여 양자 프로그램을 정의하고 loads() 을 사용하여 직접 변환합니다 QuantumCircuit:

import qiskit.qasm3

program = """
    OPENQASM 3.0;
    include "stdgates.inc";

    input float[64] a;
    qubit[3] q;
    bit[2] mid;
    bit[3] out;

    let aliased = q[0:1];

    gate my_gate(a) c, t {
      gphase(a / 2);
      ry(a) c;
      cx c, t;
    }
    gate my_phase(a) c {
      ctrl @ inv @ gphase(a) c;
    }

    my_gate(a * 2) aliased[0], q[{1, 2}][0];
    measure q[0] -> mid[0];
    measure q[1] -> mid[1];

    while (mid == "00") {
      reset q[0];
      reset q[1];
      my_gate(a) q[0], q[1];
      my_phase(a - pi/2) q[1];
      mid[0] = measure q[0];
      mid[1] = measure q[1];
    }

    if (mid[0]) {
      let inner_alias = q[{0, 1}];
      reset inner_alias;
    }

    out = measure q;
"""
circuit = qiskit.qasm3.loads(program)
circuit.draw("mpl")

Output:

Output of the previous code cell

OpenQASM 로 내보내기 3

키스킷 코드를 OpenQASM 3으로 내보내려면 dumps() 을 사용하여 문자열로 내보내거나 dump() 을 사용하여 파일로 내보낼 수 있습니다.

예시와 dumps()

from qiskit import QuantumCircuit
from qiskit.qasm3 import dumps

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

dumps(qc)

Output:

'OPENQASM 3.0;\ninclude "stdgates.inc";\nbit[2] meas;\nqubit[2] q;\nh q[0];\ncx q[0], q[1];\nbarrier q[0], q[1];\nmeas[0] = measure q[0];\nmeas[1] = measure q[1];\n'

예시와 dump()

from qiskit import QuantumCircuit
from qiskit.qasm3 import dump

qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()

f = open("my_file.txt", "w")
dump(qc, f)
f.close()

자세한 내용은 API 참조의 OpenQASM 3으로 내보내기 섹션을 참조하세요.


다음 단계

권장사항
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.