如何获得默认的 EquivalenceLibrary?
How to get a default EquivalenceLibrary?
我想使用 Qiskit 中的 BasisTranslator 将我的电路处理到基门。
BasisTranslator is 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?
最简单的方法是利用 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
我想使用 Qiskit 中的 BasisTranslator 将我的电路处理到基门。
BasisTranslator is 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?
最简单的方法是利用 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