Skip to main content
IBM Quantum Platform

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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.

戻り値

この QkTargetgranularity の値。

qk_target_min_length

uint32_t qk_target_min_length(const QkTarget *target)

この QkTargetmin_length の値を返す。

QkTarget *target = qk_target_new(5);
// The value defaults to 1
size_t min_length = qk_target_min_length(target);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.

戻り値

この QkTargetmin_length の値。

qk_target_pulse_alignment

uint32_t qk_target_pulse_alignment(const QkTarget *target)

この QkTargetpulse_alignment の値を返す。

QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t pulse_alignment = qk_target_pulse_alignment(target);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.

戻り値

この QkTargetpulse_alignment の値。

qk_target_acquire_alignment

uint32_t qk_target_acquire_alignment(const QkTarget *target)

この QkTargetacquire_alignment の値を返す。

QkTarget *target = qk_target_new(5);
// The value defaults to 0
uint32_t acquire_alignment = qk_target_pulse_alignment(target);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.

戻り値

この QkTargetacquire_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);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.
  • dt - 入力システムの時間分解能の dt 値。

戻り値

QkExitCode 操作が成功したかどうかを指定する。

qk_target_set_granularity

QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)

この QkTargetgranularity の値を設定する。

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_granularity(target, 2);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.
  • granularity - パルス・ゲートの最小分解能を表す値で、単位は dt

戻り値

QkExitCode 操作が成功したかどうかを指定する。

qk_target_set_min_length

QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)

この QkTargetmin_length の値を設定する。

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_min_length(target, 3);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.
  • min_length - パルス・ゲート長の最小値(単位: dt )。

戻り値

QkExitCode 操作が成功したかどうかを指定する。

qk_target_set_pulse_alignment

QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)

この QkTargetpulse_alignment の値を返す。

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_pulse_alignment(target, 4);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

パラメーター

  • target - QkTarget へのポインタ.
  • pulse_alignment - ゲートの時間分解能を表す値。

戻り値

QkExitCode 操作が成功したかどうかを指定する。

qk_target_set_acquire_alignment

QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)

この QkTargetacquire_alignment の値を設定する。

QkTarget *target = qk_target_new(5);
// The value defaults to 0
qk_target_set_acquire_alignment(target, 5);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 null ポインタでない場合、動作は未定義となる。

entryQkTargetEntry への有効な非 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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 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_paramsQkGate

パラメーター

  • 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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 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);

安全

QkTargetQkTarget への有効な非 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 列挙型

qk_target_op_clear

void qk_target_op_clear(QkTargetOp *op)

オブジェクト QkTargetOp をクリアします。

安全

ポインタがヌルまたはアラインメントされていない場合、動作は未定義となる。 ある に属するデータは QkTargetOp Rust で生成され、この関数を使用してのみ解放できます。

パラメーター

  • op – オブジェクト QkTargetOp へのポインタ。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。