Skip to main content
IBM Quantum Platform

ternary_tree

ternary_tree(operator, encoding, num_qubits)

三項木符号化の下 SparseObservable で、演算子を a に対応付ける。

これは、三項木マッパーへの型非依存のエントリポイントであり、...を反映したものです jordan_wigner()。 これは、コンクリート型 に対して、ドキュメント library の「 三項木エンコーディング」 の項に記載されている、対応する直接実装 operator にディスパッチします。 それがないオペレータ型は、. を発生させます TypeError。

パラメーター

  • operator (OperatorTrait) – マッピングする演算子。
  • encoding (TernaryTreeEncoding) – マッピングの対象となるコンパイル済みエンコーディング。 で一度コンパイルし TernaryTreeEncoding 、同じツリーを通じてマッピングされたすべての演算子で再利用します。
  • num_qubits (int) – 結果として得られる量子ビット演算子の量子ビット数。 少なくともそのエンコーディングのモード数以上でなければなりません。それより大きい値の場合は、同一値でパディングされます。

戻り値

マッピングされた量子ビット演算子は、と同様の簡略化およびグループ化に関する注意点に従う fermion_ternary_tree()。

昇給

  • TypeError – operator が、三項木の実装が存在しない型である場合。
  • ValueError – が、そのエンコーディングが対応していないモードに対して操作 operator を行おうとした場合、または がエンコーディングのモード数よりも小さい場合に発生 num_qubits します。
  • OverflowError – が負の数 num_qubits であるか、32 ビットに収まらない場合。

戻りの型

SparseObservable

>>> from qiskit_fermions.mappers import TernaryTree, TernaryTreeEncoding
>>> from qiskit_fermions.mappers.library import ternary_tree
>>> from qiskit_fermions.operators import FermionOperator
>>> fop = FermionOperator.from_dict({((True, 0), (False, 0)): 0.1})
>>> enc = TernaryTreeEncoding(TernaryTree.breadth_first(2, 3))
>>> ternary_tree(fop, enc, 2).simplify()
<SparseObservable with 2 terms on 2 qubits: (0.05+0j)() + (-0.05+0j)(Z_1 Z_0)>

沿った連鎖は を再現 Z する jordan_wigner()。これこそが、この木が の代替ではなく、その一般化である理由である:

>>> from qiskit_fermions.mappers.library import jordan_wigner
>>> chain = TernaryTreeEncoding(TernaryTree.chain(2, "Z"))
>>> bool((ternary_tree(fop, chain, 2) - jordan_wigner(fop, 2)).simplify().num_terms == 0)
True

すべての演算子型には直接的な実装が存在するため、それらに対するディスパッチは全的である。 それ以外(フェルミオン演算子ではないオブジェクト)の場合は、 TypeError: が発生します

>>> from qiskit.quantum_info import SparseObservable
>>> ternary_tree(SparseObservable.identity(2), enc, 2)
Traceback (most recent call last):
...
TypeError: ternary_tree does not support operator type 'SparseObservable'.
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。