Solução de problemas do OpenQASM
Esta seção fornece dicas de solução de problemas que podem ser úteis ao encontrar erros usando o OpenQASM 3.0.
Nesta seção:
Incluir erro de declaração
Atualmente, o Braket não tem um arquivo de biblioteca de portas padrão para ser incluído nos programas OpenQASM. Por exemplo, o seguinte exemplo gera um erro de análise.
OPENQASM 3; include "standardlib.inc";
Esse código gera a mensagem de erro: No terminal matches '"' in the current parser context, at line 2 col 17.
Erro não contíguo do qubits
O uso não contíguo do qubits em dispositivos requiresContiguousQubitIndices configurados como true na capacidade do dispositivo resulta em um erro.
Ao executar tarefas quânticas em simuladores e IonQ, o programa a seguir aciona o erro.
OPENQASM 3; qubit[4] q; h q[0]; cnot q[0], q[2]; cnot q[0], q[3];
Esse código gera a mensagem de erro: Device requires contiguous qubits. Qubit register q has unused qubits q[1], q[4].
Erro de mistura do qubits físico com o qubits virtual
Não é permitido misturar o qubits físico com o qubits virtual no mesmo programa, resulta em um erro. O código a seguir gera o erro.
OPENQASM 3; qubit[2] q; cnot q[0], $1;
Esse código gera a mensagem de erro: [line 4] mixes physical qubits and qubits registers.
Erro de solicitação de tipos de resultados que o qubits mede no mesmo programa
Solicitar tipos de resultados que o qubits mede explicitamente no mesmo programa resulta em um erro. O código a seguir gera o erro.
OPENQASM 3; qubit[2] q; h q[0]; cnot q[0], q[1]; measure q; #pragma braket result expectation x(q[0]) @ z(q[1])
Esse código gera a mensagem de erro: Qubits should not be explicitly measured when result types are requested.
Os limites clássicos e de registro qubit excederam o erro
Somente um registro clássico e um registro qubit são permitidos. O código a seguir gera o erro.
OPENQASM 3; qubit[2] q0; qubit[2] q1;
Esse código gera a mensagem de erro: [line 4] cannot declare a qubit register. Only 1 qubit register is supported.
Caixa não precedida por um erro de pragma literal
Todas as caixas devem ser precedidas por um pragma literal. O código a seguir gera o erro.
box{ rx(0.5) $0; }
Esse código gera a mensagem de erro: In verbatim boxes, native gates are required. x is not a device native gate.
Erro de caixas textuais sem portas nativas
As caixas textuais devem ter portas qubits nativas e físicas. O código a seguir gera o erro de portas nativas.
#pragma braket verbatim box{ x $0; }
Esse código gera a mensagem de erro: In verbatim boxes, native gates are required. x is not a device native gate.
Caixas textuais sem erro físico qubits
As caixas textuais devem ter qubits físicas. O código a seguir gera o erro qubits físico ausente.
qubit[2] q; #pragma braket verbatim box{ rx(0.1) q[0]; }
Esse código gera a mensagem de erro: Physical qubits are required in verbatim box.
O pragma literal não contém o erro “braket”
Você deve incluir “braket” no pragma literal. O código a seguir gera o erro.
#pragma braket verbatim // Correct #pragma verbatim // wrong
Esse código gera a mensagem de erro: You must include “braket” in the verbatim pragma
Erro único qubits não pode ser indexado
O único qubits não pode ser indexado. O código a seguir gera o erro.
OPENQASM 3; qubit q; h q[0];
Esse código gera o erro: [line 4] single qubit cannot be indexed.
No entanto, matrizes únicas qubit podem ser indexadas da seguinte forma:
OPENQASM 3; qubit[1] q; h q[0]; // This is valid
O qubits físico em um erro qubit de duas portas não está conectado
Para usar o qubits físico, primeiro confirme se o dispositivo usa o qubits físico verificando device.properties.action[DeviceActionType.OPENQASM].supportPhysicalQubits e, em seguida, verifique o gráfico de conectividade marcando device.properties.paradigm.connectivity.connectivityGraph ou device.properties.paradigm.connectivity.fullyConnected.
OPENQASM 3; cnot $0, $14;
Esse código gera a mensagem de erro: [line 3] has disconnected qubits 0 and 14
Aviso de suporte do simulador local
O LocalSimulator dá suporte a recursos avançados no OpenQASM que podem não estar disponíveis em QPUs ou simuladores sob demanda. Se o seu programa contiver recursos de linguagem específicos somente para o LocalSimulator, conforme mostrado no exemplo a seguir, você receberá um aviso.
qasm_string = """ qubit[2] q; h q[0]; ctrl @ x q[0], q[1]; """ qasm_program = Program(source=qasm_string)
Esse código gera o aviso: `Este programa usa recursos da linguagem OpenQASM suportados apenas no LocalSimulator. Alguns desses recursos podem não ser compatíveis com QPUs ou simuladores sob demanda.
Para obter mais informações sobre os recursos com suporte do OpenQASM, explore a página Suporte avançado de recursos para o OpenQASM no Simulador Local.