Tabela de recursos do OpenQASM 3
Abaixo está uma lista dos recursos de linguagem do OpenQASM 3.
Para mais detalhes sobre essas capacidades, consulte a Especificação Ao Vivo do OpenQASM 3.X.
Legenda:
- ❌ Não suportado
- 🟡 Suporte parcial
- ✅ Suportado
O significado da marca "suportado" completa depende da coluna:
-
Qiskit SDK: O recurso pode ser analisado por
qiskit.qasm3.loads(usando a extensãoqiskit-qasm3-import), representado em umQuantumCircuit, e exportado para OpenQASM 3 porqiskit.qasm3.dumps. -
IBM Qiskit Runtime: Um Circuit contendo o recurso Qiskit correspondente pode ser executado com sucesso em hardware por meio do IBM® Qiskit Runtime.
O significado de "suporte parcial" geralmente depende das notas vinculadas.
O método mais comum de enviar Circuits ao IBM Qiskit Runtime é criar o Circuit na interface Python do Qiskit SDK. Circuits construídos e enviados dessa forma não precisam ser carregados de arquivos OpenQASM 3 para o Qiskit SDK.
Se você não usa o OpenQASM 3 diretamente, pode utilizar com segurança os recursos que têm suporte para representação no Qiskit SDK, exportação para OpenQASM 3 e envio ao IBM Qiskit Runtime. Isso inclui recursos que não podem ser carregados pelo Qiskit SDK a partir do OpenQASM 3.
| Recurso do OpenQASM 3 | Recurso do Qiskit SDK | Qiskit SDK | IBM Qiskit Runtime | Notas |
|---|---|---|---|---|
| comments | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| unicode names | ✅ | ✅ | ||
qubit | Qubit and QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit and ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var and classical expressions | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var and classical expressions | 🟡 | ✅ | 4 |
float | expr.Var and classical expressions | 🟡 | 🟡 | 4 |
angle | Implicit, as gate parameters | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constant-folded into gate parameters | ✅ | ✅ | |
| Aliasing: let | Quantum and classical registers | 🟡 | ❌ | 5 |
| register concatenation | Quantum and classical registers | 🟡 | ❌ | 5 |
| casting | expr.Cast classical expressions | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durations of delay and box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Built-in U | UGate/QuantumCircuit.u | ✅ | ✅ | |
gate | 🟡 | 🟡 | 7 | |
gphase | QuantumCircuit.global_phase | 🟡 | ❌ | 7 |
ctrl @/ negctrl @ | AnnotatedOperation | 🟡 | ❌ | 7 |
inv @ | AnnotatedOperation | 🟡 | ❌ | 7 |
pow(k) @ | AnnotatedOperation | 🟡 | ❌ | 7 |
reset | Reset/QuantumCircuit.reset | ✅ | ✅ | |
measure | Measure/QuantumCircuit.measure | ✅ | ✅ | |
| bit operations | 🟡 | ✅ | 4 | |
| boolean operations | 🟡 | ✅ | 4 | |
| arithmetic expressions | 🟡 | 🟡 | 4 | |
| comparisons | 🟡 | ✅ | 4 | |
if | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else | QuantumCircuit.if_test | ✅ | ✅ | 8 |
else if | QuantumCircuit.if_test | ✅ | ❌ | 8 |
for loops | QuantumCircuit.for_loop | 🟡 | ❌ | 8 |
while loops | QuantumCircuit.while_loop | ✅ | ❌ | 8 |
continue | QuantumCircuit.continue_loop | 🟡 | ❌ | 8 |
break | QuantumCircuit.break_loop | 🟡 | ❌ | 8 |
return | ❌ | ❌ | ||
extern | ❌ | ❌ | ||
def subroutines (classical) | ❌ | ❌ | ||
def subroutines (quantum) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Notas
- Esses recursos de programa OpenQASM 3 não têm impacto na execução e o Qiskit os remove
durante a análise dos arquivos. Arquivos que os utilizam podem ser enviados, mas não terão
efeito algum. Para arquivos
include,stdgates.inctem suporte atualmente como entrada para o Qiskit, e a execução no Backend sempre exige que os Circuits tenham sido compilados para a Arquitetura de Conjunto de Instruções (ISA) do Backend, onde os arquivosincludesão irrelevantes.
- O Qiskit SDK suporta análise e exportação de arquivos OpenQASM 3 com quaisquer declarações de
qubit. Para execução em hardware, apenas Circuits definidos em termos de qubits de hardware (por exemplo,$0) são válidos. O Qiskit SDK gera automaticamente OpenQASM 3 em termos dos identificadores de Qubit de hardware suportados, se o Circuit foi transpilado para um Backend com informações de layout.
- Declarações de variáveis dos tipos
bitebit[n]no Qiskit SDK correspondem às declarações deClbiteClassicalRegister.
- A partir de julho de 2025, o Qiskit SDK pode representar variáveis locais de um conjunto restrito de tipos, pode
representar muitas operações em tempo de execução sobre esses objetos e suporta a exportação deles para OpenQASM 3.
No entanto, o Qiskit SDK (via
qiskit-qasm3-importv0.6.0) não suporta análise de arquivos OpenQASM 3 que contenham declarações de variáveis, e tem suporte muito limitado para análise de expressões de variáveis. Em geral, a maior parte do que o Qiskit pode representar em seu sistema de expressões pode ser executada em hardware de Circuits dinâmicos adequado, mesmo que a expressão ainda não possa ser analisada pelo Qiskit SDK. Consulte a documentação do Qiskit sobre o móduloqiskit.circuit.classicalpara as informações mais atualizadas.
- O Qiskit SDK pode representar aliasing de registradores tanto para registradores quânticos quanto clássicos, mas é
fortemente desaconselhado o uso de aliasing em registradores clássicos. A maioria das expressões sobre registradores clássicos
não funciona com aliases, e registradores clássicos com alias não têm suporte para execução em hardware.
O parser OpenQASM 3 do Qiskit consegue resolver instruções de alias
letque vinculam o resultado de concatenação de registradores.
- O Qiskit SDK suporta atrasos explícitos via
QuantumCircuit.delay, e caixas de Circuit (QuantumCircuit.box) também podem ter durações explícitas. Essas durações podem incluir expressões clássicas de variáveisstretch. O Qiskit SDK (a partir de julho de 2025, viaqiskit-qasm3-importv0.6.0) não suporta análise de declarações do tipodurationou tipostretcha partir de arquivos OpenQASM 3. O hardware tem suporte limitado para durações que incluemstretch.
- Os Circuits devem ser transpilados para a ISA do Backend para rodar em hardware IBM. Isso impede que
definições personalizadas de
gatee construções de nível superior como modificadores de Gate (comoinv @) sejam válidas para execução direta em hardware, mas o processo detranspileos resolve em Circuits ISA válidos. O Qiskit SDK (a partir de julho de 2025, viaqiskit-qasm3-importv0.6.0) avaliará antecipadamente os modificadores de Gate durante a análise, portanto eles não ficarão visíveis noQuantumCircuitresultante, potencialmente com um custo em tempo de execução.
- O Qiskit SDK pode representar fluxo de controle estruturado e exportá-lo para OpenQASM 3. As instruções
continueebreakpodem tecnicamente ser representadas pelo Qiskit, mas não têm bom suporte mesmo dentro do Qiskit SDK. Laçosforno Qiskit v2.1.0 não têm bom suporte. Fluxo de controle aninhado (como umifdentro de outroif, ou uma instruçãoelse if) não é elegível para execução em hardware.
- O Qiskit SDK suporta declarar qualquer tipo clássico suportado como uma variável
inputno Circuit. Tais variáveis não são atualmente elegíveis para execução em hardware e não podem ser carregadas pelo importador OpenQASM 3 do Qiskit. ObjetosParameternão vinculados presentes noQuantumCircuitsão exportados como variáveisinput float[64]. Certas opções de configuração em tempo de execução podem habilitar a execução de tais Circuits em alguns Backends.
Próximos passos
- Aprenda como gerar código OpenQASM usando o IBM Quantum Composer.
- Consulte a referência da API OpenQASM 3 do Qiskit.
- Consulte a referência da API OpenQASM 2 do Qiskit.
- Revise o tópico Verifique seu programa.
- Visite a Especificação Ao Vivo do OpenQASM.