Skip to main content
IBM Quantum Platform

StarPreRouting

class qiskit.transpiler.passes.StarPreRouting

GitHub

Basen: TransformationPass

Sternförmiges bis lineares Pre-Routing durchführen

Dieser Durchgang ist ein logischer Optimierungsdurchgang, der jede beliebige, ausschließlich aus 2q Gattern bestehende, sternförmige Teilschaltung in ein lineares Konnektivitätsäquivalent mit Vertauschungen umschreibt.

Zum Beispiel:

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import StarPreRouting

qc = QuantumCircuit(10)
qc.h(0)
qc.cx(0, range(1, 5))
qc.h(9)
qc.cx(9, range(8, 4, -1))
qc.measure_all()
StarPreRouting()(qc).draw("mpl")
Schaltplan, der durch den vorherigen Code ausgegeben wurde.

Dieser Durchgang wurde durch einen ähnlichen Durchgang inspiriert, der in Abschnitt IV von: C. Campbell et al, "Superstaq: Deep Optimization of Quantum Programs", 2023 IEEE International Conference on Quantum Computing and Engineering (QCE), Bellevue, WA, USA, 2023, pp. 1020-1032, doi: 10.1109/QCE57702.2023.00116.


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

collect_all_matching_blocks

collect_all_matching_blocks(dag, min_block_size=2)

GitHub

Sammelt alle Blöcke, die einer bestimmten Filterfunktion filter_fn entsprechen. Dabei wird iterativ der größte Block gefunden, der nicht mit filter_fn übereinstimmt, dann der größte Block, der mit filter_fn übereinstimmt, und so weiter, bis keine nicht erfassten Knoten mehr übrig sind. Intuitiv hilft das Auffinden größerer Blöcke von nicht übereinstimmenden Knoten, um später größere Blöcke von übereinstimmenden Knoten zu finden. Die Option min_block_size gibt die Mindestanzahl von Gattern im Block an, damit der Block gesammelt werden kann.

Standardmäßig werden die Blöcke in der Richtung von den Eingängen zu den Ausgängen der Schaltung gesammelt. Die Option collect_from_back ermöglicht es, diese Richtung zu ändern, d.h. Blöcke von den Ausgängen zu den Eingängen der Schaltung zu sammeln.

Gibt nur die Liste der übereinstimmenden Blöcke zurück.

collect_matching_block

collect_matching_block(dag, filter_fn)

GitHub

Sammelt iterativ den größten Block von Eingabeknoten (d. h. Knoten mit _in_degree gleich 0), die einer bestimmten Filterfunktion entsprechen. Beispiele hierfür sind das Sammeln von Blöcken von Swap-Gattern, Blöcken von linearen Gattern (CXs und SWAPs), Blöcken von Clifford-Gattern, Blöcken von Ein-Qubit-Gattern, Blöcken von Zwei-Qubit-Gattern, usw. Hier bedeutet "iterativ", dass, sobald ein Knoten gesammelt wird, die _in_degree jedes seiner unmittelbaren Nachfolger um 1 verringert wird, so dass mehr Knoten eingegeben werden können und für das Sammeln im aktuellen Block in Frage kommen. Gibt den Block der gesammelten Knoten zurück.

determine_star_blocks_processing

determine_star_blocks_processing(dag, min_block_size)

GitHub

Gibt Sternblöcke in dag und die Verarbeitungsreihenfolge von Knoten innerhalb dieser Sternblöcke zurück :param dag: ein dag, auf dem Sternblöcke bestimmt werden sollen. :type dag: DAGCircuit oder DAGDependency :param min_block_size: Mindestanzahl von Zwei-Qubit-Gattern in einem Sternblock. :type min_block_size: int

Rückgabe

eine Liste von Sternblöcken im gegebenen dag Union[ [ListDAGOpNode], [ListDAGDepNode] ]: eine Liste von Operationen, die die Verarbeitungsreihenfolge angeben

Rückgabetyp

[ListStarBlock]

Parameter

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 einen Durchlauf auf dem DAGCircuit durch. Dies wird durch den Entwickler des Ausweises umgesetzt.

Parameter

dag - der dag, auf dem der Pass ausgeführt wird.

Erhöht

NotImplementedError - wenn dies für einen Durchgang nicht implementiert wird.

star_preroute

star_preroute(dag, blocks, processing_order)

GitHub

Gibt Sternblöcke in dag und die Verarbeitungsreihenfolge von Knoten innerhalb dieser Sternblöcke zurück :param dag: ein dag, auf dem Sternvorverlegung durchgeführt werden soll. :type dag: DAGCircuit oder DAGDependency :param blocks: eine Liste von Sternblöcken im angegebenen dag. :type blocks: [ListStarBlock] :param processing_order: eine Liste von Operationen, die :type processing_order angeben: Union[ [ListDAGOpNode], [ListDAGDepNode] ] :param processing order:

Rückgabe

ein dag, der den vorgerouteten Schaltkreis angibt qubit_mapping: die endgültige Qubit-Zuordnung nach dem Vorrouting

Rückgabetyp

new_dag

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.