Skip to main content
IBM Quantum Platform

QkQuantumRegister

typedef struct QkQuantumRegister QkQuantumRegister

Un modo comune per istanziare più bit in una volta sola è quello di creare un registro. Un registro è un insieme denominato di bit. La creazione di un registro consente di assegnare a un insieme di bit un nome che può essere utilizzato come metadata per specifici bit in un circuito. Questo nome viene di solito mantenuto anche quando si esporta il circuito in lingue diverse.

È possibile creare un registro chiamando, ad esempio, qk_quantum_register_new():

#include <qiskit.h>

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

Il che crea un nuovo registro a 5 qubit chiamato "my_qreg".

Per aggiungere il registro a un circuito si utilizza la funzione 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

Mentre i circuiti tengono traccia dei registri, i registri stessi non apportano quasi nessuna differenza di comportamento ai circuiti.


Funzioni

qk_quantum_register_new

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

Costruire un nuovo registro quantistico proprietario con un numero di qubit e un nome determinati

Esempio

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

Sicurezza

Il parametro name deve essere un puntatore alla memoria che contiene un terminatore nul valido alla fine della stringa. Deve inoltre essere valido per la lettura di byte fino al terminatore nul incluso.

Parametri

  • num_qubit - Il numero di qubit per cui creare il registro
  • name - La stringa del nome del registro creato. Il nome deve essere composto da caratteri validi UTF-8.

Risultati

Un puntatore al registro creato

qk_quantum_register_free

void qk_quantum_register_free(QkQuantumRegister *reg)

Liberare un registro quantistico.

Esempio

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

Sicurezza

Il comportamento è indefinito se reg non è nullo o un puntatore valido a un QkQuantumRegister.

Parametri

  • reg - Un puntatore al registro da liberare.

qk_quantum_register_name

char *qk_quantum_register_name(const QkQuantumRegister *qreg)

Recupera il nome di un registro quantistico.

Restituisce una stringa C appena allocata contenente il nome del registro quantistico.

Esempio

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

Sicurezza

Il comportamento è indefinito se qreg non è un puntatore valido e non nullo a un QkQuantumRegister.

Parametri

  • qreg – Un puntatore al registro quantistico.

Risultati

Un puntatore a una stringa terminata da 'NULL' appena allocata contenente il nome del registro. Chi effettua la chiamata deve liberare questa stringa utilizzando qk_str_free.

qk_quantum_register_num_bits

size_t qk_quantum_register_num_bits(const QkQuantumRegister *qreg)

Calcola il numero di bit presenti in un registro quantistico.

Restituisce la dimensione (numero di bit) del registro quantistico.

Esempio

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

Sicurezza

Il comportamento è indefinito se qreg non è un puntatore valido e non nullo a un QkQuantumRegister.

Parametri

  • qreg – Un puntatore al registro quantistico.

Risultati

Il numero di bit nel registro.

qk_quantum_register_circuit_bits

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

Ottieni gli indici dei bit di circuito per tutti i qubit presenti in un registro quantistico.

Restituisce una mappatura da ciascun qubit nel registro quantistico al suo indice corrispondente nell'elenco dei qubit del circuito. Se un qubit del registro non è presente nel circuito, il suo indice nella mappatura sarà UINT32_MAX.

Esempio

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

Sicurezza

Il comportamento è indefinito se:

  • qreg non è un puntatore valido e non nullo a un QkQuantumRegister.
  • circuit non è un puntatore valido e non nullo a un QkCircuit.
  • qreg contiene uno o più bit e out_bits non è un puntatore allineato e non nullo a un array con almeno qk_quantum_register_num_bits(qreg) elementi.

Parametri

  • qreg – Un puntatore al registro quantistico da mappare.
  • circuito – Un puntatore al circuito contenente i qubit.
  • out_bits – Un puntatore a un array in cui verranno scritti gli indici mappati. L'array deve essere preallocato con almeno qk_quantum_register_num_bits elementi per qreg. Ogni elemento conterrà l'indice del bit del circuito oppure, UINT32_MAX se il qubit non è presente nel circuito.
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.