Ziel
class qiskit.transpiler.Target(description=None, num_qubits=0, dt=None, granularity=1, min_length=1, pulse_alignment=1, acquire_alignment=1, qubit_properties=None, concurrent_measurements=None, **_subclass_kwargs)
Basen: BaseTarget
Der Zweck des Target Objekts ist es, den Compiler von Qiskit über die Einschränkungen eines bestimmten Backends zu informieren, damit der Compiler eine Eingabeschaltung zu etwas kompilieren kann, das funktioniert und für ein Gerät optimiert ist. Sie enthält derzeit eine Beschreibung der Anweisungen auf einem Backend und ihrer Eigenschaften sowie einige Zeitangaben. Diese genaue Schnittstelle kann sich jedoch im Laufe der Zeit weiterentwickeln, wenn sich die Anforderungen des Compilers ändern. Diese Änderungen werden in einer rückwärtskompatiblen und kontrollierten Art und Weise durchgeführt, wenn sie (entweder durch Versionierung, Unterklassen oder Mixins) vorgenommen werden, um die Menge der von einem Ziel offengelegten Informationen zu erweitern.
Nehmen wir als einfaches Beispiel an, ein Backend verfügt über zwei Qubits, unterstützt UGate auf beiden Qubits und CXGate in beide Richtungen. Um dies zu modellieren, würden Sie das Ziel wie folgt erstellen:
from qiskit.transpiler import Target, InstructionProperties
from qiskit.circuit.library import UGate, CXGate
from qiskit.circuit import Parameter
gmap = Target()
theta = Parameter('theta')
phi = Parameter('phi')
lam = Parameter('lambda')
u_props = {
(0,): InstructionProperties(duration=5.23e-8, error=0.00038115),
(1,): InstructionProperties(duration=4.52e-8, error=0.00032115),
}
gmap.add_instruction(UGate(theta, phi, lam), u_props)
cx_props = {
(0,1): InstructionProperties(duration=5.23e-7, error=0.00098115),
(1,0): InstructionProperties(duration=4.52e-7, error=0.00132115),
}
gmap.add_instruction(CXGate(), cx_props)Jede Anweisung in Target wird durch einen eindeutigen Stringnamen indiziert, der die Instanz eines Instruction objekts im Ziel identifiziert. Es gibt eine 1:1-Zuordnung zwischen einem Namen und einer Instruction instanz im Ziel und jeder Name muss eindeutig sein. Standardmäßig ist der Name das name attribut der Anweisung, kann aber auf einen beliebigen Wert gesetzt werden. Auf diese Weise kann ein einziges Ziel mehrere Instanzen derselben Instruktionsklasse mit unterschiedlichen Parametern haben. Wenn zum Beispiel ein Backend-Ziel zwei Instanzen eines RXGate hat, von denen eine über ein beliebiges Theta parametrisiert ist, während die andere auf ein Theta von pi/6 abgestimmt ist, können Sie diese hinzufügen, indem Sie etwas wie folgt tun:
import math
from qiskit.transpiler import Target, InstructionProperties
from qiskit.circuit.library import RXGate
from qiskit.circuit import Parameter
target = Target()
theta = Parameter('theta')
rx_props = {
(0,): InstructionProperties(duration=5.23e-8, error=0.00038115),
}
target.add_instruction(RXGate(theta), rx_props)
rx_30_props = {
(0,): InstructionProperties(duration=1.74e-6, error=.00012)
}
target.add_instruction(RXGate(math.pi / 6), rx_30_props, name='rx_30')Das Objekt target , auf das rx_30 zugreift, erhält dann den festen Winkel RXGate während rx den parametrisierten RXGate.
Sie können optional eine Grenze für gültige Werte an einem Gate im Ziel festlegen, indem Sie beim Aufruf der add_instruction() Methode das angle_bounds Schlüsselwortargument verwenden. Die Grenzen werden für Operationen festgelegt, nicht für einzelne Anweisungen. Wenn Sie also aufrufen, gelten add_instruction() die Grenzen für alle qargs, für die es definiert ist. Die Grenzen werden durch eine Liste von 2-Tupeln aus Fließkommazahlen angegeben, wobei die erste Fließkommazahl die Untergrenze und die zweite Fließkommazahl die Obergrenze darstellt. Wenn Sie beispielsweise eine Winkelbegrenzung angegeben haben:
[(0.0, 3.14), (-3.14, 3.14), (0.0, 1.0)]gibt die Winkelgrenzen für ein Tor mit 3 Parametern an, wobei der erste Parameter Winkel zwischen 0 und 3.14, der zweite zwischen -3.14 und 3.14 und der dritte Parameter zwischen 0 und 1 akzeptiert. Alle Grenzen sind auch inklusiv gesetzt. Eine Begrenzung kann auch mit None anstelle eines 2-Tupels angegeben werden, was bedeutet, dass der Parameter keine Beschränkungen hat. Zum Beispiel:
[(0.0, 3.14), None, None]gibt eine Winkelgrenze für ein 3-Parameter-Tor an, wobei nur der erste Parameter auf Winkel zwischen 0.0 und 3.14 beschränkt ist und die anderen Parameter jeden beliebigen Wert annehmen können.
gate_has_angle_bounds()Sie können prüfen, ob für Operationen im Ziel Winkelgrenzen festgelegt sind, has_angle_bounds() und außerdem, ob für einen bestimmten Namen im Ziel Winkelgrenzen festgelegt sind. Ob ein bestimmter Satz von Parameterwerten innerhalb der Winkelgrenzen liegt, lässt sich mit supported_angle_bound()… überprüfen. In den voreingestellten Pass-Managern wird der WrapAngles Pass dazu verwendet, die Winkelgrenzen durchzusetzen. Damit dies funktioniert, müssen Sie eine Funktion bereitstellen, die WrapAngleRegistry vom Pass verwendet wird. Weitere Einzelheiten hierzu finden Sie unter: Winkelgrenzen bei Gates.
Diese Klasse kann über das Mapping-Protokoll abgefragt werden, wobei der Name der Anweisung als Schlüssel verwendet wird. Sie können jede Eigenschaft einer Instruktion über die update_instruction_properties() methode ändern. Eine Änderung über das Mapping-Protokoll oder eine Änderung der Attribute eines InstructionProperties objekts wird nicht unterstützt und führt dazu, dass der interne Zustand des Objekts ungültig wird.
Diese Klasse geht davon aus, dass die Qubit-Indizes bei 0 beginnen und eine zusammenhängende Menge sind Target objekt neu indiziert werden.
Diese Klasse unterstützt nur das Hinzufügen von Gates, Qargs und Eigenschaften. Wenn Sie eines dieser Objekte entfernen müssen, ist es am besten, über ein bestehendes Objekt zu iterieren und eine neue Teilmenge zu erstellen (oder eine der Methoden zu verwenden). Das Objekt speichert intern verschiedene Ansichten, die bei einer Entfernung ungültig werden könnten.
Unterklassen
Obwohl es technisch möglich ist, die Subklasse Targetzu subklassifizieren, ist zu beachten, dass die meisten der eingebauten Informationen in Rust sind und von Rust in eingebauten Transpilerübergängen abgefragt werden. Python -space Overrides sind für Rust nicht sichtbar, und Sie sollten sich nicht darauf verlassen, dass diese das Verhalten von Qiskits eingebauten Transpilerübergängen ändern. Target soll im Wesentlichen eine Repräsentation einer QPU sein, die spezialisierte Konstruktoren hat, keine spezialisierten Unterklassen; die übliche API für die Konstruktion einer Target sollte eine Funktion sein, die eine Basis Targetzurückgibt, und nicht eine Unterklasse mit einem eigenen Initialisierer.
Sie können Unterklassen verwenden, um Target Ihrem zusätzliche Eigenschaften im Python -Namensraum hinzuzufügen, beispielsweise um diese anschließend in benutzerdefinierten, backend-spezifischen Transpiler-Stufen zu interpretieren; das Target wird an die Konstruktoren der Stage-Plugins übergeben.
Sie sollten nicht subclass Target nicht versuchen, das Verhalten von Qiskit's eingebauten Pässen zu verändern; die Python -space Subklassifizierung wird von in Rust geschriebenen Pässen nicht gesehen.
Da der Kern von Target in Rust geschrieben ist, verwendet er __new__() als Initialisierer, und Sie müssen sicherstellen, dass die richtigen Argumente an die zugrunde liegende Implementierung weitergegeben werden. Wenn Sie die Signatur der Methode __init__() methode überschreiben, müssen Sie auch eine Überschreibung von __new__() mit derselben Signatur enthalten, die super().__new__() auf korrekte Weise aufruft.
Erstellen Sie ein neues Target objekt.
param Beschreibung
Eine optionale Zeichenfolge zur Beschreibung des Ziels.
Typbeschreibung
str
param num_qubits
Ein optionaler int-Wert zur Angabe der Anzahl der Qubits, die das Backend-Ziel hat. Dies ist keine feste Grenze für die Konstruktion; jeder Aufruf von add_instruction() führt dazu, dass die Menge num_qubits aktualisiert wird, um alle konkreten qargs in den angegebenen Eigenschaften unterzubringen.
Dies kann explizit auf None gesetzt werden, um einen Target die einen Simulator oder eine andere abstrakte Maschine darstellt, die keine Beschränkungen für die Anzahl der Qubits vorsieht. In diesem Fall sollten alle Anweisungen, die dem Ziel hinzugefügt werden, global sein (mit properties=None oder properties={None: None}).
typ num_qubits
int
param dt
Die Systemzeitauflösung der Eingangssignale in Sekunden
typ dt
Gleitkommazahl
param Granularität
Ein ganzzahliger Wert, der die minimale Impuls-Tor-Auflösung in Einheiten von dt angibt. Ein benutzerdefiniertes Impulstor sollte eine Dauer haben, die ein Vielfaches dieses Granularitätswertes beträgt.
typ-Granularität
int
param min_length
Ein ganzzahliger Wert, der die minimale Impuls-Torlänge in Einheiten von dt angibt. Ein benutzerdefiniertes Impulstor sollte länger als diese Länge sein.
typ min_length
int
param pulse_alignment
Ein ganzzahliger Wert, der die zeitliche Auflösung der Startzeit des Gate-Befehls angibt. Der Gate-Befehl sollte zu einem Zeitpunkt beginnen, der ein Vielfaches des Ausrichtungswertes ist.
typ pulse_alignment
int
param acquire_alignment
Ein ganzzahliger Wert, der die zeitliche Auflösung der Startzeit der Messanweisung angibt. Der Messauftrag sollte zu einem Zeitpunkt beginnen, der ein Vielfaches des Ausrichtungswertes ist.
typ acquire_alignment
int
param qubit_properties
Eine Liste von QubitProperties objekten, die die Eigenschaften der einzelnen Qubits auf dem Zielgerät definieren. Falls angegeben, muss die Länge dieser Liste der Anzahl der Qubits im Ziel entsprechen, wobei der Index in der Liste der Qubit-Nummer entspricht, für die die Eigenschaften definiert sind. Wenn für einige Qubits keine Eigenschaften verfügbar sind, können Sie diesen Eintrag auf None
typ qubit_properties
Liste
param concurrent_measurements
Eine Liste von Gruppen von Qubits, die zusammen gemessen werden müssen. Diese muss als verschachtelte Liste wie [[0, 1], [2, 3, 4]] angegeben werden.
type concurrent_measures
Liste
hebt ValueError
Wenn sowohl num_qubits als auch qubit_properties definiert sind und der Wert von num_qubits sich von der Länge von qubit_properties unterscheidet.
Attribute
acquire_alignment
concurrent_measurements
description
dt
Rückgabe dt.
granularity
instructions
Holt die Liste der Tupel (Instruction, (qargs)) für das Ziel
Für global definierte Operationen mit variabler Breite hat das Tupel die Form (class, None) , wobei class die tatsächliche Operationsklasse ist, die global definiert ist.
min_length
num_qubits
operation_names
Abrufen der Vorgangsnamen im Ziel.
operations
Abrufen der Operationsobjekte im Ziel.
physical_qubits
Gibt eine sortierte Liste der physischen Qubits zurück.
pulse_alignment
qargs
Die Menge der qargs im Ziel.
qubit_properties
Methoden
add_instruction
add_instruction(instruction, properties=None, name=None, *, angle_bounds=None)
Fügen Sie eine neue Anweisung zum Target
Da Target Objekte strikt additiv sind, ist dies die primäre Methode, um ein Target zu verändern. Normalerweise werden Sie dies verwenden, um eine Target vollständig zu füllen, bevor Sie sie in BackendV2. Zum Beispiel:
from qiskit.circuit.library import CXGate
from qiskit.transpiler import Target, InstructionProperties
target = Target()
cx_properties = {
(0, 1): None,
(1, 0): None,
(0, 2): None,
(2, 0): None,
(0, 3): None,
(2, 3): None,
(3, 0): None,
(3, 2): None
}
target.add_instruction(CXGate(), cx_properties)Fügt eine CXGate zum Ziel ohne Eigenschaften (Dauer, Fehler usw.) mit der Kopplungskantenliste: (0, 1), (1, 0), (0, 2), (2, 0), (0, 3), (2, 3), (3, 0), (3, 2). Wenn für die Anweisung Eigenschaften verfügbar sind, können Sie den Wert None im Eigenschaftswörterbuch durch ein InstructionProperties objekt ersetzen. Dieses Muster wiederholt sich für jede Instruction das Ziel unterstützt.
Parameter
- instruction (Union[qiskit.circuit.Instruction, Type[qiskit.circuit.Instruction]]) – Das Operationsobjekt, das der Karte hinzugefügt werden soll. Wenn er parametrisiert ist, kann für den Parameter ein beliebiger Wert festgelegt werden. Optional können Sie für Anweisungen mit variabler Breite (wie z. B. Steuerungsoperationen wie
ForLoopoderMCXGate) die Klasse angeben. Wenn die Klasse angegeben wird, muss dasnameArgument angegeben werden. Wenn eine Klasse verwendet wird, wird das Gate als global behandelt und es werden keine Eigenschaften festgelegt. - properties (dict) – Ein Wörterbuch mit qarg-Einträgen zu einem
InstructionPropertiesobjekt für diese Befehlsimplementierung auf dem Backend. Eigenschaften sind für jede Befehlsimplementierung optional, wenn es keineInstructionPropertiesfür das Backend verfügbar sind, kann der Wert None sein. Wenn es keine Einschränkungen für die Anweisung gibt (wie bei einer geräuschlosen/idealen Simulation), kann dies auf{None, None}gesetzt werden, was bedeutet, dass sie auf allen Qubits läuft (oder auf allen verfügbaren Permutationen von Qubits für Multi-Qubit-Gatter). Das ersteNonezeigt an, dass sie für alle Qubits gilt, und das zweiteNonezeigt an, dass es keineInstructionPropertiesfür diese Anweisung. Wenn properties nicht gesetzt ist, entspricht dies standardmäßig der Übergabe von{None: None}. - name (str) – Ein optionaler Name, der zur Identifizierung der Anweisung verwendet wird. Wenn nicht angegeben, wird das
nameattribut vongateverwendet. Alle Gates aufTargetbenötigen eindeutige Namen. Backends können zwischen verschiedenen Parametrisierungen eines einzelnen Gatters unterscheiden, indem sie für jedes einen eindeutigen Namen vergeben (z.B. “rx30”, “rx60”, `”rx90”`` ähnlich dem Beispiel in der Dokumentation für dieTargetklasse). - angle_bounds (list) – Die Grenzen der Parameter für ein bestimmtes Tor. Dies wird durch eine Liste von Tupeln (niedrig, hoch) angegeben, die die untere und obere Grenze (einschließlich) der zulässigen Float-Werte für den Parameter an dieser Position darstellen. Wenn ein Parameter keine Winkelbegrenzung hat, können Sie
Noneverwenden, um dies darzustellen. Wenn z.B. ein 3-Parameter-Gate nur eine Begrenzung auf den zweiten Parameter hat, würde man das mit[None, [0, 3.14], None]darstellen, was bedeutet, dass der erste und dritte Parameter jeden Wert zulassen, der zweite Parameter aber nur Werte zwischen 0 und 3.14 akzeptiert.
Erhöht
- AttributeError - Wenn das Tor bereits in der Karte enthalten ist
- TranspilerError – Wenn eine Operationsklasse für
instructionübergeben wird und kein Name angegeben ist oderpropertiesgesetzt ist.
build_coupling_map
build_coupling_map(two_q_gate=None, filter_idle_qubits=False)
Erhalten Sie eine CouplingMap von diesem Ziel.
Wenn es eine Mischung aus zwei-Qubit-Operationen gibt, für die eine Konnektivitätsbeschränkung gilt, und solchen, die global definiert sind, wird dies ebenfalls zurückgegeben, None da die globale Konnektivität bedeutet, dass für das Ziel keine Beschränkung besteht. Wenn Sie die Einschränkungen der beiden Qubit-Operationen sehen möchten, für die Einschränkungen gelten, sollten Sie das two_q_gate Argument verwenden, um die Ausgabe auf die Gatter zu beschränken, für die eine Einschränkung gilt.
Parameter
- two_q_gate (str) – Ein optionaler Gattername für ein Zwei-Qubit-Gatter in der
Target, für das die Kopplungskarte erstellt werden soll. Wenn dies angegeben wird, enthält die Ausgangskopplungskarte nur Kanten zwischen Qubits, bei denen dieses Gatter vorhanden ist. - filter_idle_qubits (bool) – Wenn auf
Truegesetzt, wird die AusgabeCouplingMapalle Qubits entfernen, für die im Ziel keine Operationen definiert sind. Beachten Sie, dass die Verwendung dieses Arguments zu einem AusgabeCouplingMapobjekt führt, das Löcher in seinen Indizes hat, die von den Annahmen der Klasse abweichen können. Der typische Anwendungsfall für dieses Argument ist die Verknüpfung mitCouplingMap.connected_components()gepaart zu werden, das die Löcher wie erwartet behandeln wird.
Rückgabe
**Das Objekt CouplingMap **
für dieses Ziel. Wenn es im Ziel keine Konnektivitätseinschränkungen gibt, wird None zurückgegeben.
Rückgabetyp
Erhöht
- ValueError - Wenn ein Nicht-Zwei-Qubit-Gatter für
two_q_gateeingegeben wird. - IndexError - Wenn eine Anweisung, die nicht in
Targetenthalten ist, antwo_q_gateübergeben wird.
durations
durations()
Ein InstructionDurations Objekt vom Ziel abrufen
Rückgabe
Die Anweisungsdauer, die in der Tabelle
Ziel
Rückgabetyp
from_configuration
classmethod from_configuration(basis_gates, num_qubits=None, coupling_map=None, instruction_durations=None, concurrent_measurements=None, dt=None, timing_constraints=None, custom_name_mapping=None)
Erstellen eines Zielobjekts aus der individuellen globalen Konfiguration
Vor der Erstellung der Klasse Target klasse wurden die Beschränkungen eines Backends durch eine Sammlung verschiedener Objekte dargestellt, die zusammen eine Teilmenge der in der Target. Diese Funktion bietet eine einfache Schnittstelle zur Umwandlung dieser separaten Objekte in eine Target.
Dieser Konstruktor verwendet die Eingaben von basis_gates, num_qubits und coupling_map , um ein Basismodell des Backends zu erstellen, und die Eingaben von instruction_durations, backend_properties und inst_map werden dann (in dieser Reihenfolge) auf der Grundlage dieses Modells abgefragt, um die Eigenschaften jeder Anweisung und jedes Qubits nachzuschlagen. Wenn es eine Unstimmigkeit zwischen den Eingaben gibt, werden alle zusätzlichen oder widersprüchlichen Informationen, die in instruction_durations, backend_properties oder inst_map enthalten sind, ignoriert.
Parameter
- basis_gates (list[str]) – Die Liste der Basis-Gate-Bezeichnungen für das Backend. Damit das Ziel erstellt werden kann, müssen diese Namen entweder in der Ausgabe von
get_standard_gate_name_mapping()enthalten sein oder im angegebenencustom_name_mappingArgument vorhanden sein. - num_qubits (int | None) – Die Anzahl der vom Backend unterstützten Qubits.
- coupling_map (CouplingMap | None) – Die Kopplungskarte, die die Konnektivitätsbeschränkungen am Backend darstellt. Falls angegeben, werden alle Gatter von
basis_gatesauf allen Qubits (oder Qubitpaaren) unterstützt. - instruction_durations (InstructionDurations | None) – Optionale Anweisungsdauern für Anweisungen. Wenn dies angegeben ist, hat es Vorrang beim Setzen des Feldes
durationin denInstructionPropertiesobjekten für die Anweisungen im Ziel. - concurrent_measurements (list) – Eine Liste von Gruppen von Qubits, die zusammen gemessen werden müssen. Diese muss als verschachtelte Liste wie
[[0, 1], [2, 3, 4]]angegeben werden. - dt (float | None) – Die Systemzeitauflösung der Eingangssignale in Sekunden
- timing_constraints (TimingConstraints | None) – Optionale zeitliche Einschränkungen, die in die
Target - custom_name_mapping (dict[str, Any] | None) – Ein optionales Wörterbuch, das benutzerdefinierte Gate-/Operationsnamen in
basis_gateseinemOperationObjekt abbildet, das dieses Gate bzw. diese Operation repräsentiert. Standardmäßig werden die meisten Standard-Gatterbezeichnungen dem Standard-Gatterobjekt zugeordnet;qiskit.circuit.librarydies muss nur dann angegeben werden, wenn in der Eingabebasis_gatesGatter mit Namen definiert werden, die nicht zu dieser Menge gehören.
Rückgabe
das aus der Eingabekonfiguration erstellte Ziel
Rückgabetyp
Erhöht
- TranspilerError – Wenn die Eingangsbasisgatter mehr als 2 Qubits enthalten und
coupling_mapist - angegeben. -
- KeyError - Wenn für ein bestimmtes
basis_gatekeine Zuordnung vorhanden ist.
gate_has_angle_bounds
gate_has_angle_bounds(name)
Prüfen, ob für ein bestimmtes Gatter eine Winkelbegrenzung festgelegt ist
Parameter
name (str) – Der Name der Anweisung, um zu prüfen, ob eine Winkelbegrenzung gesetzt ist
Rückgabe
Diese Funktion gibt True zurück, wenn sich das Tor im Ziel befindet und die Winkelbegrenzungen definiert sind. Sie gibt False zurück, wenn für das Tor keine Winkelbegrenzungen definiert sind oder es sich nicht im Ziel befindet.
Rückgabetyp
get
get(key, default=None)
Ruft ein Element aus dem Ziel ab. Wenn nicht gefunden, wird ein angegebener Standardwert oder None zurückgegeben.
get_non_global_operation_names
get_non_global_operation_names(strict_direction=False)
Rückgabe der nicht-globalen Operationsnamen für das Ziel
Die nicht-globalen Operationen sind diejenigen im Ziel, die nicht auf alle Qubits (bei Ein-Qubit-Operationen) oder alle Multi-Qubits (bei Multi-Qubit-Operationen) anwendbar sind.
Parameter
strict_direction (bool) – Wenn sie auf True gesetzt ist, respektieren die Multi-QuBit-Operationen, die als nicht-global betrachtet werden, die strikte Richtung (oder die Reihenfolge der Qubits in den Qargs ist wichtig). Wenn z. B. cx auf (0, 1) und ecr auf (1, 0) definiert ist, würde keiner von beiden als nicht-global betrachtet werden, aber wenn strict_direction auf True gesetzt wird, würden sowohl cx als auch ecr zurückgegeben werden.
Rückgabe
Eine Liste von Vorgangsnamen für Vorgänge, die in diesem Ziel nicht global sind
Rückgabetyp
Liste [str ]
has_angle_bounds
has_angle_bounds()
Prüfen, ob im Ziel irgendwelche Winkelbegrenzungen festgelegt sind
Rückgabe
Diese Funktion gibt True zurück, wenn für eine der Anweisungen in der Schaltung Winkelbegrenzungen festgelegt sind
Rückgabetyp
instruction_properties
instruction_properties(index)
Abrufen der Befehlseigenschaften für ein bestimmtes Befehlstupel
Diese Methode ist in Verbindung mit dem instructions attribut eines Target objekts. Mit dieser Methode können Sie schnell die Anweisungseigenschaften für ein Element von instructions abrufen, indem Sie den Index in dieser Liste verwenden. Wenn Sie jedoch nicht direkt mit instructions arbeiten, ist es wahrscheinlich effizienter, über den Namen und die Qubits direkt auf das Ziel zuzugreifen, um die Befehlseigenschaften zu erhalten. Zum Beispiel, wenn instructions zurückgegeben:
[(XGate(), (0,)), (XGate(), (1,))]könnte man die Eigenschaften des XGate auf dem Qubit 1 mit erhalten:
props = target.instruction_properties(1)aber ein direkter Zugriff über den Namen wäre effizienter:
props = target['x'][(1,)](unter der Annahme, dass der kanonische Name des XGateim Ziel 'x' lautet). Dies gilt insbesondere für größere Ziele, da die Skalierung mit der Anzahl der Instruktionstupel in einem Ziel schlechter ausfällt.
Parameter
index (int) – Der Index des Instruktionstupels aus dem instructions attribut. Wenn Sie zum Beispiel die Eigenschaften des dritten Elements in instructions möchten, würden Sie dies auf 2 setzen.
Rückgabe
Die Instruktionseigenschaften für das angegebene Instruktionstupel
Rückgabetyp
instruction_supported
instruction_supported(operation_name=None, qargs=Ellipsis, operation_class=None, parameters=None, check_angle_bounds=True)
Rückgabe, ob die Anweisung (Operation + Qubits) vom Ziel unterstützt wird
Parameter
-
operation_name (str) – Der Name der Operation für die Anweisung. Es muss entweder dies oder
operation_classangegeben werden; wenn beide angegeben sind, hatoperation_classVorrang und dieses Argument wird ignoriert. -
qargs (tuple) – Das Tupel der Qubit-Indizes für die Anweisung. Wenn dies nicht angegeben wird, gibt diese Methode
Truezurück, wenn die angegebene Operation auf allen Qubits unterstützt wird. In der typischen Anwendung wird diese Einstellung immer vorhanden sein (andernfalls ist es dasselbe, als würde man nur prüfen, ob das Ziel die Operation enthält). Normalerweise würden Sie dieses Argument nicht setzen, wenn Sie ganz allgemein prüfen wollen, ob das Ziel eine Operation mit derparametersauf allen Qubits unterstützt. -
operation_class (Type[qiskit.circuit.Instruction]) – Die Operationsklasse, mit der geprüft wird, ob das Ziel eine bestimmte Operation anhand der Klasse und nicht anhand des Namens unterstützt. Dieser Suchvorgang ist aufwendiger, da er alle Operationen im Ziel durchlaufen muss, anstatt nur einen einzigen Suchvorgang durchzuführen. Wird dies angegeben, hat es Vorrang vor dem
operation_nameArgument. Der typische Anwendungsfall für diese Operation besteht darin, zu prüfen, ob eine bestimmte Variante einer Operation auf dem Backend unterstützt wird. Wenn Sie beispielsweise prüfen wollten, ob einRXGateauf einem bestimmten Qubit bei einem festen Winkel unterstützt wird. Diese Variante mit festem Winkel hat in der Regel einen anderen Namen als das Attribut ("rx") desnameObjekts im Ziel. Damit lässt sich in einem solchen Fall überprüfen, ob Instanzen der Klasse verfügbar sind. -
parameters (list) –
Eine Liste von Parametern, um zu prüfen, ob das Ziel sie auf den angegebenen Qubits unterstützt. Wenn die Anweisung die in der Liste angegebenen Parameterwerte für die angegebene Operation und die angegebenen qargs unterstützt, wird
Truezurückgegeben. Wenn die Parameter für die angegebene Anweisung nicht unterstützt werden, wirdFalsezurückgegeben. Wenn dieses Argument nicht angegeben wird, gibt diese MethodeTruezurück, wenn die Anweisung unabhängig von den Anweisungsparametern unterstützt wird. Wenn ein Eintrag mit einem beliebigenParameterobjekten in der Liste angegeben wird, wird dieser Eintrag so behandelt, als ob er einen beliebigen Wert unterstützt, jedoch werden die Parameternamen nicht überprüft (wenn z. B. eine Operation im Ziel als parametrisiert mit"theta"aufgeführt ist und"phi"an diese Funktion übergeben wird, wirdTruezurückgegeben). Zum Beispiel, wenn sie mit aufgerufen werden:parameters = [Parameter("theta")] target.instruction_supported("rx", (0,), parameters=parameters)wird
Truezurückgeben, wenn einRXGateauf Qubit 0 unterstützt wird, das einen beliebigen Parameter akzeptiert. Wenn Sie nach einem festen numerischen Wertparameter suchen müssen, wird dieses Argument normalerweise mit dem Argumentoperation_classgepaart. Zum Beispiel:target.instruction_supported("rx", (0,), RXGate, parameters=[pi / 4])gibt
Truezurück, wenn ein RXGate( pi/4 ) auf Qubit 0 existiert. -
check_angle_bounds (bool) – Wenn der Wert von
parametersauf True (Standard) gesetzt ist, wird er anhand der im Ziel festgelegten Winkelgrenzen überprüft. Wenn einer der Werte inparametersaufParameterExpressiongesetzt sind, hat dieses Flag keine Auswirkung, da sich die Winkelbegrenzungen nur auf nicht parametrisierte Operationen in der Schaltung auswirken.
Rückgabe
Gibt True zurück, wenn die Anweisung unterstützt wird, und False , wenn sie es nicht ist.
Rückgabetyp
items
items()
Gibt Paare von Gatternamen und ihre Eigenschaftszuordnung zurück (str, dicttuple[, InstructionProperties] )
keys
operation_from_name
operation_from_name(instruction)
Abrufen des Operationsklassenobjekts für einen bestimmten Namen
Parameter
instruction (str) – Der Name der Anweisung zum Abrufen der Instruction instanz für
Rückgabe
Die Instanz der Anweisung, die dem Namen entspricht. Dies kann auch die Klasse für global definierte Variablen mit Operationen sein.
Rückgabetyp
operation_names_for_qargs
operation_names_for_qargs(qargs, /)
Abrufen der Operationsnamen für ein angegebenes qargs-Tupel
Parameter
qargs (tuple) – Ein qargs Tupel der Qubits, um die Gates zu erhalten, die auf sie zutreffen. Zum Beispiel gibt (0,) die Menge aller Anweisungen zurück, die sich auf das Qubit 0 beziehen. Wenn diese Option auf None gesetzt ist, werden die Namen aller global definierten Operationen im Ziel zurückgegeben.
Rückgabe
Die Menge der Vorgangsnamen, die für den angegebenen qargs gelten.
Rückgabetyp
Erhöht
KeyError - Wenn qargs nicht im Ziel ist
operations_for_qargs
operations_for_qargs(qargs, /)
Abrufen des Operationsklassenobjekts für ein angegebenes qargs-Tupel
Parameter
qargs (tuple) – Ein qargs-Tupel der Qubits, um die Gates zu erhalten, die darauf zutreffen. Zum Beispiel gibt (0,) die Menge aller Anweisungen zurück, die sich auf das Qubit 0 beziehen. Wenn diese Option auf None gesetzt ist, werden alle global definierten Operationen im Ziel zurückgegeben.
Rückgabe
Die Liste der Instruction instanzen, die auf das angegebene qarg zutreffen. Dies kann auch eine Klasse sein, wenn eine Operation mit variabler Breite global definiert ist.
Rückgabetyp
Erhöht
KeyError - Wenn qargs nicht in target enthalten ist
qargs_for_operation_name
qargs_for_operation_name(operation)
Holt die qargs für einen gegebenen Operationsnamen
Parameter
operation (str) – Der Name der Operation, für die qargs abgerufen werden sollen
Rückgabe
Die Menge der Qargs, für die die Gate-Instanz gilt.
Rückgabetyp
seconds_to_dt
seconds_to_dt(duration)
Konvertierung einer gegebenen Dauer in Sekunden in Einheiten von dt
Parameter
duration (float) – Die Dauer in Sekunden, z. B. in einem InstructionProperties feld für eine Anweisung im Ziel.
Rückgabetyp
Rückgabe
dauer: Die Dauer in Einheiten von dt
supported_angle_bound
supported_angle_bound(name, angles)
Prüfen, ob die Parameter eines bestimmten Gatters mit den Winkelgrenzen übereinstimmen
Parameter
- name (str) – Der Name der Anweisung zur Überprüfung der Winkelbegrenzungen von
- angles (list) – Eine Liste von Float-Parameterwerten für
name, um zu sehen, ob sie mit den definierten Winkelgrenzen übereinstimmen.
Rückgabe
Gibt True zurück, wenn die angegebenen Parameterwerte mit den Winkelbegrenzungen kompatibel sind. False wird zurückgegeben, wenn einer der Parameter außerhalb der festgelegten Grenzen liegt.
Rückgabetyp
Erhöht
- TranspilerError – Wenn
namenicht im Ziel enthalten ist oder nicht - haben definierte Winkelgrenzen. -
timing_constraints
timing_constraints()
Ein TimingConstraints Objekt vom Ziel abrufen
Rückgabe
Die zeitlichen Beschränkungen, die in der Target
Rückgabetyp
TimingConstraints
update_instruction_properties
update_instruction_properties(instruction, qargs, properties)
Aktualisierung des Eigenschaftsobjekts für ein bereits im Target vorhandenes Befehls-Qarg-Paar.
Zur Erleichterung des Zugriffs kann ein Benutzer die Zuordnung zwischen den anwendbaren qargs einer Anweisung und ihren Anweisungseigenschaften über das Zuordnungsprotokoll (mit __getitem__) erhalten, wobei der Name der Anweisung der Schlüssel ist. Diese Methode ist die einzige Möglichkeit, die Eigenschaften einer Anweisung in Target zu ändern/zu aktualisieren. Die Verwendung des Mapping-Protokolls für Änderungen wird nicht unterstützt.
Parameter
- instruction (str) – Der Name der zu aktualisierenden Anweisung
- qargs (tuple) – Die qargs zum Aktualisieren der Eigenschaften von
- properties (InstructionProperties) – Die für diese Anweisung zu setzenden Eigenschaften
Erhöht
KeyError - Wenn instruction oder qarg nicht im Ziel enthalten sind
values
Parameter