Skip to main content
IBM Quantum Platform

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 QkNeighbors objeto 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 QkNeighbors objeto.
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.