Skip to main content
IBM Quantum Platform

DAG-Abhängigkeit

class qiskit.dagcircuit.DAGDependency

GitHub

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_clbits(clbits)

GitHub

Fügen Sie einzelne Clit-Drähte hinzu.

add_creg

add_creg(creg)

GitHub

Hinzufügen von Clbits in einem klassischen Register.

add_op_node

add_op_node(operation, qargs, cargs)

GitHub

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_qreg(qreg)

GitHub

Hinzufügen von Qubits in einem Quantenregister.

add_qubits

add_qubits(qubits)

GitHub

Einzelne Qubit-Drähte hinzufügen.

copy

copy()

GitHub

Funktion zum Kopieren eines DAGDependency-Objekts. :returns: eine Kopie eines DAGDependency-Objekts. :rtype: DAGDependency

depth

depth()

GitHub

Rückgabe der Schaltkreistiefe. :returns: die Schaltkreistiefe :rtype: int

direct_predecessors

direct_predecessors(node_id)

GitHub

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)

GitHub

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')

GitHub

Zeichnet den DAGDependency-Graphen.

Für diese Funktion ist pydot erforderlich, wofür wiederum Graphviz installiert sein muss.

Warnung

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_all_edges()

GitHub

Aufzählung aller Kanten.

Rückgabe

die dem Etikett entspricht.

Rückgabetyp

Liste

get_edges

get_edges(src_id, dest_id)

GitHub

Aufzählung der Kanten zwischen zwei Knoten durch die Methode get_all_edge_data.

Parameter

  • src_id (int) – bezeichnung des ersten Knotens.
  • dest_id (int) – bezeichnung des zweiten Knotens.

Rückgabe

die allen Kanten zwischen den beiden Knotenpunkten entsprechen.

Rückgabetyp

Liste

get_in_edges

get_in_edges(node_id)

GitHub

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)

GitHub

Parameter

node_id (int) – bezeichnung des betrachteten Knotens.

Rückgabe

die dem Etikett entspricht.

Rückgabetyp

Knoten

get_nodes

get_nodes()

GitHub

Rückgabe

iterator über alle Knoten.

Rückgabetyp

generator (dict )

get_out_edges

get_out_edges(node_id)

GitHub

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)

GitHub

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)

GitHub

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_block durch einen einzelnen Knoten einen Zyklus einführen würde (was die DAGDependency ungültig machen würde) und gibt eine DAGDependencyError aus, wenn ein Zyklus eingeführt würde. Diese Prüfung ist mit einem Zeitabzug verbunden. Wenn Sie garantieren können, dass Ihre Eingabe node_block ist ein zusammenhängender Block und wird nicht einen Zyklus einführen, wenn es zu einem einzelnen Knoten kontrahiert wird, kann dies auf False gesetzt 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

size()

GitHub

Gibt die Anzahl der Gatter in der Schaltung zurück

successors

successors(node_id)

GitHub

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

to_retworkx

to_retworkx()

GitHub

Gibt die DAGDependency im retworkx-Format zurück.

topological_nodes

topological_nodes()

GitHub

Ertragsknoten in topologischer Reihenfolge.

Rückgabe

knoten in topologischer Reihenfolge.

Rückgabetyp

generator (DAGNode )

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