LinearFunction
class qiskit.circuit.library.LinearFunction(linear, validate_input=False)
Basen: Gate
Eine lineare reversible Schaltung mit n Qubits.
Intern wird eine lineare Funktion, die auf n Qubits wirkt, als n x n Matrix von 0s und 1s im Numpy-Array-Format dargestellt.
Eine lineare Funktion lässt sich mithilfe des Patel–Markov–Hayes-Algorithmus, wie er in synth_cnot_count_full_pmh() auf der Grundlage von Referenz [1] implementiert ist, in CX- und SWAP-Gatter synthetisieren.
Aus Gründen der Effizienz wird die interne n x n-Matrix in dem von cnot_synth erwarteten Format gespeichert, d. h. in der Big-Endian- (und nicht in der Little-Endian-) Bit-Anordnungskonvention.
Beispiel:
Die Schaltung
q_0: ──■──
┌─┴─┐
q_1: ┤ X ├
└───┘
q_2: ─────wird durch eine lineare Matrix 3x3 dargestellt
Quellenangaben:
[1] Ketan N. Patel, Igor L. Markov, and John P. Hayes, Optimal synthesis of linear reversible circuits, Quantum Inf. Computer. 8(3) (2008). Online unter umich.edu.
Parameter
- linear (list[list[bool]] | np.ndarray[bool] | QuantumCircuit |LinearFunction |PermutationGate |Clifford) – Daten, aus denen sich eine lineare Funktion ableiten lässt. Es kann sich entweder um eine n×n-Matrix (die die lineare Transformation beschreibt), eine Permutation (die einen Sonderfall einer linearen Funktion darstellt), eine andere lineare Funktion, einen Clifford-Operator (sofern dieser einer linearen Funktion entspricht) oder um einen Quantenschaltkreis handeln, der aus linearen Gattern (CX und SWAP) und anderen oben beschriebenen Objekten besteht, einschließlich verschachtelter Teilschaltkreise.
- validate_input (bool) – wenn True, führt aufwendigere Eingabevalidierungsprüfungen durch, wie z. B. die Prüfung, ob eine gegebene n x n-Matrix invertierbar ist.
Erhöht
CircuitError – wenn die Eingabe ungültig ist: Entweder ist die Eingabematrix nicht quadratisch oder nicht invertierbar, oder der eingegebene Quantenschaltkreis enthält nichtlineare Objekte (zum Beispiel ein Hadamard-Gatter oder ein Clifford-Gatter, das keiner linearen Funktion entspricht).
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
TrueIm 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
linear
Gibt die n x n-Matrix zurück, die diese lineare Funktion darstellt.
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.
original_circuit
Gibt die ursprüngliche Schaltung zurück, die zur Konstruktion dieser linearen Funktion verwendet wurde (einschließlich None, wenn die lineare Funktion nicht aus einer Schaltung konstruiert wurde).
params
Die Parameter dieses Instruction. Im Idealfall sind dies Torwinkel.
Methoden
add_decomposition
add_decomposition(decomposition)
Fügen Sie eine Dekomposition der Anweisung in die SessionEquivalenceLibrary ein.
broadcast_arguments
broadcast_arguments(qargs, cargs)
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
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
control
control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)
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.
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"). WennNone, wird standardmäßig der Zustand „alle2**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 alsFalse.
Rückgabe
Eine kontrollierte Version dieses Tors.
Erhöht
QiskitError – ungültig num_ctrl_qubits oder ctrl_state.
copy
copy(name=None)
Kopie der Anweisung.
Parameter
name (str) – name, der dem kopierten Stromkreis gegeben werden soll, wenn None , dann bleibt der Name gleich.
Rückgabe
eine Kopie der aktuellen Anweisung, wobei der Name aktualisiert wird, wenn er angegeben wurde
Rückgabetyp
extend_with_identity
extend_with_identity(num_qubits, positions)
Erweitern Sie die lineare Funktion zu einer linearen Funktion über nq Qubits, mit Identitäten auf anderen Subsystemen.
Parameter
- num_qubits (int) – anzahl der Qubits der erweiterten Funktion.
- positions (list[int]) – beschreibt die Positionen der ursprünglichen Qubits in den Qubits der erweiterten Funktion.
Rückgabe
erweiterte lineare Funktion.
Rückgabetyp
function_str
function_str()
Rückgabe der String-Darstellung der linearen Funktion, die als lineare Transformation betrachtet wird.
inverse
inverse(annotated=False)
Gibt die Umkehrfunktion dieser linearen Funktion zurück.
Parameter
GateTrueannotated (bool) – Wenn diese Option aktiviert ist, wird dies in der Regel verwendet, um anstelle eines konkreten Werts einen Wert AnnotatedOperation mit einem inversen Modifikator zurückzugeben. LinearFunctionFür diese Klasse wird dieses Argument jedoch ignoriert, da die Inverse dieses Gatters immer ein ist.
Rückgabetyp
is_parameterized
is_permutation
is_permutation()
Gibt zurück, ob diese lineare Funktion eine Permutation ist, d. h. ob jede Zeile und jede Spalte der n x n-Matrix genau eine 1 enthält.
Rückgabetyp
mat_str
permutation_pattern
permutation_pattern()
Diese Methode prüft zunächst, ob eine lineare Funktion eine Permutation ist, und gibt andernfalls eine qiskit.circuit.exceptions.CircuitError aus. Falls diese lineare Funktion eine Permutation ist, wird das Permutationsmuster zurückgegeben.
power
power(exponent, annotated=False)
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)
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.
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 Gate 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
synthesize
synthesize()
Synthetisiert die lineare Funktion in eine Quantenschaltung.
Die Methode qiskit.circuit.library.generalized_gates.linear_function.LinearFunction.synthesize() ist ab Qiskit 2.1 veraltet. Sie wird in Qiskit 3.0 entfernt. Rufen Sie stattdessen LinearFunction.definition auf, oder kompilieren Sie die Schaltung.
Rückgabe
Eine Schaltung, die die Evolution umsetzt.
Rückgabetyp
to_matrix
to_matrix()
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 Basisklassenmethode eine Ausnahme ausgelöst.
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.