Skip to main content
IBM Quantum Platform

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)

GitHub

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.

Anmerkung

Diese Klasse geht davon aus, dass die Qubit-Indizes bei 0 beginnen und eine zusammenhängende Menge sind Target objekt neu indiziert werden.

Anmerkung

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)

GitHub

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 ForLoop oder MCXGate) die Klasse angeben. Wenn die Klasse angegeben wird, muss das name Argument 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 InstructionProperties objekt für diese Befehlsimplementierung auf dem Backend. Eigenschaften sind für jede Befehlsimplementierung optional, wenn es keine InstructionProperties fü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 erste None zeigt an, dass sie für alle Qubits gilt, und das zweite None zeigt an, dass es keine InstructionProperties fü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 name attribut von gate verwendet. Alle Gates auf Target benö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 die Target klasse).
  • 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 None verwenden, 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 oder properties gesetzt ist.

build_coupling_map

build_coupling_map(two_q_gate=None, filter_idle_qubits=False)

GitHub

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 True gesetzt, wird die Ausgabe CouplingMap alle Qubits entfernen, für die im Ziel keine Operationen definiert sind. Beachten Sie, dass die Verwendung dieses Arguments zu einem Ausgabe CouplingMap objekt 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 mit CouplingMap.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

CouplingMap

Erhöht

  • ValueError - Wenn ein Nicht-Zwei-Qubit-Gatter für two_q_gate eingegeben wird.
  • IndexError - Wenn eine Anweisung, die nicht in Target enthalten ist, an two_q_gate übergeben wird.

durations

durations()

GitHub

Ein InstructionDurations Objekt vom Ziel abrufen

Rückgabe

Die Anweisungsdauer, die in der Tabelle

Ziel

Rückgabetyp

InstructionDurations

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)

GitHub

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 angegebenen custom_name_mapping Argument 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_gates auf 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 duration in den InstructionProperties objekten 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_gates einem Operation Objekt abbildet, das dieses Gate bzw. diese Operation repräsentiert. Standardmäßig werden die meisten Standard-Gatterbezeichnungen dem Standard-Gatterobjekt zugeordnet; qiskit.circuit.library dies muss nur dann angegeben werden, wenn in der Eingabe basis_gates Gatter mit Namen definiert werden, die nicht zu dieser Menge gehören.

Rückgabe

das aus der Eingabekonfiguration erstellte Ziel

Rückgabetyp

Target

Erhöht

  • TranspilerError – Wenn die Eingangsbasisgatter mehr als 2 Qubits enthalten und coupling_map ist
  • angegeben. -
  • KeyError - Wenn für ein bestimmtes basis_gate keine 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

bool

get

get(key, default=None)

GitHub

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)

GitHub

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

bool

instruction_properties

instruction_properties(index)

GitHub

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

InstructionProperties

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_class angegeben werden; wenn beide angegeben sind, hat operation_class Vorrang und dieses Argument wird ignoriert.

  • qargs (tuple) – Das Tupel der Qubit-Indizes für die Anweisung. Wenn dies nicht angegeben wird, gibt diese Methode True zurü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 der parameters auf 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_name Argument. 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 ein RXGate auf 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") des name Objekts 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 True zurückgegeben. Wenn die Parameter für die angegebene Anweisung nicht unterstützt werden, wird False zurückgegeben. Wenn dieses Argument nicht angegeben wird, gibt diese Methode True zurück, wenn die Anweisung unabhängig von den Anweisungsparametern unterstützt wird. Wenn ein Eintrag mit einem beliebigen Parameter objekten 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, wird True zurückgegeben). Zum Beispiel, wenn sie mit aufgerufen werden:

    parameters = [Parameter("theta")]
    target.instruction_supported("rx", (0,), parameters=parameters)

    wird True zurückgeben, wenn ein RXGate auf 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 Argument operation_class gepaart. Zum Beispiel:

    target.instruction_supported("rx", (0,), RXGate, parameters=[pi / 4])

    gibt True zurück, wenn ein RXGate( pi/4 ) auf Qubit 0 existiert.

  • check_angle_bounds (bool) – Wenn der Wert von parameters auf True (Standard) gesetzt ist, wird er anhand der im Ziel festgelegten Winkelgrenzen überprüft. Wenn einer der Werte in parameters auf ParameterExpression gesetzt 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

bool

items

items()

GitHub

Gibt Paare von Gatternamen und ihre Eigenschaftszuordnung zurück (str, dicttuple[, InstructionProperties] )

keys

keys()

GitHub

Rückgabe der Schlüssel (operation_names) des Target

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

qiskit.circuit.Instruction

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

set

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

Liste

Erhöht

KeyError - Wenn qargs nicht in target enthalten ist

qargs_for_operation_name

qargs_for_operation_name(operation)

GitHub

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

set

seconds_to_dt

seconds_to_dt(duration)

GitHub

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

int

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

bool

Erhöht

  • TranspilerError – Wenn name nicht im Ziel enthalten ist oder nicht
  • haben definierte Winkelgrenzen. -

timing_constraints

timing_constraints()

GitHub

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)

GitHub

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

values()

GitHub

Rückgabe der Property Map (qargs -> InstructionProperties ) jeder Anweisung im Target

Parameter

  • description (str | None)
  • num_qubits (int | None)
  • dt (float | None)
  • granularity (int)
  • min_length (int)
  • pulse_alignment (int)
  • acquire_alignment (int)
  • qubit_properties (list | None)
  • concurrent_measurements (list | None)
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.