Expression Evaluation#
- group expressions
Enums
-
enum class ast_operator : int32_t#
Enum of supported operators.
Values:
-
enumerator ADD#
operator +
-
enumerator SUB#
operator -
-
enumerator MUL#
operator *
-
enumerator DIV#
operator / using common type of lhs and rhs
-
enumerator TRUE_DIV#
operator / after promoting type to floating point
-
enumerator FLOOR_DIV#
operator / after promoting to 64 bit floating point and then flooring the result
-
enumerator MOD#
operator %
-
enumerator PYMOD#
operator % using Python’s sign rules for negatives
-
enumerator POW#
lhs ^ rhs
-
enumerator EQUAL#
operator ==
-
enumerator NULL_EQUAL#
operator == with Spark rules: NULL_EQUAL(null, null) is true, NULL_EQUAL(null, valid) is false, and NULL_EQUAL(valid, valid) == EQUAL(valid, valid)
-
enumerator NOT_EQUAL#
operator !=
-
enumerator LESS#
operator <
-
enumerator GREATER#
operator >
-
enumerator LESS_EQUAL#
operator <=
-
enumerator GREATER_EQUAL#
operator >=
-
enumerator BITWISE_AND#
operator &
-
enumerator BITWISE_OR#
operator |
-
enumerator BITWISE_XOR#
operator ^
-
enumerator LOGICAL_AND#
operator &&
-
enumerator NULL_LOGICAL_AND#
operator && with Spark rules: NULL_LOGICAL_AND(null, null) is null, NULL_LOGICAL_AND(null, true) is null, NULL_LOGICAL_AND(null, false) is false, and NULL_LOGICAL_AND(valid, valid) == LOGICAL_AND(valid, valid)
-
enumerator LOGICAL_OR#
operator ||
-
enumerator NULL_LOGICAL_OR#
operator || with Spark rules: NULL_LOGICAL_OR(null, null) is null, NULL_LOGICAL_OR(null, true) is true, NULL_LOGICAL_OR(null, false) is null, and NULL_LOGICAL_OR(valid, valid) == LOGICAL_OR(valid, valid)
-
enumerator IDENTITY#
Identity function.
-
enumerator IS_NULL#
Check if operand is null.
-
enumerator SIN#
Trigonometric sine.
-
enumerator COS#
Trigonometric cosine.
-
enumerator TAN#
Trigonometric tangent.
-
enumerator ARCSIN#
Trigonometric sine inverse.
-
enumerator ARCCOS#
Trigonometric cosine inverse.
-
enumerator ARCTAN#
Trigonometric tangent inverse.
-
enumerator SINH#
Hyperbolic sine.
-
enumerator COSH#
Hyperbolic cosine.
-
enumerator TANH#
Hyperbolic tangent.
-
enumerator ARCSINH#
Hyperbolic sine inverse.
-
enumerator ARCCOSH#
Hyperbolic cosine inverse.
-
enumerator ARCTANH#
Hyperbolic tangent inverse.
-
enumerator EXP#
Exponential (base e, Euler number)
-
enumerator LOG#
Natural Logarithm (base e)
-
enumerator SQRT#
Square-root (x^0.5)
-
enumerator CBRT#
Cube-root (x^(1.0/3))
-
enumerator CEIL#
Smallest integer value not less than arg.
-
enumerator FLOOR#
largest integer value not greater than arg
-
enumerator ABS#
Absolute value.
-
enumerator RINT#
Rounds the floating-point argument arg to an integer value.
-
enumerator BIT_INVERT#
Bitwise Not (~)
-
enumerator NOT#
Logical Not (!)
-
enumerator CAST_TO_INT64#
Cast value to int64_t.
-
enumerator CAST_TO_UINT64#
Cast value to uint64_t.
-
enumerator CAST_TO_FLOAT64#
Cast value to double.
-
enumerator ADD#
-
struct expression#
- #include <expressions.hpp>
A generic expression that can be evaluated to return a value.
This class is a part of a “visitor” pattern with the
expression_parser
class. Expressions inheriting from this class can accept parsers as visitors.Subclassed by cudf::ast::column_name_reference, cudf::ast::column_reference, cudf::ast::literal, cudf::ast::operation
Public Functions
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const = 0#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const = 0#
Accepts a visitor class.
- Parameters:
visitor – The
expression_transformer
transforming this expression tree- Returns:
Reference wrapper of transformed expression
-
inline bool may_evaluate_null(table_view const &left, rmm::cuda_stream_view stream) const#
Returns true if the expression may evaluate to null.
- Parameters:
left – The left operand of the expression (The same is used as right operand)
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true
if the expression may evaluate to null, otherwise false
-
virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const = 0#
Returns true if the expression may evaluate to null.
- Parameters:
left – The left operand of the expression
right – The right operand of the expression
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true
if the expression may evaluate to null, otherwise false
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const = 0#
-
class generic_scalar_device_view : public cudf::detail::scalar_device_view_base#
- #include <expressions.hpp>
A type-erased scalar_device_view where the value is a fixed width type or a string.
Public Functions
-
template<typename T>
inline T const value() const noexcept# Returns the stored value.
- Template Parameters:
T – The desired type
- Returns:
The stored value
-
template<typename T>
inline generic_scalar_device_view(numeric_scalar<T> &s)# Construct a new generic scalar device view object from a numeric scalar.
- Parameters:
s – The numeric scalar to construct from
-
template<typename T>
inline generic_scalar_device_view(timestamp_scalar<T> &s)# Construct a new generic scalar device view object from a timestamp scalar.
- Parameters:
s – The timestamp scalar to construct from
-
template<typename T>
inline generic_scalar_device_view(duration_scalar<T> &s)# Construct a new generic scalar device view object from a duration scalar.
- Parameters:
s – The duration scalar to construct from
-
inline generic_scalar_device_view(string_scalar &s)#
Construct a new generic scalar device view object from a string scalar.
- Parameters:
s – The string scalar to construct from
-
template<typename T>
-
class literal : public cudf::ast::expression#
- #include <expressions.hpp>
A literal value used in an abstract syntax tree.
Public Functions
-
template<typename T>
inline literal(cudf::numeric_scalar<T> &value)# Construct a new literal object.
- Template Parameters:
T – Numeric scalar template type
- Parameters:
value – A numeric scalar value
-
template<typename T>
inline literal(cudf::timestamp_scalar<T> &value)# Construct a new literal object.
- Template Parameters:
T – Timestamp scalar template type
- Parameters:
value – A timestamp scalar value
-
template<typename T>
inline literal(cudf::duration_scalar<T> &value)# Construct a new literal object.
- Template Parameters:
T – Duration scalar template type
- Parameters:
value – A duration scalar value
-
inline literal(cudf::string_scalar &value)#
Construct a new literal object.
- Parameters:
value – A string scalar value
-
inline cudf::data_type get_data_type() const#
Get the data type.
- Returns:
The data type of the literal
-
inline generic_scalar_device_view get_value() const#
Get the value object.
- Returns:
The device scalar object
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#
Returns true if the expression may evaluate to null.
- Parameters:
left – The left operand of the expression
right – The right operand of the expression
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true
if the expression may evaluate to null, otherwise false
-
inline bool is_valid(rmm::cuda_stream_view stream) const#
Check if the underlying scalar is valid.
- Parameters:
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true if the underlying scalar is valid
-
template<typename T>
-
class column_reference : public cudf::ast::expression#
- #include <expressions.hpp>
A expression referring to data from a column in a table.
Public Functions
-
inline column_reference(cudf::size_type column_index, table_reference table_source = table_reference::LEFT)#
Construct a new column reference object.
- Parameters:
column_index – Index of this column in the table (provided when the expression is evaluated).
table_source – Which table to use in cases with two tables (e.g. joins)
-
inline cudf::size_type get_column_index() const#
Get the column index.
- Returns:
The column index of the column reference
-
inline table_reference get_table_source() const#
Get the table source.
- Returns:
table_reference The reference to the table containing this column
-
inline cudf::data_type get_data_type(table_view const &table) const#
Get the data type.
- Parameters:
table – Table used to determine types
- Returns:
The data type of the column
-
inline cudf::data_type get_data_type(table_view const &left_table, table_view const &right_table) const#
Get the data type.
- Parameters:
left_table – Left table used to determine types
right_table – Right table used to determine types
- Returns:
The data type of the column
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#
Returns true if the expression may evaluate to null.
- Parameters:
left – The left operand of the expression
right – The right operand of the expression
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true
if the expression may evaluate to null, otherwise false
-
inline column_reference(cudf::size_type column_index, table_reference table_source = table_reference::LEFT)#
-
class operation : public cudf::ast::expression#
- #include <expressions.hpp>
An operation expression holds an operator and zero or more operands.
Public Functions
-
operation(ast_operator op, expression const &input)#
Construct a new unary operation object.
- Parameters:
op – Operator
input – Input expression (operand)
-
operation(ast_operator op, expression const &left, expression const &right)#
Construct a new binary operation object.
- Parameters:
op – Operator
left – Left input expression (left operand)
right – Right input expression (right operand)
-
inline ast_operator get_operator() const#
Get the operator.
- Returns:
The operator
-
inline std::vector<std::reference_wrapper<expression const>> const &get_operands() const#
Get the operands.
- Returns:
Vector of operands
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#
Returns true if the expression may evaluate to null.
- Parameters:
left – The left operand of the expression
right – The right operand of the expression
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true
if the expression may evaluate to null, otherwise false
-
operation(ast_operator op, expression const &input)#
-
class column_name_reference : public cudf::ast::expression#
- #include <expressions.hpp>
A expression referring to data from a column in a table.
Public Functions
-
inline column_name_reference(std::string column_name)#
Construct a new column name reference object.
- Parameters:
column_name – Name of this column in the table metadata (provided when the expression is evaluated).
-
inline std::string get_column_name() const#
Get the column name.
- Returns:
The name of this column reference
-
virtual cudf::size_type accept(detail::expression_parser &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
virtual std::reference_wrapper<expression const> accept(detail::expression_transformer &visitor) const override#
Accepts a visitor class.
- Parameters:
visitor – The
expression_parser
parsing this expression tree- Returns:
Index of device data reference for this instance
-
inline virtual bool may_evaluate_null(table_view const &left, table_view const &right, rmm::cuda_stream_view stream) const override#
Returns true if the expression may evaluate to null.
- Parameters:
left – The left operand of the expression
right – The right operand of the expression
stream – CUDA stream used for device memory operations and kernel launches
- Returns:
true
if the expression may evaluate to null, otherwise false
-
inline column_name_reference(std::string column_name)#
-
class tree#
- #include <expressions.hpp>
An AST expression tree. It owns and contains multiple dependent expressions. All the expressions are destroyed when the tree is destructed.
Public Functions
-
tree() = default#
construct an empty ast tree
-
tree &operator=(tree&&) = default#
move-assigns the AST tree
- Returns:
a reference to the move-assigned tree
-
template<typename Expr, typename ...Args>
inline Expr const &emplace(Args&&... args)# Add an expression to the AST tree.
- Parameters:
args – Arguments to use to construct the ast expression
- Returns:
a reference to the added expression
-
template<typename Expr>
inline Expr const &push(Expr expr)# Add an expression to the AST tree.
- Parameters:
expr – AST expression to be added
- Returns:
a reference to the added expression
-
inline expression const &front() const#
get the first expression in the tree
- Returns:
the first inserted expression into the tree
-
inline expression const &back() const#
get the last expression in the tree
- Returns:
the last inserted expression into the tree
-
inline size_t size() const#
get the number of expressions added to the tree
- Returns:
the number of expressions added to the tree
-
inline expression const &at(size_t index)#
get the expression at an index in the tree. Index is checked.
- Parameters:
index – index of expression in the ast tree
- Returns:
the expression at the specified index
-
inline expression const &operator[](size_t index) const#
get the expression at an index in the tree. Index is unchecked.
- Parameters:
index – index of expression in the ast tree
- Returns:
the expression at the specified index
-
tree() = default#
-
enum class ast_operator : int32_t#