【问题标题】:How to get a default EquivalenceLibrary?如何获取默认的 EquivalenceLibrary?
【发布时间】:2021-03-31 03:00:57
【问题描述】:

我想使用 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?

【问题讨论】:

    标签: qiskit


    【解决方案1】:

    最简单的方法是利用 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

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 2012-03-16
      • 2013-04-28
      • 2017-04-13
      • 2020-08-29
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多