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à.
- vicini –
QkNeighborsL'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
QkNeighborsoggetto.