Klassische Ausdrucksformen
Die Qiskit-C-API für klassische Ausdrücke bietet Funktionen zur Überprüfung der in Qiskit verwendeten klassischen Ausdrücke. Diese API ermöglicht es Benutzern, Ausdrucksbäume mithilfe einer Reihe von Enums, Strukturen und Zugriffsfunktionen zu durchlaufen und zu untersuchen. Sie können die Struktur von Ausdrücken untersuchen, Knotentypen identifizieren, Typinformationen abfragen und auf detaillierte Eigenschaften jedes Knotens im Ausdrucksbaum zugreifen. Derzeit kann auf klassische Ausdrücke nur über die Control-Flow-API zugegriffen werden, beispielsweise bei der Abfrage von Bedingungen, die aus klassischen Ausdrücken bestehen.
Beachten Sie, dass die Funktionen dieser API ausgeliehene Zeiger zurückgeben, die so lange gültig bleiben, wie der übergeordnete Ausdrucksbaum existiert; diese Zeiger müssen daher nicht freigegeben werden.
Datentypen
QkExprNodeKind
enum QkExprNodeKind
Die verschiedenen Arten von Ausdrucksknoten, die in einem klassischen Ausdrucksbaum vorkommen können.
Werte:
Zähler QkExprNodeKind_Unary
Ausdruck mit einer unären Operation (z. B. NOT, Negation)
Zähler QkExprNodeKind_Binary
Ausdruck mit binären Operatoren (z. B. AND, OR, arithmetische Operationen)
Zähler QkExprNodeKind_Cast
Typumwandlungsausdruck
Zähler QkExprNodeKind_Value
Literalausdruck
Zähler QkExprNodeKind_Var
Variabler Referenzausdruck
Zähler QkExprNodeKind_Stretch
Stretch-Ausdruck (zeitbezogen)
Zähler QkExprNodeKind_Index
Index-/Subskript-Ausdruck
QkExprType
enum QkExprType
Die Datentypen, die in klassischen Ausdrücken verwendet werden können.
Werte:
Zähler QkExprType_Bool
Boolescher Typ
Zähler QkExprType_Duration
Dauerart
Zähler QkExprType_Float
Gleitkommatyp
Zähler QkExprType_Uint
Typ „unsigned integer“
QkExprTypeInfo
struct QkExprTypeInfo
Die vollständige Darstellung des für einen Ausdruck verwendeten Datentyps.
QkExprType ty
Der Ausdruckstyp
uint32_t Breite
Bitbreite für den Ausdruckstyp „Uint“
QkUnaryOpType
enum QkUnaryOpType
Die Operationen, die ein unärer Ausdruck enthalten kann. Die Werte beginnen bei 1, um der Konvention „ Python “ des klassischen Ausdruckssystems zu entsprechen.
Werte:
Zähler QkUnaryOpType_BitNot
Bitweise NOT-Operation
Zähler QkUnaryOpType_LogicNot
Logische NOT-Operation
Zähler QkUnaryOpType_Negate
Arithmetische Negation
QkUnaryExprInfo
struct QkUnaryExprInfo
Beschreibt einen unären Ausdruck, einschließlich seines Operators, seines Operanden, seines Ergebnistyps und der Angabe, ob es sich um eine Konstante handelt. Wird von der qk_expr_unary_info Funktion zurückgegeben. Das operand Feld ist ein ausgeliehener Zeiger auf den Operanden des Ausdrucks der unären Operation.
QkUnaryOpType op
Der unäre Operator
const QkExprNode *Operand
Ausgeliehener Zeiger auf den Operandenausdruck
QkExprTypeInfo ty
Ergebnistyp der Operation
bool-Konstante
Ob der Ausdruck eine Konstante ist
QkBinaryOpType
enum QkBinaryOpType
Die Operationen, die ein binärer Ausdruck enthalten kann. Die Werte beginnen bei 1, um der Konvention von Python zu entsprechen.
Werte:
Zähler QkBinaryOpType_BitAnd
Bitweise UND-Verknüpfung
Zähler QkBinaryOpType_BitOr
Bitweise ODER-Operation
Zähler QkBinaryOpType_BitXor
Bitweise XOR-Operation
Zähler QkBinaryOpType_LogicAnd
Logische UND-Verknüpfung
Zähler QkBinaryOpType_LogicOr
Logische ODER-Operation
Zähler QkBinaryOpType_Equal
Vergleich der Gleichheit
Zähler QkBinaryOpType_NotEqual
Vergleich der Ungleichheit
Zähler QkBinaryOpType_Less
Weniger als Vergleich
Zähler QkBinaryOpType_LessEqual
Vergleich „kleiner oder gleich“
Zähler QkBinaryOpType_Greater
Mehr als nur ein Vergleich
Zähler QkBinaryOpType_GreaterEqual
Vergleich „größer als oder gleich“
Zähler QkBinaryOpType_ShiftLeft
Linksverschiebungsoperation
Zähler QkBinaryOpType_ShiftRight
Rechtsverschiebungsoperation
Zähler QkBinaryOpType_Add
Additionsoperation
Zähler QkBinaryOpType_Sub
Subtraktionsoperation
Zähler QkBinaryOpType_Mul
Multiplikationsoperation
Zähler QkBinaryOpType_Div
Divisionsoperation
QkBinaryExprInfo
struct QkBinaryExprInfo
Beschreibt einen binären Ausdruck, einschließlich seines Operators, seiner Operanden, seines Ergebnistyps und der Angabe, ob es sich um eine Konstante handelt. Wird von der qk_expr_binary_info Funktion zurückgegeben. Die left Felder und right sind ausgeliehene Zeiger auf die Operanden des Ausdrucks der binären Operation.
QkBinaryOpType op
Der binäre Operator
const QkExprNode *left
Ausgeliehener Zeiger auf den linken Operanden des Ausdrucks
const QkExprNode *right
Ausgeliehener Zeiger auf den Ausdruck des rechten Operanden
QkExprTypeInfo ty
Ergebnistyp der Operation
bool-Konstante
Ob der Ausdruck eine Konstante ist
QkCastExprInfo
struct QkCastExprInfo
Beschreibt einen Typumwandlungsausdruck, einschließlich des Operanden, des Zieltyps, der Angabe, ob es sich um eine implizite Typumwandlung handelt, und der Angabe, ob es sich um eine Konstante handelt. Wird von der qk_expr_cast_info Funktion zurückgegeben. Das operand Feld ist ein ausgeliehener Zeiger auf den Operanden des Typumwandlungsausdrucks.
const QkExprNode *Operand
Ausgeliehener Zeiger auf den Operanden, der umgewandelt wird
QkExprTypeInfo ty
Zieltyp der Umwandlung
bool implizit
Ob die Typumwandlung implizit (automatisch) oder explizit erfolgt
bool-Konstante
Ob der Ausdruck eine Konstante ist
QkIndexExprInfo
struct QkIndexExprInfo
Beschreibt einen Indexausdruck, einschließlich des Ziels, des Index, des Ergebnistyps und der Angabe, ob es sich um eine Konstante handelt. Wird von der qk_expr_index_info Funktion zurückgegeben. Die target Felder und index sind ausgeliehene Zeiger auf das Ziel und den Index des Indexoperationsausdrucks.
const QkExprNode *target
Entlehnter Zeiger auf den Zielausdruck, der gerade indiziert wird
const QkExprNode *index
Ausgeliehener Zeiger auf den Indexausdruck
QkExprTypeInfo ty
Ergebnistyp des Indizierungsvorgangs
bool-Konstante
Ob der Ausdruck eine Konstante ist
QkDurationType
enum QkDurationType
Stellt verschiedene Zeiteinheiten dar, die in Dauerangaben verwendet werden.
Werte:
Zähler QkDurationType_Dt
Systemzeiteinheiten
Zähler QkDurationType_Ps
Pikosekunden
Zähler QkDurationType_Ns
Nanosekunden
Zähler QkDurationType_Us
Mikrosekunden
Zähler QkDurationType_Ms
Millisekunden
Zähler QkDurationType_S
Sekunden
Gewerkschaft QkDurationValue
#include <types.h>
Eine Vereinigung, die entweder Systemzeiteinheiten (dt) als Ganzzahl oder die Echtzeit als Gleitkommazahl enthält.
Diese Vereinigung ist Teil der QkDurationInfo struct und sollte nicht direkt verwendet werden.
int64_t dt
QkDurationType_DtSystemzeiteinheiten (aktiv, wenn ty in QkDurationInfo ist)
im Eiltempo
Echtzeitwert (aktiv für alle anderen Laufzeitarten)
QkDurationInfo
struct QkDurationInfo
Die vollständige Darstellung eines Zeitwerts.
Das ty Feld dient als Unterscheidungsmerkmal, das bestimmt, welches Feld der value Vereinigung aktiv ist.
Bei der Initialisierung aus C heraus muss der Benutzer sicherstellen, dass:
value.dt``QkDurationType_DtWenntygilt, wird die Dauer als Ganzzahl in gespeichert.value.timeBei allen anderen Dauerarten wird die Dauer als Gleitkommawert in gespeichert.
QkDurationType ty
Der Typ der Zeiteinheit (Unterscheidungsmerkmal für die Vereinigung)
QkDurationValue Wert
Der Wert für die Dauer
Funktionen
qk_expr_kind
QkExprNodeKind qk_expr_kind(const QkExprNode *expr)
Gibt den Typ eines klassischen Ausdrucksknotens zurück.
Beispiel
QKExprNodeKind kind = qk_expr_kind(expr);Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf den zu untersuchenden Ausdrucksknoten.
Rückgabe
Die Typ-Enumeration, die beschreibt, welche konkrete Ausdrucksvariante expr enthalten ist.
qk_expr_binary_info
QkBinaryExprInfo qk_expr_binary_info(const QkExprNode *expr)
Informationen aus einem binären Ausdrucksknoten extrahieren.
Es wird eine Panik ausgelöst, wenn expr nicht auf einen binären Ausdrucksknoten verweist.
Beispiel
QkBinaryExprInfo info = qk_expr_binary_info(expr);
const QkExprNode *lhs = info.left;
const QkExprNode *rhs = info.right;Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen binären Ausdrucksknoten.
Rückgabe
Eine QkBinaryExprInfo Struktur, die den Operator, die Operanden, den Ergebnistyp und die Angabe beschreibt, ob es sich bei dem Ausdruck um eine Konstante handelt.
qk_expr_unary_info
QkUnaryExprInfo qk_expr_unary_info(const QkExprNode *expr)
Informationen aus einem Knoten für einen unären Ausdruck extrahieren.
Es wird eine Panik ausgelöst, wenn expr nicht auf einen unären Ausdrucksknoten verweist.
Beispiel
QkUnaryExprInfo info = qk_expr_unary_info(expr);
QkUnaryOpType op = info.op;Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen Knoten für einen unären Ausdruck.
Rückgabe
Eine QkUnaryExprInfo Struktur, die den Operator, den Operanden, den Ergebnistyp und die Angabe beschreibt, ob es sich bei dem Ausdruck um eine Konstante handelt.
qk_expr_cast_info
QkCastExprInfo qk_expr_cast_info(const QkExprNode *expr)
Informationen aus einem „Cast“-Ausdrucksknoten extrahieren.
Es kommt zu einer Panik, wenn expr nicht auf einen Cast-Ausdruck-Knoten verweist.
Beispiel
QkCastExprInfo info = qk_expr_cast_info(expr);
const QkExprNode *operand = info.operand;Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen Knoten für einen Typumwandlungsausdruck.
Rückgabe
Eine QkCastExprInfo Struktur, die den Operanden, den Zieltyp, die Angabe, ob es sich um eine implizite Typumwandlung handelt, sowie die Angabe, ob der Ausdruck eine Konstante ist, beschreibt.
qk_expr_index_info
QkIndexExprInfo qk_expr_index_info(const QkExprNode *expr)
Informationen aus einem Indexausdrucksknoten extrahieren.
Es wird eine Panik ausgelöst, wenn expr nicht auf einen Indexausdruck-Knoten verweist.
Beispiel
QkIndexExprInfo info = qk_expr_index_info(expr);
const QkExprNode *target = info.target;
const QkExprNode *index = info.index;Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen Indexausdrucksknoten.
Rückgabe
Eine QkIndexExprInfo Struktur, die das indizierte Ziel, den Indexausdruck, den Ergebnistyp und die Angabe beschreibt, ob der Ausdruck eine Konstante ist.
qk_expr_as_value
const QkValue *qk_expr_as_value(const QkExprNode *expr)
Gibt eine Ansicht des zugrunde liegenden Werts des Ausdrucksknotens zurück.
Es wird eine Panik ausgelöst, wenn expr nicht auf einen Wert-Ausdruck-Knoten verweist.
Beispiel
const QkValue *value = qk_expr_as_value(expr);Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen Wertausdruck-Knoten.
Rückgabe
exprEin Zeiger auf das QkValue , was darin gespeichert ist.
qk_expr_as_var
const QkVar *qk_expr_as_var(const QkExprNode *expr)
Gibt eine Ansicht der zugrunde liegenden Variablen des Ausdrucksknotens zurück.
Es wird eine Panik ausgelöst, wenn expr nicht auf einen Variablenausdrucksknoten verweist.
Beispiel
const QkVar *var = qk_expr_as_var(expr);Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen Variablenausdruck-Knoten.
Rückgabe
exprEin Zeiger auf das QkVar , was darin gespeichert ist.
qk_expr_as_stretch
const QkStretch *qk_expr_as_stretch(const QkExprNode *expr)
Gibt eine Ansicht des zugrunde liegenden Abschnitts des Ausdrucksknotens zurück.
Es kommt zu einer Panik, wenn expr nicht auf einen Stretch-Ausdruck-Knoten verweist.
Beispiel
const QkStretch *stretch = qk_expr_as_stretch(expr);Sicherheit
QkExprNodeDas Verhalten ist nicht definiert, wenn expr kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- expr – Ein Zeiger auf einen Stretch-Ausdruck-Knoten.
Rückgabe
exprEin Zeiger auf das QkStretch , was darin gespeichert ist.
qk_value_type_info
QkExprTypeInfo qk_value_type_info(const QkValue *value)
Gibt die Typinformationen eines Werts zurück.
Beispiel
QkExprTypeInfo type_info = qk_value_type_info(value);Sicherheit
ValueDas Verhalten ist nicht definiert, wenn value kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- Wert – Ein Zeiger auf das
QkValuezu untersuchende Objekt.
Rückgabe
Eine QkExprTypeInfo Struktur, die Informationen zum Werttyp enthält.
qk_value_duration_info
QkDurationInfo qk_value_duration_info(const QkValue *value)
Strukturierte Informationen aus einem Zeitdauerwert extrahieren.
Es wird eine Panik ausgelöst, wenn value nicht auf einen Dauerwert verweist.
Beispiel
QkDurationInfo info = qk_value_duration_info(value);Sicherheit
QkValueDas Verhalten ist nicht definiert, wenn value kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- Wert – Ein Zeiger auf einen Dauerwert.
Rückgabe
Eine QkDurationInfo Struktur, die die Zeiteinheit und den Rohwert enthält.
qk_value_float
double qk_value_float(const QkValue *value)
Den Gleitkommawert aus einem QkValue. extrahieren.
Es kommt zu einem Fehler, wenn value nicht auf einen Float-Wert verweist.
Beispiel
double raw = qk_value_float(value);Sicherheit
QkValueDas Verhalten ist nicht definiert, wenn value kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- Wert – Ein Zeiger auf einen Float-Wert.
Rückgabe
Der double in value. gespeicherte Wert.
qk_value_uint
uint64_t qk_value_uint(const QkValue *value)
Extrahiere den vorzeichenlosen Ganzzahlwert aus einem QkValue vom Typ QkExprType_Uint.
Sie sollten verwenden qk_value_type_info , um sicherzustellen, dass der Wert in uint64_t passt, bevor Sie diese Funktion aufrufen.
uint64_tEs kommt zu einem Fehler, wenn value nicht auf einen QkExprType_Uint Wert verweist oder wenn die gespeicherte Ganzzahl nicht in passt.
Beispiel
uint64_t raw = qk_value_uint(value);Sicherheit
QkValueDas Verhalten ist nicht definiert, wenn value kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- Wert – Ein Zeiger auf einen uint-Wert.
Rückgabe
Der in uint64_t. umgewandelte ganzzahlige Wert.
qk_value_bool
bool qk_value_bool(const QkValue *value)
QkExprType_BoolDen Wert aus einem QkValue vom Typ extrahieren.
Es wird eine Panik ausgelöst, wenn value nicht auf einen bool-Wert verweist.
Beispiel
bool raw = qk_value_bool(value);Sicherheit
QkValueDas Verhalten ist nicht definiert, wenn value kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- Wert – Ein Zeiger auf einen bool-Wert.
Rückgabe
true wenn die gespeicherte Ganzzahl-Darstellung ungleich Null ist, andernfalls false.
qk_var_name
char *qk_var_name(const QkVar *var)
Gibt den Namen einer Variablen als neu zugewiesenen C-String zurück.
Beispiel
char *name = qk_var_name(var);
if (name != NULL) {
// Use the name...
qk_str_free(name);
}Sicherheit
QkVarDas Verhalten ist nicht definiert, wenn var kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- var – Ein Zeiger auf die zu untersuchende Variable.
Rückgabe
Eine nullterminierte Zeichenkette, die den Variablennamen enthält, oder NULL if var bezieht sich auf eine nicht eigenständige Variable (d. h. basierend auf einem klassischen Bit oder einem klassischen Register). Der Aufrufer ist Eigentümer der zurückgegebenen Zeichenkette und muss sie mit qk_str_free. freigeben.
qk_var_type_info
QkExprTypeInfo qk_var_type_info(const QkVar *var)
Gibt die vollständigen Typinformationen für eine Variable zurück.
Es kommt zu einem Fehler, wenn var etwas variabel ist, was von dieser API noch nicht unterstützt wird.
Beispiel
QkExprTypeInfo type_info = qk_var_type_info(var);Sicherheit
QkVarDas Verhalten ist nicht definiert, wenn var kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- var – Ein Zeiger auf die zu untersuchende Variable.
Rückgabe
Eine QkExprTypeInfo Struktur, die Informationen zum Variablentyp enthält.
qk_stretch_name
char *qk_stretch_name(const QkStretch *stretch)
Gibt den Namen eines Abschnitts zurück.
Beispiel
char *name = qk_stretch_name(stretch);
// Use the name...
qk_str_free(name);Sicherheit
QkStretchDas Verhalten ist nicht definiert, wenn stretch kein gültiger, nicht-null-Zeiger auf ein ist.
Parameter
- stretch – Ein Zeiger auf den zu untersuchenden Abschnitt.
Rückgabe
Eine mit einem Null-Zeichen abgeschlossene Zeichenkette, die den Namen des Stretch enthält. Der Aufrufer ist Eigentümer der zurückgegebenen Zeichenkette und muss sie mit qk_str_free. freigeben.