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
QkNeighborsobjeto 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
QkNeighborsobjeto.