0

我想使用 Qiskit 中的 BasisTranslator 来处理我的电路到基础门。

BasisTranslator的构造函数参数之一是EquivalenceLibrary。我尝试创建一个无参数EquivalenceLibrary()并将其传递给 BasisTranslator,但代码失败,说它无法将 MCT 或 CCX 之类的门转换为默认基础。

TranspilerError: "Unable to map source basis {('mcx', 4), ('ccx', 3), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'u2', 'snapshot', 'barrier', 'cx', 'u3', 'reset', 'u1', 'measure', 'delay'}

我希望在我尝试运行电路时 Transpiler 使用一些默认的 EquivalenceLibrary,因为它同时为模拟器和实际硬件运行。我怎么能得到这样的默认 EquivalenceLibrary?

4

1 回答 1

1

最简单的方法是利用 qiskit (at qiskit.circuit.equivalence_library.SessionEquivalenceLibrary) 中包含的会话等价库,这是一个包含所有标准库门的预构建等价库。您可以将其与以下内容一起使用:

from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
from qiskit.transpiler.passes import BasisTranslator
from qiskit.circuit import QuantumCircuit
from qiskit.converters import circuit_to_dag, dag_to_circuit

basis_gates = ['u2', 'snapshot', 'barrier', 'cx', 'u3', 'reset', 'u1', 'measure', 'delay']
bt_pass = BasisTranslator(sel, basis_gates)

circuit = QuantumCircuit(3)
circuit.ccx(0, 1, 2)


dag_out = bt_pass.run(circuit_to_dag(circuit))
circuit_out = dag_to_circuit(dag_out)

(作为 qiskit-terra >=0.17.0 的未来说明,即将发布,您不再需要在此处转换为 dag 并bt_pass(circuit)直接调用)

如果您对如何从头开始构建等效库感兴趣,可以在此处查看会话等效库是如何构建的: https ://github.com/Qiskit/qiskit-terra/blob/0.16.4/qiskit /电路/库/standard_gates/equivalence_library.py

于 2021-03-31T10:46:33.183 回答