Skip to main content
IBM Quantum Platform

PhaseOracleGate

class qiskit.circuit.library.PhaseOracleGate(expression, var_order=None, label=None)

GitHub

Basen: Gate

Implementiert ein Phasenorakel.

Das Objekt Phase Oracle Gate konstruiert Schaltungen für beliebige logische Ausdrücke. Ein logischer Ausdruck setzt sich aus den logischen Operatoren & (logisches UND), | (logisches ODER), ~ (logisches NICHT) und ^ (logisches XOR) zusammen. sowie Symbole für Literale (Variablen). So sind zum Beispiel "a & b" und ( v0 | ~v1 ) & ( ~v2 & v3 ) beides gültige Zeichenkettendarstellungen von booleschen logischen Ausdrücken.

Ein Phasenorakel für eine boolesche Funktion f(x) führt die folgende Quantenoperation durch:

∣x⟩↦(−1)f(x)∣x⟩|x\rangle \mapsto (-1)^{f(x)}|x\rangle

Der Einfachheit halber unterstützt dieses Orakel neben dem Parsen beliebiger logischer Ausdrücke auch Eingabestrings im DIMACS-CNF-Format, dem Standardformat für die Spezifikation von SATisfiability (SAT)-Problemfällen in Conjunctive Normal Form (CNF ), die eine Konjunktion von einer oder mehreren Klauseln ist, wobei eine Klausel eine Disjunktion von einem oder mehreren Literalen ist. Siehe qiskit.circuit.library.phase_oracle.PhaseOracleGate.from_dimacs_file().

Ab 16 Variablen ist bei Verwendung des Standard-Synthesizers mit Leistungseinbußen zu rechnen.

Parameter

  • expression (str | BooleanExpression) – Eine Python -ähnliche Zeichenkette mit booleschem Ausdruck oder ein BooleanExpression Objekt.
  • var_order (list[str] | None) – Eine Liste mit der Reihenfolge, in der die Variablen angelegt werden. (Standard: nach Aussehen)
  • label (str | None) – Eine Beschriftung für das Tor, die in Visualisierungen angezeigt werden soll. Standardmäßig ist die Beschriftung so eingestellt, dass sie die textuelle Darstellung des booleschen Ausdrucks anzeigt (ggf. gekürzt)

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. Das bedeutet in der Regel, dass die Unterklasse nur definiert ist, um dem Programmierer eine gewisse Bequemlichkeit gegenüber der Basisklasse zu bieten, und dass die Basisklasse aus der Sicht des Verhaltens die "wahre" Klasse ist. 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
True

Im Allgemeinen sollte man sich nicht auf die genaue Klasse eines Befehls verlassen; innerhalb einer bestimmten Schaltung sollte Instruction.name in den meisten Situationen ein geeigneteres Unterscheidungsmerkmal sein.

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

Die Parameter dieses Instruction. Im Idealfall sind dies Torwinkel.


Methoden

add_decomposition

add_decomposition(decomposition)

GitHub

Fügen Sie eine Dekomposition der Anweisung in die SessionEquivalenceLibrary ein.

broadcast_arguments

broadcast_arguments(qargs, cargs)

GitHub

Validierung und Handhabung der Argumente und ihrer Beziehung.

Zum Beispiel bedeutet cx([q[0],q[1]], q[2]) cx(q[0], q[2]); cx(q[1], q[2]). Diese Methode liefert die Argumente in der richtigen Gruppierung. Im gegebenen Beispiel:

in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
      [q[1], q[2]], []

Es gelten die allgemeinen Übertragungsregeln:

  • Wenn len(qargs) == 1:

    [q[0], q[1]] -> [q[0]],[q[1]]
  • Wenn len(qargs) == 2:

    [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
    [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
    [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
  • Wenn len(qargs) >= 3:

    [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

Parameter

  • qargs (list) – Liste der Quantenbit-Argumente.
  • cargs (list) – Liste der klassischen Bit-Argumente.

Rückgabe

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.

Rückgabetyp

Iterable [ Tupel [ Liste, Liste ]]

control

control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)

GitHub

Gibt die kontrollierte Version von sich selbst zurück.

Das gesteuerte Gatter wird als ControlledGate implementiert, wenn annotated ist False, und als, AnnotatedOperation wenn annotated ist True.

Seit Version 2.3 veraltet

qiskit.circuit.gate.Gate.control()Das Argument annotated ist seit Qiskit 2.3 veraltet. Es wird in Qiskit 3.0 entfernt werden. Die Methode „ Gate.control “ akzeptiert nicht mehr „annotated=None“. Die neue Standardeinstellung ist annotated=True, wodurch das kontrollierte Gatter als „ AnnotatedOperation ” dargestellt wird (es sei denn, es existiert bereits eine spezielle Klasse für kontrollierte Gatter). Sie können explizit annotated=False festlegen, um das bisherige Verhalten beizubehalten. Es wird jedoch empfohlen, annotated=True zu verwenden, da dadurch die Erstellung des kontrollierten Schaltkreises auf den Transpiler verschoben wird und darüber hinaus zusätzliche Optimierungen des kontrollierten Gates ermöglicht werden (was in der Regel zu Schaltkreisen höherer Qualität führt).

Parameter

  • num_ctrl_qubits (int) – Anzahl der hinzuzufügenden Steuerelemente. Der Standardwert ist 1.
  • label (str | None) – Optionales Tor-Etikett. Der Standardwert ist None. Wird ignoriert, wenn das kontrollierte Gate als kommentierte Operation implementiert ist.
  • ctrl_state (int |str | None) – Der Steuerungsstatus des Gates, angegeben entweder als Ganzzahl oder als Bitstring (z. B. "110"). Wenn None, wird standardmäßig der Zustand „alle 2**num_ctrl_qubits - 1Einsen“ verwendet.
  • annotated (bool | None) – Gibt an, ob das gesteuerte Gate als gesteuertes Gate oder als kommentierte Operation implementiert werden soll. Wenn None, behandelt als False.

Rückgabe

Eine kontrollierte Version dieses Tors.

Erhöht

QiskitError – ungültig num_ctrl_qubits oder ctrl_state.

copy

copy(name=None)

GitHub

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

qiskit.circuit.Instruction

from_dimacs_file

classmethod from_dimacs_file(filename)

GitHub

Erstellen Sie eine PhaseOracle aus der Zeichenkette im DIMACS-Format.

Es ist möglich, eine PhaseOracle aus einer Datei im DIMACS-CNF-Format zu erstellen, dem Standardformat für die Spezifikation von SATisfiability (SAT)-Problemfällen in Conjunctive Normal Form (CNF ), die eine Konjunktion von einer oder mehreren Klauseln ist, wobei eine Klausel eine Disjunktion von einem oder mehreren Literalen ist.

Es folgt ein Beispiel für eine CNF, die im DIMACS-Format ausgedrückt ist:

c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
p cnf 3 5
-1 -2 -3 0
1 -2 3 0
1 2 -3 0
1 -2 -3 0
-1 2 3 0

Die erste Zeile, die auf das Zeichen c folgt, ist ein Kommentar. Die zweite Zeile gibt an, dass die CNF über drei boolesche Variablen - nennen wir sie x1,x2,x3x_1, x_2, x_3 - geht und fünf Klauseln enthält. Die fünf anschließend aufgeführten Klauseln werden implizit durch den logischen UND-Operator ∧\land verbunden, während die Variablen in jeder Klausel, die durch ihre Indizes dargestellt werden, implizit durch den logischen ODER-Operator ∨\lor getrennt werden. Das Symbol −- vor dem Index einer booleschen Variable entspricht dem logischen NOT-Operator, ¬\lnot. Das Zeichen 0 (Null) markiert das Ende einer jeden Klausel. Im Wesentlichen entspricht der obige Code der folgenden CNF:

(¬x1∨¬x2∨¬x3)∧(x1∨¬x2∨x3)∧(x1∨x2∨¬x3)∧(x1∨¬x2∨¬x3)∧(¬x1∨x2∨x3)(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3) \land (x_1 \lor \lnot x_2 \lor x_3) \land (x_1 \lor x_2 \lor \lnot x_3) \land (x_1 \lor \lnot x_2 \lor \lnot x_3) \land (\lnot x_1 \lor x_2 \lor x_3).

Parameter

filename (str) – Eine Datei im DIMACS-Format.

Rückgabe

Eine Quantenschaltung mit einem Phasenorakel.

Rückgabetyp

PhaseOracleGate

inverse

inverse(annotated=False)

GitHub

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

is_parameterized()

GitHub

Gibt zurück, ob das Instruction Kompilierungszeitparameter enthält.

power

power(exponent, annotated=False)

GitHub

Erhöhen Sie dieses Tor auf die Macht von exponent.

Entweder als einheitliches Gatter (Ref. UnitaryGate) oder als kommentierte Operation (Ref. AnnotatedOperation). Im Falle mehrerer Standardtore, wie z. B RXGatewenn die Potenz eines Gatters in Form eines anderen Standardgatters ausgedrückt werden kann, das direkt zurückgegeben wird.

Parameter

  • exponent (float) – die Macht, das Tor zu heben
  • annotated (bool) – gibt an, ob das Leistungstor als kommentierte Operation implementiert werden kann. Im Falle mehrerer Standardtore, wie z. B RXGatewird dieses Argument ignoriert, wenn die Potenz eines Gatters in Form eines anderen Standardgatters ausgedrückt werden kann.

Rückgabe

Eine Operation zur Durchführung gate^exponent

Erhöht

CircuitError – Wenn das Gatter nicht unitär ist

repeat

repeat(n)

GitHub

Erstellt eine Anweisung, die selfnn -mal wiederholt wird.

Parameter

n (int) – Anzahl der Wiederholungen des Befehls

Rückgabe

Enthält die Definition.

Rückgabetyp

qiskit.circuit.Instruction

Erhöht

CircuitError – Wenn n < 1 ist.

reverse_ops

reverse_ops()

GitHub

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

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

GitHub

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

bool

to_matrix

to_matrix()

GitHub

Gibt eine Numpy.array für die unitäre Matrix des Gatters zurück.

Rückgabe

wenn die Gate-Unterklasse eine Matrixdefinition hat.

Rückgabetyp

np.ndarray

Erhöht

CircuitError – Wenn eine Gate-Unterklasse diese Methode nicht implementiert, wird beim Aufruf dieser Methode der Basisklasse eine Ausnahme ausgelöst.

to_mutable

to_mutable()

GitHub

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.

validate_parameter

validate_parameter(parameter)

GitHub

Gate-Parameter sollten int, float, oder ParameterExpression

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