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.
Ä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.
Ä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 dieDAGCircuitInvarianten der Datenstruktur eingehalten werden (alleqargssindQubit\ s, alle befinden sich im DAG usw.). InFalsediesem 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
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 dieDAGCircuitInvarianten der Datenstruktur eingehalten werden (alleqargssindQubit\ s, alle befinden sich im DAG usw.). InFalsediesem 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
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 derotherDAG als "captures" markiert sind, auf bestehende Verwendungen dieser gleichen Variablen inselfeingefügt. WennFalse, müssen alle Variablen inothervonselfverschieden sein, und sie werden zuselfhinzugefügt.
Rückgabe
den zusammengesetzten Tag (gibt None zurück, wenn inplace==True).
Rückgabetyp
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
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
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
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
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.
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
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.OperationUnterklassen 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
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
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.
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.
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
qargszuordnet, odercargs. Dies ist erforderlich, um die Argumentreihenfolge über mehrere Gatter hinweg im kombinierten Einzeloperationsknoten zu rekonstruieren. Wenn einBitnicht im Wörterbuch enthalten ist, wird es nicht zu den Argumenten hinzugefügt; dies kann nützlich sein, wenn es um Kontrollflussoperationen geht, derenconditionodertargetFelder inhärente Bits enthalten. - 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 dieDAGCircuitungültig machen würde) und gibt eineDAGCircuitErroraus, 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
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
reverse_ops
reverse_ops()
Kehren Sie die Vorgänge in der Schaltung self um.
Rückgabe
der umgekehrte dag.
Rückgabetyp
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
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.
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.
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.Operationinstanz, 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
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 iminput_dagzu denen, auf die dasnodeeinwirkt. - 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
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.