BitFlipOracleGate
class qiskit.circuit.library.BitFlipOracleGate(expression, var_order=None, label=None)
ベース: Gate
ビット反転オラクルの実装
Bit-flip Oracle Gate オブジェクトは、任意の入力論理式に対して回路を構築します。 論理式は、論理演算子 & (論理 AND)、 | (論理 OR)、 ~ (論理 NOT)、 ^ (論理 XOR)で構成されます。 およびリテラル(変数)のシンボル。 例えば、'a & b'、( v0 | ~v1 ) & ( ~v2 & v3 ) は、いずれもブーリアン論理式の有効な文字列表現である。
ブール関数f(x)のビット反転オラクルは、次のような量子演算を行う:
便宜上、このオラクルは、任意の論理式の解析に加えて、 DIMACS CNF形式の入力文字列もサポートしている。これは、SATisfiability(SAT)問題インスタンスを Conjunctive Normal Form(CNF )で指定するための標準形式である。 qiskit.circuit.library.bit_flip_oracle.BitFlipOracleGate.from_dimacs_file() を参照。
16変数以降は、デフォルトのシンセサイザーを使用した場合、パフォーマンス上の問題が発生する可能性があります。
パラメーター
- expression (str | BooleanExpression) – Python ライクなブーリアン式文字列または オブジェクト。 BooleanExpression
- var_order (list[str] | None) – 変数が作成される順序を指定したリスト。 (デフォルト:外観順)
- label (str | None) – 視覚化画面に表示するゲートのラベル。 デフォルトでは、ラベルにはブール式の文字列表現が表示されるよう設定されています(必要に応じて切り詰められます)
属性
base_class
この命令の基本クラスを取得します。 これは self の継承ツリーにあることが保証されている。
命令の "基本クラス "とは、そのオブジェクトが回路アプリケーションのために完全 に互換性があると考えるべき、継承ツリーで最も低いクラスのことである。 これは通常、サブクラスが純粋にベースクラスよりもプログラマーの利便性を向上させるために定義され、ベースクラスが動作の観点から「真の」クラスであることを意味する。 特に、上書きしないでください base_class 代替測定戦略や、特定のパラメータセットを持つパラメータ化されたゲートのバージョンなど、ハードウェアによって異なる方法で実装される命令のカスタムバージョンを定義する場合、 Target 完全にパラメータ化されたゲートから。
これは、標準ライブラリ命令のシングルトン・インスタンスの場合を除き、 type(obj) と正確に等価であることが多い。 これらのシングルトン・インスタンスはベース・クラスの特別なサブクラスであり、このプロパティはそのベースを返す。 例:
>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True一般的に、命令の正確なクラスは当てにすべきではない。与えられた回路内では、ほとんどの状況で Instruction.name 。
decompositions
SessionEquivalenceLibrary から命令の分解を取得する。
definition
他の基本ゲートの観点から定義を返す。
label
返品指示ラベル
mutable
このインスタンスはミュータブルなユニークインスタンスかどうか。
この属性が False である場合、ゲートのインスタンスは共有シングルトンであり、ミュータブルではありません。
name
名前を返す。
num_clbits
clbits の数を返す。
num_qubits
量子ビットの数を返す。
params
この Instruction のパラメーターは以下の通りである。 理想はゲートアングルだ。
方法
add_decomposition
broadcast_arguments
broadcast_arguments(qargs, cargs)
引数とその関係の検証と処理。
例えば、 cx([q[0],q[1]], q[2]) は cx(q[0], q[2]); cx(q[1], q[2]) を意味する。 この方法は、引数を正しいグループ分けで返す。 与えられた例では
in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
[q[1], q[2]], []一般的な放送ルールは以下の通り:
len(qargs) == 1:
[q[0], q[1]] -> [q[0]],[q[1]]len(qargs) == 2:
[[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]] [[q[0]], [r[0], r[1]]] -> [q[0], r[0]], [q[0], r[1]] [[q[0], q[1]], [r[0]]] -> [q[0], r[0]], [q[1], r[0]]len(qargs) >= 3:
[q[0], q[1]], [r[0], r[1]], ...] -> [q[0], r[0], ...], [q[1], r[1], ...]
パラメーター
戻り値
単一の引数を持つタプル。
レイズ
CircuitError - 入力が有効でない場合。 例えば、引数の数がゲートの予想と一致しない。
戻りの型
control
control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)
それ自身のコントロールされたバージョンを返す。
制御ゲートは、 Falseが annotated の場合に ControlledGate として実装され、が annotated の場合に AnnotatedOperation として実装される True。
qiskit.circuit.gate.Gate.control()’の引数は、Qiskit 2.3annotated 以降で非推奨となっています。 Qiskit では削除されます。 3.0 Gate.control メソッドは、annotated=Noneを受け付けなくなりました。 新しいデフォルトはannotated=Trueであり、これは制御ゲートを AnnotatedOperation として表現します(専用の制御ゲートクラスが既に存在しない場合)。 以前の動作を維持するには、明示的にannotated=Falseを設定できます。 ただし、annotated=Trueの使用が推奨されます。これにより制御回路の構築がトランスパイラに委ねられ、さらに追加の制御ゲート最適化が可能となるためです(通常、より高品質な回路につながります)。
パラメーター
- num_ctrl_qubits (int) – 追加するコントロールの数。 デフォルトは
1です。 - label (str | None) – オプションのゲートラベル。 デフォルトは
Noneです。 制御ゲートがアノテーション付き操作として実装されている場合は無視される。 - ctrl_state (int |str | None) – ゲートの制御状態。整数またはビット列(例:
"110")として指定される。 デフォルトではNone、全ビットが1の状態になります2**num_ctrl_qubits - 1。 - annotated (bool | None) – 制御ゲートを制御ゲートとして実装するか、注釈付き操作として実装するかを示します。 もし
None、としてFalse扱われるなら。
戻り値
このゲートの制御版。
レイズ
QiskitError – 無効 num_ctrl_qubits または ctrl_state。
copy
copy(name=None)
インストラクションのコピー
パラメーター
name (str) – コピーされた回路に与えられる名前。 None の場合、名前はそのまま。
戻り値
現在の命令のコピーで、名前が与えられていればそれを更新する
戻りの型
from_dimacs_file
classmethod from_dimacs_file(filename)
DIMACS形式の文字列から BitFlipOracleGate。
DIMACS CNF形式のファイルから BitFlipOracleGate。これは、SATisfiability (SAT)問題インスタンスを Conjunctive Normal Form (CNF )で指定するための標準的な形式であり、1つ以上の節の接続詞である。
以下は、DIMACS形式で表現されたCNFの例である:
c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
p cnf 3 5
-1 -2 -3 0
1 -2 3 0
1 2 -3 0
1 -2 -3 0
-1 2 3 0c文字に続く最初の行はコメントである。 2行目は、CNFが3つのブール変数(ここでは と呼ぶ)に対するもので、5つの節を含んでいることを指定している。 その後に列挙された5つの節は、論理AND演算子( )によって暗黙のうちに結合される。一方、各節の変数はその添字で表され、論理OR演算子( )によって暗黙のうちに分離される。ブール変数インデックスの前にある 記号は、論理 NOT 演算子 に対応する。文字 0(ゼロ)は各節の終わりを示す。 基本的に、上記のコードは以下のCNFに対応する:
.
パラメーター
filename (str) – DIMACS形式のファイル。
戻り値
ビット反転オラクルを持つ量子ゲート。
戻りの型
inverse
inverse(annotated=False)
この指示を反転させる。
注釈付きが偽の場合、逆命令は、再帰的に反転された定義を持つ新しい命令として実装される。
アノテーションが True の場合、逆命令は次のように実装されます。 AnnotatedOperationとして実装され、"inverse modifier "でアノテーションされた命令に対応します。
インストラクションを継承する特殊な命令は、それ自身の逆数を実装できる(例:TとTdg、バリアなど) 特に、引数 annotated をどのように扱うかを選択することができる。これには、無視することや、逆ゲートが標準ゲートとして定義されている場合は常に具象ゲートクラスを返すことなどが含まれる。
パラメーター
annotated (bool) – として返される。 AnnotatedOperation.
戻り値
逆の操作。
レイズ
CircuitError - 命令が複合命令でなく、その逆数が実装されていない場合。
is_parameterized
power
power(exponent, annotated=False)
このゲートを exponent のパワーに引き上げる。
ユニタリーゲート(ref. UnitaryGate) または注釈付き操作(ref. AnnotatedOperation). のような複数の標準ゲートの場合、ゲートのべき乗は、直接返される別の標準ゲートで表すことができる。 RXGateゲートのパワーが、直接返される別の標準ゲートで表現できる場合。
パラメーター
- exponent (float) – に引き上げる力がある
- annotated (bool) – は、パワーゲートが注釈付き操作として実装できるかどうかを示す。 のような複数の標準ゲートの場合、この引数は無視される。
RXGateゲートのべき乗が別の標準ゲートで表現できる場合、この引数は無視される。
戻り値
を実施するオペレーション。 gate^exponent
レイズ
CircuitError - ゲートがユニタリーでない場合
repeat
reverse_ops
reverse_ops()
複合命令の場合は、サブ命令の順序を逆にする。
これは、すべてのサブ命令を再帰的に反転させることによって行われる。 ゲートを反転させることはない。
戻り値
を持つ新しい命令である。
サブ・インストラクションが逆。
戻りの型
soft_compare
soft_compare(other)
ゲート間のソフトな比較。 それらの名前、量子ビット数、古典的なビット番号は一致していなければならない。 パラメータの数は一致しなければならない。 各パラメーターが比較される。 ParameterExpression、それは考慮されない。
パラメーター
other (instruction) – その他の指導
戻り値
はパラメータ式まで自己と他者が等しい。
戻りの型
to_matrix
to_matrix()
ゲートユニタリー行列の Numpy.array を返します。
戻り値
Gate サブクラスに行列定義がある場合。
戻りの型
np.ndarray
レイズ
CircuitError - Gateのサブクラスがこのメソッドを実装していない場合、このベースクラスのメソッドが呼び出されたときに例外が発生します。
to_mutable
to_mutable()
このゲートの変更可能なコピーを返す。
このメソッドは、このゲート・インスタンスの新しい変更可能なコピーを返す。 シングルトンインスタンスが使用されている場合、これは新しいユニークなインスタンスとなり、変異させることができる。 インスタンスがすでにミュータブルであれば、そのインスタンスのディープコピーとなる。