Skip to main content
IBM Quantum Platform

QkQuantumRegister

typedef struct QkQuantumRegister QkQuantumRegister

La 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); // 5

Alors 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 :

  • qreg n'est pas un pointeur valide et non nul vers un QkQuantumRegister.
  • circuit n'est pas un pointeur valide et non nul vers un QkCircuit.
  • qreg comporte un ou plusieurs bits et out_bits n'est pas un pointeur aligné et non nul vers un tableau comportant au moins qk_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 pour qreg. Chaque élément contiendra soit l'index du bit du circuit, soit UINT32_MAX si le qubit ne figure pas dans le circuit.
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.