Skip to main content
IBM Quantum Platform

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_DtWenn ty gilt, 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 QkValue zu 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.

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