QkNeighbors
QkNeighbors
struct QkNeighbors
Uma representação da lista de adjacências de um gráfico de acoplamento.
Isso é inicializado por qk_neighbors_from_target.
Este objeto é somente leitura a partir de C. Para satisfazer as garantias de segurança do qk_neighbors_clear, você não deve sobrescrever nenhum dado inicializado pelo qk_neighbors_from_target, incluindo quaisquer dados apontados.
Representação
Após a inicialização por qk_neighbors_from_target, a estrutura estará em um dos dois modos:
- conectividade total
- conectividade limitada de dois qubits
No caso all-to-all, os ponteiros neighbors``partition e serão ambos o ponteiro nulo, e num_qubits será o número de qubits no QkTarget. Esses objetos não têm alocações de backup e não precisam ser fornecidos a qk_neighbors_clear (embora essa função seja uma operação nula segura nesse caso).
No caso limitado de dois qubits (que é, de longe, o mais comum para hardware real), consulte a documentação dos membros da estrutura para obter sua interpretação.
const uint32_t *vizinhos
Uma representação particionada da lista de adjacência dos vizinhos de cada qubit. Este ponteiro é válido para exatamente partition[num_qubits + 1] leituras.
Para o número de iqubits, seus vizinhos são os valores entre os deslocamentos partition[i] (inclusive) e partition[i + 1] (exclusive). Os valores entre esses dois desvios são classificados em ordem crescente e não contêm duplicatas.
const tamanho_t *partição
Como o neighbors campo é dividido em fatias. Este ponteiro é válido para exatamente num_qubits + 1 leituras. O primeiro valor é sempre 0, e os valores aumentam monotonamente.
uint32_t número de qubits
O número de qubits.
Funções
qk_neighbors_is_all_to_all
bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)
Este gráfico de acoplamento representa conectividade total?
Isso é representado por neighbors e partition sendo ponteiros nulos, portanto, eles não são válidos para nenhuma leitura.
Segurança
neighbors deve apontar para um objeto válido e QkNeighbors inicializado.
Parâmetros
- vizinhos – O gráfico de acoplamento.
Retorna
Se o gráfico representa conectividade total entre todos os nós.
qk_neighbors_from_target
bool qk_neighbors_from_target(const QkTarget *target, QkNeighbors *neighbors)
Inicialize um QkNeighbors objeto a partir de um QkTarget.
Se o alvo contiver portas multi-qubit, elas serão ignoradas e a conectividade representará apenas as restrições de acoplamento de dois qubits. Se o destino representar conectividade total, a função retornará true, e os ponteiros de saída serão inicializados como ponteiros nulos, de acordo com a representação da conectividade total.
Exemplos
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);Segurança
target deve apontar para um objeto QkTarget válido. neighbors devem estar alinhados e seguros para gravação, mas não precisam ser inicializados.
Parâmetros
- destino – O destino a partir do qual a conectividade será lida.
- vizinhos – O
QkNeighborsobjeto a ser inicializado.
Retorna
Se representa QkTarget conectividade total (true) ou tem conectividade regular (false).
qk_neighbors_clear
void qk_neighbors_clear(QkNeighbors *neighbors)
Liberar todas as alocações dentro do objeto.
Após chamar esta função, o QkNeighbors objeto conterá ponteiros nulos em todas as suas alocações e se apresentará como se representasse conectividade total.
Isso só deve ser chamado em QkNeighbors objetos que foram inicializados por qk_neighbors_from_target.
Segurança
neighbors deve apontar para um objeto válido e QkNeighbors inicializado, que deve ter sido inicializado por uma chamada a qk_neighbors_from_target e não alterado desde então.
Parâmetros
- vizinhos – Um ponteiro para um
QkNeighborsobjeto.