QkQuantumRegister
typedef struct QkQuantumRegister QkQuantumRegisterLa création d'un registre est un moyen courant d'instancier plusieurs bits à la fois. Un registre est une collection nommée de bits. La création d'un registre permet de donner à une collection de bits un nom qui peut être utilisé comme métadonnées autour de bits spécifiques dans un circuit. Ce nom sera également conservé lors de l'exportation du circuit vers d'autres langues.
Vous pouvez créer un registre en appelant qk_quantum_register_new(), par exemple :
#include <qiskit.h>
QkQuantumRegister *qreg = qk_quantum_register_new(5, "my_qreg");Ce qui crée un nouveau registre de 5 qubits nommé "my_qreg".
Ensuite, pour ajouter le registre à un circuit, vous utilisez la fonction 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); // 5Alors que les circuits suivent les registres, les registres eux-mêmes ne transmettent pratiquement aucune différence de comportement aux circuits.
Fonctions
qk_quantum_register_new
QkQuantumRegister *qk_quantum_register_new(uint32_t num_qubits, const char *name)
Construire un nouveau registre quantique propriétaire avec un nombre de qubits et un nom donnés
Exemple
QkQuantumRegister *qr = qk_quantum_register_new(5, "five_qubits");Sécurité
Le paramètre name doit être un pointeur vers une mémoire contenant un terminateur nul valide à la fin de la chaîne. Il doit également être valide pour les lectures d'octets jusqu'au terminateur nul inclus.
Paramètres
- num_qubits - Le nombre de qubits pour lesquels le registre doit être créé
- name - Chaîne de nom du registre créé. Le nom doit être composé de caractères valides UTF-8.
Retours
Un pointeur sur le registre créé
qk_quantum_register_free
void qk_quantum_register_free(QkQuantumRegister *reg)
Registre gratuit a quantum.
Exemple
QkQuantumRegister *qr = qk_quantum_register_new(1024, "qreg");
qk_quantum_register_free(qr);Sécurité
Le comportement est indéfini si reg n'est ni null ni un pointeur valide vers QkQuantumRegister.
Paramètres
- reg - Un pointeur sur le registre à libérer.
qk_quantum_register_name
char *qk_quantum_register_name(const QkQuantumRegister *qreg)
Récupérer le nom d'un registre quantique.
Renvoie une chaîne C nouvellement allouée contenant le nom du registre quantique.
Exemple
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);Sécurité
Le comportement est indéfini si qreg n'est pas un pointeur valide et non nul vers un QkQuantumRegister.
Paramètres
- qreg – Un pointeur vers le registre quantique.
Retours
Un pointeur vers une chaîne de caractères nouvellement allouée, terminée par un caractère nul, contenant le nom du registre. L'appelant doit libérer cette chaîne à l'aide de qk_str_free.
qk_quantum_register_num_bits
size_t qk_quantum_register_num_bits(const QkQuantumRegister *qreg)
Obtenir le nombre de bits d'un registre quantique.
Renvoie la taille (nombre de bits) du registre quantique.
Exemple
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);Sécurité
Le comportement est indéfini si qreg n'est pas un pointeur valide et non nul vers un QkQuantumRegister.
Paramètres
- qreg – Un pointeur vers le registre quantique.
Retours
Le nombre de bits dans le registre.
qk_quantum_register_circuit_bits
void qk_quantum_register_circuit_bits(const QkQuantumRegister *qreg, const QkCircuit *circuit, uint32_t *out_bits)
Récupérer les indices de circuit de tous les qubits d'un registre quantique.
Génère une correspondance entre chaque qubit du registre quantique et l'index correspondant dans la liste des qubits du circuit. Si un qubit du registre n'est pas présent dans le circuit, son index dans le mappage sera UINT32_MAX.
Exemple
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);Sécurité
Le comportement est indéfini si :
qregn'est pas un pointeur valide et non nul vers unQkQuantumRegister.circuitn'est pas un pointeur valide et non nul vers unQkCircuit.qregcomporte un ou plusieurs bits etout_bitsn'est pas un pointeur aligné et non nul vers un tableau comportant au moinsqk_quantum_register_num_bits(qreg)éléments.
Paramètres
- qreg – Un pointeur vers le registre quantique à mapper.
- circuit – Un pointeur vers le circuit contenant les qubits.
- out_bits – Un pointeur vers un tableau dans lequel les indices mappés seront écrits. Le tableau doit être préalloué avec au moins
qk_quantum_register_num_bitséléments pourqreg. Chaque élément contiendra soit l'index du bit du circuit, soitUINT32_MAXsi le qubit ne figure pas dans le circuit.