Skip to main content
IBM Quantum Platform

LitinskiTransformation

class qiskit.transpiler.passes.LitinskiTransformation(*args, **kwargs)

GitHub

ベース: TransformationPass

回路にリチンスキー変換を適用する。

この変換は、クリフォードゲート、単一量子ビットの RZR_Z 回転ゲート、 RXR_X 回転ゲート、 RYR_Y 回転ゲート( PhasePhaseTTTT^\dagger を含む)、パウリ積回転、パウリ積測定、および標準的な ZZ 測定を含む回路に適用されます。 この変換は、単一量子ビット回転ゲート、パウリ積回転、および角度が π/2\pi/2 の倍数であるパウリ積測定を含むクリフォードゲートを、回路の末尾に移動させる。その過程で、 RZR_Z 回転、 RXR_X 回転、および RYR_Y 回転の各ゲートをパウリ積回転に変換し、 ZZ 測定をパウリ積測定に変換する。

で返されるリストにあるすべてのクリフォードゲートをサポートする。 get_clifford_gate_names():

["id", "x", "y", "z", "h", "s", "sdg", "sx", "sxdg", "cx", "cz", "cy", "swap","iswap", "ecr", "dcx"]

さらに、与えられた許容誤差の範囲内で、角度が π/2\pi/2 の整数倍である上記の回転ゲートも、クリフォードゲートとみなされる。

例:

from qiskit import generate_preset_pass_manager
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import PauliProductMeasurement, PauliProductRotationGate
from qiskit.quantum_info import Pauli
from qiskit.transpiler.passes import LitinskiTransformation

litinski = LitinskiTransformation(fix_clifford=False, use_ppr=True)

rz_basis = ["rz", "h", "x", "cx"]
pm = generate_preset_pass_manager(basis_gates=rz_basis)
pm.optimization.append(litinski)

qc = QuantumCircuit(3, 1)
qc.h(0)
qc.rz(1.23, 0)
qc.cx(0, 1)
qc.t(1)
qc.append(PauliProductRotationGate(Pauli("XY"), 0.456), [1, 2])
qc.cx(1, 2)
qc.append(PauliProductMeasurement(Pauli("ZX")), [0, 1], [0])
qc.measure(2, 0)


pbc = pm.run(qc)

参照資料:

[1] リチンスキー。 表面コードのゲーム。 『Quantum』第3巻、128頁(2019年)

パラメーター

  • fix_clifford – もし False (デフォルト以外) の場合、返される回路には ゲート PauliEvolution のみが含まれ、最後のクリフォードゲートは省略されます。 なお、この場合、元の回路と合成された回路の演算子は、一般的に同等ではないことに注意してください。
  • insert_barrier – かつ True の場合 fix_clifford=True、回路と最終的なクリフォード演算子の間にバリアを挿入する。 この引数は、の場合には何の効果もありません fix_clifford=False
  • use_ppr – 指定した場合 True、Pauli回転ゲートを表すために PauliProductRotationGate を使用する。 パフォーマンスを向上させるため、Rustで完全に実装されたパスを使用することを推奨します。 または False の場合 None、 を使用してください PauliEvolutionGate
  • approximation_degree – 許容誤差の計算に使用され、PPRまたは回転ゲートがクリフォードにどれだけ近いかを確認するために用いられる。 これにより、平均ゲート忠実度の閾値が得られる。

属性

is_analysis_pass

パスが分析パスかどうかをチェックする。

パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。

is_transformation_pass

パスが変身パスかどうかをチェックする。

パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。


方法

execute

execute(passmanager_ir, state, callback=None)

GitHub

入力Qiskit IRに対して最適化タスクを実行する。

パラメーター

  • passmanager_ir (DAGCircuit) – 最適化対象のQiskit IR。
  • state (DAGCircuit) – パスマネージャー自身によるワークフローの実行に関連する状態。
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。

戻り値

Qiskit IRとワークフローの状態を最適化。

戻りの型

タプル [ DAGCircuitPassManagerState ]

name

name()

GitHub

パスの名前

戻りの型

str

run

run(dag)

GitHub

. dagに対して LitinskiTransformation パスを実行します。

パラメーター

dag (DAGCircuit) – 入力DAG。

戻り値

出力DAG。

レイズ

TranspilerError – 回路に、そのパスでサポートされていないゲートが含まれている場合。

戻りの型

DAGサーキット

update_status

update_status(state, run_state)

GitHub

ワークフローのステータスを更新する。

パラメーター

  • state (PassManagerState) – 更新するマネージャーの状態を渡す。
  • run_state (RunState) – 現在のタスクの完了状況。

戻り値

パスマネージャーの状態を更新。

戻りの型

PassManagerState

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。