QkTargetEntry
typedef struct QkTargetEntry QkTargetEntryUm mapeamento de argumentos de qubit e propriedades que representam o mapa de porta do Target. Esse recurso é usado porque não há mapeamentos nativos válidos disponíveis em C.
Veja um exemplo de como essa estrutura funciona:
#include <qiskit.h>
#include <math.h>
// Create a Target Entry for a CX Gate
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
// Set a name for the entry
qk_target_entry_set_name(entry, "cx_gate");
// Add mapping between (0,1) and properties duration of 10e-9 and unknown error.
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 10e-9, NAN);
// Add mapping between Global, and no set duration NAN and error of 0.003)
qk_target_entry_add_property(entry, NULL, 0, NAN, 0.003);Funções
qk_target_entry_new
QkTargetEntry *qk_target_entry_new(QkGate operation)
Cria uma entrada no site QkTarget com base em uma instância do site QkGate .
Exemplo
QkTargetEntry *had_entry = qk_target_entry_new(QkGate_H);Parâmetros
- operação - O site
QkGatecujas propriedades essa entrada de destino define. Se oQkGatereceber parâmetros (que podem ser verificados comqk_gate_num_params), ele será adicionado como uma instrução no destino que aceita qualquer valor de parâmetro. Se a porta aceitar apenas um valor de parâmetro fixo, você poderá usarqk_target_entry_new_fixedem vez disso.
Retorna
Um ponteiro para o novo QkTargetEntry.
qk_target_entry_new_measure
QkTargetEntry *qk_target_entry_new_measure(void)
Cria uma nova entrada para adicionar uma instrução de medição a um site QkTarget.
Exemplo
QkTargetEntry *entry = qk_target_entry_new_measure();
// Add fixed duration and error rates from qubits at index 0 to 4.
for (uint32_t i = 0; i < 5; i++) {
// Measure is a single qubit instruction
uint32_t qargs[1] = {i};
qk_target_entry_add_property(entry, qargs, 1, 1.928e-10, 7.9829e-11);
}
// Add the entry to a target with 5 qubits
QkTarget *measure_target = qk_target_new(5);
qk_target_add_instruction(measure_target, entry);Retorna
Um ponteiro para o novo QkTargetEntry para uma instrução de medição.
qk_target_entry_new_reset
QkTargetEntry *qk_target_entry_new_reset(void)
Cria uma nova entrada para adicionar uma instrução de reinicialização a um site QkTarget.
Exemplo
QkTargetEntry *entry = qk_target_entry_new_reset();
// Add fixed duration and error rates from qubits at index 0 to 2.
for (uint32_t i = 0; i < 3; i++) {
// Reset is a single qubit instruction
uint32_t qargs[1] = {i};
qk_target_entry_add_property(entry, qargs, 1, 1.2e-11, 5.9e-13);
}
// Add the entry to a target with 3 qubits
QkTarget *reset_target = qk_target_new(3);
qk_target_add_instruction(reset_target, entry);Retorna
Um ponteiro para o novo QkTargetEntry para uma instrução de redefinição.
qk_target_entry_new_fixed
QkTargetEntry *qk_target_entry_new_fixed(QkGate operation, double *params, const char *name)
Cria uma entrada no site QkTarget com base em uma instância QkGate sem parâmetros.
Exemplo
double crx_params[1] = {3.14};
QkTargetEntry *entry = qk_target_entry_new_fixed(QkGate_CRX, crx_params, "crx_fixed")";Segurança
Espera-se que o tipo params seja um ponteiro para uma matriz de double em que o comprimento corresponda às expectativas do QkGate. Se a matriz for insuficientemente longa, o comportamento dessa função é indefinido, pois ela lerá fora dos limites da matriz. Pode ser um ponteiro nulo se não houver parâmetros para um determinado portão. Você pode consultar qk_gate_num_params para determinar quantos qubits são necessários para uma determinada porta.
Espera-se que name o ponteiro seja uma string C composta por caracteres válidos UTF-8 ou um ponteiro nulo.
No momento, não há suporte para a adição de um QkGate com parâmetros regulares.
Parâmetros
- operação - O site
QkGatecujas propriedades essa entrada de destino define. - params - Um ponteiro para os parâmetros para os quais a instrução é calibrada.
- nome – Um nome opcional para a instrução no destino. Se um ponteiro nulo for fornecido, a entrada utilizará o nome padrão da operação.
Retorna
Um ponteiro para o novo QkTargetEntry.
qk_target_entry_num_properties
size_t qk_target_entry_num_properties(const QkTargetEntry *entry)
Recupera o número de propriedades armazenadas na entrada de destino.
Exemplo
// Create an entry for an H gate
QkTargetEntry *entry = qk_target_entry_new(QkGate_H);
size_t props_size = qk_target_entry_num_properties(entry);Segurança
O comportamento é indefinido se entry não for um ponteiro válido e não nulo para um objeto QkTargetEntry .
Parâmetros
- entrada - O ponteiro para o objeto de mapeamento.
Retorna
O número de propriedades no site QkTargetEntry.
qk_target_entry_free
void qk_target_entry_free(QkTargetEntry *entry)
Libera a entrada.
Exemplo
QkTargetEntry *entry = qk_target_entry_new(QkGate_H);
qk_target_entry_free(entry);Segurança
O comportamento é indefinido se entry não for um ponteiro válido e não nulo para um objeto QkTargetEntry .
Um ponteiro de entrada será liberado quando adicionado a um QkTarget por meio de qk_target_add_instruction. Essa função deve ser usada apenas como alternativa se uma entrada nunca for adicionada a uma instância de QkTarget .
Parâmetros
- entry - O ponteiro para o objeto de mapeamento a ser liberado.
qk_target_entry_add_property
QkExitCode qk_target_entry_add_property(QkTargetEntry *entry, uint32_t *qargs, uint32_t num_qubits, double duration, double error)
Adiciona uma instância de propriedade de instrução com base em seus qargs atribuídos.
Exemplo
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);Segurança
O comportamento é indefinido se entry não for um ponteiro válido e não nulo para um objeto QkTargetEntry .
Parâmetros
- entrada - O ponteiro para o objeto de entrada.
- qargs - Um ponteiro para a matriz de índices de
uint32_tqubit para adicionar o portão, pode ser um ponteiro nulo para verificar as propriedades globais. - num_qubits - O comprimento do array qargs.
- duração - A duração da instrução em segundos no conjunto específico de qubits.
- error - A taxa de erro média da instrução no conjunto específico de qubits.
Retorna
Um código de saída.
qk_target_entry_set_name
QkExitCode qk_target_entry_set_name(QkTargetEntry *entry, const char *name)
Define um nome personalizado para a entrada de destino.
Exemplo
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
qk_target_entry_set_name(entry, "cx_gate");Segurança
O comportamento é indefinido se não entry for um ponteiro válido e diferente de nulo para um QkTargetEntry objeto. Espera-se que name o ponteiro seja uma string C composta por caracteres válidos UTF-8 ou um ponteiro nulo.
Parâmetros
- entrada - O ponteiro para o objeto de entrada.
- nome – O nome a ser definido para a entrada de destino.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.