Transpile Qiskit con diferentes conjuntos de puertas base

Oct 09 2020

Quiero usar la función transpile de Qiskit para descomponer una matriz unitaria / circuito cuántico arbitrario en un tipo especial de puertas de base. ( from qiskit.compiler import transpile)

Pero para mí, parece que las únicas puertas base aceptadas son 'u1', 'u2', 'u3' y 'cx'. ¿Hay alguna forma de usar, por ejemplo, 'rx', 'ry' y 'cx' como puertas base en lugar de 'u1', 'u2', 'u3' y 'cx'?

El siguiente error

Se ha producido una excepción: QiskitError "No se puede desenrollar el circuito a la base dada, ['id', 'ry', 'rx', 'cx']. No hay regla para expandir la instrucción h".

por ejemplo, se obtiene del 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()

Respuestas

1 MatthewTreinish Oct 08 2020 at 23:05

¿Qué versión de Qiskit está ejecutando? Recientemente se agregó soporte para la traducción de bases arbitrarias en Qiskit 0.20.0 / Qiskit-Terra 0.15.0. 1 Si está ejecutando una versión anterior de Qiskit, el transpilador fallará así porque el desenrollador no sabía cómo usar ese conjunto de bases. Sin embargo, cuando se usa la última versión de Qiskit, se mostrará una imagen de circuito como:

Vale la pena señalar que la transpilación no es excelente porque el pase de optimización de 1 qubit aún no comprende conjuntos de bases arbitrarios y solo funciona para u1, u2, u3, por lo que la salida es tan grande. Hay trabajo pendiente para solucionar este problema.https://github.com/Qiskit/qiskit-terra/pull/3658

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