Package org.apache.sysds.parser

## Class Expression

- java.lang.Object
- - org.apache.sysds.parser.Expression

- All Implemented Interfaces:
    `ParseInfo`
  Direct Known Subclasses:
    `BinaryExpression`, `BooleanExpression`, `ExpressionList`, `Identifier`, `IterablePredicate`, `RelationalExpression`

      public abstract class Expression
      extends Object
      implements ParseInfo

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `Expression.BinaryOp` | Binary operators.
    `static class` | `Expression.BooleanOp` | Boolean operators.
    `static class` | `Expression.DataOp` | Data operators.
    `static class` | `Expression.FunctCallOp` | Function call operators.
    `static class` | `Expression.RelationalOp` | Relational operators.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `Expression()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static Types.DataType` | `computeDataType​(Expression expression1, Expression expression2, boolean cast)` | Compute data type based on expressions.
    `static Types.DataType` | `computeDataType​(Identifier identifier1, Identifier identifier2, boolean cast)` | Compute data type based on identifiers.
    `static Types.ValueType` | `computeValueType​(Expression expr1, Types.ValueType v1, Types.ValueType v2, boolean cast)` |
    `static Types.ValueType` | `computeValueType​(Expression expression1, Expression expression2, boolean cast)` | Compute value type based on expressions.
    `static Types.ValueType` | `computeValueType​(Identifier identifier1, Identifier identifier2, boolean cast)` | Compute value type based on identifiers.
    `static Types.FileFormat` | `convertFormatType​(String format)` | Convert string format type to `Hop.FileFormatTypes`.
    `boolean` | `equals​(Object that)` |
    `int` | `getBeginColumn()` |
    `int` | `getBeginLine()` |
    `static MatrixCharacteristics` | `getBinaryMatrixCharacteristics​(Expression expression1, Expression expression2)` | Returns the matrix characteristics for scalar-scalar, scalar-matrix, matrix-scalar, matrix-matrix operations.
    `static Expression.BinaryOp` | `getBinaryOp​(String val)` | Convert string value to binary operator.
    `static Expression.BooleanOp` | `getBooleanOp​(String val)` | Convert string value to boolean operator.
    `int` | `getEndColumn()` |
    `int` | `getEndLine()` |
    `String` | `getFilename()` |
    `Identifier` | `getOutput()` | Obtain identifier.
    `Identifier[]` | `getOutputs()` | Obtain identifiers.
    `ArrayList<String>` | `getParseExceptionList()` |
    `static Expression.RelationalOp` | `getRelationalOp​(String val)` | Convert string value to relational operator.
    `static String` | `getTempName()` | Obtain temporary name ("parsertemp" + _tempId) for expression.
    `String` | `getText()` |
    `int` | `hashCode()` |
    `String` | `printErrorLocation()` |
    `String` | `printInfoLocation()` | Return info message containing the filename, the beginning line position, and the beginning column position.
    `String` | `printWarningLocation()` |
    `void` | `raiseValidateError​(String message)` | Throw a LanguageException with the message.
    `void` | `raiseValidateError​(String message, boolean conditional)` | Throw a LanguageException with the message if conditional is `false`; otherwise log the message as a warning.
    `void` | `raiseValidateError​(String msg, boolean conditional, String errorCode)` | Throw a LanguageException with the message (and optional error code) if conditional is `false`; otherwise log the message as a warning.
    `abstract Expression` | `rewriteExpression​(String prefix)` |
    `void` | `setBeginColumn​(int passed)` |
    `void` | `setBeginLine​(int passed)` |
    `void` | `setCtxValues​(org.antlr.v4.runtime.ParserRuleContext ctx)` | Set ParserRuleContext values (begin line, begin column, end line, end column, and text).
    `void` | `setCtxValuesAndFilename​(org.antlr.v4.runtime.ParserRuleContext ctx, String filename)` | Set ParserRuleContext values (begin line, begin column, end line, end column, and text) and file name.
    `void` | `setEndColumn​(int passed)` |
    `void` | `setEndLine​(int passed)` |
    `void` | `setFilename​(String passed)` |
    `void` | `setOutput​(Identifier output)` |
    `void` | `setParseExceptionList​(ArrayList<String> passed)` |
    `void` | `setParseInfo​(ParseInfo parseInfo)` | Set parse information.
    `void` | `setText​(String text)` |
    `void` | `validateExpression​(HashMap<String,​DataIdentifier> ids, HashMap<String,​ConstIdentifier> currConstVars, boolean conditional)` |
    `void` | `validateExpression​(MultiAssignmentStatement mas, HashMap<String,​DataIdentifier> ids, HashMap<String,​ConstIdentifier> currConstVars, boolean conditional)` |
    `abstract VariableSet` | `variablesRead()` |
    `abstract VariableSet` | `variablesUpdated()` |

    - ### Methods inherited from class java.lang.Object

      `getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### Expression

          public Expression()

  - ### Method Detail

    - #### rewriteExpression

          public abstract Expression rewriteExpression​(String prefix)

    - #### setOutput

          public void setOutput​(Identifier output)

    - #### getOutput

          public Identifier getOutput()

      Obtain identifier.
      Returns:
        Identifier

    - #### getOutputs

          public Identifier[] getOutputs()

      Obtain identifiers.
      Returns:
        Identifiers

    - #### validateExpression

          public void validateExpression​(HashMap<String,​DataIdentifier> ids,
                                         HashMap<String,​ConstIdentifier> currConstVars,
                                         boolean conditional)

    - #### validateExpression

          public void validateExpression​(MultiAssignmentStatement mas,
                                         HashMap<String,​DataIdentifier> ids,
                                         HashMap<String,​ConstIdentifier> currConstVars,
                                         boolean conditional)

    - #### getBinaryOp

          public static Expression.BinaryOp getBinaryOp​(String val)

      Convert string value to binary operator.
      Parameters:
        `val` - String value ('+', '-', '*', '/', '%%', '%/%', '^', %*%')
      Returns:
        Binary operator (`BinaryOp.PLUS`, `BinaryOp.MINUS`, `BinaryOp.MULT`, `BinaryOp.DIV`, `BinaryOp.MODULUS`, `BinaryOp.INTDIV`, `BinaryOp.POW`, `BinaryOp.MATMULT`). Returns `BinaryOp.INVALID` if string value not recognized.

    - #### getRelationalOp

          public static Expression.RelationalOp getRelationalOp​(String val)

      Convert string value to relational operator.
      Parameters:
        `val` - String value ('<', '<=', '>', '>=', '==', '!=')
      Returns:
        Relational operator (`RelationalOp.LESS`, `RelationalOp.LESSEQUAL`, `RelationalOp.GREATER`, `RelationalOp.GREATEREQUAL`, `RelationalOp.EQUAL`, `RelationalOp.NOTEQUAL`). Returns `RelationalOp.INVALID` if string value not recognized.

    - #### getBooleanOp

          public static Expression.BooleanOp getBooleanOp​(String val)

      Convert string value to boolean operator.
      Parameters:
        `val` - String value ('&&', '&', '||', '|', '!')
      Returns:
        Boolean operator (`BooleanOp.CONDITIONALAND`, `BooleanOp.LOGICALAND`, `BooleanOp.CONDITIONALOR`, `BooleanOp.LOGICALOR`, `BooleanOp.NOT`). Returns `BooleanOp.INVALID` if string value not recognized.

    - #### convertFormatType

          public static Types.FileFormat convertFormatType​(String format)

      Convert string format type to `Hop.FileFormatTypes`.
      Parameters:
        `format` - String format type ("text", "binary", "mm", "csv")
      Returns:
        Format as `Hop.FileFormatTypes`. Can be `FileFormatTypes.TEXT`, `FileFormatTypes.BINARY`, `FileFormatTypes.MM`, or `FileFormatTypes.CSV`. Unrecognized type is set to `FileFormatTypes.TEXT`.

    - #### getTempName

          public static String getTempName()

      Obtain temporary name ("parsertemp" + _tempId) for expression. Used to construct Hops from parse tree.
      Returns:
        Temporary name of expression.

    - #### variablesRead

          public abstract VariableSet variablesRead()

    - #### variablesUpdated

          public abstract VariableSet variablesUpdated()

    - #### computeDataType

          public static Types.DataType computeDataType​(Expression expression1,
                                                       Expression expression2,
                                                       boolean cast)

      Compute data type based on expressions. The identifier for each expression is obtained and passed to `computeDataType(Identifier, Identifier, boolean)`. If the identifiers have the same data type, the shared data type is returned. Otherwise, if `cast` is `true` and one of the identifiers is a matrix and the other identifier is a scalar, return `DataType.MATRIX`. Otherwise, throw a LanguageException.
      Parameters:
        `expression1` - First expression
        `expression2` - Second expression
        `cast` - Whether a cast should potentially be performed
      Returns:
        The data type (`Types.DataType`)

    - #### computeDataType

          public static Types.DataType computeDataType​(Identifier identifier1,
                                                       Identifier identifier2,
                                                       boolean cast)

      Compute data type based on identifiers. If the identifiers have the same data type, the shared data type is returned. Otherwise, if `cast` is `true` and one of the identifiers is a matrix and the other identifier is a scalar, return `DataType.MATRIX`. Otherwise, throw a LanguageException.
      Parameters:
        `identifier1` - First identifier
        `identifier2` - Second identifier
        `cast` - Whether a cast should potentially be performed
      Returns:
        The data type (`Types.DataType`)

    - #### computeValueType

          public static Types.ValueType computeValueType​(Expression expression1,
                                                         Expression expression2,
                                                         boolean cast)

      Compute value type based on expressions. The identifier for each expression is obtained and passed to `computeValueType(Identifier, Identifier, boolean)`. If the identifiers have the same value type, the shared value type is returned. Otherwise, if `cast` is `true` and one value type is a double and the other is an int, return `ValueType.DOUBLE`. If `cast` is `true` and one value type is a string or the other value type is a string, return `ValueType.STRING`. Otherwise, throw a LanguageException.
      Parameters:
        `expression1` - First expression
        `expression2` - Second expression
        `cast` - Whether a cast should potentially be performed
      Returns:
        The value type (`Types.ValueType`)

    - #### computeValueType

          public static Types.ValueType computeValueType​(Identifier identifier1,
                                                         Identifier identifier2,
                                                         boolean cast)

      Compute value type based on identifiers. If the identifiers have the same value type, the shared value type is returned. Otherwise, if `cast` is `true` and one value type is a double and the other is an int, return `ValueType.DOUBLE`. If `cast` is `true` and one value type is a string or the other value type is a string, return `ValueType.STRING`. Otherwise, throw a LanguageException.
      Parameters:
        `identifier1` - First identifier
        `identifier2` - Second identifier
        `cast` - Whether a cast should potentially be performed
      Returns:
        The value type (`Types.ValueType`)

    - #### computeValueType

          public static Types.ValueType computeValueType​(Expression expr1,
                                                         Types.ValueType v1,
                                                         Types.ValueType v2,
                                                         boolean cast)

    - #### equals

          public boolean equals​(Object that)

      Overrides:
        `equals` in class `Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### raiseValidateError

          public void raiseValidateError​(String message)

      Throw a LanguageException with the message.
      Parameters:
        `message` - the error message

    - #### raiseValidateError

          public void raiseValidateError​(String message,
                                         boolean conditional)

      Throw a LanguageException with the message if conditional is `false`; otherwise log the message as a warning.
      Parameters:
        `message` - the error (or warning) message
        `conditional` - if `true`, display log warning message. Otherwise, the message will be thrown as a LanguageException

    - #### raiseValidateError

          public void raiseValidateError​(String msg,
                                         boolean conditional,
                                         String errorCode)

      Throw a LanguageException with the message (and optional error code) if conditional is `false`; otherwise log the message as a warning.
      Parameters:
        `msg` - the error (or warning) message
        `conditional` - if `true`, display log warning message. Otherwise, the message (and optional error code) will be thrown as a LanguageException
        `errorCode` - optional error code

    - #### getBinaryMatrixCharacteristics

          public static MatrixCharacteristics getBinaryMatrixCharacteristics​(Expression expression1,
                                                                             Expression expression2)

      Returns the matrix characteristics for scalar-scalar, scalar-matrix, matrix-scalar, matrix-matrix operations. This method is aware of potentially unknowns and matrix-vector (col/row) operations.
      Parameters:
        `expression1` - The first expression
        `expression2` - The second expression
      Returns:
        matrix characteristics [1] is the number of columns (clen), [2] is the number of rows in a block (blen), and [3] is the number of columns in a block (blen). Default (unknown) values are -1. Scalar values are all 0.

    - #### setFilename

          public void setFilename​(String passed)

      Specified by:
        `setFilename` in interface `ParseInfo`

    - #### setBeginLine

          public void setBeginLine​(int passed)

      Specified by:
        `setBeginLine` in interface `ParseInfo`

    - #### setBeginColumn

          public void setBeginColumn​(int passed)

      Specified by:
        `setBeginColumn` in interface `ParseInfo`

    - #### setEndLine

          public void setEndLine​(int passed)

      Specified by:
        `setEndLine` in interface `ParseInfo`

    - #### setEndColumn

          public void setEndColumn​(int passed)

      Specified by:
        `setEndColumn` in interface `ParseInfo`

    - #### setText

          public void setText​(String text)

      Specified by:
        `setText` in interface `ParseInfo`

    - #### setParseExceptionList

          public void setParseExceptionList​(ArrayList<String> passed)

    - #### setParseInfo

          public void setParseInfo​(ParseInfo parseInfo)

      Set parse information.
      Parameters:
        `parseInfo` - parse information, such as beginning line position, beginning column position, ending line position, ending column position, text, and filename

    - #### setCtxValues

          public void setCtxValues​(org.antlr.v4.runtime.ParserRuleContext ctx)

      Set ParserRuleContext values (begin line, begin column, end line, end column, and text).
      Parameters:
        `ctx` - the antlr ParserRuleContext

    - #### setCtxValuesAndFilename

          public void setCtxValuesAndFilename​(org.antlr.v4.runtime.ParserRuleContext ctx,
                                              String filename)

      Set ParserRuleContext values (begin line, begin column, end line, end column, and text) and file name.
      Parameters:
        `ctx` - the antlr ParserRuleContext
        `filename` - the filename (if it exists)

    - #### getFilename

          public String getFilename()

      Specified by:
        `getFilename` in interface `ParseInfo`

    - #### getBeginLine

          public int getBeginLine()

      Specified by:
        `getBeginLine` in interface `ParseInfo`

    - #### getBeginColumn

          public int getBeginColumn()

      Specified by:
        `getBeginColumn` in interface `ParseInfo`

    - #### getEndLine

          public int getEndLine()

      Specified by:
        `getEndLine` in interface `ParseInfo`

    - #### getEndColumn

          public int getEndColumn()

      Specified by:
        `getEndColumn` in interface `ParseInfo`

    - #### getText

          public String getText()

      Specified by:
        `getText` in interface `ParseInfo`

    - #### getParseExceptionList

          public ArrayList<String> getParseExceptionList()

    - #### printErrorLocation

          public String printErrorLocation()

    - #### printWarningLocation

          public String printWarningLocation()

    - #### printInfoLocation

          public String printInfoLocation()

      Return info message containing the filename, the beginning line position, and the beginning column position.
      Returns:
        the info message