Qiskit transpile com diferentes conjuntos de portas de base

Oct 09 2020

Eu quero usar a função transpilar Qiskit para decompor uma matriz unitária / circuito quântico arbitrário em um tipo especial de portas básicas. ( from qiskit.compiler import transpile)

Mas, para mim, parece que as únicas portas de base aceitas são 'u1', 'u2', 'u3' e 'cx'. Existe uma maneira de usar, por exemplo, 'rx', 'ry' e 'cx' como portas de base em vez de 'u1', 'u2', 'u3' e 'cx'?

O seguinte erro

Ocorreu uma exceção: QiskitError "Não é possível desenrolar o circuito para a base fornecida, ['id', 'ry', 'rx', 'cx']. Nenhuma regra para expandir a instrução h."

por exemplo, é obtido a partir do código:

from qiskit.quantum_info import Operator
from qiskit.compiler import transpile
import matplotlib.pyplot as plt
from qiskit.compiler.transpile import CouplingMap

coupling_string = [[0, 1], [0,2], [1,2]]

CM = CouplingMap(coupling_string)

qc = QuantumCircuit(3)

qc.h(0)
qc.h(1)
qc.h(2)

result = transpile(qc, coupling_map=CM, basis_gates=['id', 'ry', 'rx', 'cx'], optimization_level=1, seed_transpiler=1) 
result.draw(output='mpl')
plt.show()

Respostas

1 MatthewTreinish Oct 08 2020 at 23:05

Qual versão do Qiskit você está executando? Suporte para tradução de base arbitrária foi adicionado recentemente no Qiskit 0.20.0 / Qiskit-Terra 0.15.0. 1 Se você estiver executando uma versão mais antiga do Qiskit, o transpiler irá falhar assim porque o desenrolador não sabia como usar aquele conjunto básico. No entanto, ao usar a versão mais recente do Qiskit, ele exibirá uma imagem de circuito como:

É importante notar que a transpilação não é boa porque o passo de otimização de 1 qubit ainda não entende conjuntos de base arbitrários e ainda funciona apenas para u1, u2, u3, que é o motivo pelo qual a saída é tão grande. Há trabalho pendente para consertar issohttps://github.com/Qiskit/qiskit-terra/pull/3658

1 https://qiskit.org/documentation/release_notes.html#qiskit-0-20-0