Skip to main content
IBM Quantum Platform

DAG-Schaltkreis

class qiskit.dagcircuit.DAGCircuit

Basen: object

Quantenschaltkreis als gerichteter azyklischer Graph.

Es gibt 3 Arten von Knoten im Diagramm: Eingänge, Ausgänge und Vorgänge. Die Knoten sind durch gerichtete Kanten verbunden, die den Qubits und Bits entsprechen.


Attribute

clbits

Gibt die aktuelle Folge der registrierten Clbit Instanzen als Liste zurück.

Achtung

Ändern Sie diese Liste nicht selbst. Es macht die Datenstrukturen ungültig DAGCircuit datenstrukturen.

Rückgabe

Die aktuelle Reihenfolge der registrierten Clbits.

Rückgabetyp

list(Clbit)

cregs

Gibt das Dict zurück, das die ClassicalRegisters in der Schaltung enthält

duration

Gibt die Gesamtdauer der Schaltung zurück, die durch einen Transpiler-Durchlauf festgelegt wurde. Seine Einheit wird angegeben durch unit

DEPRECATED seit Qiskit 1.3.0 und wird in Qiskit entfernt werden 3.0.0

global_phase

Gibt die globale Phase des Stromkreises zurück.

input_map

metadata

Metadaten der Schaltung

name

Name der Schaltung. In der Regel entspricht dies dem Namen der QuantumCircuit, aus der die DAG generiert wurde.

node_counter

Gibt die Anzahl der Knoten in der dag zurück.

num_captured_stretches

Anzahl der erfassten Streckenabschnitte, die von der Schaltung verfolgt werden.

num_captured_vars

Anzahl der erfassten klassischen Variablen, die von der Schaltung verfolgt werden.

num_declared_stretches

Anzahl der gemeldeten lokalen Strecken, die von der Schaltung verfolgt werden.

num_declared_vars

Anzahl der deklarierten lokalen klassischen Variablen, die von der Schaltung verfolgt werden.

num_input_vars

Anzahl der klassischen Eingangsvariablen, die von der Schaltung verfolgt werden.

num_stretches

Gesamtzahl der von der Schaltung verfolgten Streckenabschnitte.

num_vars

Gesamtzahl der von der Schaltung verfolgten klassischen Variablen.

output_map

qregs

Gibt das Dict zurück, das die QuantumRegisters in der Schaltung enthält

qubits

Gibt die aktuelle Folge der registrierten Qubit Instanzen als Liste zurück.

Achtung

Ändern Sie diese Liste nicht selbst. Es macht die Datenstrukturen ungültig DAGCircuit datenstrukturen.

Rückgabe

Die aktuelle Reihenfolge der registrierten Qubits.

Rückgabetyp

list(Qubit)

unit

Gibt die Einheit zurück, in der die Dauer angegeben ist.

DEPRECATED seit Qiskit 1.3.0 und wird in Qiskit entfernt werden 3.0.0

wires

Gibt eine Liste der Drähte in der richtigen Reihenfolge zurück.


Methoden

add_captured_stretch

add_captured_stretch(stretch)

Fügen Sie dem Kreislauf eine gefangene Strecke hinzu.

Parameter

stretch - die hinzuzufügende Strecke.

add_captured_var

add_captured_var(var)

Fügen Sie der Schaltung eine erfasste Variable hinzu.

Parameter

var - die Variable, die hinzugefügt werden soll.

add_clbits

add_clbits(clbits)

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

add_creg

add_creg(creg)

Addieren Sie alle Drähte in einem klassischen Register.

add_declared_stretch

add_declared_stretch(stretch)

Fügen Sie dem Kreislauf eine erklärte Strecke hinzu.

Parameter

stretch - die hinzuzufügende Strecke.

add_declared_var

add_declared_var(var)

Fügen Sie der Schaltung eine deklarierte lokale Variable hinzu.

Parameter

var - die Variable, die hinzugefügt werden soll.

add_input_var

add_input_var(var)

Fügen Sie der Schaltung eine Eingangsvariable hinzu.

Parameter

var - die Variable, die hinzugefügt werden soll.

add_qreg

add_qreg(qreg)

Addieren Sie alle Drähte in einem Quantenregister.

add_qubits

add_qubits(qubits)

Einzelne Qubit-Drähte hinzufügen.

ancestors

ancestors(node)

Gibt die Menge der Vorfahren eines Knotens als DAGOpNodes und DAGInNodes.

Die Vorfahren sind die Menge aller Knoten, die den Zielknoten erreichen können. Während die DAGCircuit.predecessors() nur die unmittelbaren Vorgänger enthält, enthalten die Vorgänger rekursiv die Vorgänger eines jeden Vorgängers.

apply_operation_back

apply_operation_back(op, qargs=None, cargs=None, *, check=True)

Legen Sie eine Funktion auf den Ausgang der Schaltung.

Parameter

  • op (qiskit.circuit.Operation) – die mit dem DAG-Knoten verbundene Operation
  • qargs (tuple[Qubit]) – Qubits, auf die die Operation angewendet wird
  • cargs (tuple[Clbit]) – c Bits, auf die die Operation angewendet wird
  • check (bool) – Wenn True (Standard), stellt diese Funktion sicher, dass die DAGCircuit Invarianten der Datenstruktur eingehalten werden (alle qargs sind Qubit\ s, alle befinden sich im DAG usw.). In False diesem Fall muss der Aufrufer diese Invarianten selbst einhalten, allerdings entfallen dadurch die Kosten für mehrere Überprüfungen. Dies ist besonders nützlich, wenn man einen neuen DAG aus einer Quelle mit bekanntermaßen fehlerfreien Knoten aufbaut.

Rückgabe

der Knoten für die Operation, die dem Tag hinzugefügt wurde

Rückgabetyp

DAGOpNode

Erhöht

DAGCircuitError – wenn ein Blattknoten mit mehreren Ausgängen verbunden ist

apply_operation_front

apply_operation_front(op, qargs=None, cargs=None, *, check=True)

Legen Sie eine Operation an den Eingang der Schaltung an.

Parameter

  • op (qiskit.circuit.Operation) – die mit dem DAG-Knoten verbundene Operation
  • qargs (tuple[Qubit]) – Qubits, auf die die Operation angewendet wird
  • cargs (tuple[Clbit]) – c Bits, auf die die Operation angewendet wird
  • check (bool) – Wenn True (Standard), stellt diese Funktion sicher, dass die DAGCircuit Invarianten der Datenstruktur eingehalten werden (alle qargs sind Qubit\ s, alle befinden sich im DAG usw.). In False diesem Fall muss der Aufrufer diese Invarianten selbst einhalten, allerdings entfallen dadurch die Kosten für mehrere Überprüfungen. Dies ist besonders nützlich, wenn man einen neuen DAG aus einer Quelle mit bekanntermaßen fehlerfreien Knoten aufbaut.

Rückgabe

der Knoten für die Operation, die dem Tag hinzugefügt wurde

Rückgabetyp

DAGOpNode

Erhöht

DAGCircuitError – wenn Startknoten mit mehreren ausgehenden Kanten verbunden sind

bfs_successors

bfs_successors(node)

Gibt einen Iterator von Tupeln von (DAGNode, [DAGNodes]) zurück, wobei DAGNode der aktuelle Knoten und [DAGNodes] eine Liste von Nachfolgern in BFS-Reihenfolge ist.

classical_predecessors

classical_predecessors(node)

Gibt einen Iterator der Vorgänger eines Knotens zurück, die durch eine klassische Kante als DAGOpNodes und DAGInNodes verbunden sind.

classical_successors

classical_successors(node)

Gibt einen Iterator der Nachfolger eines Knotens zurück, die durch eine klassische Kante als DAGOpNodes und DAGOutNodes verbunden sind.

collect_1q_runs

collect_1q_runs()

Rückgabe einer Menge von nicht-bedingten Läufen von 1q "op"-Knoten.

collect_2q_runs

collect_2q_runs()

Rückgabe einer Menge von nicht-bedingten Läufen von 2q "op"-Knoten.

collect_runs

collect_runs(namelist)

Gibt eine Menge von nicht bedingten Läufen von "op"-Knoten mit den angegebenen Namen zurück.

Zum Beispiel: "... h [q0]; cx [q0], [q1]; cx [q0], [q1]; h [q1];.." würde das Tupel der cx-Knoten als Element der Menge erzeugen, die von einem Aufruf von collect_runs( ["cx"]) zurückgegeben wird. Wenn die cx-Knoten stattdessen "cx [q0], [q1]; cx [q1], [q0];" lauten würden, würde die Methode immer noch das Paar in einem Tupel zurückgeben. Die Namensliste kann Namen enthalten, die nicht in der Basis des Stromkreises enthalten sind.

Knoten dürfen nur einen Nachfolger haben, damit der Lauf fortgesetzt werden kann.

compose

compose(other, qubits=None, clbits=None, front=False, inplace=True, *, inline_captures=False)

Setzen Sie die Schaltung other mit dem Ausgang dieser Schaltung zusammen.

Eine Teilmenge der Eingangsleitungen von other wird auf eine Teilmenge der Ausgangsleitungen dieser Schaltung abgebildet.

other kann schmaler oder gleich breit wie self sein.

Parameter

  • other (DAGCircuit) – kreislauf zum Komponieren mit sich selbst
  • qubits (list[Qubit|int]) – Qubits des Selbst, auf denen man komponieren kann.
  • clbits (list[Clbit|int]) – Teile von sich selbst, die man einfließen lassen kann.
  • front (bool) – Wenn „True“, wird die Front-Composition durchgeführt (noch nicht implementiert)
  • inplace (bool) – Wenn True, wird das Objekt geändert. Andernfalls geben Sie die zusammengesetzte Schaltung zurück.
  • inline_captures (bool) – Wenn True, werden Variablen, die in der other DAG als "captures" markiert sind, auf bestehende Verwendungen dieser gleichen Variablen in self eingefügt. Wenn False, müssen alle Variablen in other von self verschieden sein, und sie werden zu self hinzugefügt.

Rückgabe

den zusammengesetzten Tag (gibt None zurück, wenn inplace==True).

Rückgabetyp

DAGCircuit

Erhöht

DAGCircuitError – wenn other breiter ist oder doppelte Kantenzuordnungen vorliegen.

control_flow_op_nodes

control_flow_op_nodes()

Ermittelt eine Liste der "op"-Knoten im dag, die Kontrollflussanweisungen enthalten.

Rückgabe

Die Liste der dag-Knoten, die Kontrollfluss-Ops enthalten.

Rückgabetyp

liste [ DAGOpNode ]

copy_empty_like

copy_empty_like(*, vars_mode=Ellipsis)

Gibt eine Kopie von self mit der gleichen Struktur, aber leer, zurück.

Diese Struktur umfasst:

  • name und andere Metadaten
  • globale Phase
  • Dauer
  • alle Qbits und Clbits, einschließlich der Register.

Rückgabe

Eine leere Kopie von sich selbst.

Rückgabetyp

DAGCircuit

count_ops

count_ops(*, recurse=True)

Zählen Sie die Vorkommen von Vorgangsnamen.

Parameter

recurse - wenn True (Standard), dann wird in Kontrollflussoperationen rekursiert. In allen Fällen wird nur gezählt, wie oft die Operation in einem möglichen Block vorkommt; beide Zweige von if-Elen werden gezählt, und for- und while-Schleifenblöcke werden nur einmal gezählt.

Rückgabe

eine Zuordnung von Vorgangsnamen zu der Anzahl, wie oft sie vorkommen.

Rückgabetyp

Mapping [str, int ]

count_ops_longest_path

count_ops_longest_path()

Zählt die Vorkommen von Vorgangsnamen auf dem längsten Pfad.

Gibt ein Wörterbuch mit Zählungen zurück, das auf den Namen der Operation verweist.

depth

depth(*, recurse=False)

Geben Sie die Schaltkreistiefe zurück. Wenn ein Kontrollfluss vorhanden ist, kann diese Zahl nur eine Schätzung sein, da der vollständige Kontrollflusspfad nicht statisch bekannt ist.

Parameter

rekursiv – wenn True, dann rekursiv in die Kontrollflussoperationen. „for“-Schleifen mit Iteratoren bekannter Länge werden so gezählt, als wäre die Schleife manuell entrollt worden ( d. h., als wäre jede Iteration des Schleifenkörpers explizit ausgeschrieben worden). If-else-Blöcke nehmen den längeren der beiden Zweige. While-Schleifen werden so gezählt, als würde der Schleifenkörper nur einmal ausgeführt. Die Standardeinstellung ist False und es wird ausgelöst DAGCircuitError , wenn eine Kontrollstruktur vorhanden ist, um zu vermeiden, dass stillschweigend eine unsinnige Zahl zurückgegeben wird.

Rückgabe

die Schaltungstiefe

Rückgabetyp

int

Erhöht

  • DAGCircuitError – sofern es sich nicht um einen gerichteten azyklischen Graphen handelt
  • DAGCircuitError – wenn in einem rekursiven Aufruf ein unbekannter Kontrollfluss vorliegt oder in einem nicht-rekursiven Aufruf ein beliebiger Kontrollfluss vorliegt.

descendants

descendants(node)

Gibt die Menge der Nachkommen eines Knotens als DAGOpNodes und DAGOutNodes.

Die Nachkommen sind die Menge aller Knoten, die vom Zielknoten aus erreichbar sind. Im Vergleich dazu DAGCircuit.successors() ist ein Iterator über die unmittelbaren Nachfolger, während diese Methode alle Nachfolger der Nachfolger enthält.

draw

draw(scale=0.7, filename=None, style='color')

Zeichnet den dag-Stromkreis.

Für diese Funktion muss Graphviz installiert sein. Graphviz ist kein Python-Paket und kann nicht per Pip installiert werden (das graphviz -Paket auf PyPI ist eine Python -Schnittstellenbibliothek für Graphviz und installiert nicht wirklich Graphviz). Sie können in der Graphviz-Dokumentation nachlesen, wie man es installiert.

Achtung

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

edges

edges(nodes=None)

Iterator für Kantenwerte mit Quell- und Zielknoten.

Dies funktioniert, indem die ausgehenden Kanten von den angegebenen Knoten zurückgegeben werden. Wenn keine Knoten angegeben werden, werden alle Kanten des Graphen zurückgegeben.

Parameter

nodes (DAGOpNode, DAGInNode, or DAGOutNode|list(DAGOpNode, DAGInNode, or DAGOutNode) – Entweder eine Liste von Knoten oder ein einzelner Eingabeknoten. Wenn keine angegeben wird, werden alle Kanten aus dem Graphen zurückgegeben.

Ergiebigkeit

rand -

die Kante als ein Tupel mit dem Format

(Quellknoten, Zielknoten, Randleitung)

find_bit

find_bit(bit)

Findet Orte in der Schaltung, indem es die Qubit und Clbit auf einen Positionsindex abbildet BitLocations ist definiert als: BitLocations = namedtuple( “BitLocations”, ("index", "registers"))

Parameter

bit (Bit) – Das zu suchende Teil.

Rückgabe

Ein 2-Tupel. Das erste Element (index)

enthält den Index, unter dem die Bit zu finden ist (entweder in qubits, clbits, je nach Typ). Das zweite Element (registers) ist eine Liste von (register, index) Paaren mit einem Eintrag für jedes Register in der Schaltung, die das Bit enthält (und dem Index im Register , unter dem es zu finden ist).

Rückgabetyp

namedtuple(int, ListTuple [(Register, int)] )

Erhöht:

DAGCircuitError: Wenn die angegebene Bit von einem unbekannten Typ ist. DAGCircuitError: Wenn die mitgelieferte Bit nicht im Stromkreis gefunden werden konnte.

front_layer

front_layer()

Gibt eine Liste der Op-Knoten in der ersten Ebene dieses Tages zurück.

gate_nodes

gate_nodes()

Ermittelt die Liste der Gatterknoten im dag.

Rückgabe

die Liste der DAGOpNodes, die Gates darstellen.

Rückgabetyp

liste [ DAGOpNode ]

has_identifier

has_identifier(var)

Ist diese Kennung in der DAG enthalten?

Parameter

var - der zu prüfende Bezeichner oder Name.

has_stretch

has_stretch(stretch)

Ist diese Strecke in der DAG?

Parameter

var - die zu prüfende Strecke oder der Name.

has_var

has_var(var)

Befindet sich diese Echtzeitvariable in der DAG?

Parameter

var - die zu prüfende Variable oder der Name.

idle_wires

idle_wires(ignore=None)

Leerlaufdrähte zurückführen.

Parameter

ignore (list(str)) – Liste der zu ignorierenden Knotennamen. Standard: []

Ergiebigkeit

Bit - Bit im Leerlaufdraht.

Erhöht

DAGCircuitError – Wenn der DAG ungültig ist

is_empty

is_empty()

Gibt „true“ zurück, wenn der Graph keine Operationsknoten enthält.

is_predecessor

is_predecessor(node, node_pred)

Prüft, ob ein zweiter Knoten in den Vorgängern des Knotens enthalten ist.

is_successor

is_successor(node, node_succ)

Prüft, ob ein zweiter Knoten in den Nachfolgern von node enthalten ist.

iter_captured_stretches

iter_captured_stretches()

Iterierbar über die erfassten Strecken, die von der Schaltung verfolgt werden.

iter_captured_vars

iter_captured_vars()

Iterierbar über die erfassten klassischen Variablen, die von der Schaltung verfolgt werden.

iter_captures

iter_captures()

Iterierbar über alle erfassten Identifikatoren, die von der Schaltung verfolgt werden.

iter_declared_stretches

iter_declared_stretches()

Iterierbar über die angegebenen Strecken, die von der Schaltung verfolgt werden.

iter_declared_vars

iter_declared_vars()

Iterabel über die deklarierten klassischen Variablen, die von der Schaltung verfolgt werden.

iter_input_vars

iter_input_vars()

Iterierbar über die von der Schaltung verfolgten klassischen Eingangsvariablen.

iter_stretches

iter_stretches()

Iterierbar über alle von der Schaltung erfassten Streckenabschnitte.

iter_vars

iter_vars()

Iterierbar über alle klassischen Variablen, die von der Schaltung verfolgt werden.

layers

layers(*, vars_mode=Ellipsis)

Liefert eine flache Ansicht auf eine Ebene dieses DAGCircuit für alle d Ebenen dieses Schaltkreises.

Eine Schicht ist ein Schaltkreis, dessen Gatter auf disjunkte Qubits wirken, d.h. eine Schicht hat die Tiefe 1. Die Gesamtzahl der Schichten entspricht der Schaltungstiefe d. Die Ebenen sind von 0 bis d-1 indiziert, wobei die früheste Ebene den Index 0 hat. Die Schichten werden mit einem Greedy-Algorithmus aufgebaut. Jede zurückgegebene Ebene ist ein dict mit {“graph”: circuit graph, “partition”: list of qubit lists}.

Die zurückgegebene Schicht enthält neue (aber semantisch gleichwertige) DAGOpNodes, DAGInNodes, und DAGOutNodes. Diese sind nicht identisch mit den Knoten des ursprünglichen dag, sondern sind über DAGNode.semantic_eq ( node1, node2 ) gleichwertig.

TODO: Gatter, die dieselben Cbits verwenden, landen in verschiedenen Schichten, wie dies derzeit implementiert ist. Dies ist möglicherweise nicht das gewünschte Verhalten.

longest_path

longest_path()

Gibt den längsten Pfad im dag als eine Liste von DAGOpNodes, DAGInNodes, und DAGOutNodes zurück.

make_physical

make_physical(num_qubits=None)

Bringen Sie self in die kanonische physikalische Form, mit der angegebenen Anzahl von Qubits.

Dies geschieht an Ort und Stelle, ohne dass die DAG durchlaufen werden muss. Sie ist für den Einsatz gedacht, wenn bekannt ist, dass die DAG bereits einen physikalischen Schaltkreis repräsentiert, und wir nur bestätigen müssen, dass es sich um eine kanonische physikalische Form handelt.

Dies löscht alle Informationen über virtuelle Qubits in der Datei DAGCircuitwenn Sie dies selbst verwenden, müssen Sie sicherstellen, dass Sie ein geeignetes Qubit erstellt und gespeichert haben Layout. Dabei wird das "triviale" Layout angewandt, das das virtuelle Qubit 0 auf das physische Qubit 0 abbildet, und so weiter.

Parameter

num_qubits - falls angegeben, die Gesamtzahl der physischen Qubits in der Ausgabe; sie muss mindestens so groß sein wie die Anzahl der Qubits in der DAG. Wird nichts angegeben, bleibt die Anzahl der Qubits unverändert.

multi_qubit_ops

multi_qubit_ops()

Liste der 3+-Qubit-Operationen abrufen. Direktiven wie Snapshot und Barriere werden ignoriert.

multigraph_layers

multigraph_layers()

Ertragsebenen des Multigraphen.

named_nodes

named_nodes(*names)

Ermittelt die Menge der "op"-Knoten mit dem angegebenen Namen.

node

node(node_id)

Holen Sie sich den Knoten in der dag.

Parameter

node_id (int) – Kennung des Knotens.

Rückgabe

den Knoten.

Rückgabetyp

Knoten

nodes

nodes()

Iterator für Knotenwerte.

Ergiebigkeit

node - der Knoten.

nodes_on_wire

nodes_on_wire(wire, only_ops=False)

Iterator für Knoten, die einen bestimmten Draht betreffen.

Parameter

  • wire (Bit) – das Kabel, das untersucht werden soll.
  • only_ops (bool) – True, wenn nur die ops-Knoten gewünscht sind; andernfalls werden alle Knoten zurückgegeben.

Ergiebigkeit

Iterator - die aufeinanderfolgenden Knoten auf dem gegebenen Draht

Erhöht

DAGCircuitError – wenn die angegebene Verbindung im DAG nicht vorhanden ist

num_blocks

num_blocks()

Geben Sie die Anzahl der Basisblöcke in dieser Schaltung zurück.

num_clbits

num_clbits()

Gibt die Gesamtzahl der von der Schaltung verwendeten klassischen Bits zurück.

num_ops

num_ops()

Ermittelt die Anzahl der Op-Knoten in der DAG.

num_qubits

num_qubits()

Gibt die Gesamtzahl der von der Schaltung verwendeten Qubits zurück. num_qubits() ersetzt die frühere Verwendung von width(). DAGCircuit.width () gibt jetzt qubits + clbits zurück, um mit Circuit.width () übereinzustimmen [qiskit-terra #2564].

num_tensor_factors

num_tensor_factors()

Berechnen Sie, in wie viele Komponenten die Schaltung zerlegt werden kann.

op_nodes

op_nodes(op=None, include_directives=True)

Abrufen der Liste der "op"-Knoten in der dag.

Parameter

  • op (Type) –qiskit.circuit.Operation Unterklassen der OP-Knoten, die zurückgegeben werden sollen. Wenn „None“, werden alle Op-Knoten zurückgegeben.
  • include_directives (bool) – barriere, Schnappschuss usw. enthalten.

Rückgabe

die Liste der dag-Knoten, die die angegebene op.

Rückgabetyp

liste [ DAGOpNode ]

op_predecessors

op_predecessors(node)

Gibt den Iterator der "op"-Vorgänger eines Knotens im dag zurück.

op_successors

op_successors(node)

Gibt den Iterator der "op"-Nachfolger eines Knotens im dag zurück.

predecessors

predecessors(node)

Gibt einen Iterator der Vorgänger eines Knotens als DAGOpNodes und DAGInNodes.

properties

properties()

Rückgabe eines Wörterbuchs mit Schaltkreiseigenschaften.

quantum_causal_cone

quantum_causal_cone(qubit)

Gibt den kausalen Kegel eines Qubits zurück.

Der Kausalkonus eines Qubits ist die Menge der Qubits, die die Ausgabe dieses Qubits durch Wechselwirkungen beeinflussen können, sei es durch Multi-Qubit-Tore oder Operationen. Die Kenntnis des Kausalzapfens eines Qubits kann bei der Fehlersuche in fehlerhaften Schaltkreisen nützlich sein, da sie dabei helfen kann, herauszufinden, welche Leitung(en) das Problem verursachen.

Bei dieser Methode wird keine klassische Datenabhängigkeit in der DAGCircuit berücksichtigt, klassische Bitleitungen werden bei der Erstellung des Kausalkegels ignoriert.

Parameter

qubit (Qubit) – Das Ausgangsqubit, für das wir den kausalen Kegel ermitteln möchten.

Rückgabe

Die Menge der Qubits, deren Interaktionen sich auf qubit auswirken.

Rückgabetyp

Set[ Qubit ]

quantum_predecessors

quantum_predecessors(node)

Gibt einen Iterator der Vorgänger eines Knotens zurück, die durch eine Quantenkante als DAGOpNodes und DAGInNodes verbunden sind.

quantum_successors

quantum_successors(node)

Gibt einen Iterator der Nachfolger eines Knotens zurück, die durch eine Quantenkante als DAGOpNodes und DAGOutNodes verbunden sind.

remove_all_ops_named

remove_all_ops_named(opname)

Entfernt alle Operationsknoten mit dem angegebenen Namen.

remove_ancestors_of

remove_ancestors_of(node)

Alle Vorgängerknoten von node entfernen.

remove_clbits

remove_clbits(*clbits)

Entfernen Sie klassische Bits aus der Schaltung. Alle Bits MÜSSEN im Leerlauf sein. Alle Register, die auf mindestens eines der angegebenen Bits verweisen, werden ebenfalls entfernt.

Achtung

Diese Methode ist recht langsam, da sie über die gesamte DAG iterieren muss, um Bit-Indizes zu korrigieren.

Parameter

clbits (List[Clbit]) – Die Teile, die entfernt werden müssen.

Erhöht

ClbitDAGCircuitError – Ein Bit ist nicht gesetzt, ist nicht Teil der Schaltung oder befindet sich nicht im Ruhezustand.

remove_cregs

remove_cregs(*cregs)

Entfernen Sie klassische Register aus der Schaltung, wobei die darunter liegenden Bits erhalten bleiben.

Erhöht

  • DAGCircuitError – Ein „creg“ ist kein „ ClassicalRegister, “ oder befindet sich nicht in
  • die Schaltung. -

remove_descendants_of

remove_descendants_of(node)

Entfernt alle absteigenden Operationsknoten von node.

remove_nonancestors_of

remove_nonancestors_of(node)

Entfernen Sie alle Nichtvorgänger-Operationsknoten von node.

remove_nondescendants_of

remove_nondescendants_of(node)

Entfernen Sie alle nicht nachgeordneten Operationsknoten von node.

remove_op_node

remove_op_node(node)

Entfernen Sie einen Vorgangsknoten n.

Kanten von Vorgängern zu Nachfolgern hinzufügen.

remove_qregs

remove_qregs(*qregs)

Entfernen Sie die Quantenregister aus der Schaltung, wobei die zugrunde liegenden Bits erhalten bleiben.

Erhöht

  • DAGCircuitError – Ein qreg ist kein „ QuantumRegister, “ oder befindet sich nicht in
  • die Schaltung. -

remove_qubits

remove_qubits(*qubits)

Entfernen Sie Quantenbits aus der Schaltung. Alle Bits MÜSSEN im Leerlauf sein. Alle Register, die auf mindestens eines der angegebenen Bits verweisen, werden ebenfalls entfernt.

Achtung

Diese Methode ist recht langsam, da sie über die gesamte DAG iterieren muss, um Bit-Indizes zu korrigieren.

Parameter

qubits (List[Qubit]) – Die Teile, die entfernt werden müssen.

Erhöht

DAGCircuitError – Ein Qubit ist kein Qubit, befindet sich nicht im Schaltkreis oder ist nicht inaktiv.

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 DAGOpNodes in einem einzigen Vorgang zusammenzufassen. Ein typisches Beispiel ist die Zusammenfassung eines Blocks von Gattern zu einer einzigen UnitaryGate , die die unitäre Matrix des Blocks darstellt.

Parameter

  • node_block (List[DAGNode]) – 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[Bit, int]) – Das Wörterbuch, das die Bits ihren Positionen in der Ausgabe qargs zuordnet, oder cargs. Dies ist erforderlich, um die Argumentreihenfolge über mehrere Gatter hinweg im kombinierten Einzeloperationsknoten zu rekonstruieren. Wenn ein Bit nicht im Wörterbuch enthalten ist, wird es nicht zu den Argumenten hinzugefügt; dies kann nützlich sein, wenn es um Kontrollflussoperationen geht, deren condition oder target Felder inhärente Bits enthalten.
  • 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 DAGCircuit ungültig machen würde) und gibt eine DAGCircuitError 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

DAGCircuitError – wenn cycle_check auf True gesetzt ist und das Ersetzen des angegebenen Blocks zu einem Zyklus führt oder wenn node_block leer ist.

Rückgabe

Der Op-Knoten, der den Block ersetzt.

Rückgabetyp

DAGOpNode

reverse_ops

reverse_ops()

Kehren Sie die Vorgänge in der Schaltung self um.

Rückgabe

der umgekehrte dag.

Rückgabetyp

DAGCircuit

separable_circuits

separable_circuits(remove_idle_qubits=False, *, vars_mode=Ellipsis)

Zerlegen Sie die Schaltung in Sätze von Qubits, die nicht durch Gatter miteinander verbunden sind.

Parameter

remove_idle_qubits (bool) – Kennzeichen, das angibt, ob ungenutzte Qubits aus den getrennten Schaltkreisen entfernt werden sollen. Wenn False, enthält jeder Ausgangskreis die gleiche Anzahl von Qubits wie self.

Rückgabe

Die Schaltkreise, die sich aus der Aufteilung von self in Gruppen ergeben

von unverbundenen Qubits

Rückgabetyp

Liste [DAGCircuit ]

Jede DAGCircuit instanz, die von dieser Methode zurückgegeben wird, enthält die gleiche Anzahl von Clbits wie self. Die globalen Phaseninformationen in self werden in den von dieser Methode zurückgegebenen Teilstromkreisen nicht beibehalten.

serial_layers

serial_layers(*, vars_mode=Ellipsis)

Ergibt eine Ebene für alle Gatter dieser Schaltung.

Eine serielle Ebene ist eine Schaltung mit einem Gatter. Die Ebenen haben die gleiche Struktur wie in layers().

size

size(*, recurse=False)

Gibt die Anzahl der Operationen zurück. Wenn ein Kontrollfluss vorhanden ist, kann diese Zahl nur eine Schätzung sein, da der vollständige Kontrollflusspfad nicht statisch bekannt ist.

Parameter

rekursiv – wenn True, dann rekursiv in die Kontrollflussoperationen. „for“-Schleifen mit Iteratoren bekannter Länge werden als entrollt gezählt. In „if-else“-Blöcken werden die beiden Verzweigungen addiert. While-Schleifen werden so gezählt, als würde der Schleifenkörper nur einmal ausgeführt. Die Standardeinstellung ist False und es wird ausgelöst DAGCircuitError , wenn eine Kontrollflussstruktur vorhanden ist, um zu vermeiden, dass stillschweigend eine weitgehend bedeutungslose Zahl zurückgegeben wird.

Rückgabe

die Größe des Stromkreises

Rückgabetyp

int

Erhöht

recurse=TrueDAGCircuitError – wenn in einem Aufruf mit eine Unbekannte ControlFlowOp vorkommt oder in einem nicht-rekursiven Aufruf eine Kontrollflussanweisung enthalten ist.

structurally_equal

structurally_equal(other)

Sind diese beiden DAGs strukturell gleich?

Diese Funktion gibt true zurück, wenn die Graphenstrukturen genau übereinstimmen, einschließlich der gültigen Knotenindizes, Kantenreihenfolgen usw. Dies ist eine viel strengere Prüfung als die Graphenäquivalenz und ist hauptsächlich nützlich, um zu prüfen, ob zwei DAGCircuit instanzen auf exakt die gleiche Weise konstruiert und manipuliert wurden. Mit dieser Methode kann zum Beispiel geprüft werden, ob eine Folge von Manipulationen an einem DAG deterministisch ist.

Diese Methode berücksichtigt keine Tracking-Metadaten wie metadata oder name, sondern berücksichtigt viele Implementierungsdetails der internen Darstellung, von denen viele die Semantik der Schaltung nicht verändern.

Diese Methode sollte im Allgemeinen viel schneller sein als Graphen-Äquivalenzprüfungen, liefert aber in viel mehr Situationen False . Diese Methode sollte niemals True zurückgeben, wenn eine Graph-Äquivalenzprüfung False ergeben würde.

Anmerkung

Aufgrund technischer Beschränkungen bei der internen Darstellung des Kontrollflusses wird derzeit kein Kontrollfluss behandelt, und es wird false zurückgegeben, wenn eine Kontrollflussoperation vorhanden ist, selbst wenn sie einzeln gleich sind.

Siehe auch

Der == Betreiber

QuantumCircuitDAGCircuit implementiert __eq__() zwischen sich selbst und anderen DAGCircuit Instanzen (diese Methode bildet auch die Grundlage für die Gleichheitsprüfung von ). Hiermit wird eine semantische Datenfluss-Gleichheitsprüfung implementiert, die weniger empfindlich gegenüber der Reihenfolge ist, in der die Operationen definiert wurden. Das ist in der Regel das, was einem Nutzer in Bezug auf Gleichheit wichtig ist.

substitute_node

substitute_node(node, op, inplace=False, propagate_condition=None)

Ersetzen Sie eine DAGOpNode durch einen einzigen Vorgang. qargs, cargs und Bedingungen für die neue Operation werden von dem zu ersetzenden Knoten abgeleitet. Der neue Vorgang wird daraufhin überprüft, ob er mit der Form des ersetzten Vorgangs übereinstimmt.

Parameter

  • node (DAGOpNode) – Zu ersetzender Knotenpunkt
  • op (qiskit.circuit.Operation) – Die qiskit.circuit.Operation instanz, die der DAG hinzugefügt werden soll
  • inplace (bool) – Optional, Standardwert False. Wenn True, wird der bestehende DAG-Knoten so geändert, dass er op enthält. Andernfalls wird ein neuer DAG-Knoten verwendet.
  • propagate_condition (bool) – DEPRECATED eine Legacy-Option, die das Verhalten der Behandlung des Kontrollflusses steuerte. Er hat keine Auswirkungen mehr, er wurde aus Gründen der Abwärtskompatibilität beibehalten. Wird in Qiskit 3.0 entfernt.

Rückgabe

der neue Knoten, der den hinzugefügten Vorgang enthält.

Rückgabetyp

DAGOpNode

Erhöht

  • DAGCircuitError – Falls der Austauschvorgang nicht kompatibel war mit
  • standort des Zielknotens. -

substitute_node_with_dag

substitute_node_with_dag(node, input_dag, wires=None, propagate_condition=None)

Ersetzen Sie einen Knoten durch dag.

Parameter

  • node (DAGOpNode) – knoten zu ersetzen
  • input_dag (DAGCircuit) – schaltung, die den Knoten ersetzen wird
  • wires (list[Bit] | Dict[Bit, Bit]) – gibt eine Reihenfolge für (qu)Bits im Eingangsschaltkreis vor. input_dagHandelt es sich um eine Liste, beziehen sich die Bits auf die Elemente in der Liste, und die Reihenfolge wird zunächst anhand von qargs, dann anhand von cargs und schließlich anhand von conditions mit den Knotenverbindungen abgeglichen. Wenn es sich um ein Wörterbuch handelt, dann eine Zuordnung der Bits im input_dag zu denen, auf die das node einwirkt.
  • propagate_condition (bool) – DEPRECATED eine Legacy-Option, die das Verhalten der Behandlung des Kontrollflusses steuerte. Er hat keine Auswirkungen mehr, er wurde aus Gründen der Abwärtskompatibilität beibehalten. Wird in Qiskit 3.0 entfernt.

Rückgabe

ordnet die Knoten-IDs von input_dag ihren neuen Knoten-Inkarnationen in self zu.

Rückgabetyp

dict

Erhöht

DAGCircuitError – falls unerwartete Vorgänger/Nachfolger auftreten sollten

successors

successors(node)

Gibt einen Iterator der Nachfolger eines Knotens als DAGOpNodes und DAGOutNodes.

swap_nodes

swap_nodes(node1, node2)

Vertauschen verbundener Knoten, z. B. aufgrund von Kommutierung.

Parameter

  • node1 (OpNode) – vorgängerknoten
  • node2 (OpNode) – nachfolgeknoten

Erhöht

DAGCircuitError – wenn einer der Knoten kein „ OpNode “ ist oder die Knoten nicht miteinander verbunden sind

to_circuit

to_circuit(*, copy_operations=True)

Wandle diesen DAG in ein QuantumCircuit. um.

Dies ist eine einfache Hülle um dag_to_circuit().

Parameter

copy_operations – ob die einzelnen Anweisungen tief kopiert werden sollen. Wenn auf gesetzt False, ist der Vorgang kostengünstiger, aber Mutationen der Anweisungen im Schaltkreis wirken sich auf den ursprünglichen Schaltkreis aus.

Rückgabe

a QuantumCircuit , das denselben DAG darstellt.

topological_nodes

topological_nodes(key=None, reverse=False)

Ertragsknoten in topologischer Reihenfolge.

Parameter

  • key (Callable) – Eine Callable, die ein DAGNode-Objekt annimmt und einen String-Sortierschlüssel zurückgibt. Wenn nicht angegeben, werden die Bit qargs und cargs eines Knotens für die Sortierung verwendet.
  • reverse (bool) – Wenn wahr, geben Sie Knoten in umgekehrter topologischer Reihenfolge zurück.

Rückgabe

knoten in topologischer Reihenfolge

Rückgabetyp

generator (DAGOpNode, DAGInNode, oder DAGOutNode )

topological_op_nodes

topological_op_nodes(key=None, reverse=False)

Ausbeute von Op-Knoten in topologischer Reihenfolge.

Erlaubt, in einer bestimmten Tonart zu passen, um Unentschieden in der ersten Reihe zu brechen

Parameter

  • key (Callable) – Eine Callable, die ein DAGNode-Objekt annimmt und einen String-Sortierschlüssel zurückgibt. Wenn nicht angegeben, werden die qargs und cargs eines Knotens für die Sortierung verwendet.
  • reverse (bool) – Wenn wahr, geben Sie Op-Knoten in umgekehrter topologischer Reihenfolge zurück.

Rückgabe

op-Knoten in topologischer Reihenfolge

Rückgabetyp

generator( DAGOpNode )

two_qubit_ops

two_qubit_ops()

Liste der 2-Qubit-Operationen abrufen. Direktiven wie Snapshot und Barriere werden ignoriert.

width

width()

Gibt die Gesamtzahl der von der Schaltung verwendeten Qubits + Clbits zurück. Diese Funktion gab früher die Anzahl der Qubits durch die Berechnung return len( self._wires ) - self.num_clbits () zurück, wurde aber durch Ausgabe #2564 geändert, um die Anzahl der Qubits + clbits zurückzugeben, wobei die neue Funktion DAGCircuit.num_qubits die frühere Semantik von DAGCircuit.width () ersetzt.

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