Skip to main content
IBM Quantum Platform

QkQuantumRegister

typedef struct QkQuantumRegister QkQuantumRegister

Uma maneira comum de instanciar vários bits de uma vez é criar um registro. Um registro é um conjunto nomeado de bits. A criação de um registro permite dar a uma coleção de bits um nome que pode ser usado como metadados em torno de bits específicos em um circuito. Normalmente, esse nome também será preservado ao exportar o circuito para idiomas de intercâmbio.

É possível criar um registro chamando qk_quantum_register_new(), por exemplo:

#include <qiskit.h>

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

O que cria um novo registro de 5 qubits chamado "my_qreg".

Em seguida, para adicionar o registro a um circuito, use a função 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

Embora os circuitos rastreiem os registros, os próprios registros quase não transmitem diferenças de comportamento aos circuitos.


Funções

qk_quantum_register_new

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

Construa um novo registro quântico proprietário com um determinado número de qubits e nome

Exemplo

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

Segurança

O parâmetro name deve ser um ponteiro para a memória que contém um terminador nul válido no final da cadeia de caracteres. Ele também deve ser válido para leituras de bytes até o terminador nul, inclusive.

Parâmetros

  • num_qubits - O número de qubits para criar o registro
  • name - A cadeia de caracteres do nome do registro criado. O nome deve ser composto de caracteres válidos em UTF-8.

Retorna

Um ponteiro para o registro criado

qk_quantum_register_free

void qk_quantum_register_free(QkQuantumRegister *reg)

Libere um registro quântico.

Exemplo

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

Segurança

O comportamento é indefinido se reg não for nulo ou um ponteiro válido para QkQuantumRegister.

Parâmetros

  • reg - Um ponteiro para o registro a ser liberado.

qk_quantum_register_name

char *qk_quantum_register_name(const QkQuantumRegister *qreg)

Obter o nome de um registro quântico.

Retorna uma string C recém-alocada contendo o nome do registro quântico.

Exemplo

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

Segurança

O comportamento é indefinido se qreg não for um ponteiro válido e não nulo para um QkQuantumRegister.

Parâmetros

  • qreg – Um ponteiro para o registro quântico.

Retorna

Um ponteiro para uma string recém-alocada, terminada em null, que contém o nome do registro. O chamador deve liberar essa string usando qk_str_free.

qk_quantum_register_num_bits

size_t qk_quantum_register_num_bits(const QkQuantumRegister *qreg)

Obter o número de bits em um registro quântico.

Retorna o tamanho (número de bits) do registro quântico.

Exemplo

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

Segurança

O comportamento é indefinido se qreg não for um ponteiro válido e não nulo para um QkQuantumRegister.

Parâmetros

  • qreg – Um ponteiro para o registro quântico.

Retorna

O número de bits no registro.

qk_quantum_register_circuit_bits

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

Obter os índices de bits do circuito para todos os qubits em um registro quântico.

Gera um mapeamento de cada qubit no registro quântico para o índice correspondente na lista de qubits do circuito. Se um qubit do registro não estiver presente no circuito, seu índice no mapeamento será UINT32_MAX.

Exemplo

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

Segurança

O comportamento é indefinido se:

  • qreg não é um ponteiro válido e diferente de nulo para um QkQuantumRegister.
  • circuit não é um ponteiro válido e diferente de nulo para um QkCircuit.
  • qreg possui um ou mais bits e out_bits não é um ponteiro alinhado e diferente de nulo para uma matriz com pelo menos qk_quantum_register_num_bits(qreg) elementos.

Parâmetros

  • qreg – Um ponteiro para o registro quântico a ser mapeado.
  • circuito – Um ponteiro para o circuito que contém os qubits.
  • out_bits – Um ponteiro para uma matriz na qual os índices mapeados serão gravados. A matriz deve ser pré-alocada com pelo menos qk_quantum_register_num_bits elementos para qreg. Cada elemento conterá o índice do bit do circuito ou, UINT32_MAX caso o qubit não esteja no circuito.
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.