Pular para o conteúdo principal

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ão qiskit-qasm3-import), representado em um QuantumCircuit, e exportado para OpenQASM 3 por qiskit.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.

nota

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 3Recurso do Qiskit SDKQiskit SDKIBM Qiskit RuntimeNotas
comments1
QASM vstring1
include🟡1, 7
unicode names
qubitQubit and QuantumRegister🟡2
bitClbit and ClassicalRegister3
boolexpr.Var and classical expressions🟡4
int4
uintexpr.Var and classical expressions🟡4
floatexpr.Var and classical expressions🟡🟡4
angleImplicit, as gate parameters🟡4
complex4
const4
pi/π/tau/τ/euler/Constant-folded into gate parameters
Aliasing: letQuantum and classical registers🟡5
register concatenationQuantum and classical registers🟡5
castingexpr.Cast classical expressions🟡🟡4
duration
durationof
ns/µs/us/ms/s/dtDurations of delay and box6
stretchexpr.Stretch🟡🟡4, 6
delayDelay/QuantumCircuit.delay6
barrierBarrier/QuantumCircuit.barrier
boxBoxOp/QuantumCircuit.box6
Built-in UUGate/QuantumCircuit.u
gate🟡🟡7
gphaseQuantumCircuit.global_phase🟡7
ctrl @/ negctrl @AnnotatedOperation🟡7
inv @AnnotatedOperation🟡7
pow(k) @AnnotatedOperation🟡7
resetReset/QuantumCircuit.reset
measureMeasure/QuantumCircuit.measure
bit operations🟡4
boolean operations🟡4
arithmetic expressions🟡🟡4
comparisons🟡4
ifQuantumCircuit.if_test8
elseQuantumCircuit.if_test8
else ifQuantumCircuit.if_test8
for loopsQuantumCircuit.for_loop🟡8
while loopsQuantumCircuit.while_loop8
continueQuantumCircuit.continue_loop🟡8
breakQuantumCircuit.break_loop🟡8
return
extern
def subroutines (classical)
def subroutines (quantum)
inputQuantumCircuit.add_input🟡4, 9
output

Notas

  1. 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.inc tem 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 arquivos include são irrelevantes.
  1. 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.
  1. Declarações de variáveis dos tipos bit e bit[n] no Qiskit SDK correspondem às declarações de Clbit e ClassicalRegister.
  1. 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-import v0.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ódulo qiskit.circuit.classical para as informações mais atualizadas.
  1. 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 let que vinculam o resultado de concatenação de registradores.
  1. 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áveis stretch. O Qiskit SDK (a partir de julho de 2025, via qiskit-qasm3-import v0.6.0) não suporta análise de declarações do tipo duration ou tipo stretch a partir de arquivos OpenQASM 3. O hardware tem suporte limitado para durações que incluem stretch.
  1. Os Circuits devem ser transpilados para a ISA do Backend para rodar em hardware IBM. Isso impede que definições personalizadas de gate e construções de nível superior como modificadores de Gate (como inv @) sejam válidas para execução direta em hardware, mas o processo de transpile os resolve em Circuits ISA válidos. O Qiskit SDK (a partir de julho de 2025, via qiskit-qasm3-import v0.6.0) avaliará antecipadamente os modificadores de Gate durante a análise, portanto eles não ficarão visíveis no QuantumCircuit resultante, potencialmente com um custo em tempo de execução.
  1. O Qiskit SDK pode representar fluxo de controle estruturado e exportá-lo para OpenQASM 3. As instruções continue e break podem tecnicamente ser representadas pelo Qiskit, mas não têm bom suporte mesmo dentro do Qiskit SDK. Laços for no Qiskit v2.1.0 não têm bom suporte. Fluxo de controle aninhado (como um if dentro de outro if, ou uma instrução else if) não é elegível para execução em hardware.
  1. O Qiskit SDK suporta declarar qualquer tipo clássico suportado como uma variável input no 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. Objetos Parameter não vinculados presentes no QuantumCircuit são exportados como variáveis input 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

Recomendações