QkNeighbors
QkNeighbors
struct QkNeighbors
Eine Adjazenzlisten-Darstellung eines Kopplungsgraphen.
Dies wird durch qk_neighbors_from_targetinitialisiert.
Dieses Objekt ist von C aus schreibgeschützt. Um die Sicherheitsgarantien von zu erfüllen qk_neighbors_clear, dürfen Sie keine von initialisierten Daten qk_neighbors_from_target überschreiben, einschließlich aller Daten, auf die verwiesen wird.
Darstellung
Nach der Initialisierung durch qk_neighbors_from_targetbefindet sich die Struktur in einem von zwei Modi:
- All-to-All-Konnektivität
- begrenzte Zwei-Qubit-Konnektivität
Im Fall „alle zu allen“ sind die Zeiger neighbors``partition und beide Nullzeiger, und num_qubits ist die Anzahl der Qubits in. QkTarget Diese Objekte haben keine Backing-Zuweisungen und müssen nicht an übergeben qk_neighbors_clear werden (obwohl diese Funktion in diesem Fall ein sicherer No-Op ist).
Im begrenzten Fall von zwei Qubits (der bei realer Hardware weitaus häufiger vorkommt) finden Sie die Interpretation der Strukturmitglieder in der Dokumentation.
const uint32_t *Nachbarn
Eine partitionierte Adjazenzlisten-Darstellung der Nachbarn jedes Qubits. Dieser Zeiger ist für genau partition[num_qubits + 1] Lesevorgänge gültig.
Für die Qubit-Nummer sind ihre Nachbarn die Werte zwischen den iOffsets partition[i] (einschließlich) und partition[i + 1] (ausschließlich). Die Werte zwischen diesen beiden Offsets sind in aufsteigender Reihenfolge sortiert und enthalten keine Duplikate.
const size_t *partition
Wie das neighbors Feld in Scheiben unterteilt ist. Dieser Zeiger ist für genau num_qubits + 1 Lesevorgänge gültig. Der erste Wert ist immer 0, und die Werte steigen monoton an.
uint32_t Anzahl der Qubits
Die Anzahl der Qubits.
Funktionen
qk_neighbors_is_all_to_all
bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)
Stellt dieses Kopplungsdiagramm eine vollständige Konnektivität dar?
Dies wird dadurch dargestellt, dass neighbors und partition Null-Zeiger sind, sodass sie für keine Lesevorgänge gültig sind.
Sicherheit
neighbors muss auf ein gültiges, initialisiertes QkNeighbors Objekt verweisen.
Parameter
- Nachbarn – Der Kopplungsgraph.
Rückgabe
Ob die Grafik die vollständige Konnektivität darstellt.
qk_neighbors_from_target
bool qk_neighbors_from_target(const QkTarget *target, QkNeighbors *neighbors)
Initialisieren Sie ein QkNeighbors Objekt aus einem QkTarget.
Wenn das Ziel Multi-Qubit-Gatter enthält, werden diese ignoriert und die Konnektivität repräsentiert nur die Zwei-Qubit-Kopplungsbeschränkungen. Wenn das Ziel eine All-to-All-Konnektivität darstellt, gibt die Funktion zurück true, und die Ausgabepointer werden entsprechend der Darstellung der All-to-All-Konnektivität als Nullpointer initialisiert.
Beispiele
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);Sicherheit
target muss auf ein gültiges QkTarget Objekt verweisen. neighbors muss ausgerichtet und sicher beschreibbar sein, muss jedoch nicht initialisiert werden.
Parameter
- Ziel – Das Ziel, aus dem die Konnektivität gelesen werden soll.
- Nachbarn – Das zu
QkNeighborsinitialisierende Objekt.
Rückgabe
Ob die eine vollständige Konnektivität (true) QkTarget oder eine reguläre Konnektivität (false) aufweist.
qk_neighbors_clear
void qk_neighbors_clear(QkNeighbors *neighbors)
Geben Sie alle Zuweisungen innerhalb des Objekts frei.
Nach dem Aufruf dieser Funktion enthält das QkNeighbors Objekt in allen seinen Zuweisungen Null-Zeiger und stellt sich so dar, als würde es eine All-to-All-Konnektivität darstellen.
Dies sollte nur für QkNeighbors Objekte aufgerufen werden, die qk_neighbors_from_target mit initialisiert wurden.
Sicherheit
neighbors muss auf ein gültiges, initialisiertes QkNeighbors Objekt verweisen, das durch einen Aufruf von initialisiert worden qk_neighbors_from_target sein muss und seitdem unverändert geblieben ist.
Parameter
- Nachbarn – Ein Zeiger auf ein
QkNeighborsObjekt.