我想使用Qiskit中的BasisTranslator来处理我的电路到基门。
EquivalenceLibrary是BasisTranslator的构造函数参数之一。我尝试创建一个无参数的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?
发布于 2021-03-31 18:46:33
最简单的方法是利用qiskit中包含的会话等价库(位于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/circuit/library/standard_gates/equivalence_library.py
https://stackoverflow.com/questions/66881062
复制相似问题