QkQuantumRegister
typedef struct QkQuantumRegister QkQuantumRegisterUn 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); // 5Mentre 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:
qregnon è un puntatore valido e non nullo a unQkQuantumRegister.circuitnon è un puntatore valido e non nullo a unQkCircuit.qregcontiene uno o più bit eout_bitsnon è un puntatore allineato e non nullo a un array con almenoqk_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_bitselementi perqreg. Ogni elemento conterrà l'indice del bit del circuito oppure,UINT32_MAXse il qubit non è presente nel circuito.