Skip to main content
IBM Quantum Platform

QkNeighbors

QkNeighbors

struct QkNeighbors

Una representación de lista de adyacencia de un grafo de acoplamiento.

Esto se inicializa mediante qk_neighbors_from_target.

Este objeto es de solo lectura desde C. Para cumplir con las garantías de seguridad de qk_neighbors_clear, no debe sobrescribir ningún dato inicializado por qk_neighbors_from_target, incluidos los datos a los que se hace referencia.

Representación

Tras la inicialización por qk_neighbors_from_target, la estructura estará en uno de estos dos modos:

  • conectividad de todos con todos
  • conectividad limitada de dos qubits

En el caso «todos con todos», los punteros neighbors``partition y serán ambos punteros nulos, y num_qubits será el número de qubits en el QkTarget. Estos objetos no tienen asignaciones de respaldo y no es necesario asignarlos a qk_neighbors_clear (aunque esta función es una operación segura en este caso).

En el caso limitado de dos qubits (que es, con diferencia, el más habitual en el hardware real), consulte la documentación de los miembros de la estructura para conocer su interpretación.

const uint32_t *vecinos

Una representación particionada de la lista de adyacencia de los vecinos de cada qubit. Este puntero es válido para exactamente partition[num_qubits + 1] lecturas.

Para el número de iqubits, sus vecinos son los valores entre los desplazamientos partition[i] (incluido) y partition[i + 1] (excluido). Los valores entre estos dos desplazamientos se ordenan en orden ascendente y no contienen duplicados.

const size_t *partición

Cómo se divide el neighbors campo en segmentos. Este puntero es válido para exactamente num_qubits + 1 lecturas. El primer valor es siempre 0, y los valores aumentan de forma monótona.

uint32_t número_de_qubits

El número de qubits.


Funciones

qk_neighbors_is_all_to_all

bool qk_neighbors_is_all_to_all(const QkNeighbors *neighbors)

¿Este gráfico de acoplamiento representa la conectividad total?

Esto se representa mediante neighbors y partition como punteros nulos, por lo que no son válidos para ninguna lectura.

Seguridad

neighbors debe apuntar a un objeto válido e QkNeighbors inicializado.

Parámetros

  • vecinos – El gráfico de acoplamiento.

Devuelve

Si el gráfico representa una conectividad total.

qk_neighbors_from_target

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

Inicializar un QkNeighbors objeto a partir de un QkTarget.

Si el objetivo contiene puertas de múltiples qubits, estas se ignorarán y la conectividad solo representará las restricciones de acoplamiento de dos qubits. Si el objetivo representa una conectividad total, la función devuelve true, y los punteros de salida se inicializarán como punteros nulos, en consonancia con la representación de la conectividad total.

Ejemplos

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

Seguridad

target debe apuntar a un objeto QkTarget válido. neighbors debe estar alineado y ser seguro para escribir, pero no es necesario inicializarlo.

Parámetros

  • target : el destino desde el que leer la conectividad.
  • vecinos : el QkNeighbors objeto que se va a inicializar.

Devuelve

Si representa QkTarget conectividad total ( true) o tiene conectividad regular ( false).

qk_neighbors_clear

void qk_neighbors_clear(QkNeighbors *neighbors)

Libera todas las asignaciones dentro del objeto.

Después de llamar a esta función, el QkNeighbors objeto contendrá punteros nulos en todas sus asignaciones y se presentará como si representara una conectividad total.

Esto solo debe invocarse en QkNeighbors objetos que hayan sido inicializados por qk_neighbors_from_target.

Seguridad

neighbors debe apuntar a un objeto válido e QkNeighbors inicializado, que debe haber sido inicializado mediante una llamada a qk_neighbors_from_target y no haber sido modificado desde entonces.

Parámetros

  • vecinos : un puntero a un QkNeighbors objeto.
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.