QkTarget
typedef struct QkTarget QkTargetバックエンドの特定の制約を表す命令とプロパティのマッピング。 その目的は、コンパイラが入力回路を、 QkTargetの仕様を考慮して最適化された別の回路にコンパイルするための情報を提供することである。 この構造体は、Rustの主要なTargetデータ構造への低レベルのインターフェイスを表しており、 Python の対応する基本クラスを表している、 Target.
この構造がどのように機能するかの例を挙げよう:
#include <qiskit.h>
#include <math.h>
// Create a Target with 2 qubits
QkTarget *target = qk_target_new(2);
// Create an entry for a CX Gate with qargs (0, 1) and properties
// duration = 0.0123
// error = NaN
uint32_t qargs[2] = {0, 1};
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
qk_target_entry_add_property(entry, qargs, 2, 0.0123, NAN);
// Add a CX Gate to the target
qk_target_add_instruction(target, entry);
// Add a global H gate
qk_target_add_instruction(target, qk_target_entry_new(QkGate_H));
// Free the created target.
qk_target_free(target);Target C APIは現在、パラメータなしまたは固定パラメータを持つ QkGate インスタンスの追加のみをサポートしています。 将来的には、通常のパラメーターもサポートする予定である。 ラスト・データ・モデルの機能を向上させるにつれて、機能は拡大していくだろう。
データ型
QkInstructionProperties
struct QkInstructionProperties
ターゲット操作の命令プロパティの表現。
倍の期間
指定された量子ビット集合に対する命令の実行時間(秒単位) プロパティが定義されていない場合、 NaN に設定されます。
二重エラー
指定された量子ビット集合に対する命令の平均誤り率。 プロパティが定義されていない場合、 NaN に設定されます。
QkTargetOp
struct QkTargetOp
ターゲット内で特定された操作の表現
この構造 Target 体は基盤となるAPIによってネイティブに作成されるため、ユーザーは直接書き込みを行ったり、その属性を手動で解放しようとすべきではありません。そうすると未定義の動作を引き起こす可能性があります。 この構造体を解放するには、代わりに qk_target_op_clear を呼び出す必要があります。
QkOperationKind op_type
現在の操作の識別子。
char *name
操作の名前。
uint32_t num_qubits
この操作がサポートする量子ビットの数。 可変長引数の場合には (uint32_t)-1 デフォルトで となる。
const QkParam **params
この操作に関連付けられたパラメータは、次のように QkParam。 パラメータがない場合、この値はポインタ NULL で表されます。
uint32_t num_params
この操作がサポートするパラメータの数。 可変長引数の場合には (uint32_t)-1 デフォルトで となる。
関数
qk_target_new
QkTarget *qk_target_new(uint32_t num_qubits)
与えられた数の量子ビットで新しい QkTarget を構築する。 どのインデックスも指定された量子ビット数より大きいqargsのコレクションに適用されるプロパティを持つ命令が追加された場合、量子ビット数は変更されることになる
例
QkTarget *target = qk_target_new(5);パラメーター
- num_qubits -
QkTargetが明示的にサポートする量子ビットの数。
戻り値
新しい QkTarget
qk_target_borrow_from_python
QkTarget *qk_target_borrow_from_python(PyObject *ob)
PythonQkTarget オブジェクトからポインタを取得します。
これは Python への参照を取得し、その型が正しい場合、その QkTarget ポインタを抽出します。 返されるポインタは、その ob ポインタから借用されたものです。 が PyObject 正しい型でない場合、戻り値は NULL となり、 Python インタプリタの例外状態が設定されます。
この関数を呼び出すには、 Python のインタプリタに接続されている必要があります。
また、 qk_target_convert_from_pythonを使用することもできます。これは論理的にはこの関数と全く同じですが、 Python コンバータ PyArg_Parse* 関数のファミリー向けの「コンバータ」関数として直接使用することができます。
安全
呼び出し元は、 Python のインタプリタに接続されている必要があります。 が、 Python オブジェクトへの有効な(NULLではない)ポインタでない ob 場合、動作は未定義となります。
パラメーター
- ob – Python から借用したオブジェクト。
戻り値
ネイティブオブジェクトへのポインタ、あるいは NULLPython オブジェクトの型が正しくない場合。
qk_target_convert_from_python
int qk_target_convert_from_python(PyObject *object, void *address)
Python オブジェクトからTargetポインタを取得します。
これは Python への参照を受け取り、その QkTarget ポインタが正しい型であれば、 addressそれをに抽出します。 返されるポインタは、その object ポインタから借用されたものです。 が正しい PyObject 型でない場合、戻り値は 1 となり、 Python インタプリタの例外状態が設定され、 address は変更されません。
この関数を呼び出すには、 Python のインタプリタに接続されている必要があります。
また、 qk_target_borrow_from_pythonを使用することもできます。これは論理的にはこれと全く同じですが、直接使用する際のシグネチャがより自然になっています。
安全
呼び出し元は、 Python のインタプリタに接続されている必要があります。 が Python オブジェクトへの有効な(NULLではない)ポインタでない object 場合、またはが正しい型の書き込み可能なデータへのポインタでない address 場合、動作は未定義となります。
パラメーター
- object – 借用された Python オブジェクト。
- アドレス – 出力を書き込む場所。
戻り値
成功時は1、失敗時は0。
qk_target_num_qubits
uint32_t qk_target_num_qubits(const QkTarget *target)
この QkTarget の量子ビット数を返す。
例
QkTarget *target = qk_target_new(5);
uint32_t num_qubits = qk_target_num_qubits(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
このターゲットが使用できる量子ビットの数。
qk_target_dt
double qk_target_dt(const QkTarget *target)
この QkTarget の dt 値を返す。
例
QkTarget *target = qk_target_new(5);
qk_target_set_dt(target, 10e-9);
double dt = qk_target_dt(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
この QkTarget のdt値、割り当てられていない場合は NAN 。
qk_target_granularity
uint32_t qk_target_granularity(const QkTarget *target)
この QkTarget の粒度の値を返します。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t granularity = qk_target_granularity(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
この QkTarget の granularity の値。
qk_target_min_length
uint32_t qk_target_min_length(const QkTarget *target)
この QkTarget の min_length の値を返す。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 1
size_t min_length = qk_target_min_length(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
この QkTarget の min_length の値。
qk_target_pulse_alignment
uint32_t qk_target_pulse_alignment(const QkTarget *target)
この QkTarget の pulse_alignment の値を返す。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t pulse_alignment = qk_target_pulse_alignment(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
この QkTarget の pulse_alignment の値。
qk_target_acquire_alignment
uint32_t qk_target_acquire_alignment(const QkTarget *target)
この QkTarget の acquire_alignment の値を返す。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 0
uint32_t acquire_alignment = qk_target_pulse_alignment(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
この QkTarget の acquire_alignment の値。
qk_target_set_dt
QkExitCode qk_target_set_dt(QkTarget *target, double dt)
QkTarget のdt値を設定する。
例
QkTarget *target = qk_target_new(5);
double dt = qk_target_set_dt(target, 10e-9);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - dt - 入力システムの時間分解能の
dt値。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_set_granularity
QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)
この QkTarget の granularity の値を設定する。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_granularity(target, 2);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - granularity - パルス・ゲートの最小分解能を表す値で、単位は
dt。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_set_min_length
QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)
この QkTarget の min_length の値を設定する。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_min_length(target, 3);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - min_length - パルス・ゲート長の最小値(単位:
dt)。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_set_pulse_alignment
QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)
この QkTarget の pulse_alignment の値を返す。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_pulse_alignment(target, 4);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - pulse_alignment - ゲートの時間分解能を表す値。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_set_acquire_alignment
QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)
この QkTarget の acquire_alignment の値を設定する。
例
QkTarget *target = qk_target_new(5);
// The value defaults to 0
qk_target_set_acquire_alignment(target, 5);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - acquire_alignment - 測定指示開始時刻の時間分解能を表す値。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_copy
QkTarget *qk_target_copy(QkTarget *target)
QkTarget のコピーを作成する。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
QkExitCode result = qk_target_add_instruction(target, entry);
QkTarget *copied = qk_target_copy(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target - コピーする
QkTargetへのポインタ.
戻り値
QkTarget の新しいコピーへのポインタ。
qk_target_free
void qk_target_free(QkTarget *target)
Free the QkTarget.
例
QkTarget *target = qk_target_new(5);
qk_target_free(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target - 解放する
QkTargetへのポインタ.
qk_target_add_instruction
QkExitCode qk_target_add_instruction(QkTarget *target, QkTargetEntry *target_entry)
QkTargetEntry を通して QkTarget にゲートを追加する。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
QkExitCode result = qk_target_add_instruction(target, entry);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
entry が QkTargetEntry への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - target_entry -
QkTargetEntryへのポインタ。QkTargetに追加されると、ポインターは解放される。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_update_property
QkExitCode qk_target_update_property(QkTarget *target, QkGate instruction, uint32_t *qargs, uint32_t num_qubits, double duration, double error)
QkTarget のゲートのプロパティを変更する。
例
QkTarget *target = qk_target_new(5);
double params[1] = {3.1415};
QkTargetEntry *entry = qk_target_entry_new_fixed(QkGate_CRX, params, "crx_pi");
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
qk_target_update_property(target, QkGate_CRX, qargs, 2, 0.0012, 1.1);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
qargs 型は、 uint32_t の配列へのポインタであることが期待され、長さは num_qubits で指定され、ゲートの期待値と一致しなければならない。 配列の長さが十分でない場合、配列の境界外を読み込むことになるため、この関数の動作は未定義である。 指定されたゲートに量子ビットがない場合は、NULLポインタになることもある。 qk_gate_num_qubits 、与えられたゲートに必要な量子ビットの数を調べることができる。
パラメーター
- target -
QkTargetへのポインタ. - instruction - 修正する命令。
- qargs - qargs として使う
uint32_tの値の配列へのポインタ。 グローバルならNULL。 - num_qubits - 命令の量子ビット数。
- duration - 特定の量子ビットのセットにおける命令の持続時間(秒)。
- error - 特定の量子ビットのセットにおける命令の平均エラー率。
戻り値
QkExitCode 操作が成功したかどうかを指定する。
qk_target_num_instructions
size_t qk_target_num_instructions(const QkTarget *target)
QkTarget が追跡した命令数を返す。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
size_t num_instructions = qk_target_num_instructions(target);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ.
戻り値
ターゲットの長さ。
qk_target_instruction_supported
bool qk_target_instruction_supported(const QkTarget *target, const char *operation_name, const uint32_t *qargs, QkParam **params)
指定された命令とそのqargsが本製品でサポート Targetされているか確認します。
例
// Create a mock target with only a global crx entry
// and 3.14 as its rotation parameter.
QkTarget *target = qk_target_new(5);
QkTargetEntry *crx_entry = qk_target_entry_new_fixed(QkGate_CRX, (double[]){3.14});
qk_target_entry_add_property(crx_entry, NULL, 0, 0.0, 0.1);
qk_target_add_instruction(target, crx_entry);
// Check if target is compatible with a "crx" gate
// at [0, 1] with 3.14 rotation.
QkParam *params[1] = {qk_param_from_double(3.14)};
qk_target_instruction_supported(target, "crx", (uint32_t []){0, 1}, params);
// Free the pointers
qk_param_free(params[0]);
qk_target_free(target);安全
が有効な、ヌルでないへの QkTargetポインタでない target 場合、動作は未定義である。
引 qargs 数は、ゲートが期待する長さと一致する u32int_t 配列へのポインタであることが想定される。 配列の長さが不十分な場合、この関数の動作は未定義となります。これは配列の境界外を読み取ることになるためです。 特定のゲートに対して量子ビットが存在しない場合、ヌルポインタとなる可能性があります。 特定のゲートに必要な量子ビット数を確認するには qk_gate_num_qubits 、以下を参照してください。
引 params 数は配列であることが期待され、 QkParam その長さは対象の操作の期待値と一致する。 配列の長さが不十分な場合、引数 qargs について前述したように動作は未定義となります。 常に確認できます qk_gate_num_params 。 QkGate
パラメーター
- target –.
Targetへのポインタ - operation_name – 確認対象の命令名。
- qargs - qargs として使う
uint32_tの値の配列へのポインタ。 グローバルならNULL。 - params – チェック対象のパラメータとして渡される
QkParamオブジェクトのポインタ配列へのポインタ。 パラメータが存在しない場合、可能NULLである。
戻り値
その命令がサポートされているかどうか。
qk_target_op_index
size_t qk_target_op_index(const QkTarget *target, const char *name)
操作の名前に基づいて、その操作が位置するインデックスを返す。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
size_t op_idx = qk_target_op_index(target, "h");安全
が有効な、ヌルでないへの QkTargetポインタでない QkTarget 場合、動作は未定義である。 が有効なヌル終端文字列へのポインタでない name 場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - name – インデックスを取得する名前。
戻り値
操作がターゲットに含まれない場合、その操作 size_t が最大値となるインデックス。
qk_target_op_name
char *qk_target_op_name(const QkTarget *target, size_t index)
インスタンス QkTarget のゲートマップにおいて、そのインデックスに格納されている操作の名前を返す。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
char *op_name = qk_target_op_name(target, 0);
// Free after use
qk_str_free(op_name);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - インデックス – ゲートが格納されているインデックス。
戻り値
指定されたインデックスに関連付けられた操作の名前。
qk_target_op_num_properties
size_t qk_target_op_num_properties(const QkTarget *target, size_t index)
指定された操作に対してインスタンス QkTargeta.k.a で定義されたプロパティの数を返します。 物件マップの長さ。 操作インデックスが存在しない場合、パニック状態になる。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
size_t num_props = qk_target_op_num_properties(target, 0);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - index – ゲートが格納されているインデックス。
戻り値
そのインデックスに関連付けられた操作に対して指定されたプロパティの数。
qk_target_op_qargs_index
size_t qk_target_op_qargs_index(const QkTarget *target, size_t op_idx, const uint32_t *qargs)
いくつかのqargsが格納されているインデックスを取得する。 見つからない場合に SIZE_MAX 返す。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
size_t idx_0_1 = qk_target_op_qargs_index(target, 0, qargs);安全
QkTarget が QkTarget への有効な非 null ポインタでない場合、動作は未定義となる。
パラメーター
- target -
QkTargetへのポインタ. - op_idx – 操作が格納されるインデックス。
- qargs – チェック対象の
uint32_t量子ビットインデックス配列へのポインタ。グローバルプロパティをチェックする場合はNULLポインタを指定可能。
戻り値
指定 op_idx されたインデックスの命令に関連付けられたqargsのインデックス、 SIZE_MAX またはqargsが存在しない場合のインデックス。
qk_target_op_qargs
void qk_target_op_qargs(const QkTarget *target, size_t op_idx, size_t qarg_idx, uint32_t **qargs_out, uint32_t *qargs_len)
操作のqargsをインデックスで取得する。
いずれかのインデックスが範囲外の場合にパニック状態になる。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
uint32_t *qargs_retrieved;
uint32_t qargs_length;
qk_target_op_qargs(target, 0, 0, &qargs_retrieved, &qargs_length);
if (qargs_retrieved) {
// We should enter this branch.
printf("Number of qargs: %lu\n", qargs_length);
} else {
printf("Qargs are global\n");
}安全
が有効な、ヌルでないへの QkTargetポインタでない target 場合、動作は未定義である。 各 qargs_out または qargs_len が、正しい型の単一値に対してアラインメントされず書き込み可能でない場合、動作は未定義である。
パラメーター
- target -
QkTargetへのポインタ. - op_idx – ゲートが格納されているインデックス。
- qarg_idx – qargs が格納されるインデックス。
- qargs_out – 量子ビット配列への出力ポインタ。 if
op_idxがグローバル操作を指す場合、ヌルポインタが書き込まれる。 書かれたポインタは対象から借りたものであり、解放してはならない。 ゼロ引数命令は、読み取りには無効なポインタではあるが、ヌルでないポインタを出力する。 - qargs_len – qargsの長さへのアウトポインタ。
qargs_outインデックスがグローバルな場合、書き込み長は定義されていません。
qk_target_op_props
void qk_target_op_props(const QkTarget *target, size_t op_idx, size_t qarg_idx, QkInstructionProperties *inst_props)
操作に対応するインデックスに格納されているqargsを取得する。
いずれかのインデックスが範囲外の場合にパニック状態になる。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
QkInstructionProperties inst_props;
qk_target_op_props(target, 0, 0, &inst_props);安全
が有効な、ヌルでないへの QkTargetポインタでない target 場合、動作は未定義である。 が を格納 QkInstructionProperties するのに適切なサイズのアドレスを指していない inst_props 場合、動作は未定義である。
パラメーター
- target -
QkTargetへのポインタ. - op_idx – ゲートが格納されているインデックス。
- qarg_idx – qargs が格納されるインデックス。
- inst_props – インスタンス
QkInstructionPropertiesを書き出すためのポインタ。
qk_target_op_get
void qk_target_op_get(const QkTarget *target, size_t index, QkTargetOp *out_op)
ターゲット内の操作に関する情報をインデックス経由で取得します。 インデックスが存在しない場合、この関数はパニックを起こします。 命令の総数はを使用して QkTarget 確認できます qk_target_num_instructions。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
QkTargetOp op;
qk_target_op_get(target, 0, &op);
// Clean up after you're done
qk_target_op_clear(&op);安全
が有効な、ヌルでないへの QkTargetポインタでない target 場合、動作は未定義である。 が を格納 QkTargetOp するのに適切なサイズのアドレスを指していない out_op 場合、動作は未定義である。
パラメーター
- target -
QkTargetへのポインタ. - index – ゲートが格納されているインデックス。
- out_op – 格納される
QkTargetOpスペースへのポインタ。
qk_target_op_gate
QkGate qk_target_op_gate(const QkTarget *target, size_t index)
インデックスに格納された操作に基づいて QkGate 、を取得しようとします。 ユーザーは、この操作がビア QkTarget 内のゲートであるかどうかを、を使用して確認する責任 qk_target_op_getを負います。 そうでない場合、この関数はパニックを起こします。
例
QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
QkTargetOp op;
qk_target_op_get(target, 0, &op);
// Check if the operation is a gate;
if (op.op_type == QkOperationKind_Gate) {
QkGate gate = qk_target_op_gate(target, 0);
// Do something
}
// Clean up after you're done.
qk_target_op_clear(&op);安全
ポインタ target がヌルであるかアラインメントが取れていない場合、動作は未定義となる。
パラメーター
- target – インスタンス
Targetへのポインタ。 - インデックス – 操作が位置するインデックス。
戻り値
当該インデックス内の QkGate 列挙型