WhileLoopOp
class qiskit.circuit.WhileLoopOp(condition, body, label=None)
Basen: ControlFlowOp
Eine Schaltungsoperation, die eine Teilschaltung (body) so lange ausführt, bis eine Bedingung (condition) als Falsch ausgewertet wird.
Die klassischen Bits, die in condition verwendet werden, müssen eine Teilmenge derjenigen sein, die an body angehängt sind.
Parameter
bodycondition (tuple[ClassicalRegister, int] | tuple[Clbit, int] | expr.Expr) – Eine Bedingung, die vor der Ausführung überprüft werden muss.int``intKann entweder als Tupel einesClassicalRegisterangegeben werden, das auf Gleichheit mit einem vorgegebenen geprüft werden soll, oder als Tupel einesClbit, das entweder mit einembooloder einem verglichen werden soll.- body (QuantumCircuit) – Der Schleifenkörper, der wiederholt ausgeführt werden soll.
- label (str | None) – Eine optionale Kennzeichnung zur Identifizierung der Instruktion.
Attribute
base_class
Ermittelt die Basisklasse dieser Instruktion. Dies ist garantiert im Vererbungsbaum von self zu finden.
Die "Basisklasse" einer Anweisung ist die niedrigste Klasse in ihrem Vererbungsbaum, mit der das Objekt für _all_ Schaltkreisanwendungen als vollständig kompatibel angesehen werden sollte. Dies bedeutet in der Regel, dass die Unterklasse nur definiert ist, um dem Programmierer eine gewisse Bequemlichkeit gegenüber der Basisklasse zu bieten, und die Basisklasse ist die "wahre" Klasse für eine Verhaltensperspektive. Insbesondere sollten Sie Folgendes nicht außer Kraft setzen base_class nicht überschreiben, wenn Sie eine benutzerdefinierte Version einer Anweisung definieren, die von der Hardware anders implementiert wird, wie z. B. eine alternative Messstrategie oder eine Version eines parametrisierten Gatters mit einem bestimmten Satz von Parametern, um es in einer Target von dem vollständig parametrisierten Gatter zu unterscheiden.
Dies ist oft genau gleichwertig mit type(obj), außer im Fall von Singleton-Instanzen von Standard-Bibliotheksanweisungen. Diese Singleton-Instanzen sind spezielle Unterklassen ihrer Basisklasse, und diese Eigenschaft gibt die Basisklasse zurück. Zum Beispiel:
>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
TrueIm Allgemeinen sollten Sie sich nicht auf die genaue Klasse einer Anweisung verlassen; innerhalb eines bestimmten Schaltkreises ist es zu erwarten, dass Instruction.name in den meisten Situationen ein geeigneteres Unterscheidungsmerkmal sein sollte.
blocks
condition
Die Bedingung für die while-Schleife.
decompositions
Holen Sie sich die Zerlegungen der Anweisung von SessionEquivalenceLibrary.
definition
Definition der Rückgabe in Bezug auf andere grundlegende Gates.
label
Etikett mit Rücksendeanweisungen
mutable
Ist diese Instanz eine veränderbare eindeutige Instanz oder nicht.
Wenn dieses Attribut False lautet, ist die Gate-Instanz ein gemeinsam genutztes Singleton und nicht veränderbar.
name
Geben Sie den Namen zurück.
num_clbits
Gibt die Anzahl der Clbits zurück.
num_qubits
Gibt die Anzahl der Qubits zurück.
params
Methoden
add_decomposition
add_decomposition(decomposition)
Fügen Sie eine Dekomposition der Anweisung in die SessionEquivalenceLibrary ein.
broadcast_arguments
broadcast_arguments(qargs, cargs)
Validierung der Argumente.
Parameter
- qargs (List) – Liste der Quantenbit-Argumente.
- cargs (List) – Liste der klassischen Bit-Argumente.
Ergiebigkeit
Tupel(Liste, Liste) - Ein Tupel mit einzelnen Argumenten.
Erhöht
CircuitError – Wenn die Eingabe ungültig ist. Beispielsweise stimmt die Anzahl der Argumente nicht mit der vom Gatter erwarteten Anzahl überein.
copy
copy(name=None)
Kopie der Anweisung.
Parameter
name (str) – name, der dem kopierten Schaltkreis gegeben werden soll, wenn None , dann bleibt der Name derselbe.
Rückgabe
eine Kopie der aktuellen Anweisung, wobei der Name aktualisiert wird, wenn er angegeben wurde
Rückgabetyp
inverse
inverse(annotated=False)
Kehren Sie diese Anweisung um.
Wenn annotated auf False steht, wird die inverse Anweisung als neue Anweisung mit der rekursiv invertierten Definition implementiert.
Wenn annotated True ist, wird die inverse Anweisung implementiert als AnnotatedOperationund entspricht der gegebenen Anweisung, die mit dem "inversen Modifikator" versehen ist.
Spezielle Befehle, die von Instruction erben, können ihre eigene Umkehrung implementieren (z. B. T und Tdg, Barrier, usw.) Insbesondere können sie wählen, wie sie das Argument annotated behandeln wollen, z. B. indem sie es ignorieren und immer eine konkrete Gatterklasse zurückgeben, wenn die Umkehrung als Standardgatter definiert ist.
Parameter
annotated (bool) – auf True gesetzt, wird die Ausgabe des inversen Gatters wie folgt zurückgegeben AnnotatedOperation.
Rückgabe
Die umgekehrte Operation.
Erhöht
CircuitError – wenn es sich nicht um eine zusammengesetzte Anweisung handelt und für diese keine Umkehrung implementiert wurde.
is_parameterized
iter_captured_stretches
iter_captured_stretches()
Ermittelt einen Iterator über die eindeutig erfassten Stretch-Variablen in allen Blöcken dieses Konstrukts.
Rückgabetyp
Iterable [ expr.Stretch ]
iter_captured_vars
iter_captured_vars()
Ermittelt einen Iterator über die eindeutig erfassten Variablen in allen Blöcken dieses Konstrukts.
Rückgabetyp
repeat
repeat(n)
Erstellt eine Anweisung, die self -mal wiederholt wird.
Parameter
n (int) – Anzahl der Wiederholungen des Befehls
Rückgabe
Enthält die Definition.
Rückgabetyp
Erhöht
CircuitError – Wenn n < 1 ist.
replace_blocks
replace_blocks(blocks)
Gibt eine neue Version dieser Kontrollflussoperationen zurück, wobei die blocks auf die angegebenen neuen Operationen abgebildet sind.
Normalerweise wird dies in einem Arbeitsablauf wie dem folgenden verwendet:
existing_op = ...
def map_block(block: QuantumCircuit) -> QuantumCircuit:
new_block = block.copy_empty_like()
# ... do something to `new_block` ...
return new_block
new_op = existing_op.replace_blocks(
map_block(block) for block in existing_op.blocks
)Es liegt in der Verantwortung des Aufrufers sicherzustellen, dass die gemappten Blöcke über einen einheitlichen Satz von Schaltkreisressourcen definiert sind, ähnlich wie bei der Konstruktion eines ControlFlowOp mit seinem Standardkonstruktor.
Parameter
blöcke - die zu verwendenden neuen Teilstromkreisblöcke.
Rückgabe
Neue ControlFlowOp mit ersetzten Blöcken.
reverse_ops
reverse_ops()
Bei einer zusammengesetzten Anweisung kehren Sie die Reihenfolge der Unteranweisungen um.
Dies geschieht durch rekursive Umkehrung aller Unterbefehle. Es wird kein Tor invertiert.
Rückgabe
eine neue Anweisung mit
unteranweisungen umgedreht.
Rückgabetyp
soft_compare
soft_compare(other)
Weicher Vergleich zwischen Gates. Ihre Namen, die Anzahl der Qubits und die klassischen Bitnummern müssen übereinstimmen. Die Anzahl der Parameter muss übereinstimmen. Jeder Parameter wird verglichen. Wenn man eine ParameterExpression ist, wird sie nicht berücksichtigt.
Parameter
other (instruction) – sonstiger Unterricht.
Rückgabe
sind selbst und andere gleich bis hin zu Parameterausdrücken.
Rückgabetyp
to_mutable
to_mutable()
Gibt eine veränderbare Kopie dieses Tores zurück.
Diese Methode gibt eine neue veränderbare Kopie dieser Gate-Instanz zurück. Wenn eine Singleton-Instanz verwendet wird, ist dies eine neue, eindeutige Instanz, die verändert werden kann. Wenn die Instanz bereits veränderbar ist, handelt es sich um eine Deepcopy dieser Instanz.