OpenQASM 3 та Qiskit SDK
Версії пакетів
Код на цій сторінці розроблено з використанням наведених нижче вимог. Рекомендуємо використовувати ці версії або новіші.
qiskit[all]~=2.5.2
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
Qiskit SDK надає кілька інструментів для конвертації між представленнями квантових програм у форматі OpenQASM та класом QuantumCircuit. Зверни увагу, що ці інструменти ще перебувають на експериментальному етапі розробки і розвиватимуться далі в міру того, як Qiskit краще підтримуватиме можливості динамічних схем, що їх описує OpenQASM 3.
Ця функція досі перебуває на експериментальному етапі. Тому синтаксис і можливості, ймовірно, змінюватимуться.
Імпорт програми OpenQASM 3 у Qiskit
Для використання цієї функції потрібно встановити пакет qiskit_qasm3_import . Встанови його за допомогою такої команди.
pip install qiskit-qasm3-import
Наразі для імпорту з OpenQASM 3 у Qiskit доступні дві високорівневі функції. Це 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")
Експорт у OpenQASM 3
Ти можеш експортувати код Qiskit у 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)
'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()
Докладнішу інформацію дивись у розділі Exporting to OpenQASM 3 довідника API.
Наступні кроки
- Дізнайся, як генерувати код OpenQASM у посібнику IBM Quantum Composer.
- Переглянь довідник OpenQASM 3 Qiskit API.
- Відвідай тему Verify your program.
- Переглянь OpenQASM Live Specification.