Skip to main content
IBM Quantum Platform

SolovayKitaev

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

GitHub

Basen: TransformationPass

Näherungsweise Zerlegung der 1q Gatter in eine diskrete Basis mit Hilfe des Solovay-Kitaev-Algorithmus.

Das Solovay-Kitaev-Theorem [1] besagt, dass jedes Ein-Qubit-Gatter mit beliebiger Genauigkeit durch eine Menge fester Ein-Qubit-Gatter approximiert werden kann, wenn die Menge eine dichte Teilmenge in SU(2)SU(2) erzeugt. Dies ist ein wichtiges Ergebnis, da es bedeutet, dass jedes Ein-Qubit-Gatter durch eine diskrete, universelle Gattermenge ausgedrückt werden kann, von der wir wissen, wie sie fehlertolerant implementiert werden kann. Mit dem Solovay-Kitaev-Algorithmus können wir also jede nicht fehlertolerante Schaltung nehmen und sie fehlertolerant umformulieren.

Diese Implementierung des Solovay-Kitaev-Algorithmus basiert auf [2].

Zum Beispiel die folgende Schaltung

     ┌─────────┐
q_0: ┤ RX(0.8) ├
     └─────────┘

kann zerlegt werden in

global phase: 7π/8
     ┌───┐┌───┐┌───┐
q_0: ┤ H ├┤ T ├┤ H ├
     └───┘└───┘└───┘

mit einer L2-error von etwa 0.01.

Beispiele

Standardmäßig ist das Basisgatter ["t", "tdg", "h"] eingestellt:

import numpy as np
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes.synthesis import SolovayKitaev
from qiskit.quantum_info import Operator

circuit = QuantumCircuit(1)
circuit.rx(0.8, 0)

print("Original circuit:")
print(circuit.draw())

skd = SolovayKitaev(recursion_degree=2)

discretized = skd(circuit)

print("Discretized circuit:")
print(discretized.draw())

print("Error:", np.linalg.norm(Operator(circuit).data - Operator(discretized).data))
Original circuit:
   ┌─────────┐
q: ┤ Rx(0.8) ├
   └─────────┘
Discretized circuit:
global phase: 7π/8
   ┌───┐┌───┐┌───┐
q: ┤ H ├┤ T ├┤ H ├
   └───┘└───┘└───┘
Error: 2.828408279166474

Einzelne Basistoreinstellungen können im Initialisierer angegeben werden.

from qiskit.transpiler.passes import SolovayKitaev

basis = ["s", "sdg", "t", "tdg", "z", "h"]

skd = SolovayKitaev(recursion_degree=2, basis_gates=basis)

Um grundlegende Annäherungen zwischen verschiedenen Instanzen zu generieren und zu speichern, können die SolovayKitaevDecomposition und ihre save_basic_approximations() Methode verwendet werden.

from qiskit.transpiler.passes import SolovayKitaev
from qiskit.synthesis import SolovayKitaevDecomposition

# generate basic approximations
basis = ["s", "sdg", "t", "tdg", "z", "h"]
decomp = SolovayKitaevDecomposition(basis_gates=basis, depth=5)

# store them in a local file
fname = "sk_approx.bin"
decomp.save_basic_approximations(fname)

# load them for running Solovay-Kitaev
skd = SolovayKitaev(recursion_degree=2, basic_approximations=fname)

Quellenangaben:

[1] Kitaev, A Yu (1997). Quantenberechnungen: Algorithmen und Fehlerkorrektur. Russische mathematische Übersichten. 52 (6): 1191–1249. Online.

[2] Dawson, Christopher M.; Nielsen, Michael A. (2005) Der Solovay-Kitaev-Algorithmus. arXiv:quant-ph/0505030.

Parameter

  • recursion_degree - Die Rekursionstiefe für den Solovay-Kitaev-Algorithmus. Eine größere Rekursionstiefe erhöht die Genauigkeit und die Länge der Zersetzung.
  • basic_approximations - Die grundlegenden Approximationen für die Suche nach der besten diskreten Zerlegung an der Wurzel der Rekursion. Wenn es sich um eine Zeichenkette handelt, gibt sie die Datei an, aus der die Näherungswerte geladen werden sollen. Ist es ein Wörterbuch, enthält es {label: SO(3)-matrix} Paare. Bei None wird eine Vorgabe auf der Grundlage der Gatter HH, TT und T†T^\dagger bis zur Tiefe 16 erzeugt. Beachten Sie, dass basis_gates und depth nicht gesetzt werden können, wenn basic_approximations übergeben wird.
  • basis_gates - Die Basisgatter, die zum Aufbau des Netzes der Basisapproximationen verwendet werden. Die Standardeinstellung ist ["h", "t", "tdg"]. Dieses Argument kann nicht gesetzt werden, wenn basic_approximations angegeben wird.
  • depth - Die maximale Gattertiefe, die bei den Grundannäherungen verwendet wird. Dieses Argument kann nicht gesetzt werden, wenn basic_approximations angegeben wird.

Attribute

is_analysis_pass

Prüfen Sie, ob der Pass ein Analysepass ist.

Wenn der Pass ein AnalysisPass, ist, bedeutet dies, dass der Pass die DAG analysieren und die Ergebnisse dieser Analyse in den Eigenschaftssatz schreiben kann. Änderungen an der DAG sind bei dieser Art von Pass nicht zulässig.

is_transformation_pass

Prüfen Sie, ob der Pass ein Transformationspass ist.

Wenn es sich bei dem Pass um TransformationPass, handelt, bedeutet dies, dass der Pass die DAG manipulieren kann, aber den Eigenschaftssatz nicht ändern kann (aber er kann gelesen werden).


Methoden

execute

execute(passmanager_ir, state, callback=None)

GitHub

Ausführen der Optimierungsaufgabe für die Eingabe Qiskit IR.

Parameter

  • passmanager_ir (DAGCircuit) – Qiskit IR zur Optimierung.
  • state (DAGCircuit) – Zustand, der mit der Ausführung des Workflows durch den Pass-Manager selbst verbunden ist.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – Eine Callback-Funktion, die bei jeder Ausführung einer Optimierungsaufgabe aufgerufen wird.

Rückgabe

Optimierte Qiskit IR und Stand des Workflows.

Rückgabetyp

Tupel [ DAGCircuit, PassManagerState ]

name

name()

GitHub

Name des Passes.

Rückgabetyp

str

run

run(dag)

GitHub

Führen Sie den SolovayKitaev Pass auf dag.

Parameter

dag (DAGCircuit) – Die Eingabe dag.

Rückgabe

Output dag mit 1q Gattern, die in der diskreten Zielbasis synthetisiert wurden.

Erhöht

TranspilerError – wenn ein Tor nicht über _matrix verfügt

Rückgabetyp

DAGCircuit

update_status

update_status(state, run_state)

GitHub

Aktualisieren Sie den Workflow-Status.

Parameter

  • state (PassManagerState) – Übergeben Sie den Status des Managers zur Aktualisierung.
  • run_state (RunState) – Erledigungsstatus der aktuellen Aufgabe.

Rückgabe

Aktualisierter Status des Passmanagers.

Rückgabetyp

PassManagerState

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.