ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

'One or more instructions cannot be converted to a gate. "barrier" is not a gate instruction' エラー

環境

  • qiskit-terra 0.20.1
  • qiskit 0.36.1
  • Python version 3.10.4

本題

以下のコードを実行すると、表題のエラーが発生します。

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.x(0)
qc.barrier()
gate = qc.to_gate()
---------------------------------------------------------------------------
QiskitError                               Traceback (most recent call last)
      4 qc.x(0)
      5 qc.barrier()
----> 6 gate = qc.to_gate()
...(略)
QiskitError: 'One or more instructions cannot be converted to a gate. "barrier" is not a gate instruction'

このエラーは回路にto_gate()で変換することができない命令がある場合に発生します。今回の場合、barrier()のせいで発生しています。

barrier()は回路の見た目をきれいにするためだけのもので、回路の本質ではないので削除してOKです。

以下のコードで削除することができます。

from qiskit.transpiler.passes import RemoveBarriers

new_qc = RemoveBarriers()(qc)

これでエラーが発生しなくなります。

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.x(0)
qc.barrier()

# 境界を削除してゲート化
new_qc = RemoveBarriers()(qc)
gate = new_qc.to_gate()

参考URL