QkTarget
typedef struct QkTarget QkTargetUm mapeamento de instruções e propriedades que representam as restrições específicas de um backend. Sua finalidade é fornecer ao compilador informações que permitam compilar um circuito de entrada em outro que seja otimizado, levando em consideração as especificações do site QkTarget. Essa estrutura representa uma interface de baixo nível para a principal estrutura de dados Target no Rust, que representa a classe base para sua contraparte Python, Target.
Veja um exemplo de como essa estrutura funciona:
#include <qiskit.h>
#include <math.h>
// Create a Target with 2 qubits
QkTarget *target = qk_target_new(2);
// Create an entry for a CX Gate with qargs (0, 1) and properties
// duration = 0.0123
// error = NaN
uint32_t qargs[2] = {0, 1};
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
qk_target_entry_add_property(entry, qargs, 2, 0.0123, NAN);
// Add a CX Gate to the target
qk_target_add_instruction(target, entry);
// Add a global H gate
qk_target_add_instruction(target, qk_target_entry_new(QkGate_H));
// Free the created target.
qk_target_free(target);Atualmente, a API Target C só oferece suporte a adições de instâncias de QkGate sem parâmetros ou com parâmetros fixos. O suporte a parâmetros regulares será adicionado no futuro. A funcionalidade continuará se expandindo com o tempo, à medida que aprimorarmos nossos recursos do modelo de dados Rust.
Tipos de dados
QkInstructionProperties
struct QkInstructionProperties
Uma representação das propriedades de instrução de uma operação de destino.
dupla duração
A duração, em segundos, da instrução no conjunto especificado de qubits. Será definido como NaN se a propriedade não estiver definida.
erro duplo
A taxa média de erro para a instrução no conjunto especificado de qubits. Será definido como NaN se a propriedade não estiver definida.
QkTargetOp
struct QkTargetOp
Representação de uma operação identificada dentro do Alvo.
Essa estrutura é criada nativamente pela API Target subjacente e os usuários não devem gravar nela diretamente nem tentar liberar seus atributos manualmente, pois isso levaria a um comportamento indefinido. Para liberar essa estrutura, os usuários devem chamar qk_target_op_clear em vez disso.
QkOperationKind op_type
O identificador da operação atual.
char *nome
O nome da operação.
uint32_t número de qubits
O número de qubits que esta operação suporta. O padrão será (uint32_t)-1 no caso de um variável.
const QkParam **params
Os parâmetros associados a esta operação, como QkParam. Se não houver parâmetros, esse valor será representado por um NULL ponteiro.
uint32_t num_parâmetros
O número de parâmetros suportados por esta operação. O padrão será (uint32_t)-1 no caso de um variável.
Funções
qk_target_new
QkTarget *qk_target_new(uint32_t num_qubits)
Construa um novo QkTarget com o número determinado de qubits. O número de qubits será alterado se uma instrução for adicionada com propriedades que se aplicam a uma coleção de qargs na qual qualquer índice é maior do que o número especificado de qubits
Exemplo
QkTarget *target = qk_target_new(5);Parâmetros
- num_qubits - O número de qubits que o site
QkTargetsuportará explicitamente.
Retorna
Um ponteiro para o novo QkTarget
qk_target_borrow_from_python
QkTarget *qk_target_borrow_from_python(PyObject *ob)
Recuperar um QkTarget ponteiro de um objeto Python.
Isso utiliza uma referência de tipo Python e extrai o QkTarget ponteiro correspondente, caso seja do tipo correto. O ponteiro retornado é obtido do ponteiro ob . Se o não PyObject for do tipo correto, o valor de retorno é NULL e o estado de exceção do interpretador do Python é definido.
Você deve estar conectado a um interpretador Python para chamar esta função.
Você também pode usar qk_target_convert_from_python, que é, em termos lógicos, exatamente igual a esta função, mas pode ser usada diretamente como uma função “conversora” para a PyArg_Parse* família de funções conversoras do Python.
Segurança
O chamador deve estar conectado a um intérprete do tipo Python. O comportamento é indefinido se não ob for um ponteiro válido e diferente de nulo para um objeto Python.
Parâmetros
- ob – Um objeto de empréstimo do tipo
Python.
Retorna
Um ponteiro para o objeto nativo, ou NULL se o objeto Python for do tipo incorreto.
qk_target_convert_from_python
int qk_target_convert_from_python(PyObject *object, void *address)
Recuperar um ponteiro Target de um objeto Python.
Isso utiliza uma referência do tipo Python e extrai o QkTarget ponteiro correspondente para address``,, caso seja do tipo correto. O ponteiro retornado é obtido do ponteiro object . Se o não PyObject for do tipo correto, o valor de retorno é 1, o estado de exceção do interpretador do Python é definido e address permanece inalterado.
Você deve estar conectado a um interpretador Python para chamar esta função.
Você também pode usar qk_target_borrow_from_python, que é, na prática, exatamente o mesmo que isto, mas com uma sintaxe mais natural para uso direto.
Segurança
O chamador deve estar conectado a um intérprete do tipo Python. O comportamento é indefinido se não object for um ponteiro válido e diferente de nulo para um objeto Python, ou se não address for um ponteiro para dados graváveis do tipo correto.
Parâmetros
- objeto – Um objeto
Pythonobtido por empréstimo. - endereço – O local onde a saída deve ser gravada.
Retorna
1 em caso de sucesso, 0 em caso de falha.
qk_target_num_qubits
uint32_t qk_target_num_qubits(const QkTarget *target)
Retorna o número de qubits desse QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
uint32_t num_qubits = qk_target_num_qubits(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O número de qubits que esse alvo pode usar.
qk_target_dt
double qk_target_dt(const QkTarget *target)
Retorna o valor dt deste QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
qk_target_set_dt(target, 10e-9);
double dt = qk_target_dt(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O valor dt desse site QkTarget ou NAN se não for atribuído.
qk_target_granularity
uint32_t qk_target_granularity(const QkTarget *target)
Retorna o valor de granularidade deste QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t granularity = qk_target_granularity(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O valor granularity desse QkTarget.
qk_target_min_length
uint32_t qk_target_min_length(const QkTarget *target)
Retorna o valor min_length deste QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
size_t min_length = qk_target_min_length(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O valor min_length desse QkTarget.
qk_target_pulse_alignment
uint32_t qk_target_pulse_alignment(const QkTarget *target)
Retorna o valor pulse_alignment deste QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t pulse_alignment = qk_target_pulse_alignment(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O valor pulse_alignment desse QkTarget.
qk_target_acquire_alignment
uint32_t qk_target_acquire_alignment(const QkTarget *target)
Retorna o valor acquire_alignment deste QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 0
uint32_t acquire_alignment = qk_target_pulse_alignment(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O valor acquire_alignment desse QkTarget.
qk_target_set_dt
QkExitCode qk_target_set_dt(QkTarget *target, double dt)
Define o valor dt desse site QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
double dt = qk_target_set_dt(target, 10e-9);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - dt - O valor
dtpara a resolução de tempo do sistema de entrada.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_set_granularity
QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)
Define o valor granularity desse QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_granularity(target, 2);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - granularidade - O valor da resolução mínima da porta de pulso em unidades de
dt.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_set_min_length
QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)
Define o valor min_length desse QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_min_length(target, 3);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - min_length - O valor mínimo do comprimento da porta de pulso em unidades de
dt.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_set_pulse_alignment
QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)
Retorna o valor pulse_alignment deste QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_pulse_alignment(target, 4);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - pulse_alignment - valor que representa uma resolução de tempo da porta.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_set_acquire_alignment
QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)
Define o valor acquire_alignment desse QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 0
qk_target_set_acquire_alignment(target, 5);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - acquire_alignment - valor que representa uma resolução de tempo da hora de início da instrução de medição.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_copy
QkTarget *qk_target_copy(QkTarget *target)
Cria uma cópia do site QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
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);
QkExitCode result = qk_target_add_instruction(target, entry);
QkTarget *copied = qk_target_copy(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTargeta ser copiado.
Retorna
Um ponteiro para a nova cópia do site QkTarget.
qk_target_free
void qk_target_free(QkTarget *target)
Liberte o QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
qk_target_free(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTargeta ser liberado.
qk_target_add_instruction
QkExitCode qk_target_add_instruction(QkTarget *target, QkTargetEntry *target_entry)
Adiciona um portão ao site QkTarget por meio de um QkTargetEntry.
Exemplo
QkTarget *target = qk_target_new(5);
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);
QkExitCode result = qk_target_add_instruction(target, entry);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
O comportamento é indefinido se entry não for um ponteiro válido e não nulo para um QkTargetEntry.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - target_entry - Um ponteiro para o site
QkTargetEntry. O ponteiro é liberado quando adicionado ao siteQkTarget.
Retorna
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_update_property
QkExitCode qk_target_update_property(QkTarget *target, QkGate instruction, uint32_t *qargs, uint32_t num_qubits, double duration, double error)
Modifica as propriedades de uma porta no site QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
double params[1] = {3.1415};
QkTargetEntry *entry = qk_target_entry_new_fixed(QkGate_CRX, params, "crx_pi");
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);
qk_target_update_property(target, QkGate_CRX, qargs, 2, 0.0012, 1.1);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Espera-se que o tipo qargs seja um ponteiro para uma matriz de uint32_t em que o comprimento corresponde ao especificado por num_qubits e deve corresponder à expectativa do gate. Se a matriz for insuficientemente longa, o comportamento dessa função é indefinido, pois ela lerá fora dos limites da matriz. Ele pode ser um ponteiro nulo se não houver qubits para uma determinada porta. Você pode consultar qk_gate_num_qubits para determinar quantos qubits são necessários para uma determinada porta.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - instrução - A instrução a ser modificada.
- qargs - O ponteiro para a matriz de valores
uint32_ta serem usados como qargs. Pode serNULLse for global. - num_qubits - O número de qubits da instrução.
- 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
QkExitCode especificando se a operação foi bem-sucedida.
qk_target_num_instructions
size_t qk_target_num_instructions(const QkTarget *target)
Retorna o número de instruções rastreadas por um QkTarget.
Exemplo
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
size_t num_instructions = qk_target_num_instructions(target);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget.
Retorna
O comprimento do alvo.
qk_target_instruction_supported
bool qk_target_instruction_supported(const QkTarget *target, const char *operation_name, const uint32_t *qargs, QkParam **params)
Verifica se a instrução fornecida e seus qargs são suportados por este Target.
Exemplo
// Create a mock target with only a global crx entry
// and 3.14 as its rotation parameter.
QkTarget *target = qk_target_new(5);
QkTargetEntry *crx_entry = qk_target_entry_new_fixed(QkGate_CRX, (double[]){3.14});
qk_target_entry_add_property(crx_entry, NULL, 0, 0.0, 0.1);
qk_target_add_instruction(target, crx_entry);
// Check if target is compatible with a "crx" gate
// at [0, 1] with 3.14 rotation.
QkParam *params[1] = {qk_param_from_double(3.14)};
qk_target_instruction_supported(target, "crx", (uint32_t []){0, 1}, params);
// Free the pointers
qk_param_free(params[0]);
qk_target_free(target);Segurança
O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget.
Espera-se que o qargs argumento seja um ponteiro para uma matriz cujo u32int_t comprimento corresponda à expectativa do gate. Se a matriz não tiver comprimento suficiente, o comportamento desta função é indefinido, pois ela irá ler fora dos limites da matriz. Pode ser um ponteiro nulo se não houver qubits para um determinado portão. Você pode verificar qk_gate_num_qubits para determinar quantos qubits são necessários para um determinado portão.
Espera-se que o params argumento seja uma matriz cujo QkParam comprimento corresponda à expectativa da operação em questão. Se a matriz não tiver comprimento suficiente, o comportamento será indefinido, conforme mencionado acima para o qargs argumento. Você sempre pode verificar qk_gate_num_params no caso de um QkGate.
Parâmetros
- target – Um ponteiro para o
Target. - operation_name – O nome da instrução a ser verificada.
- qargs - O ponteiro para a matriz de valores
uint32_ta serem usados como qargs. Pode serNULLse for global. - params – Um ponteiro para uma matriz de ponteiros de
QkParamobjetos como parâmetros a serem verificados. Pode serNULLse não houver parâmetros presentes.
Retorna
Se a instrução é suportada ou não.
qk_target_op_index
size_t qk_target_op_index(const QkTarget *target, const char *name)
Retorne o índice no qual uma operação está localizada com base em seu nome.
Exemplo
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
size_t op_idx = qk_target_op_index(target, "h");Segurança
O comportamento é indefinido se não QkTarget for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se não name for um ponteiro para uma string válida terminada em nulo.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - nome – O nome para obter o índice.
Retorna
o índice em que a operação é o valor máximo de size_t no caso de não estar no Alvo.
qk_target_op_name
char *qk_target_op_name(const QkTarget *target, size_t index)
Retorne o nome da operação armazenada nesse índice no mapa de portas da QkTarget instância.
Exemplo
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
char *op_name = qk_target_op_name(target, 0);
// Free after use
qk_str_free(op_name);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - índice – O índice no qual o gate está armazenado.
Retorna
O nome da operação associada ao índice fornecido.
qk_target_op_num_properties
size_t qk_target_op_num_properties(const QkTarget *target, size_t index)
Retorne o número de propriedades definidas para a operação especificada na QkTarget instância, a.k.a. o comprimento do mapa da propriedade. Entra em pânico se o índice da operação não estiver presente.
Exemplo
QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);
size_t num_props = qk_target_op_num_properties(target, 0);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - índice – O índice no qual o gate está armazenado.
Retorna
O número de propriedades especificadas para a operação associada a esse índice.
qk_target_op_qargs_index
size_t qk_target_op_qargs_index(const QkTarget *target, size_t op_idx, const uint32_t *qargs)
Recupera o índice no qual alguns qargs estão armazenados. Retorna SIZE_MAX se não for encontrado.
Exemplo
QkTarget *target = qk_target_new(5);
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);
qk_target_add_instruction(target, entry);
size_t idx_0_1 = qk_target_op_qargs_index(target, 0, qargs);Segurança
O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - op_idx – O índice no qual a operação está armazenada.
- qargs – Um ponteiro para a matriz de índices
uint32_tqubit a serem verificados, pode ser um ponteiro nulo para verificar propriedades globais.
Retorna
O índice dos qargs associados à instrução no índice op_idx especificado ou SIZE_MAX se os qargs não estiverem presentes.
qk_target_op_qargs
void qk_target_op_qargs(const QkTarget *target, size_t op_idx, size_t qarg_idx, uint32_t **qargs_out, uint32_t *qargs_len)
Recupera os qargs para a operação por índice.
Entra em pânico se algum dos índices estiver fora do intervalo.
Exemplo
QkTarget *target = qk_target_new(5);
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);
qk_target_add_instruction(target, entry);
uint32_t *qargs_retrieved;
uint32_t qargs_length;
qk_target_op_qargs(target, 0, 0, &qargs_retrieved, &qargs_length);
if (qargs_retrieved) {
// We should enter this branch.
printf("Number of qargs: %lu\n", qargs_length);
} else {
printf("Qargs are global\n");
}Segurança
O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se cada um qargs_out ou não qargs_len estiverem alinhados e graváveis para um único valor do tipo correto.
Parâmetros
- target - Um ponteiro para o site
QkTarget. - op_idx – O índice no qual o gate está armazenado.
- qarg_idx – O índice no qual os qargs são armazenados.
- qargs_out – Um ponteiro de saída para uma matriz de qubits. Se
op_idxse referir a uma operação global, um ponteiro nulo será gravado. O ponteiro escrito é emprestado do destino e não deve ser liberado. Uma instrução zero-qargs irá escrever um ponteiro diferente de nulo, embora seja inválido para leituras. - qargs_len – Um ponteiro de saída para o comprimento do qargs em
qargs_out. Se o índice for global, o comprimento escrito não é definido.
qk_target_op_props
void qk_target_op_props(const QkTarget *target, size_t op_idx, size_t qarg_idx, QkInstructionProperties *inst_props)
Recupera os qargs para a operação armazenados em seus respectivos índices.
Entra em pânico se algum dos índices estiver fora do intervalo.
Exemplo
QkTarget *target = qk_target_new(5);
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);
qk_target_add_instruction(target, entry);
QkInstructionProperties inst_props;
qk_target_op_props(target, 0, 0, &inst_props);Segurança
O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se inst_props não apontar para um endereço com o tamanho correto para armazenar QkInstructionProperties .
Parâmetros
- target - Um ponteiro para o site
QkTarget. - op_idx – O índice no qual o gate está armazenado.
- qarg_idx – O índice no qual os qargs são armazenados.
- inst_props – Um ponteiro para gravar a
QkInstructionPropertiesinstância.
qk_target_op_get
void qk_target_op_get(const QkTarget *target, size_t index, QkTargetOp *out_op)
Recupera informações sobre uma operação no destino por meio do índice. Se o índice não estiver presente, esta função entrará em pânico. Você pode verificar o número QkTarget total de instruções usando qk_target_num_instructions.
Exemplo
QkTarget *target = qk_target_new(5);
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);
qk_target_add_instruction(target, entry);
QkTargetOp op;
qk_target_op_get(target, 0, &op);
// Clean up after you're done
qk_target_op_clear(&op);Segurança
O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se out_op não apontar para um endereço com o tamanho correto para armazenar QkTargetOp .
Parâmetros
- target - Um ponteiro para o site
QkTarget. - índice – O índice no qual o gate está armazenado.
- out_op – Um ponteiro para o espaço onde será
QkTargetOparmazenado.
qk_target_op_gate
QkGate qk_target_op_gate(const QkTarget *target, size_t index)
Tenta recuperar um objeto QkGate com base na operação armazenada em um índice. O usuário é responsável por verificar se esta operação é uma porta na QkTarget via usando qk_target_op_get. Caso contrário, esta função entrará em pânico.
Exemplo
QkTarget *target = qk_target_new(5);
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);
qk_target_add_instruction(target, entry);
QkTargetOp op;
qk_target_op_get(target, 0, &op);
// Check if the operation is a gate;
if (op.op_type == QkOperationKind_Gate) {
QkGate gate = qk_target_op_gate(target, 0);
// Do something
}
// Clean up after you're done.
qk_target_op_clear(&op);Segurança
O comportamento é indefinido se o target ponteiro for nulo ou não estiver alinhado.
Parâmetros
- target – Um ponteiro para a
Targetinstância. - índice – O índice no qual a operação está localizada.
Retorna
A QkGate enumeração no referido índice.
qk_target_op_clear
void qk_target_op_clear(QkTargetOp *op)
Limpa o QkTargetOp objeto.
Segurança
O comportamento será indefinido se o ponteiro for nulo ou não estiver alinhado. Os dados pertencentes a um QkTargetOp têm origem em Rust e só podem ser liberados usando esta função.
Parâmetros
- op – O ponteiro para um
QkTargetOpobjeto.