Skip to main content
IBM Quantum Platform

Expressões clássicas

A API C do Qiskit para expressões clássicas oferece recursos para inspecionar as expressões clássicas utilizadas no Qiskit. Essa API permite que os usuários percorram e examinem árvores de expressões por meio de um conjunto de enums, estruturas e funções de acesso. É possível examinar a estrutura das expressões, identificar os tipos de nós, consultar informações sobre os tipos e acessar as propriedades detalhadas de cada nó na árvore de expressões. Atualmente, só é possível acessar expressões clássicas por meio da API de fluxo de controle, por exemplo, ao consultar condições compostas por expressões clássicas.

Observe que as funções desta API retornam ponteiros emprestados que permanecem válidos enquanto a árvore de expressões pai existir; portanto, esses ponteiros não precisam ser liberados.


Tipos de dados

QkExprNodeKind

enum QkExprNodeKind

Os diferentes tipos de nós de expressão que podem aparecer em uma árvore de expressão clássica.

Valores:

QkExprNodeKind_Unary do recenseador

Expressão de operação unária (por exemplo, NOT, negação)

QkExprNodeKind_Binary do recenseador

Expressão de operação binária (por exemplo, AND, OR, operações aritméticas)

QkExprNodeKind_Cast do recenseador

Expressão com conversão de tipo

QkExprNodeKind_Value do recenseador

Expressão de valor literal

QkExprNodeKind_Var do recenseador

Expressão de referência variável

QkExprNodeKind_Stretch do recenseador

Expressão de extensão (relacionada ao tempo)

QkExprNodeKind_Index do recenseador

Expressão com índice/subíndice

QkExprType

enum QkExprType

Os tipos de dados que podem ser usados em expressões clássicas.

Valores:

QkExprType_Bool do recenseador

Tipo booleano

QkExprType_Duration do recenseador

Tipo de duração

QkExprType_Float do recenseador

Tipo de ponto flutuante

QkExprType_Uint do recenseador

Tipo inteiro sem sinal

QkExprTypeInfo

struct QkExprTypeInfo

A representação completa do tipo de dados utilizado em uma expressão.

QkExprType ty

O tipo de expressão

uint32_t largura

Largura em bits do tipo de expressão Uint

QkUnaryOpType

enum QkUnaryOpType

Os tipos de operação que uma expressão unária pode conter. Os valores começam em 1 para se adequarem à convenção “ Python ” do sistema de expressão clássico.

Valores:

QkUnaryOpType_BitNot do recenseador

Operação NOT bit a bit

QkUnaryOpType_LogicNot do recenseador

Operação lógica NÃO

QkUnaryOpType_Negate do recenseador

Negação aritmética

QkUnaryExprInfo

struct QkUnaryExprInfo

Descreve uma expressão unária, incluindo seu operador, operando, tipo de resultado e se é uma constante. qk_expr_unary_info Retornado pela função. O operand campo é um ponteiro emprestado para o operando da expressão da operação unária.

QkUnaryOpType op

O operador unário

const QkExprNode *operando

Ponteiro emprestado para a expressão operanda

QkExprTypeInfo ty

Tipo de resultado da operação

constante booleana

Se a expressão é constante

QkBinaryOpType

enum QkBinaryOpType

Os tipos de operação que uma expressão binária pode conter. Os valores começam em 1 para seguir a convenção d Python.

Valores:

QkBinaryOpType_BitAnd do recenseador

Operação AND bit a bit

QkBinaryOpType_BitOr do recenseador

Operação OR bit a bit

QkBinaryOpType_BitXor do recenseador

Operação XOR bit a bit

QkBinaryOpType_LogicAnd do recenseador

Operação lógica AND

QkBinaryOpType_LogicOr do recenseador

Operação OR lógica

QkBinaryOpType_Equal do recenseador

Comparação de igualdade

QkBinaryOpType_NotEqual do recenseador

Comparação de desigualdades

QkBinaryOpType_Less do recenseador

Menos do que a comparação

QkBinaryOpType_LessEqual do recenseador

Comparação “menor ou igual a”

QkBinaryOpType_Greater do recenseador

Maior do que a comparação

QkBinaryOpType_GreaterEqual do recenseador

Comparação “maior ou igual que”

QkBinaryOpType_ShiftLeft do recenseador

Operação de deslocamento para a esquerda

QkBinaryOpType_ShiftRight do recenseador

Operação de deslocamento para a direita

QkBinaryOpType_Add do recenseador

Operação de adição

QkBinaryOpType_Sub do recenseador

Operação de subtração

QkBinaryOpType_Mul do recenseador

Operação de multiplicação

QkBinaryOpType_Div do recenseador

Operação de divisão

QkBinaryExprInfo

struct QkBinaryExprInfo

Descreve uma expressão binária, incluindo seu operador, operandos, tipo de resultado e se ela é uma constante. qk_expr_binary_info Retornado pela função. Os left campos e right são ponteiros emprestados para os operandos da expressão da operação binária.

QkBinaryOpType op

O operador binário

const QkExprNode *left

Ponteiro emprestado para a expressão do operando à esquerda

const QkExprNode *direita

Ponteiro emprestado para a expressão do operando à direita

QkExprTypeInfo ty

Tipo de resultado da operação

constante booleana

Se a expressão é constante

QkCastExprInfo

struct QkCastExprInfo

Descreve uma expressão de conversão de tipo, incluindo o operando, o tipo de destino, se é implícita e se é constante. qk_expr_cast_info Retornado pela função. O operand campo é um ponteiro emprestado para o operando da expressão de conversão.

const QkExprNode *operando

Ponteiro emprestado para a expressão operanda que está sendo convertida

QkExprTypeInfo ty

Tipo de alvo do feitiço

bool implícito

Se a conversão é implícita (automática) ou explícita

constante booleana

Se a expressão é constante

QkIndexExprInfo

struct QkIndexExprInfo

Descreve uma expressão de índice, incluindo o destino, o índice, o tipo de resultado e se ela é constante. qk_expr_index_info Retornado pela função. Os target campos e index são ponteiros emprestados para o alvo e o índice da expressão da operação de indexação.

const QkExprNode *target

Ponteiro emprestado para a expressão-alvo que está sendo indexada

const QkExprNode *index

Ponteiro emprestado para a expressão de índice

QkExprTypeInfo ty

Tipo de resultado da operação de indexação

constante booleana

Se a expressão é constante

QkDurationType

enum QkDurationType

Representa as diferentes unidades de tempo utilizadas em expressões de duração.

Valores:

QkDurationType_Dt do recenseador

Unidades de tempo do sistema

QkDurationType_Ps do recenseador

Picossegundos

QkDurationType_Ns do recenseador

Nanossegundos

QkDurationType_Us do recenseador

Microssegundos

QkDurationType_Ms do recenseador

Milissegundos

QkDurationType_S do recenseador

Segundos

sindicato QkDurationValue

#include <types.h>

Uma união que armazena as unidades de tempo do sistema (dt) como um número inteiro ou o tempo real como um número de precisão flutuante.

Essa união faz parte da QkDurationInfo estrutura e não deve ser usada diretamente.

int64_t dt

QkDurationType_DtUnidades de tempo do sistema (ativas quando ty está em QkDurationInfo )

a passos acelerados

Valor em tempo real (ativo para todos os outros tipos de duração)

QkDurationInfo

struct QkDurationInfo

A representação completa de um valor de duração.

O ty campo atua como um discriminante que determina qual campo da value união está ativo.

Ao ser inicializado a partir do C, cabe ao usuário garantir que:

  • Quando ty é QkDurationType_Dt, a duração é armazenada como um número inteiro em value.dt.
  • Para todos os outros tipos de duração, a duração é armazenada como um valor de ponto flutuante em value.time.

QkDurationType ty

O tipo de unidade de duração (critério de seleção para a união)

QkDurationValue valor

O valor da duração


Funções

qk_expr_kind

QkExprNodeKind qk_expr_kind(const QkExprNode *expr)

Retorna o tipo de um nó de expressão clássico.

Exemplo

QKExprNodeKind kind = qk_expr_kind(expr);

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para o nó de expressão a ser inspecionado.

Retorna

A enumeração do tipo que descreve qual variante expr de expressão concreta está contida.

qk_expr_binary_info

QkBinaryExprInfo qk_expr_binary_info(const QkExprNode *expr)

Extrair informações de um nó de expressão binária.

Gera um erro de panico se expr não apontar para um nó de expressão binária.

Exemplo

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

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão binária.

Retorna

Uma QkBinaryExprInfo estrutura que descreve o operador, os operandos, o tipo do resultado e se a expressão é constante.

qk_expr_unary_info

QkUnaryExprInfo qk_expr_unary_info(const QkExprNode *expr)

Extrair informações de um nó de expressão unária.

Gera uma exceção se expr não apontar para um nó de expressão unária.

Exemplo

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

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão unária.

Retorna

Uma QkUnaryExprInfo estrutura que descreve o operador, o operando, o tipo do resultado e se a expressão é uma constante.

qk_expr_cast_info

QkCastExprInfo qk_expr_cast_info(const QkExprNode *expr)

Extrair informações de um nó de expressão de conversão.

Gera um erro se expr não apontar para um nó de expressão de conversão.

Exemplo

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

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão de conversão.

Retorna

Uma QkCastExprInfo estrutura que descreve o operando, o tipo de destino, se a conversão é implícita e se a expressão é constante.

qk_expr_index_info

QkIndexExprInfo qk_expr_index_info(const QkExprNode *expr)

Extrair informações de um nó de expressão de índice.

Gera um erro de panico se expr não apontar para um nó de expressão de índice.

Exemplo

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

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão de índice.

Retorna

Uma QkIndexExprInfo estrutura que descreve o alvo indexado, a expressão de índice, o tipo do resultado e se a expressão é constante.

qk_expr_as_value

const QkValue *qk_expr_as_value(const QkExprNode *expr)

Retorna uma visualização do valor subjacente do nó de expressão.

Gera um erro de panico se expr não apontar para um nó de expressão de valor.

Exemplo

const QkValue *value = qk_expr_as_value(expr);

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão de valor.

Retorna

Um ponteiro para o valor QkValue armazenado dentro de expr.

qk_expr_as_var

const QkVar *qk_expr_as_var(const QkExprNode *expr)

Retorna uma visualização da variável subjacente do nó de expressão.

Gera um erro de panico se expr não apontar para um nó de expressão variável.

Exemplo

const QkVar *var = qk_expr_as_var(expr);

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão variável.

Retorna

Um ponteiro para o valor QkVar armazenado dentro de expr.

qk_expr_as_stretch

const QkStretch *qk_expr_as_stretch(const QkExprNode *expr)

Retorna uma visualização do trecho subjacente do nó de expressão.

Gera um erro se expr não apontar para um nó de expressão de extensão.

Exemplo

const QkStretch *stretch = qk_expr_as_stretch(expr);

Segurança

O comportamento é indefinido se expr não for um ponteiro válido e não nulo para um QkExprNode.

Parâmetros

  • expr – Um ponteiro para um nó de expressão de extensão.

Retorna

Um ponteiro para o valor QkStretch armazenado dentro de expr.

qk_value_type_info

QkExprTypeInfo qk_value_type_info(const QkValue *value)

Retorna as informações de tipo de um valor.

Exemplo

QkExprTypeInfo type_info = qk_value_type_info(value);

Segurança

O comportamento é indefinido se value não for um ponteiro válido e não nulo para um Value.

Parâmetros

  • valor – Um ponteiro para o objeto QkValue a ser inspecionado.

Retorna

Uma QkExprTypeInfo estrutura que contém as informações sobre o tipo de valor.

qk_value_duration_info

QkDurationInfo qk_value_duration_info(const QkValue *value)

Extrair informações estruturadas a partir de um valor de duração.

Gera um erro se value não apontar para um valor de duração.

Exemplo

QkDurationInfo info = qk_value_duration_info(value);

Segurança

O comportamento é indefinido se value não for um ponteiro válido e não nulo para um QkValue.

Parâmetros

  • valor – Um ponteiro para um valor de duração.

Retorna

Uma QkDurationInfo estrutura que contém a unidade de duração e o valor bruto.

qk_value_float

double qk_value_float(const QkValue *value)

Extrair o valor de ponto flutuante de um QkValue.

Gera um erro se value não apontar para um valor do tipo float.

Exemplo

double raw = qk_value_float(value);

Segurança

O comportamento é indefinido se value não for um ponteiro válido e não nulo para um QkValue.

Parâmetros

  • valor – Um ponteiro para um valor do tipo float.

Retorna

O double valor armazenado em value.

qk_value_uint

uint64_t qk_value_uint(const QkValue *value)

Extraia o valor inteiro sem sinal de um QkValue do tipo QkExprType_Uint.

Você deve usar qk_value_type_info para garantir que o valor caiba em uint64_t antes de chamar essa função.

Gera um erro de panico se value não apontar para um QkExprType_Uint valor ou se o inteiro armazenado não couber em uint64_t.

Exemplo

uint64_t raw = qk_value_uint(value);

Segurança

O comportamento é indefinido se value não for um ponteiro válido e não nulo para um QkValue.

Parâmetros

  • value – Um ponteiro para um valor do tipo uint.

Retorna

O valor inteiro convertido para uint64_t.

qk_value_bool

bool qk_value_bool(const QkValue *value)

Extraia o valor de um QkValue do tipo QkExprType_Bool.

Gera um erro se value não apontar para um valor do tipo bool.

Exemplo

bool raw = qk_value_bool(value);

Segurança

O comportamento é indefinido se value não for um ponteiro válido e não nulo para um QkValue.

Parâmetros

  • valor – Um ponteiro para um valor do tipo bool.

Retorna

false``true se a representação inteira armazenada for diferente de zero; caso contrário,.

qk_var_name

char *qk_var_name(const QkVar *var)

Retorna o nome de uma variável como uma string C recém-alocada.

Exemplo

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

Segurança

O comportamento é indefinido se var não for um ponteiro válido e não nulo para um QkVar.

Parâmetros

  • var – Um ponteiro para a variável a ser inspecionada.

Retorna

Uma string terminada por caractere nulo contendo o nome da variável, ou NULL , caso var se trate de uma variável não autônoma (ou seja, baseada em um bit clássico ou em um registro clássico). A função de chamada é responsável pela string retornada e deve liberá-la com qk_str_free.

qk_var_type_info

QkExprTypeInfo qk_var_type_info(const QkVar *var)

Retorna todas as informações de tipo de uma variável.

Gera um erro se var for um pouco variável, o que ainda não é suportado por esta API.

Exemplo

QkExprTypeInfo type_info = qk_var_type_info(var);

Segurança

O comportamento é indefinido se var não for um ponteiro válido e não nulo para um QkVar.

Parâmetros

  • var – Um ponteiro para a variável a ser inspecionada.

Retorna

Uma QkExprTypeInfo estrutura que contém as informações sobre o tipo da variável.

qk_stretch_name

char *qk_stretch_name(const QkStretch *stretch)

Retorna o nome de um trecho.

Exemplo

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

Segurança

O comportamento é indefinido se stretch não for um ponteiro válido e não nulo para um QkStretch.

Parâmetros

  • stretch – Um ponteiro para o trecho a ser inspecionado.

Retorna

Uma string terminada por caractere nulo contendo o nome do trecho. A função de chamada é responsável pela string retornada e deve liberá-la com qk_str_free.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.