QkTarget
typedef struct QkTarget QkTargetUn mapeo de instrucciones y propiedades que representan las restricciones particulares de un backend. Su finalidad es proporcionar al compilador información que le permita compilar un circuito de entrada en otro optimizado teniendo en cuenta las especificaciones de QkTarget. Esta estructura representa una interfaz de bajo nivel para la principal estructura de datos Target en Rust, que representa la clase base para su homóloga Python, Target.
He aquí un ejemplo de cómo funciona esta estructura:
#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);Actualmente, la API Target C sólo permite añadir instancias de QkGate sin parámetros o con parámetros fijos. En el futuro se añadirá soporte para parámetros regulares. La funcionalidad se irá ampliando con el tiempo, a medida que mejoremos las capacidades de nuestro modelo de datos Rust.
Tipos de datos
QkInstructionProperties
struct QkInstructionProperties
Una representación de las propiedades de instrucción de una operación Target.
doble duración
La duración, en segundos, de la instrucción sobre el conjunto especificado de qubits. Se establecerá en NaN si la propiedad no está definida.
doble error
La tasa de error promedio para la instrucción en el conjunto especificado de qubits. Se establecerá en NaN si la propiedad no está definida.
QkTargetOp
struct QkTargetOp
Representación de una operación identificada dentro del objetivo.
Esta estructura es creada de forma nativa por la API Target subyacente y los usuarios no deben escribir en ella directamente ni intentar liberar sus atributos manualmente, ya que esto provocaría un comportamiento indefinido. Para liberar esta estructura, los usuarios deben llamar a qk_target_op_clear en su lugar.
QkOperationKind op_tipo
El identificador de la operación actual.
carácter *nombre
Nombre de la operación.
uint32_t número_de_qubits
El número de qubits que admite esta operación. Se establecerá por defecto en (uint32_t)-1 en el caso de un variadic.
const QkParam **params
Los parámetros relacionados con esta operación, como QkParam. Si no hay parámetros, este valor se representará con un NULL puntero.
uint32_t número_de_parámetros
El número de parámetros admitidos por esta operación. Se establecerá por defecto en (uint32_t)-1 en el caso de un variadic.
Funciones
qk_target_new
QkTarget *qk_target_new(uint32_t num_qubits)
Construye un nuevo QkTarget con el número de qubits dado. El número de qubits está obligado a cambiar si se añade una instrucción con propiedades que se apliquen a una colección de qargs en la que cualquier índice sea superior al número de qubits especificado
Ejemplo
QkTarget *target = qk_target_new(5);Parámetros
- num_qubits - El número de qubits que soportará explícitamente
QkTarget.
Devuelve
Un puntero al nuevo QkTarget
qk_target_borrow_from_python
QkTarget *qk_target_borrow_from_python(PyObject *ob)
Obtener un QkTarget puntero de un objeto Python.
Esto toma prestada una referencia de tipo « Python » y extrae el QkTarget puntero correspondiente, siempre que sea del tipo adecuado. El puntero devuelto se toma prestado del ob puntero. Si el PyObject tipo no es el correcto, el valor de retorno es NULL y se establece el estado de excepción del intérprete de Python.
Para llamar a esta función, debes estar conectado a un intérprete de Python.
También puedes utilizar qk_target_convert_from_python, que lógicamente es exactamente igual que esta función, pero que se puede emplear directamente como función «convertidora» para la PyArg_Parse* familia de funciones de conversión de Python.
Seguridad
La persona que llama debe estar conectada a un intérprete de Python. El comportamiento es indefinido si no ob es un puntero válido y no nulo a un objeto Python.
Parámetros
- ob : un objeto de tipo « Python » tomado de otro lenguaje.
Devuelve
Un puntero al objeto nativo, o bien, NULL si el objeto Python es de un tipo incorrecto.
qk_target_convert_from_python
int qk_target_convert_from_python(PyObject *object, void *address)
Recuperar un puntero «Target» de un objeto « Python ».
Esto toma prestada una referencia de tipo « Python » y extrae el QkTarget puntero correspondiente a address, siempre que sea del tipo correcto. El puntero devuelto se toma prestado del object puntero. Si no es PyObject del tipo correcto, el valor de retorno es 1, se establece el estado de excepción del intérprete de Python, y address no sufre cambios.
Para llamar a esta función, debes estar conectado a un intérprete de Python.
También puedes usar qk_target_borrow_from_python, que, lógicamente, es exactamente lo mismo que esto, pero con una sintaxis más natural para su uso directo.
Seguridad
La persona que llama debe estar conectada a un intérprete de Python. El comportamiento es indefinido si no object es un puntero válido y no nulo a un objeto Python, o si no address es un puntero a datos modificables del tipo correcto.
Parámetros
- objeto : un objeto de tipo
Pythontomado en préstamo. - dirección : la ubicación en la que se escribirá la salida.
Devuelve
1 si se realiza correctamente, 0 si falla.
qk_target_num_qubits
uint32_t qk_target_num_qubits(const QkTarget *target)
Devuelve el número de qubits de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
uint32_t num_qubits = qk_target_num_qubits(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
El número de qubits que puede utilizar este objetivo.
qk_target_dt
double qk_target_dt(const QkTarget *target)
Devuelve el valor dt de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
qk_target_set_dt(target, 10e-9);
double dt = qk_target_dt(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
El valor dt de este QkTarget o NAN si no está asignado.
qk_target_granularity
uint32_t qk_target_granularity(const QkTarget *target)
Devuelve el valor de granularidad de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t granularity = qk_target_granularity(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
El valor granularity de este QkTarget.
qk_target_min_length
uint32_t qk_target_min_length(const QkTarget *target)
Devuelve el valor min_length de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
size_t min_length = qk_target_min_length(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
El valor min_length de este QkTarget.
qk_target_pulse_alignment
uint32_t qk_target_pulse_alignment(const QkTarget *target)
Devuelve el valor pulse_alignment de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t pulse_alignment = qk_target_pulse_alignment(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
El valor pulse_alignment de este QkTarget.
qk_target_acquire_alignment
uint32_t qk_target_acquire_alignment(const QkTarget *target)
Devuelve el valor acquire_alignment de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 0
uint32_t acquire_alignment = qk_target_pulse_alignment(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
El valor acquire_alignment de este QkTarget.
qk_target_set_dt
QkExitCode qk_target_set_dt(QkTarget *target, double dt)
Establece el valor dt de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
double dt = qk_target_set_dt(target, 10e-9);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - dt - El valor
dtpara la resolución de tiempo del sistema de entrada.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
qk_target_set_granularity
QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)
Establece el valor granularity de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_granularity(target, 2);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - granularidad - El valor de la resolución mínima de la puerta de impulsos en unidades de
dt.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
qk_target_set_min_length
QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)
Establece el valor min_length de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_min_length(target, 3);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - min\length - El valor mínimo de la longitud de la puerta de impulsos en unidades de
dt.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
qk_target_set_pulse_alignment
QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)
Devuelve el valor pulse_alignment de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_pulse_alignment(target, 4);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - pulse_alignment - valor que representa una resolución temporal de puerta.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
qk_target_set_acquire_alignment
QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)
Establece el valor acquire_alignment de este QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
// The value defaults to 0
qk_target_set_acquire_alignment(target, 5);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - acquire_alignment - valor que representa una resolución temporal de la hora de inicio de la instrucción de medida.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
qk_target_copy
QkTarget *qk_target_copy(QkTarget *target)
Crea una copia de la página QkTarget.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a la dirección
QkTargetque se va a copiar.
Devuelve
Un puntero a la nueva copia de QkTarget.
qk_target_free
void qk_target_free(QkTarget *target)
Libere el QkTarget.
Ejemplo
QkTarget *target = qk_target_new(5);
qk_target_free(target);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTargetpara liberar.
qk_target_add_instruction
QkExitCode qk_target_add_instruction(QkTarget *target, QkTargetEntry *target_entry)
Añade una puerta a la QkTarget a través de un QkTargetEntry.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
El comportamiento es indefinido si entry no es un puntero válido y no nulo a QkTargetEntry.
Parámetros
- target - Un puntero a
QkTarget. - target_entry - Un puntero a la
QkTargetEntry. El puntero se libera cuando se añade aQkTarget.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
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 las propiedades de una puerta en QkTarget.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
El tipo qargs se espera que sea un puntero a una matriz de uint32_t donde la longitud coincide se especifica por num_qubits y tiene que coincidir con la expectativa de la puerta. Si el array no es suficientemente largo, el comportamiento de esta función es indefinido, ya que leerá fuera de los límites del array. Puede ser un puntero nulo si no hay qubits para una puerta determinada. Puede consultar qk_gate_num_qubits para determinar cuántos qubits se necesitan para una puerta determinada.
Parámetros
- target - Un puntero a
QkTarget. - instrucción - La instrucción a modificar.
- qargs - El puntero a la matriz de valores
uint32_ta utilizar como qargs. Puede serNULLsi es global. - num_qubits - El número de qubits de la instrucción..
- duración - La duración de la instrucción en segundos en el conjunto específico de qubits.
- error - La tasa de error media de la instrucción en el conjunto específico de qubits.
Devuelve
QkExitCode especificando si la operación se ha realizado correctamente.
qk_target_num_instructions
size_t qk_target_num_instructions(const QkTarget *target)
Devuelve el número de instrucciones rastreadas por un QkTarget.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget.
Devuelve
La longitud del objetivo.
qk_target_instruction_supported
bool qk_target_instruction_supported(const QkTarget *target, const char *operation_name, const uint32_t *qargs, QkParam **params)
Comprueba si la instrucción proporcionada y sus qargs son compatibles con esto Target.
Ejemplo
// 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);Seguridad
El comportamiento es indefinido si no target es un puntero válido y distinto de nulo a un QkTarget.
Se espera que el qargs argumento sea un puntero a una matriz cuya u32int_t longitud coincida con la expectativa de la puerta. Si la matriz no es lo suficientemente larga, el comportamiento de esta función es indefinido, ya que leerá fuera de los límites de la matriz. Puede ser un puntero nulo si no hay qubits para una puerta determinada. Puede consultar qk_gate_num_qubits para determinar cuántos qubits se necesitan para una puerta determinada.
Se espera que el params argumento sea una matriz cuya QkParam longitud coincida con la expectativa de la operación en cuestión. Si la matriz no es lo suficientemente larga, el comportamiento será indefinido, tal y como se ha mencionado anteriormente para el qargs argumento. Siempre puedes comprobarlo qk_gate_num_params en el caso de un QkGate.
Parámetros
- target : un puntero a.
Target - operation_name : el nombre de la instrucción que se va a comprobar.
- qargs - El puntero a la matriz de valores
uint32_ta utilizar como qargs. Puede serNULLsi es global. - params : un puntero a una matriz de punteros de
QkParamobjetos como parámetros que se deben comprobar. Puede serNULLsi no hay parámetros presentes.
Devuelve
Si la instrucción es compatible o no.
qk_target_op_index
size_t qk_target_op_index(const QkTarget *target, const char *name)
Devuelve el índice en el que se encuentra una operación en función de su nombre.
Ejemplo
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");Seguridad
El comportamiento es indefinido si no QkTarget es un puntero válido y distinto de nulo a un QkTarget. El comportamiento es indefinido si no name es un puntero a una cadena válida terminada en nulo.
Parámetros
- target - Un puntero a
QkTarget. - nombre : el nombre del que se obtendrá el índice.
Devuelve
el índice en el que la operación es el valor máximo de size_t en caso de que no esté en el objetivo.
qk_target_op_name
char *qk_target_op_name(const QkTarget *target, size_t index)
Devuelve el nombre de la operación almacenada en ese índice en el mapa de QkTarget puertas de la instancia.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - índice : el índice en el que se almacena la puerta.
Devuelve
El nombre de la operación asociada al índice proporcionado.
qk_target_op_num_properties
size_t qk_target_op_num_properties(const QkTarget *target, size_t index)
Devuelve el número de propiedades definidas para la operación especificada en la QkTarget instancia, a.k.a. la longitud del mapa de la propiedad. Entra en pánico si el índice de operación no está presente.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - índice : el índice en el que se almacena la puerta.
Devuelve
El número de propiedades especificadas para la operación asociada a ese í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 el índice en el que se almacenan algunos qargs. Devuelve SIZE_MAX si no se encuentra.
Ejemplo
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);Seguridad
El comportamiento es indefinido si QkTarget no es un puntero válido y no nulo a QkTarget.
Parámetros
- target - Un puntero a
QkTarget. - op_idx : el índice en el que se almacena la operación.
- qargs : un puntero a la matriz de índices
uint32_tde qubits que se deben comprobar; puede ser un puntero nulo para comprobar propiedades globales.
Devuelve
El índice de los qargs asociados con la instrucción en el índice op_idx especificado o SIZE_MAX si los qargs no están 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 los qargs para la operación por índice.
Entra en pánico si alguno de los índices está fuera de rango.
Ejemplo
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");
}Seguridad
El comportamiento es indefinido si no target es un puntero válido y distinto de nulo a un QkTarget. El comportamiento es indefinido si cada uno de qargs_out o no qargs_len están alineados y son escribibles para un único valor del tipo correcto.
Parámetros
- target - Un puntero a
QkTarget. - op_idx : el índice en el que se almacena la puerta.
- qarg_idx : el índice en el que se almacenan los qargs.
- qargs_out : un puntero de salida a una matriz de qubits. Si
op_idxse refiere a una operación global, se escribirá un puntero nulo. El puntero escrito se toma prestado del objetivo y no debe liberarse. Una instrucción zero-qargs escribirá un puntero no nulo, aunque no válido para lecturas. - qargs_len : un puntero de salida a la longitud de qargs en
qargs_out. Si el índice es global, la longitud escrita no está definida.
qk_target_op_props
void qk_target_op_props(const QkTarget *target, size_t op_idx, size_t qarg_idx, QkInstructionProperties *inst_props)
Recupera los qargs para la operación almacenados en sus respectivos índices.
Entra en pánico si alguno de los índices está fuera de rango.
Ejemplo
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);Seguridad
El comportamiento es indefinido si no target es un puntero válido y distinto de nulo a un QkTarget. El comportamiento es indefinido si inst_props no apunta a una dirección del tamaño correcto para almacenar QkInstructionProperties en ella.
Parámetros
- target - Un puntero a
QkTarget. - op_idx : el índice en el que se almacena la puerta.
- qarg_idx : el índice en el que se almacenan los qargs.
- inst_props : un puntero para escribir la
QkInstructionPropertiesinstancia.
qk_target_op_get
void qk_target_op_get(const QkTarget *target, size_t index, QkTargetOp *out_op)
Recupera información sobre una operación en el destino mediante un índice. Si el índice no está presente, esta función entrará en pánico. Puede comprobar el número QkTarget total de instrucciones utilizando qk_target_num_instructions.
Ejemplo
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);Seguridad
El comportamiento es indefinido si no target es un puntero válido y distinto de nulo a un QkTarget. El comportamiento es indefinido si out_op no apunta a una dirección del tamaño correcto para almacenar QkTargetOp en ella.
Parámetros
- target - Un puntero a
QkTarget. - índice : el índice en el que se almacena la puerta.
- out_op : un puntero al espacio donde se
QkTargetOpalmacenará el.
qk_target_op_gate
QkGate qk_target_op_gate(const QkTarget *target, size_t index)
Intenta recuperar un QkGate basándose en la operación almacenada en un índice. El usuario es responsable de comprobar si esta operación es una puerta en la QkTarget vía utilizando qk_target_op_get. Si no es así, esta función entrará en pánico.
Ejemplo
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);Seguridad
El comportamiento es indefinido si el target puntero es nulo o no está alineado.
Parámetros
- target : un puntero a la
Targetinstancia. - índice : el índice en el que se encuentra la operación.
Devuelve
La QkGate enumeración en dicho índice.
qk_target_op_clear
void qk_target_op_clear(QkTargetOp *op)
Borra el QkTargetOp objeto.
Seguridad
El comportamiento será indefinido si el puntero es nulo o no está alineado. Los datos pertenecientes a un QkTargetOp se originan en Rust y solo se pueden liberar utilizando esta función.
Parámetros
- op – El puntero a un
QkTargetOpobjeto.