OpenQASM 3 e o Qiskit SDK
O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou de versões mais recentes.
qiskit[all]~=2.5.0
O Qiskit SDK fornece algumas ferramentas para conversão entre as representações OpenQASM de programas quânticos e a classe QuantumCircuit. Observe que essas ferramentas ainda estão em uma fase exploratória de desenvolvimento e continuarão a evoluir à medida que o suporte do Qiskit aos recursos de circuitos dinâmicos expressos por OpenQASM 3 aumentar.
Essa função ainda está em fase exploratória. Portanto, é provável que a sintaxe e os recursos evoluam.
Importar um programa OpenQASM 3 para o Qiskit
Você deve instalar o pacote qiskit_qasm3_import para usar essa função. Instale usando o seguinte comando.
pip install qiskit-qasm3-importAtualmente, duas funções de alto nível estão disponíveis para importação do OpenQASM 3 para o Qiskit. Essas funções são load(), que recebe um nome de arquivo, e loads(), que recebe o próprio programa como uma cadeia de caracteres:
import qiskit.qasm3
qiskit.qasm3.load(file_name)
qiskit.qasm3.loads(program_string)Neste exemplo, definimos um programa quântico usando OpenQASM 3 e usamos loads() para convertê-lo diretamente em um 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:
Exportar para OpenQASM 3
Você pode exportar o código do Qiskit para OpenQASM 3 com dumps(), que exporta para uma cadeia de caracteres, ou dump(), que exporta para um arquivo.
Exemplo com 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'
Exemplo com 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()Para obter mais informações, consulte a seção Exportando para OpenQASM 3 da referência da API.
Próximas etapas
- Saiba como gerar o código OpenQASM no guia IBM Quantum Composer.
- Consulte a referência da API do Qiskit em OpenQASM 3.
- Acesse a seção “Verifique seu programa ”.
- Analise a especificação do OpenQASM Live.