QkNeighbors
QkNeighbors
struct QkNeighbors
結合グラフの隣接リスト表現。
これはによって初期化されます qk_neighbors_from_target。
このオブジェクトはCから読み取り専用です。 の安全保証 qk_neighbors_clearを満たすためには、によって初期化されたデータ(ポインタで参照 qk_neighbors_from_targetされるデータを含む)を上書きしてはならない。
表現
初期化後 qk_neighbors_from_target、構造体は次のいずれかの状態になります:
- 全対全接続
- 限定された2量子ビット接続性
全対全の場合、 と partition の neighbors ポインタは両方ともヌルポインタとなり、 num_qubits は 内の量子ビットの数 QkTargetとなる。 これらのオブジェクトはバッキング割り当てを持たず、渡す必要もありません qk_neighbors_clear (ただしこの関数はこの場合安全なノーオペレーションです)。
限られた2量子ビットの場合(実際のハードウェアでは圧倒的に一般的なケースです)、構造体メンバーの解釈については各メンバーのドキュメントを参照してください。
const uint32_t *neighbors
各量子ビットの隣接状態を表現する分割隣接リスト。 このポインタは、正確に partition[num_qubits + 1] 回の読み取りに対して有効です。
量子ビット番号 の隣接 i要素は、オフセット partition[i] (含)から partition[i + 1] (除)までの値である。 これらの2つのオフセット間の値は昇順でソートされ、重複を含みません。
const size_t *partition
フィールド neighbors がどのようにスライスに分割されるか。 このポインタは、正確に num_qubits + 1 回の読み取りに対して有効です。 最初の値は常に0であり、値は単調増加する。
uint32_t num_qubits
量子ビットの数。
関数
qk_neighbors_is_all_to_all
bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)
この結合グラフは全対全接続を表していますか?
これは、 partition``neighbors とがヌルポインタであることを表しており、したがってそれらはいかなる読み取りにも有効ではない。
安全
neighbors 有効な初期化された QkNeighbors オブジェクトを指していなければならない。
パラメーター
- 近傍 – 結合グラフ
戻り値
グラフが全対全接続性を表しているかどうか。
qk_neighbors_from_target
bool qk_neighbors_from_target(const QkTarget *target, QkNeighbors *neighbors)
オブジェクト QkNeighbors を初期化する QkTarget。
ターゲットにマルチ量子ビットゲートが含まれる場合、それらは無視され、接続性は2量子ビット結合制約のみを表します。 ターゲットが全対全接続を表す場合、関数は を返し true、出力ポインタは全対全接続の表現に準じてヌルポインタとして初期化される。
例
QkTarget *target = build_target_from_somewhere();
QkNeighbors neighbors;
if (qk_neighbors_from_target(target, &neighbors)) {
printf("All-to-all connectivity on &lu qubits.\n", neighbors.num_qubits);
return;
}
printf("Qubit 3 has %zu neighbors.\n", neighbors.partition[4] - neighbors.partition[3]);
printf("Those neighbors are: [");
for (size_t offset = neighbors.partition[3]; offset < neighbors.partition[4]; offset++) {
printf("%u%s",
neighbors.neighbors[offset],
offset + 1 == neighbors.partition[4] ? "" : ", ");
}
printf("]\n");
qk_neighbors_clear(&neighbors);安全
target 有効な QkTarget オブジェクトを指していなければならない。 neighbors アラインメントが正しく、書き込み可能である必要がありますが、初期化する必要はありません。
パラメーター
- ターゲット – 接続性を読み取る対象。
- neighbors – 初期化する
QkNeighborsオブジェクト。
戻り値
が QkTarget 全対全接続性を表すか(true)、あるいは規則的な接続性を持つか(false)。
qk_neighbors_clear
void qk_neighbors_clear(QkNeighbors *neighbors)
オブジェクト内のすべての割り当てを解放する。
この関数を呼び出した後、オブジェクト QkNeighbors はすべての割り当てでヌルポインタを含み、全対全接続性を表しているかのように振る舞います。
これは、によって初期化されたオブジェクト QkNeighbors に対して qk_neighbors_from_targetのみ呼び出すべきです。
安全
neighbors 有効な初期化された QkNeighbors オブジェクトを指す必要があり、そのオブジェクトは``の呼び出しによって初期化され qk_neighbors_from_target 、その後変更されていないものでなければならない。
パラメーター
- neighbors – オブジェクト
QkNeighborsへのポインタ。