# loki.expression.operations

Sub-classes of Pymbolic’s native operations that allow us to inject Fortran-specific features, such as case-insensitive string comparison and bracket-aware and sub-expression grouping. Here we also add additional technical operations, such as cast and references.

Classes

`Cast`(name, expression[, kind]) | Internal representation of a data type cast.
`Comparison`(left, operator, right) | Representation of a comparison operation.
`Dereference`(expression) | Internal representation of a Dereference.
`LogicalAnd`(children) | Representation of an 'and' in a logical expression.
`LogicalNot`(child) | Representation of a negation in a logical expression.
`LogicalOr`(children) | Representation of an 'or' in a logical expression.
`ParenthesisedAdd`(children) | Specialised version of `Sum` that always pretty-prints and code-generates with explicit parentheses.
`ParenthesisedDiv`(numerator[, denominator]) | Specialised version of `Quotient` that always pretty-prints and code-generates with explicit parentheses.
`ParenthesisedMul`(children) | Specialised version of `Product` that always pretty-prints and code-generates with explicit parentheses.
`ParenthesisedPow`(base, exponent) | Specialised version of `Power` that always pretty-prints and code-generates with explicit parentheses.
`Power`(base, exponent) | Representation of a power.
`Product`(children) | Representation of a product.
`Quotient`(numerator[, denominator]) | Representation of a quotient.
`Reference`(expression) | Internal representation of a Reference.
`StringConcat`(children) | Implements string concatenation in a way similar to `Sum`.
`Sum`(children) | Representation of a sum.

class Sum(children)

  Bases: `StrCompareMixin`, `Sum`

  Representation of a sum.

class Product(children)

  Bases: `StrCompareMixin`, `Product`

  Representation of a product.

class Quotient(numerator, denominator=1)

  Bases: `StrCompareMixin`, `Quotient`

  Representation of a quotient.

class Power(base, exponent)

  Bases: `StrCompareMixin`, `Power`

  Representation of a power.

class Comparison(left, operator, right)

  Bases: `StrCompareMixin`, `Comparison`

  Representation of a comparison operation.

class LogicalAnd(children)

  Bases: `StrCompareMixin`, `LogicalAnd`

  Representation of an ‘and’ in a logical expression.

class LogicalOr(children)

  Bases: `StrCompareMixin`, `LogicalOr`

  Representation of an ‘or’ in a logical expression.

class LogicalNot(child)

  Bases: `StrCompareMixin`, `LogicalNot`

  Representation of a negation in a logical expression.

class StringConcat(children)

  Bases: `_MultiChildExpression`

  Implements string concatenation in a way similar to `Sum`.

  mapper_method = 'map_string_concat'

class Cast(name, expression, kind=None, **kwargs)

  Bases: `StrCompareMixin`, `Call`

  Internal representation of a data type cast.

  init_arg_names = ('name', 'expression', 'kind')
  mapper_method = 'map_cast'
  property name
  property expression

class Reference(expression)

  Bases: `StrCompareMixin`, `Expression`

  Internal representation of a Reference.

  Warning

  Experimental! Allowing compound `Reference(Variable(...))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  C/C++ only, no corresponding concept in Fortran. Referencing refers to taking the address of an existing variable (to set a pointer variable).

  init_arg_names = ('expression',)
  property name

    Allowing the compound `Reference(Variable(name))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  property type

    Allowing the compound `Reference(Variable(type))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  property scope

    Allowing the compound `Reference(Variable(scope))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  property initial

    Allowing the compound `Reference(Variable(initial))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  mapper_method = 'map_c_reference'

class Dereference(expression)

  Bases: `StrCompareMixin`, `Expression`

  Internal representation of a Dereference.

  Warning

  Experimental! Allowing compound `Dereference(Variable(...))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  C/C++ only, no corresponding concept in Fortran. Dereferencing (a pointer) refers to retrieving the value from a memory address (that is pointed by the pointer).

  init_arg_names = ('expression',)
  property name

    Allowing the compound `Dereference(Variable(name))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  property type

    Allowing the compound `Dereference(Variable(type))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  property scope

    Allowing the compound `Dereference(Variable(scope))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  property initial

    Allowing the compound `Dereference(Variable(initial))` to appear with behaviour akin to a symbol itself for easier processing in mappers.

  mapper_method = 'map_c_dereference'