古典的な表現
古典式用の 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
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システムの時間単位(が QkDurationInfo の ty ときに有効)
倍速
リアルタイム値(その他のすべての期間タイプで有効)
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_tが QkExprType_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呼び出し元は、返された文字列の所有権を持ち、. を使用してそれを解放する必要があります。