DAG-Abhängigkeit
class qiskit.dagcircuit.DAGDependency
Basen: object
Objekt zur Darstellung eines Quantenschaltkreises als gerichteter azyklischer Graph (DAG) über Operationsabhängigkeiten (d.h. fehlende Kommutierung).
Die Knoten im Graphen sind Operationen, die durch Quantengatter dargestellt werden. Die Kanten entsprechen einer Nicht-Kommutation zwischen zwei Operationen (d. h. einer Abhängigkeit). Eine gerichtete Kante von Knoten A zu Knoten B bedeutet, dass die Operation A nicht mit der Operation B zusammenfällt. Die Methoden des Objekts ermöglichen die Konstruktion von Schaltkreisen.
Die Knoten im Diagramm haben die folgenden Attribute: 'Vorgang', 'Nachfolger', 'Vorgänger'.
Beispiel:
Glockenschaltung ohne Messung.
┌───┐
qr_0: ┤ H ├──■──
└───┘┌─┴─┐
qr_1: ─────┤ X ├
└───┘Die Abhängigkeits-DAG für die obige Schaltung wird durch zwei Knoten dargestellt. Das erste entspricht dem Hadamard-Gatter, das zweite dem CNOT-Gatter, da die Gatter nicht kommutieren, gibt es eine Kante zwischen den beiden Knoten.
Referenz:
[1] Iten, R., Moyard, R., Metger, T., Sutter, D. und Woerner, S., 2020. Exakter und praktischer Musterabgleich für die Optimierung von Quantenschaltungen. arXiv:1909.05270
Erstellen Sie eine leere DAGDependency.
Attribute
global_phase
Gibt die globale Phase des Stromkreises zurück.
Methoden
add_clbits
add_creg
add_op_node
add_op_node(operation, qargs, cargs)
Fügen Sie dem Graphen eine DAGDepNode hinzu und aktualisieren Sie die Kanten.
Parameter
- operation (qiskit.circuit.Operation) – betrieb als Quantengatter
- qargs (list[Qubit]) – Liste der Qubits, auf die die Operation wirkt
- cargs (list[Clbit]) – Liste der klassischen Drähte, an denen man etwas befestigen kann
add_qreg
add_qubits
copy
copy()
Funktion zum Kopieren eines DAGDependency-Objekts. :returns: eine Kopie eines DAGDependency-Objekts. :rtype: DAGDependency
depth
direct_predecessors
direct_predecessors(node_id)
Direkte Vorgänger-ID eines bestimmten Knotens als sortierte Liste.
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
direkte Vorgänger id als sortierte Liste
Rückgabetyp
Liste
direct_successors
direct_successors(node_id)
Direkte Nachfolger id eines bestimmten Knotens als sortierte Liste.
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
direkte Nachfolger id als sortierte Liste
Rückgabetyp
Liste
draw
draw(scale=0.7, filename=None, style='color')
Zeichnet den DAGDependency-Graphen.
Für diese Funktion ist pydot erforderlich, wofür wiederum Graphviz installiert sein muss.
Diese Funktion ruft das systemeigene Graphviz-Tool für eine Datei auf, die vom Benutzer steuerbare Zeichenfolgen enthält (wie beispielsweise Gate-Bezeichnungen oder Registernamen). Es wird empfohlen, diese Funktion nur bei vertrauenswürdigen Eingaben aufzurufen.
Parameter
- scale (float) – skalierungsfaktor
- filename (str) – Dateipfad, unter dem das Bild gespeichert werden soll (Format wird aus dem Namen abgeleitet)
- style (str) – 'plain': B&W-Diagramm 'color' (Standard): farbige Eingabe/Ausgabe/Operationsknoten
Rückgabe
wenn im Jupyter-Notebook und nicht in einer Datei gespeichert, sonst Keine.
Rückgabetyp
IPython.display.Image
get_all_edges
get_edges
get_edges(src_id, dest_id)
Aufzählung der Kanten zwischen zwei Knoten durch die Methode get_all_edge_data.
Parameter
Rückgabe
die allen Kanten zwischen den beiden Knotenpunkten entsprechen.
Rückgabetyp
Liste
get_in_edges
get_in_edges(node_id)
Aufzählung aller eingehenden Kanten für einen bestimmten Knoten.
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
entsprechende eingehende Flankendaten.
Rückgabetyp
Liste
get_node
get_node(node_id)
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
die dem Etikett entspricht.
Rückgabetyp
Knoten
get_nodes
get_out_edges
get_out_edges(node_id)
Aufzählung aller ausgehenden Kanten für einen bestimmten Knoten.
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
die entsprechenden Daten der ausgehenden Kanten.
Rückgabetyp
Liste
predecessors
predecessors(node_id)
Vorgänger-ID eines bestimmten Knotens als sortierte Liste.
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
alle Vorgänger-IDs als sortierte Liste
Rückgabetyp
Liste
replace_block_with_op
replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)
Ersetzen Sie einen Block von Knoten durch einen einzelnen Knoten.
Dies wird verwendet, um einen Block von DAGDepNodes in einem einzigen Vorgang zusammenzufassen. Ein typisches Beispiel ist ein Block von CX- und SWAP-Gattern, die in einem LinearFunction zusammengefasst sind. Diese Funktion ist eine Anpassung einer ähnlichen Funktion von DAGCircuit.
Es ist wichtig, dass bei einer solchen Konsolidierung die in DAGDependency enthaltenen Kommutativitätsannahmen erhalten bleiben. Nehmen wir zum Beispiel an, dass jeder Knoten in einem Block [A, B, C, D] mit einem anderen Knoten E pendelt. F sei der konsolidierte Knoten, F = A o B o C o D. Dann ist F auch mit E kommutiert, und somit ergibt das Ergebnis der Ersetzung von [A, B, C, D] durch F eine gültige DAGDependency. Das heißt, jede Deduktion über die Kommutativität in der konsolidierten DAGDependency ist korrekt. Nehmen wir andererseits an, dass mindestens einer der Knoten, z. B. B, nicht mit E kommutiert. Dann würde die konsolidierte DAGDependency implizieren, dass F nicht mit E kommutiert. Auch wenn F und E tatsächlich pendeln, kann man davon ausgehen, dass sie es nicht tun. Das heißt, die derzeitige Umsetzung der Konsolidierung kann zu suboptimalen, aber nicht zu falschen Ergebnissen führen.
Parameter
- node_block (List[DAGDepNode]) – Eine Liste von dag-Knoten, die den zu ersetzenden Knotenblock darstellt
- op (qiskit.circuit.Operation) – Die Operation zum Ersetzen des Blocks durch
- wire_pos_map (Dict[Qubit, int]) – Das Wörterbuch, das den Parameter „qarg“ der Position zuordnet. Dies ist erforderlich, um die Qarg-Reihenfolge über mehrere Gatter hinweg im kombinierten Einzeloperationsknoten zu rekonstruieren.
- cycle_check (bool) – Wenn diese Methode auf True gesetzt wird, prüft sie, ob das Ersetzen des angegebenen
node_blockdurch einen einzelnen Knoten einen Zyklus einführen würde (was dieDAGDependencyungültig machen würde) und gibt eineDAGDependencyErroraus, wenn ein Zyklus eingeführt würde. Diese Prüfung ist mit einem Zeitabzug verbunden. Wenn Sie garantieren können, dass Ihre Eingabenode_blockist ein zusammenhängender Block und wird nicht einen Zyklus einführen, wenn es zu einem einzelnen Knoten kontrahiert wird, kann dies aufFalsegesetzt werden, um die Laufzeit Leistung dieser Methode zu verbessern.
Erhöht
DAGDependencyError – wenn cycle_check auf True gesetzt ist und das Ersetzen des angegebenen Blocks zu einem Zyklus führt oder wenn node_block leer ist.
size
successors
successors(node_id)
Nachfolger-ID eines bestimmten Knotens als sortierte Liste.
Parameter
node_id (int) – bezeichnung des betrachteten Knotens.
Rückgabe
alle Nachfolger id als sortierte Liste
Rückgabetyp
Liste