Skip to main content
IBM Quantum Platform

QkQuantumRegister

typedef struct QkQuantumRegister QkQuantumRegister

Una forma habitual de instanciar varios bits a la vez es crear un registro. Un registro es una colección de bits con nombre. La creación de un registro permite dar un nombre a una colección de bits que puede utilizarse como metadatos en torno a bits específicos de un circuito. Normalmente, este nombre también se conserva al exportar el circuito a otros idiomas.

Puede crear un registro llamando a qk_quantum_register_new(), por ejemplo:

#include <qiskit.h>

QkQuantumRegister *qreg = qk_quantum_register_new(5, "my_qreg");

Lo que crea un nuevo registro de 5 qubits llamado "my_qreg".

A continuación, para añadir el registro a un circuito se utiliza la función qk_circuit_add_quantum_register() :

QkCircuit *qc = qk_circuit_new(0, 0);
qk_circuit_add_quantum_register(qc, qreg);
uint32_t num_qubits = qk_circuit_num_qubits(qc); // 5

Aunque los circuitos rastrean los registros, los propios registros no aportan apenas diferencias de comportamiento a los circuitos.


Funciones

qk_quantum_register_new

QkQuantumRegister *qk_quantum_register_new(uint32_t num_qubits, const char *name)

Construir un nuevo registro cuántico propio con un número determinado de qubits y un nombre

Ejemplo

QkQuantumRegister *qr = qk_quantum_register_new(5, "five_qubits");

Seguridad

El parámetro name debe ser un puntero a memoria que contenga un terminador nul válido al final de la cadena. También debe ser válido para lecturas de bytes hasta el terminador nul incluido.

Parámetros

  • num_qubits - Número de qubits para los que se crea el registro
  • name - La cadena de nombre para el registro creado. El nombre debe estar compuesto por caracteres válidos de UTF-8.

Devuelve

Un puntero al registro creado

qk_quantum_register_free

void qk_quantum_register_free(QkQuantumRegister *reg)

Libera un registro cuántico.

Ejemplo

QkQuantumRegister *qr = qk_quantum_register_new(1024, "qreg");
qk_quantum_register_free(qr);

Seguridad

El comportamiento es indefinido si reg no es null o un puntero válido a QkQuantumRegister.

Parámetros

  • reg - Un puntero al registro a liberar.

qk_quantum_register_name

char *qk_quantum_register_name(const QkQuantumRegister *qreg)

Obtener el nombre de un registro cuántico.

Devuelve una cadena C recién asignada que contiene el nombre del registro cuántico.

Ejemplo

QkQuantumRegister *qr = qk_quantum_register_new(5, "my_qreg");
char *name = qk_quantum_register_name(qr);
printf("Register name: %s\n", name);
qk_str_free(name);
qk_quantum_register_free(qr);

Seguridad

El comportamiento no está definido si qreg no es un puntero válido y no nulo a un QkQuantumRegister.

Parámetros

  • qreg : un puntero al registro cuántico.

Devuelve

Un puntero a una cadena recién asignada, terminada en «null», que contiene el nombre del registro. La función que la invoca debe liberar esta cadena mediante qk_str_free.

qk_quantum_register_num_bits

size_t qk_quantum_register_num_bits(const QkQuantumRegister *qreg)

Obtén el número de bits de un registro cuántico.

Devuelve el tamaño (número de bits) del registro cuántico.

Ejemplo

QkQuantumRegister *qr = qk_quantum_register_new(5, "my_qreg");
size_t num_qubits = qk_quantum_register_num_bits(qr);
printf("Number of qubits: %zu\n", num_qubits);  // Prints: 5
qk_quantum_register_free(qr);

Seguridad

El comportamiento no está definido si qreg no es un puntero válido y no nulo a un QkQuantumRegister.

Parámetros

  • qreg : un puntero al registro cuántico.

Devuelve

El número de bits del registro.

qk_quantum_register_circuit_bits

void qk_quantum_register_circuit_bits(const QkQuantumRegister *qreg, const QkCircuit *circuit, uint32_t *out_bits)

Obtiene los índices de bits de circuito de todos los qubits de un registro cuántico.

Genera una correspondencia entre cada qubit del registro cuántico y su índice correspondiente en la lista de qubits del circuito. Si un qubit del registro no está presente en el circuito, su índice en la correspondencia será UINT32_MAX.

Ejemplo

QkCircuit *qc = qk_circuit_new(2, 0);
QkQuantumRegister *qr = qk_quantum_register_new(3, "my_qreg");
qk_circuit_add_quantum_register(qc, qr);

uint32_t bit_indices[3];

qk_quantum_register_circuit_bits(qr, qc, bit_indices);

// bit_indices now contains [2, 3, 4] since all qubits are in the circuit
// and the circuit has 2 anonymous qubits

qk_quantum_register_free(qr);
qk_circuit_free(qc);

Seguridad

El comportamiento es indefinido si:

  • qreg no es un puntero válido y no nulo a un QkQuantumRegister.
  • circuit no es un puntero válido y no nulo a un QkCircuit.
  • qreg tiene uno o más bits y out_bits no es un puntero alineado y no nulo a una matriz con al menos qk_quantum_register_num_bits(qreg) elementos.

Parámetros

  • qreg : un puntero al registro cuántico que se va a asignar.
  • circuito : un puntero al circuito que contiene los qubits.
  • out_bits : un puntero a una matriz en la que se escribirán los índices mapeados. El array debe estar preasignado con al menos qk_quantum_register_num_bits elementos para qreg. Cada elemento contendrá el índice del bit del circuito o, UINT32_MAX si el qubit no está en el circuito.
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.