OpenQASM mesa com 3 recursos
Abaixo está uma lista dos recursos do idioma OpenQASM 3 .
Para obter mais detalhes sobre esses recursos, consulte o site OpenQASM 3.X Live Specification.
Chave:
- não suportado
- suporte parcial
- ✅ Suportado
O significado da marca completa "suportado" depende da coluna:
-
Qiskit SDK : O recurso pode ser analisado por
qiskit.qasm3.loads(usando aqiskit-qasm3-importextensão ), representado em umQuantumCircuit, e exportado para OpenQASM 3 porqiskit.qasm3.dumps. -
IBM Qiskit Runtime : Um circuito que contém o recurso Qiskit correspondente pode ser executado com sucesso no hardware por meio do site IBM® Qiskit Runtime.
O significado de "suporte parcial" geralmente depende das notas vinculadas.
O método mais comum de envio de circuitos para IBM Qiskit Runtime é criar o circuito na interface Python -space do Qiskit SDK. Os circuitos construídos e enviados dessa maneira não precisam ser carregados dos arquivos OpenQASM 3 no Qiskit SDK.
Se você não usar o OpenQASM 3 diretamente, poderá usar com segurança os recursos compatíveis com a representação no Qiskit SDK, exportar para OpenQASM 3 e enviar para IBM Qiskit Runtime. Isso inclui recursos que não podem ser carregados pelo Qiskit SDK a partir de OpenQASM 3.
OpenQASM 3 Recursos | Recurso do Qiskit SDK | SDK Qiskit | IBM Qiskit Runtime | Notas |
|---|---|---|---|---|
| comentários | ✅ | ✅ | 1 | |
| QASM vstring | ✅ | ✅ | 1 | |
include | 🟡 | ❌ | 1, 7 | |
| nomes unicode | ✅ | ✅ | ||
qubit | Qubit e QuantumRegister | ✅ | 🟡 | 2 |
bit | Clbit e ClassicalRegister | ✅ | ✅ | 3 |
bool | expr.Var e expressões clássicas | 🟡 | ✅ | 4 |
int | ❌ | ✅ | 4 | |
uint | expr.Var e expressões clássicas | 🟡 | ✅ | 4 |
float | expr.Var e expressões clássicas | 🟡 | 🟡 | 4 |
angle | Implícito, como parâmetros de porta | ❌ | 🟡 | 4 |
complex | ❌ | ❌ | 4 | |
const | ❌ | ❌ | 4 | |
pi/π/tau/τ/euler/ℇ | Constante dobrada em parâmetros de porta | ✅ | ✅ | |
| Aliasing: deixe | Registros quânticos e clássicos | 🟡 | ❌ | 5,00 |
| concatenação de registros | Registros quânticos e clássicos | 🟡 | ❌ | 5,00 |
| cast | expr.Cast expressões clássicas | 🟡 | 🟡 | 4 |
duration | ❌ | ❌ | ||
durationof | ❌ | ❌ | ||
ns/µs/us/ms/s/dt | Durações de delay e box | ✅ | ✅ | 6 |
stretch | expr.Stretch | 🟡 | 🟡 | 4, 6 |
delay | Delay/QuantumCircuit.delay | ✅ | ✅ | 6 |
barrier | Barrier/QuantumCircuit.barrier | ✅ | ✅ | |
box | BoxOp/QuantumCircuit.box | ✅ | ❌ | 6 |
Incorporada 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 | ✅ | ✅ | |
| operações de bits | 🟡 | ✅ | 4 | |
| operações booleanas | 🟡 | ✅ | 4 | |
| expressões aritméticas | 🟡 | 🟡 | 4 | |
| comparações | 🟡 | ✅ | 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 subrotinas (clássicas) | ❌ | ❌ | ||
def subrotinas (quantum) | ❌ | ❌ | ||
input | QuantumCircuit.add_input | ✅ | 🟡 | 4, 9 |
output | ❌ | ❌ |
Notas
- Esses recursos do programa OpenQASM 3 não têm impacto sobre a execução e o Qiskit os remove como parte da análise dos arquivos como parte da análise dos arquivos. Os arquivos que os utilizam podem ser enviados, mas não terão nenhum efeito. Para arquivos
include,stdgates.incé atualmente suportado como entrada para o Qiskit, e a execução de backend sempre exige que os circuitos tenham sido compilados para a arquitetura de conjunto de instruções (ISA) de backend, em que os arquivosincludesão irrelevantes.
- O Qiskit SDK suporta a análise e o descarte de arquivos OpenQASM 3 com qualquer declaração
qubit. Para execução em hardware, somente os circuitos 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 hardware-qubit se o circuito tiver sido transpilado para um backend com informações de layout.
bit- ebit[n]- as declarações de variáveis digitadas no Qiskit SDK correspondem aClbiteClassicalRegisterdeclarações.
- 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 de tempo de execução nesses objetos e suporta a saída deles para OpenQASM 3.
Entretanto, o Qiskit SDK (por meio do site
qiskit-qasm3-importv0.6.0 ) não oferece suporte à análise de arquivos OpenQASM 3 arquivos que contêm declarações de variáveis e tem suporte muito limitado para analisar expressões de variáveis expressões. Em geral, a maior parte do que o Qiskit pode representar em seu sistema de expressão pode ser executada em um hardware de circuitos dinâmicos adequado, mesmo que a expressão ainda não possa ser analisada pelo Qiskit SDK. Veja a documentação do Qiskitqiskit.circuit.classicalmódulo para obter as informações mais atualizadas.
- O Qiskit SDK pode representar o aliasing de registro para registros quânticos e clássicos, mas é altamente fortemente desencorajado o uso de aliasing de registros clássicos. A maioria das expressões em registros clássicos não funcionam com aliases, e os registros clássicos com aliases não são suportados para execução no hardware. O analisador do Qiskit OpenQASM 3 pode resolver
letdeclarações de alias que vinculam o resultado da concatenação de registros.
- O Qiskit SDK oferece suporte a atrasos explícitos por meio do site
QuantumCircuit.delay, e as caixas de circuito (QuantumCircuit.box) também podem ter durações explícitas. Essas durações podem incluir expressões clássicas expressões clássicas destretchvariáveis. O Qiskit SDK (a partir de julho de 2025 atéqiskit-qasm3-importv0.6.0 ) não oferece suporte à análise de declarações do tipodurationoustretchde arquivos OpenQASM 3 arquivos. O hardware tem suporte limitado para durações que incluemstretch.
- Os circuitos devem ser transpilados para o ISA de backend para serem executados no hardware IBM. Isso impede que definições personalizadas do
gatee construções de nível superior, como modificadores de porta (como oinv @), não sejam sejam válidos para execução no hardware literalmente, mas o processotranspileos resolve em circuitos ISA válidos. O Qiskit SDK (a partir de julho de 2025, por meio doqiskit-qasm3-importv0.6.0 ) avaliará avidamente os modificadores de porta durante a análise, portanto, eles não serão evidentes no site resultanteQuantumCircuit, potencialmente com um custo de tempo de execução.
- O Qiskit SDK pode representar o fluxo de controle estruturado e exportá-lo para OpenQASM 3. As declarações
continueebreakpodem ser tecnicamente representadas pelo Qiskit, mas não são bem suportadas nem mesmo no Qiskit SDK.forloops no Qiskit v2.1.0 não são bem suportados. O fluxo de controle aninhado o fluxo de controle aninhado (como umifdentro de outroif, ou uma instruçãoelse if) não é elegível para execução no hardware.
- O Qiskit SDK suporta a declaração de qualquer tipo clássico compatível como uma variável
inputno circuito. No momento, essas variáveis não são elegíveis para execução no hardware e não podem ser carregadas pelo importador do Qiskit OpenQASM 3. Os objetos não vinculados doParameterpresentes noQuantumCircuitsão exportados como variáveis doinput float[64]. Certas opções de configuração de tempo de execução podem permitir a execução desses circuitos em alguns back-ends.
Próximas etapas
- Saiba como gerar o código OpenQASM usando o IBM Quantum Composer.
- Consulte a referência da API do Qiskit em OpenQASM 3.
- Consulte a referência da API do Qiskit em OpenQASM 2.
- Consulte o tópico “Verifique seu programa ”.
- Visite o site OpenQASM Live Specification.