StarPreRouting
class qiskit.transpiler.passes.StarPreRouting
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")![]()
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)
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)
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)
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
- dag (DAGCircuit |DAGDependency)
- min_block_size (int)
execute
execute(passmanager_ir, state, callback=None)
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
name
run
run(dag)
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)
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)
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