Skip to main content
IBM Quantum Platform

Expresiones clásicas

La API de C de Qiskit para expresiones clásicas ofrece herramientas para examinar las expresiones clásicas utilizadas en Qiskit. Esta API permite a los usuarios recorrer y examinar árboles de expresiones mediante un conjunto de enumeraciones, estructuras y funciones de acceso. Puedes examinar la estructura de las expresiones, identificar los tipos de nodos, consultar información sobre los tipos y acceder a las propiedades detalladas de cada nodo del árbol de expresiones. Actualmente, solo se puede acceder a las expresiones clásicas a través de la API de flujo de control, por ejemplo, al consultar condiciones que se componen de expresiones clásicas.

Ten en cuenta que las funciones de esta API devuelven punteros prestados que siguen siendo válidos mientras exista el árbol de expresiones principal, por lo que no es necesario liberar estos punteros.


Tipos de datos

QkExprNodeKind

enum QkExprNodeKind

Los diferentes tipos de nodos de expresión que pueden aparecer en un árbol de expresiones clásico.

Valores:

QkExprNodeKind_Unary del censo

Expresión con una operación unaria (p. ej., NOT, negación)

QkExprNodeKind_Binary del censo

Expresión con operaciones binarias (por ejemplo, AND, OR, operaciones aritméticas)

QkExprNodeKind_Cast del censo

Expresión de conversión de tipos

QkExprNodeKind_Value del censo

Expresión de valor literal

QkExprNodeKind_Var del censo

Expresión de referencia variable

QkExprNodeKind_Stretch del censo

Expresión de estiramiento (relacionada con el tiempo)

QkExprNodeKind_Index del censo

Expresión con índice o subíndice

QkExprType

enum QkExprType

Los tipos de datos que se pueden utilizar en las expresiones clásicas.

Valores:

QkExprType_Bool del censo

Tipo de booleano

QkExprType_Duration del censo

Tipo de duración

QkExprType_Float del censo

Tipo de coma flotante

QkExprType_Uint del censo

Tipo entero sin signo

QkExprTypeInfo

struct QkExprTypeInfo

La representación completa del tipo de datos utilizado en una expresión.

QkExprType ty

El tipo de expresión

uint32_t anchura

Ancho en bits del tipo de expresión «Uint»

QkUnaryOpType

enum QkUnaryOpType

Los tipos de operación que puede contener una expresión unaria. Los valores comienzan en 1 para ajustarse a la convención « Python » del sistema de expresión clásico.

Valores:

QkUnaryOpType_BitNot del censo

Operación NOT bit a bit

QkUnaryOpType_LogicNot del censo

Operación lógica «NO»

QkUnaryOpType_Negate del censo

Negación aritmética

QkUnaryExprInfo

struct QkUnaryExprInfo

Describe una expresión unaria, incluyendo su operador, su operando, el tipo de resultado y si se trata de una constante. Devuelto por la qk_expr_unary_info función. El operand campo es un puntero prestado al operando de la expresión de operación unaria.

QkUnaryOpType op

El operador unario

const QkExprNode *operando

Puntero tomado en préstamo a la expresión operanda

QkExprTypeInfo ty

Tipo de resultado de la operación

constante de tipo bool

Si la expresión es constante

QkBinaryOpType

enum QkBinaryOpType

Los tipos de operación que puede contener una expresión binaria. Los valores se cuentan a partir de 1 para ajustarse a la convenci Python.

Valores:

QkBinaryOpType_BitAnd del censo

Operación AND bit a bit

QkBinaryOpType_BitOr del censo

Operación OR bit a bit

QkBinaryOpType_BitXor del censo

Operación XOR bit a bit

QkBinaryOpType_LogicAnd del censo

Operación lógica «Y»

QkBinaryOpType_LogicOr del censo

Operación «O» lógico

QkBinaryOpType_Equal del censo

Comparación de igualdad

QkBinaryOpType_NotEqual del censo

Comparación de la desigualdad

QkBinaryOpType_Less del censo

Menos que la comparación

QkBinaryOpType_LessEqual del censo

Comparación «menor o igual que»

QkBinaryOpType_Greater del censo

Más que una simple comparación

QkBinaryOpType_GreaterEqual del censo

Comparación «mayor o igual que»

QkBinaryOpType_ShiftLeft del censo

Operación de desplazamiento a la izquierda

QkBinaryOpType_ShiftRight del censo

Operación de desplazamiento a la derecha

QkBinaryOpType_Add del censo

Operación de suma

QkBinaryOpType_Sub del encuestador

Operación de resta

QkBinaryOpType_Mul del censo

Operación de multiplicación

QkBinaryOpType_Div del censo

Operación de división

QkBinaryExprInfo

struct QkBinaryExprInfo

Describe una expresión binaria, incluyendo su operador, sus operandos, el tipo de resultado y si se trata de una constante. Devuelto por la qk_expr_binary_info función. Los left campos y right son punteros prestados a los operandos de la expresión de operación binaria.

QkBinaryOpType op

El operador binario

const QkExprNode *izquierda

Expresión de puntero tomado prestado al operando de la izquierda

const QkExprNode *derecha

Expresión de puntero tomado en préstamo al operando correcto

QkExprTypeInfo ty

Tipo de resultado de la operación

constante de tipo bool

Si la expresión es constante

QkCastExprInfo

struct QkCastExprInfo

Describe una expresión de conversión, incluyendo el operando, el tipo de destino, si es implícita y si es constante. Devuelto por la qk_expr_cast_info función. El operand campo es un puntero prestado al operando de la expresión de conversión.

const QkExprNode *operando

Puntero tomado en préstamo a la expresión operanda que se está convirtiendo

QkExprTypeInfo ty

Tipo de destino del lanzamiento

bool implícito

Si la conversión es implícita (automática) o explícita

constante de tipo bool

Si la expresión es constante

QkIndexExprInfo

struct QkIndexExprInfo

Describe una expresión de índice, incluyendo el destino, el índice, el tipo de resultado y si es constante. Devuelto por la qk_expr_index_info función. Los target campos y index son punteros prestados al destino y al índice de la expresión de la operación de índice.

const QkExprNode *target

Puntero tomado en préstamo a la expresión de destino que se está indexando

const QkExprNode *index

Puntero tomado en préstamo a la expresión de índice

QkExprTypeInfo ty

Tipo de resultado de la operación de indexación

constante de tipo bool

Si la expresión es constante

QkDurationType

enum QkDurationType

Representa las diferentes unidades de tiempo que se utilizan en las expresiones de duración.

Valores:

QkDurationType_Dt del censo

Unidades de tiempo del sistema

QkDurationType_Ps del censo

Picosegundos

QkDurationType_Ns del censo

Nanosegundos

QkDurationType_Us del censo

Microsegundos

QkDurationType_Ms del censo

Milisegundos

QkDurationType_S del censo

Segundos

sindicato QkDurationValue

#include <types.h>

Una unión que permite almacenar las unidades de tiempo del sistema (dt) como un número entero o el tiempo real como un número de tipo «float».

Esta unión forma parte de la QkDurationInfo estructura y no debe utilizarse directamente.

int64_t dt

QkDurationType_DtUnidades de tiempo del sistema (activas cuando ty está en QkDurationInfo )

a paso ligero

Valor en tiempo real (activo para todos los demás tipos de duración)

QkDurationInfo

struct QkDurationInfo

La representación completa de un valor de duración.

El ty campo actúa como un discriminante que determina qué campo de la value unión está activo.

Al inicializarlo desde C, es responsabilidad del usuario asegurarse de que:

  • Cuando ty es QkDurationType_Dt, la duración se almacena como un número entero en value.dt.
  • Para el resto de tipos de duración, la duración se almacena como un valor de coma flotante en value.time.

QkDurationType ty

El tipo de unidad de duración (criterio de selección para la unión)

QkDurationValue valor

El valor de la duración


Funciones

qk_expr_kind

QkExprNodeKind qk_expr_kind(const QkExprNode *expr)

Devuelve el tipo de un nodo de expresión clásico.

Ejemplo

QKExprNodeKind kind = qk_expr_kind(expr);

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero al nodo de expresión que se va a inspeccionar.

Devuelve

La enumeración de tipos que describe qué variante expr concreta de la expresión contiene.

qk_expr_binary_info

QkBinaryExprInfo qk_expr_binary_info(const QkExprNode *expr)

Extraer información de un nodo de expresión binaria.

Genera un error si expr no apunta a un nodo de expresión binaria.

Ejemplo

QkBinaryExprInfo info = qk_expr_binary_info(expr);
const QkExprNode *lhs = info.left;
const QkExprNode *rhs = info.right;

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión binaria.

Devuelve

Una QkBinaryExprInfo estructura que describe el operador, los operandos, el tipo de resultado y si la expresión es una constante.

qk_expr_unary_info

QkUnaryExprInfo qk_expr_unary_info(const QkExprNode *expr)

Extraer información de un nodo de expresión unaria.

Genera un error si expr no apunta a un nodo de expresión unaria.

Ejemplo

QkUnaryExprInfo info = qk_expr_unary_info(expr);
QkUnaryOpType op = info.op;

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión unaria.

Devuelve

Una QkUnaryExprInfo estructura que describe el operador, el operando, el tipo de resultado y si la expresión es una constante.

qk_expr_cast_info

QkCastExprInfo qk_expr_cast_info(const QkExprNode *expr)

Extraer información de un nodo de expresión «cast».

Genera un error si expr no apunta a un nodo de expresión de conversión.

Ejemplo

QkCastExprInfo info = qk_expr_cast_info(expr);
const QkExprNode *operand = info.operand;

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión de conversión.

Devuelve

Una QkCastExprInfo estructura que describe el operando, el tipo de destino, si la conversión es implícita y si la expresión es una constante.

qk_expr_index_info

QkIndexExprInfo qk_expr_index_info(const QkExprNode *expr)

Extraer información de un nodo de expresión de índice.

Genera un error si expr no apunta a un nodo de expresión de índice.

Ejemplo

QkIndexExprInfo info = qk_expr_index_info(expr);
const QkExprNode *target = info.target;
const QkExprNode *index = info.index;

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión de índice.

Devuelve

Una QkIndexExprInfo estructura que describe el objetivo indexado, la expresión de índice, el tipo de resultado y si la expresión es constante.

qk_expr_as_value

const QkValue *qk_expr_as_value(const QkExprNode *expr)

Devuelve una vista del valor subyacente del nodo de expresión.

Genera un error si expr no apunta a un nodo de expresión de valor.

Ejemplo

const QkValue *value = qk_expr_as_value(expr);

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión de valor.

Devuelve

QkValue Un puntero al almacenado en expr.

qk_expr_as_var

const QkVar *qk_expr_as_var(const QkExprNode *expr)

Devuelve una vista de la variable subyacente del nodo de expresión.

Genera un error si expr no apunta a un nodo de expresión variable.

Ejemplo

const QkVar *var = qk_expr_as_var(expr);

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión variable.

Devuelve

QkVar Un puntero al almacenado en expr.

qk_expr_as_stretch

const QkStretch *qk_expr_as_stretch(const QkExprNode *expr)

Devuelve una vista del tramo subyacente del nodo de expresión.

Genera un error si expr no apunta a un nodo de expresión de tramo.

Ejemplo

const QkStretch *stretch = qk_expr_as_stretch(expr);

Seguridad

El comportamiento no está definido si expr no es un puntero válido y no nulo a un QkExprNode.

Parámetros

  • expr – Un puntero a un nodo de expresión de estiramiento.

Devuelve

QkStretch Un puntero al almacenado en expr.

qk_value_type_info

QkExprTypeInfo qk_value_type_info(const QkValue *value)

Devuelve la información sobre el tipo de un valor.

Ejemplo

QkExprTypeInfo type_info = qk_value_type_info(value);

Seguridad

El comportamiento no está definido si value no es un puntero válido y no nulo a un Value.

Parámetros

  • valor : un puntero al objeto QkValue que se va a inspeccionar.

Devuelve

Una QkExprTypeInfo estructura que contiene la información sobre los tipos de valor.

qk_value_duration_info

QkDurationInfo qk_value_duration_info(const QkValue *value)

Extraer información estructurada a partir de un valor de duración.

Da un error si value no apunta a un valor de duración.

Ejemplo

QkDurationInfo info = qk_value_duration_info(value);

Seguridad

El comportamiento no está definido si value no es un puntero válido y no nulo a un QkValue.

Parámetros

  • valor : un puntero a un valor de duración.

Devuelve

Una QkDurationInfo estructura que contiene la unidad de duración y el valor sin procesar.

qk_value_float

double qk_value_float(const QkValue *value)

Extraer el valor de coma flotante de un QkValue.

Genera un error si value no apunta a un valor de tipo float.

Ejemplo

double raw = qk_value_float(value);

Seguridad

El comportamiento no está definido si value no es un puntero válido y no nulo a un QkValue.

Parámetros

  • valor : un puntero a un valor de tipo float.

Devuelve

El double valor almacenado en value.

qk_value_uint

uint64_t qk_value_uint(const QkValue *value)

Extraer el valor entero sin signo de un QkValue de tipo QkExprType_Uint.

Deberías utilizar qk_value_type_info para asegurarte de que el valor quepa en uint64_t antes de llamar a esta función.

Da un error si value no apunta a un QkExprType_Uint valor o si el entero almacenado no cabe en uint64_t.

Ejemplo

uint64_t raw = qk_value_uint(value);

Seguridad

El comportamiento no está definido si value no es un puntero válido y no nulo a un QkValue.

Parámetros

  • valor : un puntero a un valor de tipo uint.

Devuelve

El valor entero convertido a uint64_t.

qk_value_bool

bool qk_value_bool(const QkValue *value)

Extraer el valor de un QkValue de tipo QkExprType_Bool.

Genera un error si value no apunta a un valor de tipo bool.

Ejemplo

bool raw = qk_value_bool(value);

Seguridad

El comportamiento no está definido si value no es un puntero válido y no nulo a un QkValue.

Parámetros

  • valor : un puntero a un valor de tipo bool.

Devuelve

false``true si la representación entera almacenada es distinta de cero; en caso contrario,.

qk_var_name

char *qk_var_name(const QkVar *var)

Devuelve el nombre de una variable como una cadena de C recién asignada.

Ejemplo

char *name = qk_var_name(var);
if (name != NULL) {
    // Use the name...
    qk_str_free(name);
}

Seguridad

El comportamiento no está definido si var no es un puntero válido y no nulo a un QkVar.

Parámetros

  • var : un puntero a la variable que se va a inspeccionar.

Devuelve

Una cadena terminada en nulo que contenga el nombre de la variable, o bien NULL , si var hace referencia a una variable no autónoma (es decir, basada en un bit clásico o en un registro clásico). La función a la que se llama es propietaria de la cadena devuelta y debe liberarla con qk_str_free.

qk_var_type_info

QkExprTypeInfo qk_var_type_info(const QkVar *var)

Devuelve toda la información sobre el tipo de una variable.

Da un error si var es un poco variable, algo que esta API aún no admite.

Ejemplo

QkExprTypeInfo type_info = qk_var_type_info(var);

Seguridad

El comportamiento no está definido si var no es un puntero válido y no nulo a un QkVar.

Parámetros

  • var : un puntero a la variable que se va a inspeccionar.

Devuelve

Una QkExprTypeInfo estructura que contiene la información sobre el tipo de variable.

qk_stretch_name

char *qk_stretch_name(const QkStretch *stretch)

Devuelve el nombre de un tramo.

Ejemplo

char *name = qk_stretch_name(stretch);
// Use the name...
qk_str_free(name);

Seguridad

El comportamiento no está definido si stretch no es un puntero válido y no nulo a un QkStretch.

Parámetros

  • stretch : un puntero al tramo que se va a inspeccionar.

Devuelve

Una cadena terminada en nulo que contiene el nombre del tramo. La función a la que se llama es propietaria de la cadena devuelta y debe liberarla con qk_str_free.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.