Skip to main content
IBM Quantum Platform

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 QkNeighbors initialisierende 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 QkNeighbors Objekt.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.