Skip to main content
IBM Quantum Platform

古典的な表現

古典式用の Qiskit C API は、Qiskit で使用される古典式を検査するための機能を提供します。 このAPIを使用すると、ユーザーは一連の列挙型、構造体、およびアクセサ関数を通じて、式ツリーを走査・検証することができます。 式ツリー内の式の構造を確認したり、ノードの種類を特定したり、型情報を照会したり、各ノードの詳細なプロパティにアクセスしたりすることができます。 現在、従来の式には、制御フロー API を通じてのみアクセス可能です。例えば、従来の式で構成されるクエリ条件を照会する場合などが挙げられます。

なお、このAPIの関数は、親の式ツリーが存在する限り有効な「借用ポインタ」を返すため、これらのポインタを解放する必要はありません。


データ型

QkExprNodeKind

enum QkExprNodeKind

従来型式木に現れる可能性のある、さまざまな種類の式ノード。

値:

列挙子 QkExprNodeKind_Unary

単項演算式(例:NOT、否定)

列挙子 QkExprNodeKind_Binary

二項演算式(例:AND、OR、算術演算など)

列挙子 QkExprNodeKind_Cast

型キャスト式

列挙子 QkExprNodeKind_Value

リテラル値の式

列挙子 QkExprNodeKind_Var

変数参照式

列挙子 QkExprNodeKind_Stretch

ストレッチ表現(タイミングに関するもの)

列挙子 QkExprNodeKind_Index

添字・下付き文字の式

QkExprType

enum QkExprType

従来の式で使用できるデータ型。

値:

列挙子 QkExprType_Bool

ブール・タイプ

列挙子 QkExprType_Duration

期間の種類

列挙子 QkExprType_Float

浮動小数点型

列挙子 QkExprType_Uint

符号なし整数型

QkExprTypeInfo

struct QkExprTypeInfo

式で使用されるデータ型の完全な表現。

QkExprType ty

式の型

uint32_t 幅

Uint 式型のビット幅

QkUnaryOpType

enum QkUnaryOpType

単項式が持つことのできる演算の種類。 値は、従来の式システムにおける Python の規約に合わせて、1から始まるように設定されています。

値:

列挙子 QkUnaryOpType_BitNot

ビット単位のNOT演算

列挙子 QkUnaryOpType_LogicNot

論理NOT演算

列挙子 QkUnaryOpType_Negate

算術的否定

QkUnaryExprInfo

struct QkUnaryExprInfo

単項式について、その演算子、オペランド、結果の型、および定数であるかどうかの情報を記述します。 この qk_expr_unary_info 関数によって返されます。 この operand フィールドは、単項演算式のオペランドへの借用ポインタです。

QkUnaryOpType op

単項演算子

const QkExprNode *オペランド

オペランド式へのポインタの借用

QkExprTypeInfo ty

演算の結果の型

bool 定数

その式が定数であるかどうか

QkBinaryOpType

enum QkBinaryOpType

二項式が持つことができる演算の種類。 Python の規約に合わせて、値は1から始まります。

値:

列挙子 QkBinaryOpType_BitAnd

ビット単位のAND演算

列挙子 QkBinaryOpType_BitOr

ビット単位のOR演算

列挙子 QkBinaryOpType_BitXor

ビット単位のXOR演算

列挙子 QkBinaryOpType_LogicAnd

論理AND演算

列挙子 QkBinaryOpType_LogicOr

論理OR演算

列挙子 QkBinaryOpType_Equal

等価性の比較

列挙子 QkBinaryOpType_NotEqual

不平等の比較

列挙子 QkBinaryOpType_Less

「~未満」との比較

列挙子 QkBinaryOpType_LessEqual

「以下」の比較

列挙子 QkBinaryOpType_Greater

比較以上のもの

列挙子 QkBinaryOpType_GreaterEqual

「以上」の比較

列挙子 QkBinaryOpType_ShiftLeft

左シフト演算

列挙子 QkBinaryOpType_ShiftRight

右シフト演算

列挙子 QkBinaryOpType_Add

加算

列挙子 QkBinaryOpType_Sub

引き算

列挙子 QkBinaryOpType_Mul

乗算

列挙子 QkBinaryOpType_Div

除算演算

QkBinaryExprInfo

struct QkBinaryExprInfo

演算子、オペランド、結果の型、および定数であるかどうかに至るまで、二項式を記述します。 この qk_expr_binary_info 関数によって返されます。 および right フィールドは left 、二項演算式のオペランドへの借用ポインタです。

QkBinaryOpType op

二項演算子

const QkExprNode *left

左オペランド式へのポインタの借用

const QkExprNode *right

右オペランド式へのポインタの借用

QkExprTypeInfo ty

演算の結果の型

bool 定数

その式が定数であるかどうか

QkCastExprInfo

struct QkCastExprInfo

オペランド、ターゲット型、暗黙的かどうか、および定数かどうかを含む、キャスト式について説明します。 この qk_expr_cast_info 関数によって返されます。 この operand フィールドは、型変換式のオペランドへの借用ポインタです。

const QkExprNode *オペランド

型変換の対象となっているオペランド式へのポインタを借用した

QkExprTypeInfo ty

キャストの対象タイプ

bool implicit

キャストが暗黙的(自動)か、明示的か

bool 定数

その式が定数であるかどうか

QkIndexExprInfo

struct QkIndexExprInfo

インデックス式について、ターゲット、インデックス、結果型、およびそれが定数であるかどうかの情報を記述します。 この qk_expr_index_info 関数によって返されます。 および index フィールドは target 、インデックス演算式のターゲットおよびインデックスへの借用ポインタです。

const QkExprNode *target

インデックス付けされている対象式へのポインタを借用した

const QkExprNode *index

インデックス式へのポインタの借用

QkExprTypeInfo ty

インデックス作成操作の結果の種類

bool 定数

その式が定数であるかどうか

QkDurationType

enum QkDurationType

期間の表現で使用されるさまざまな時間単位を表します。

値:

列挙子 QkDurationType_Dt

システムの時間単位

列挙子 QkDurationType_Ps

PICOSECONDS

列挙子 QkDurationType_Ns

ナノ秒

列挙子 QkDurationType_Us

マイクロ秒

列挙子 QkDurationType_Ms

ミリ秒

列挙子 QkDurationType_S

union QkDurationValue

#include <types.h>

整数型としてシステム時間単位(dt)を保持するか、浮動小数点型として実時間を保持するかを選択できるユニオン。

QkDurationInfo この結合は struct の一部であり、直接使用すべきではありません。

int64_t dt

QkDurationType_Dtシステムの時間単位(が QkDurationInfoty ときに有効)

倍速

リアルタイム値(その他のすべての期間タイプで有効)

QkDurationInfo

struct QkDurationInfo

持続時間の値の完全な表現。

この ty フィールドは、和集合 value のうちどのフィールドがアクティブであるかを決定する判別子として機能します。

C から初期化する際、以下の点を確認するのはユーザーの責任です:

  • value.dt``QkDurationType_Dtが のとき ty 、その持続時間は の中に整数として格納されます。
  • value.timeその他のすべての期間タイプについては、その期間は浮動小数点値としてに格納されます。

QkDurationType ty

持続時間の単位タイプ(和集合の判別因子)

QkDurationValue 値

期間の値


関数

qk_expr_kind

QkExprNodeKind qk_expr_kind(const QkExprNode *expr)

古典的な式ノードの型を返します。

QKExprNodeKind kind = qk_expr_kind(expr);

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – 検査対象の式ノードへのポインタ。

戻り値

どの具体的な式バリアント expr が含まれているかを記述するenum型。

qk_expr_binary_info

QkBinaryExprInfo qk_expr_binary_info(const QkExprNode *expr)

バイナリ式ノードから情報を抽出します。

がバイナリ式ノードを指していない場合 expr 、エラーが発生します。

QkBinaryExprInfo info = qk_expr_binary_info(expr);
const QkExprNode *lhs = info.left;
const QkExprNode *rhs = info.right;

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – 二項式ノードへのポインタ。

戻り値

演算子、オペランド、結果の型、および式が定数であるかどうかを記述する構造体。 QkBinaryExprInfo

qk_expr_unary_info

QkUnaryExprInfo qk_expr_unary_info(const QkExprNode *expr)

単項式ノードから情報を抽出します。

が単項式ノードを指していない場合 expr 、エラーが発生します。

QkUnaryExprInfo info = qk_expr_unary_info(expr);
QkUnaryOpType op = info.op;

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – 一項式ノードへのポインタ。

戻り値

演算子、オペランド、結果の型、および式が定数であるかどうかを記述する構造体。 QkUnaryExprInfo

qk_expr_cast_info

QkCastExprInfo qk_expr_cast_info(const QkExprNode *expr)

キャスト式ノードから情報を抽出します。

がキャスト式ノードを指していない場合 expr 、エラーが発生します。

QkCastExprInfo info = qk_expr_cast_info(expr);
const QkExprNode *operand = info.operand;

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – キャスト式ノードへのポインタ。

戻り値

オペランド、宛先型、型変換が暗黙的であるかどうか、および式が定数であるかどうかを記述する構造体。 QkCastExprInfo

qk_expr_index_info

QkIndexExprInfo qk_expr_index_info(const QkExprNode *expr)

インデックス式ノードから情報を抽出します。

がインデックス式ノードを指していない場合 expr 、エラーが発生します。

QkIndexExprInfo info = qk_expr_index_info(expr);
const QkExprNode *target = info.target;
const QkExprNode *index = info.index;

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – インデックス式ノードへのポインタ。

戻り値

インデックス付きターゲット、インデックス式、結果型、および式が定数であるかどうかを記述する構造体。 QkIndexExprInfo

qk_expr_as_value

const QkValue *qk_expr_as_value(const QkExprNode *expr)

式ノードの基となる値へのビューを返します。

が値式ノードを指していない場合 expr 、パニックが発生します。

const QkValue *value = qk_expr_as_value(expr);

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – 値式ノードへのポインタ。

戻り値

expr内に格納されているもの QkValue へのポインタ。

qk_expr_as_var

const QkVar *qk_expr_as_var(const QkExprNode *expr)

式ノードの基となる変数へのビューを返します。

が変数式ノードを指していない場合 expr 、エラーが発生します。

const QkVar *var = qk_expr_as_var(expr);

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – 変数式ノードへのポインタ。

戻り値

expr内に格納されているもの QkVar へのポインタ。

qk_expr_as_stretch

const QkStretch *qk_expr_as_stretch(const QkExprNode *expr)

式ノードの基盤となる範囲へのビューを返します。

がストレッチ式ノードを指していない場合 expr 、エラーが発生します。

const QkStretch *stretch = qk_expr_as_stretch(expr);

安全

QkExprNodeが、への有効な(null ではない)ポインタでない場合 expr 、その挙動は未定義となる。

パラメーター

  • expr – ストレッチ式ノードへのポインタ。

戻り値

expr内に格納されているもの QkStretch へのポインタ。

qk_value_type_info

QkExprTypeInfo qk_value_type_info(const QkValue *value)

値の型情報を返す。

QkExprTypeInfo type_info = qk_value_type_info(value);

安全

Valueが、への有効な(null ではない)ポインタでない場合 value 、その挙動は未定義となる。

パラメーター

  • value – 検査対象 QkValue のへのポインタ。

戻り値

値型の情報を格納する構造体 QkExprTypeInfo

qk_value_duration_info

QkDurationInfo qk_value_duration_info(const QkValue *value)

期間値から構造化された情報を抽出する。

が期間値を指していない場合 value 、エラーが発生します。

QkDurationInfo info = qk_value_duration_info(value);

安全

QkValueが、への有効な(null ではない)ポインタでない場合 value 、その挙動は未定義となる。

パラメーター

  • value – 期間値へのポインタ。

戻り値

持続時間の単位と生値を含む構造体。 QkDurationInfo

qk_value_float

double qk_value_float(const QkValue *value)

QkValue. から浮動小数点値を抽出します。

が浮動小数点値を指していない場合 value 、エラーが発生します。

double raw = qk_value_float(value);

安全

QkValueが、への有効な(null ではない)ポインタでない場合 value 、その挙動は未定義となる。

パラメーター

  • value – float型の値へのポインタ。

戻り値

value. に格納されている値 double

qk_value_uint

uint64_t qk_value_uint(const QkValue *value)

QkExprType_Uint``QkValue 型 の から、符号なし整数値を抽出する。

この関数を呼び出す前に、値が に uint64_t 収まることを確認するために を使用 qk_value_type_info してください。

uint64_tQkExprType_Uint 値を指していない場合 value 、または格納された整数がに収まらない場合、エラーが発生します。

uint64_t raw = qk_value_uint(value);

安全

QkValueが、への有効な(null ではない)ポインタでない場合 value 、その挙動は未定義となる。

パラメーター

  • value – uint型の値へのポインタ。

戻り値

uint64_t整数値がに変換されました。

qk_value_bool

bool qk_value_bool(const QkValue *value)

QkExprType_Bool``QkValue 型 の から値を抽出する。

が bool 型の値を指していない場合 value 、エラーが発生します。

bool raw = qk_value_bool(value);

安全

QkValueが、への有効な(null ではない)ポインタでない場合 value 、その挙動は未定義となる。

パラメーター

  • value – bool 型の値へのポインタ。

戻り値

true 格納されている整数表現がゼロでない場合は、そうでない場合は false

qk_var_name

char *qk_var_name(const QkVar *var)

変数の名前を、新たに割り当てられた C 文字列として返す。

char *name = qk_var_name(var);
if (name != NULL) {
    // Use the name...
    qk_str_free(name);
}

安全

QkVarが、への有効な(null ではない)ポインタでない場合 var 、その挙動は未定義となる。

パラメーター

  • var – 検査対象の変数へのポインタ。

戻り値

変数名を含むヌル終端文字列、あるいは NULL 、が非独立変数(すなわち、古典ビットまたは古典レジスタに基づく変数)を指す場合は var 、その変数名。 qk_str_free呼び出し元は、返された文字列の所有権を持ち、. を使用してそれを解放する必要があります。

qk_var_type_info

QkExprTypeInfo qk_var_type_info(const QkVar *var)

変数の完全な型情報を返す。

が多少変動すると var エラーが発生しますが、このAPIではまだこの動作はサポートされていません。

QkExprTypeInfo type_info = qk_var_type_info(var);

安全

QkVarが、への有効な(null ではない)ポインタでない場合 var 、その挙動は未定義となる。

パラメーター

  • var – 検査対象の変数へのポインタ。

戻り値

変数の型情報を格納する構造体 QkExprTypeInfo

qk_stretch_name

char *qk_stretch_name(const QkStretch *stretch)

ストレッチの名前を返す。

char *name = qk_stretch_name(stretch);
// Use the name...
qk_str_free(name);

安全

QkStretchが、への有効な(null ではない)ポインタでない場合 stretch 、その挙動は未定義となる。

パラメーター

  • stretch – 検査対象のストレッチへのポインタ。

戻り値

ストレッチ名を含む、ヌル終端文字列。 qk_str_free呼び出し元は、返された文字列の所有権を持ち、. を使用してそれを解放する必要があります。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。