Skip to main content
IBM Quantum Platform

QkNeighbors

QkNeighbors

struct QkNeighbors

Représentation sous forme de liste d'adjacence d'un graphe de couplage.

Ceci est initialisé par qk_neighbors_from_target.

Cet objet est en lecture seule depuis C. Pour respecter les garanties de sécurité de qk_neighbors_clear, vous ne devez pas écraser les données initialisées par qk_neighbors_from_target, y compris les données pointées.

Représentation

Après initialisation par qk_neighbors_from_target, la structure sera dans l'un des deux modes suivants :

  • connectivité de type « tout à tous »
  • connectivité limitée à deux qubits

Dans le cas « tout-à-tout », les pointeurs neighbors``partition et seront tous deux des pointeurs nuls, et num_qubits sera le nombre de qubits dans le QkTarget. Ces objets n'ont pas d'allocations de sauvegarde et n'ont pas besoin d'être transmis à qk_neighbors_clear (bien que cette fonction soit sans effet dans ce cas).

Dans le cas limité à deux qubits (qui est de loin le plus courant pour le matériel réel), consultez la documentation des membres de la structure pour leur interprétation.

const uint32_t *voisins

Une représentation partitionnée sous forme de liste d'adjacence des voisins de chaque qubit. Ce pointeur est valide pour exactement partition[num_qubits + 1] lectures.

Pour le nombre de iqubits, ses voisins sont les valeurs comprises entre les décalages partition[i] (inclus) et partition[i + 1] (exclus). Les valeurs comprises entre ces deux décalages sont triées par ordre croissant et ne contiennent aucun doublon.

const size_t *partition

Comment le neighbors champ est divisé en tranches. Ce pointeur est valide pour exactement num_qubits + 1 lectures. La première valeur est toujours 0, et les valeurs augmentent de façon monotone.

uint32_t num_qubits

Le nombre de qubits.


Fonctions

qk_neighbors_is_all_to_all

bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)

Ce graphique de couplage représente-t-il une connectivité totale?

Ceci est représenté par neighbors et partition étant des pointeurs nuls, ils ne sont donc valides pour aucune lecture.

Sécurité

neighbors doit pointer vers un objet valide et QkNeighbors initialisé.

Paramètres

  • voisins – Le graphe de couplage.

Retours

Le graphique représente-t-il une connectivité totale?

qk_neighbors_from_target

bool qk_neighbors_from_target(const QkTarget *target, QkNeighbors *neighbors)

Initialiser un QkNeighbors objet à partir d'un QkTarget.

Si la cible contient des portes multi-qubits, celles-ci seront ignorées et la connectivité ne représentera que les contraintes de couplage à deux qubits. Si la cible représente une connectivité totale, la fonction renvoie true, et les pointeurs de sortie seront initialisés comme pointeurs nuls, conformément à la représentation de la connectivité totale.

Exemples

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

Sécurité

target doit pointer vers un objet QkTarget valide. neighbors doit être aligné et sécurisé pour l'écriture, mais n'a pas besoin d'être initialisé.

Paramètres

  • target – La cible à partir de laquelle lire la connectivité.
  • voisinsQkNeighbors L'objet à initialiser.

Retours

Que ce soit la QkTarget connectivité représentée de manière globale (true) ou la connectivité régulière (false).

qk_neighbors_clear

void qk_neighbors_clear(QkNeighbors *neighbors)

Libérez toutes les allocations dans l'objet.

Après avoir appelé cette fonction, QkNeighbors l'objet contiendra des pointeurs nuls dans toutes ses allocations et se présentera comme s'il représentait une connectivité totale.

Cela ne devrait être appelé que sur QkNeighbors les objets qui ont été initialisés par qk_neighbors_from_target.

Sécurité

neighbors doit pointer vers un objet valide et QkNeighbors initialisé, qui doit avoir été initialisé par un appel à qk_neighbors_from_target et n'avoir subi aucune modification depuis lors.

Paramètres

  • voisins – Pointeur vers un QkNeighbors objet.
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.