QkParam
Representa un parámetro de circuito que puede contener valores reales o simbólicos.
Aunque la funcionalidad de un QkParam dentro de un circuito es actualmente limitada, el usuario puede realizar operaciones similares a las que se encuentran en Parameter.
Tipos de datos
QkParamKind
enum QkParamKind
Representa el tipo de una instancia QkParam .
Valores:
enumerador QkParamKind_Unknown
Representa un parámetro desconocido que no se puede representar en la API de C. Normalmente, se trata de un parámetro que se define en Python.
enumerador QkParamKind_Real
Representa un parámetro de punto flotante real.
enumerador QkParamKind_ParameterExpression
Representa un símbolo de parámetro no vinculado.
enumerador QkParamKind_Int
Representa un parámetro que solo puede expresarse mediante un número entero. Normalmente, una duración expresada en términos de Dt.
Funciones
qk_param_new_symbol
QkParam *qk_param_new_symbol(const char *name)
Crea un nuevo QkParam que represente un símbolo sin asignar.
Ejemplo
QkParam *a = qk_param_new_symbol("a");Seguridad
El name parámetro debe ser un puntero a una zona de memoria que contenga un carácter de finalización nulo válido al final de la cadena. Además, debe ser válido para la lectura de bytes hasta el carácter de terminación NUL, incluido este.
Parámetros
- nombre : el nombre del símbolo. Esto no puede estar vacío.
Devuelve
QkParamUn puntero al archivo. creado.
qk_param_zero
QkParam *qk_param_zero(void)
Crea un nuevo QkParam objeto con el valor cero.
El valor QkParam devuelto por esta función se puede utilizar para almacenar el resultado de operaciones binarias o unarias.
Ejemplo
QkParam *t = qk_param_zero();
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_new_symbol("b");
qk_param_add(t, a, b);Devuelve
QkParamUn puntero al archivo. creado.
qk_param_free
void qk_param_free(QkParam *param)
Liberad el QkParam.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
qk_param_free(a);Seguridad
El comportamiento es indefinido si param no es nulo ni un puntero válido a un QkParam.
Parámetros
- param – Un puntero al objeto
QkParamque se va a liberar.
qk_param_from_double
QkParam *qk_param_from_double(double value)
doubleCrea uno nuevo QkParam a partir de uno.
Ejemplo
QkParam *r = qk_param_from_double(2.5);Parámetros
- valor – A
doublepara inicializar elQkParam.
Devuelve
QkParamUn puntero al archivo. creado.
qk_param_from_complex
QkParam *qk_param_from_complex(QkComplex64 value)
Construir un nuevo QkParam a partir de un número complejo, dado como QkComplex64.
Ejemplo
QkComplex64 c = {1.0, 2.0}; // 1 + 2i
QkParam *param = qk_param_from_complex(c);Parámetros
- valor – A
QkComplex64para inicializar elQkParam.
Devuelve
QkParamUn puntero al archivo. creado.
qk_param_copy
QkParam *qk_param_copy(const QkParam *param)
Copia un QkParam.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_copy(a);Seguridad
QkParamEl comportamiento es indefinido si param no es un puntero válido a un valor distinto de nulo.
Parámetros
- param – El elemento
QkParamque se va a copiar.
Devuelve
QkParamUn puntero al archivo. creado.
qk_param_str
char *qk_param_str(const QkParam *param)
QkParamObtén una representación en forma de cadena de.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
char* str = qk_param_str(a);
printf(str);
qk_str_free(str);
qk_param_free(a);Seguridad
QkParamEl comportamiento es indefinido si param no es un puntero válido a un valor distinto de nulo.
La cadena no debe liberarse con la función «free» habitual de C; debes utilizar qk_str_free para liberar la memoria que ocupa la cadena. Si no se llama qk_str_free a esta función, se producirá una fuga de memoria.
No modifiques la longitud de la cadena una vez devuelta (añadiendo un byte nulo en algún punto de la cadena o eliminando el último), aunque sí se pueden modificar los valores.
Parámetros
- param – Un puntero a la
QkParam.
Devuelve
Un puntero a una matriz de caracteres terminada en NUL que contiene la representación en forma de cadena de param.
qk_param_add
QkExitCode qk_param_add(QkParam *out, const QkParam *lhs, const QkParam *rhs)
QkParamAñade dos.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_new_symbol("b");
QkParam *out = qk_param_zero();
qk_param_add(out, a, b);Seguridad
El comportamiento es indefinido si cualquiera de out, lhs o rhs no es un puntero válido y no nulo a un QkParam.
Parámetros
- out – Un puntero a donde
QkParamse guardará el resultado delhs + rhs. QkParamlhs – Un puntero al lado izquierdo.QkParamrhs – Un puntero al lado derecho.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_sub
QkExitCode qk_param_sub(QkParam *out, const QkParam *lhs, const QkParam *rhs)
QkParamResta dos.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_new_symbol("b");
QkParam *out = qk_param_zero();
qk_param_sub(out, a, b);Seguridad
El comportamiento es indefinido si cualquiera de out, lhs o rhs no es un puntero válido y no nulo a un QkParam.
Parámetros
- out – Un puntero a un
QkParampara almacenar el resultado delhs - rhs. QkParamlhs – Un puntero al lado izquierdo.QkParamrhs – Un puntero al lado derecho.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_mul
QkExitCode qk_param_mul(QkParam *out, const QkParam *lhs, const QkParam *rhs)
QkParamMultiplica dos.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_new_symbol("b");
QkParam *out = qk_param_zero();
qk_param_mul(out, a, b);Seguridad
El comportamiento es indefinido si cualquiera de out, lhs o rhs no es un puntero válido y no nulo a un QkParam.
Parámetros
- out – Un puntero a un
QkParampara almacenar el resultado delhs * rhs. QkParamlhs – Un puntero al lado izquierdo.QkParamrhs – Un puntero al lado derecho.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_div
QkExitCode qk_param_div(QkParam *out, const QkParam *num, const QkParam *den)
Divide a QkParam entre otro.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_new_symbol("b");
QkParam *out = qk_param_zero();
qk_param_div(out, a, b);Seguridad
El comportamiento es indefinido si cualquiera de out, num o den no es un puntero válido y no nulo a un QkParam.
Parámetros
- out – Un puntero a un
QkParampara almacenar el resultado delhs / rhs. QkParamnum – Un puntero al numerador.QkParamden – Un puntero al denominador.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_pow
QkExitCode qk_param_pow(QkParam *out, const QkParam *base, const QkParam *pow)
Elevar un número QkParam a la potencia de otro.
Ejemplo
QkParam *base = qk_param_new_symbol("a");
QkParam *pow = qk_param_new_symbol("b");
QkParam *out = qk_param_zero();
qk_param_pow(out, base, pow);Seguridad
El comportamiento es indefinido si cualquiera de out, base o pow no es un puntero válido y no nulo a un QkParam.
Parámetros
- out – Un puntero a un
QkParampara almacenar el resultado delhs ** rhs. QkParambase : un puntero al lado izquierdo.QkParampow – Un puntero al lado derecho.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_sin
QkExitCode qk_param_sin(QkParam *out, const QkParam *src)
QkParamCalcula el seno de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_sin(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,sin(src).- src : un puntero al objeto
QkParamal que se aplicará la función seno.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_cos
QkExitCode qk_param_cos(QkParam *out, const QkParam *src)
QkParamCalcula el coseno de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_cos(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,cos(src).- src : un puntero al objeto
QkParamal que se va a aplicar la función coseno.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_tan
QkExitCode qk_param_tan(QkParam *out, const QkParam *src)
QkParamCalcula la tangente de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_tan(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,tan(src).- src : un puntero al elemento
QkParamal que se va a aplicar la tangente.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_asin
QkExitCode qk_param_asin(QkParam *out, const QkParam *src)
QkParamCalcula el arcseno de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_asin(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,asin(src).- src : un puntero al objeto
QkParamal que se le aplicará la función arcoseno.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_acos
QkExitCode qk_param_acos(QkParam *out, const QkParam *src)
QkParamCalcula el arcocoseno de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_acos(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,acos(src).- src : un puntero al objeto
QkParamal que se va a aplicar la función coseno.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_atan
QkExitCode qk_param_atan(QkParam *out, const QkParam *src)
QkParamCalcula la arctangente de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_atan(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar un resultado,atan(src).- src : un puntero al objeto
QkParamal que se va a aplicar la función arctangente.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_log
QkExitCode qk_param_log(QkParam *out, const QkParam *src)
QkParamCalcula el logaritmo natural de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_log(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,log(src).- src : un puntero al objeto
QkParamal que se va a aplicar el logaritmo.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_exp
QkExitCode qk_param_exp(QkParam *out, const QkParam *src)
QkParamAplica la función exponencial a a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_exp(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,exp(src).- src : un puntero al valor del que
QkParamse va a calcular la exponencial.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_abs
QkExitCode qk_param_abs(QkParam *out, const QkParam *src)
QkParamCalcula el valor absoluto de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_abs(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
- out – Un puntero al objeto
QkParamen el que se almacenará el resultado. - src : un puntero al objeto
QkParam.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_sign
QkExitCode qk_param_sign(QkParam *out, const QkParam *src)
Averigua el signo de un QkParam.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_sign(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,sign(src).QkParam** src** – Un puntero al para obtener su signo.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_neg
QkExitCode qk_param_neg(QkParam *out, const QkParam *src)
Negar a QkParam.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_neg(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,-src.- src : un puntero al valor
QkParamque se va a invertir.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_conjugate
QkExitCode qk_param_conjugate(QkParam *out, const QkParam *src)
QkParamCalcula el conjugado complejo de a.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *out = qk_param_zero();
qk_param_conjugate(out, a);Seguridad
El comportamiento es indefinido si cualquiera de out o src no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParam** out** – Un puntero al para almacenar el resultado,conj(src).- src : un puntero al elemento
QkParamque se va a conjugar.
Devuelve
Un código de salida que indica QkExitCode_Success el éxito en caso de que la operación se haya realizado correctamente y un error en caso contrario.
qk_param_equal
bool qk_param_equal(const QkParam *lhs, const QkParam *rhs)
Compara dos QkParam valores para ver si son iguales.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *one = qk_param_from_value(1.0);
QkParam *mone = qk_param_from_value(-1.0);
QkParam *x = qk_param_add(a, one);
QkParam *y = qk_param_sub(a, mone);
bool equal = qk_param_equal(x, y);Seguridad
El comportamiento es indefinido si cualquiera de lhs o rhs no es un puntero válido y no nulo a un QkParam.
Parámetros
QkParamlhs – Un puntero al lado izquierdo.QkParamrhs – Un puntero al lado derecho.
Devuelve
true si los QkParam objetos son iguales, false en caso contrario.
qk_param_as_real
double qk_param_as_real(const QkParam *param)
QkParam Intenta convertir en double.
Si no se ha podido convertir el parámetro a un double, debido a que había parámetros sin asignar, NAN se devuelve. Ten en cuenta que, en el caso de valores del QkParam tipo que QkParamKind_ParameterExpression representan valores complejos acotados, se devuelve la parte real.
Si el parámetro es originalmente una instancia int , se convertirá en un tipo «double», lo que dará lugar a una conversión con pérdida de información.
Ejemplo
QkParam *a = qk_param_new_symbol("a");
QkParam *b = qk_param_new_symbol("b");
QkParam *x = qk_param_zero();
qk_param_add(x, a, b);
const QkParam* keys[2] = {a, b};
QkParam *y = qk_param_zero();
qk_param_bind(y, x, keys, {1.0, 2.0}, 2);
double out = qk_param_as_real(y);Seguridad
El comportamiento es indefinido si param no es un puntero válido y no nulo a un QkParam.
Parámetros
- param – Un puntero a la función
QkParamque se va a evaluar.
Devuelve
El valor, si la conversión se ha realizado correctamente; en caso contrario, NAN.
qk_param_stride
size_t qk_param_stride(void)
Obtiene el tamaño, en bytes, del tipo QkParam «opaque».
El tipo QkParam es opaco para la API de C y su ancho no está especificado. Puedes utilizar este valor para desplazar QkParam * punteros, si lo conviertes a un tipo de ancho de byte y luego lo vuelves a convertir.
Esta función devuelve el mismo valor en cada llamada dentro de cualquier proceso. El valor puede variar según la plataforma o la versión de la biblioteca Qiskit, y puede depender del entorno de compilación de la API de C de Qiskit. No debes dar por hecho que este ancho tenga un valor concreto sin consultar esta función.
Ejemplo
Si se dispone de un puntero al primer elemento de QkParam una matriz contigua, como en QkCircuitInstructionView::params, se puede acceder a los elementos siguientes desplazando el puntero un número determinado de bytes.
const QkParam *p; // A pretend pointer to the first of 3 contiguous elements.
const size_t el_size = qk_param_stride();
for (size_t i = 0; i < 3; i++) {
// Offset the pointer by `el_size` bytes each time.
p = (const QkParam *)((const char *)p + el_size);
char *val = qk_param_str(p);
printf("%zu: %s\n", i, val);
qk_str_free(val);
}Devuelve
El tamaño en bytes del tipo QkParam opaco.
qk_param_as_int
bool qk_param_as_int(const QkParam *param, int64_t *value)
Intenta convertir en QkParam int64_t. Esto está pensado para recuperar un parámetro que represente la duración de una instrucción de retardo en unidades de Dt.
Si no se ha podido convertir el parámetro a un int64_t, debido a que había parámetros sin asignar, no se escribirá en el puntero y la función devolverá false. Esto también ocurrirá si el parámetro está vinculado, pero su valor es un número de coma flotante o un número complejo.
Seguridad
El comportamiento es indefinido si no es param un puntero válido y no nulo a un QkParam. El comportamiento es indefinido si no value es un puntero válido y no nulo a una dirección que pueda contener una instancia int64_t de.
Parámetros
- param – Un puntero a la función
QkParamque se va a evaluar. - valor : un puntero a un
int64_ten el que se escribirá el valor resultante.
Devuelve
true si el valor almacenado es un número entero; en caso contrario, false.
qk_param_kind
QkParamKind qk_param_kind(const QkParam *param)
Devuelve el tipo asociado a la instancia QkParam a través de la enumeración QkParamKind .
Seguridad
El comportamiento es indefinido si param no es un puntero válido y no nulo a un QkParam.
Parámetros
- param – Un puntero a la función
QkParamque se va a evaluar.
Devuelve
El tipo asociado al parámetro.