Skip to main content
IBM Quantum Platform

QkNeighbors

QkNeighbors

struct QkNeighbors

Una rappresentazione della lista di adiacenza di un grafico di accoppiamento.

Questo viene inizializzato da qk_neighbors_from_target.

Questo oggetto è di sola lettura da C. Per soddisfare le garanzie di sicurezza di qk_neighbors_clear, non è consentito sovrascrivere alcun dato inizializzato da qk_neighbors_from_target, compresi i dati indicati.

Rappresentazione

Dopo l'inizializzazione da parte di qk_neighbors_from_target, la struttura sarà in una delle due modalità seguenti:

  • connettività all-to-all
  • connettività limitata a due qubit

Nel caso all-to-all, i puntatori neighbors``partition e saranno entrambi puntatori nulli, mentre num_qubits sarà il numero di qubit nel QkTarget. Questi oggetti non hanno allocazioni di supporto e non devono essere assegnati a qk_neighbors_clear (anche se in questo caso tale funzione è un'operazione sicura senza effetto).

Nel caso limitato a due qubit (che è di gran lunga il più comune per l'hardware reale), consultare la documentazione dei membri della struttura per la loro interpretazione.

const uint32_t *vicini

Una rappresentazione suddivisa in liste di adiacenza dei vicini di ciascun qubit. Questo puntatore è valido per esattamente partition[num_qubits + 1] letture.

Per il numero di iqubit, i suoi vicini sono i valori compresi tra gli offset partition[i] (inclusivo) e partition[i + 1] (esclusivo). I valori compresi tra questi due offset sono ordinati in ordine crescente e non contengono duplicati.

const size_t *partizione

Come il neighbors campo è suddiviso in sezioni. Questo puntatore è valido per esattamente num_qubits + 1 letture. Il primo valore è sempre 0 e i valori aumentano in modo monotono.

uint32_t numero_di_qubit

Il numero di qubit.


Funzioni

qk_neighbors_is_all_to_all

bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)

Questo grafico di accoppiamento rappresenta una connettività totale?

Ciò è rappresentato dai puntatori neighbors nulli e, partition che non sono validi per alcuna lettura.

Sicurezza

neighbors deve puntare a un oggetto valido e QkNeighbors inizializzato.

Parametri

  • vicini – Il grafico di accoppiamento.

Risultati

Se il grafico rappresenta una connettività totale.

qk_neighbors_from_target

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

Inizializza un QkNeighbors oggetto da un QkTarget.

Se il target contiene porte multi-qubit, queste saranno ignorate e la connettività rappresenterà solo i vincoli di accoppiamento a due qubit. Se il target rappresenta una connettività all-to-all, la funzione restituisce truee i puntatori di output saranno inizializzati come puntatori nulli, in linea con la rappresentazione della connettività all-to-all.

Esempi

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

Sicurezza

target deve puntare a un oggetto QkTarget valido. neighbors devono essere allineati e sicuri per la scrittura, ma non è necessario che siano inizializzati.

Parametri

  • target – Il target da cui leggere la connettività.
  • viciniQkNeighbors L'oggetto da inizializzare.

Risultati

Se rappresenta QkTarget una connettività totale (all-to-all connectivitytrue) o una connettività regolare (regular connectivityfalse).

qk_neighbors_clear

void qk_neighbors_clear(QkNeighbors *neighbors)

Libera tutte le allocazioni all'interno dell'oggetto.

Dopo aver richiamato questa funzione, QkNeighbors l'oggetto conterrà puntatori nulli in tutte le sue allocazioni e si presenterà come se rappresentasse una connettività totale.

Questo dovrebbe essere chiamato solo su QkNeighbors oggetti che sono stati inizializzati da qk_neighbors_from_target.

Sicurezza

neighbors deve puntare a un oggetto valido e QkNeighbors inizializzato, che deve essere stato inizializzato da una chiamata a qk_neighbors_from_target e non modificato da allora.

Parametri

  • vicini – Un puntatore a un QkNeighbors oggetto.
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.