40#include <symengine/add.h>
41#include <symengine/basic.h>
42#include <symengine/dict.h>
43#include <symengine/integer.h>
44#include <symengine/logic.h>
45#include <symengine/mul.h>
46#include <symengine/nan.h>
47#include <symengine/real_double.h>
48#include <symengine/simplify.h>
49#include <symengine/symbol.h>
51#include <unordered_map>
52#include "symengine/functions.h"
53#include "symengine/subs.h"
71typedef SymEngine::RCP<const SymEngine::Symbol>
Symbol;
74typedef SymEngine::RCP<const SymEngine::Number>
Number;
77typedef SymEngine::RCP<const SymEngine::Integer>
Integer;
80typedef SymEngine::RCP<const SymEngine::Infty>
Infty;
83typedef SymEngine::RCP<const SymEngine::Basic>
Expression;
86typedef SymEngine::RCP<const SymEngine::Boolean>
Condition;
95typedef std::set<Symbol, SymEngine::RCPBasicKeyLess>
SymbolSet;
98typedef std::unordered_map<Symbol, Expression, SymEngine::RCPBasicHash, SymEngine::RCPBasicKeyEq>
SymbolMap;
107typedef std::unordered_map<Expression, Expression, SymEngine::RCPBasicHash, SymEngine::RCPBasicKeyEq>
ExpressionMap;
454 : FunctionSymbol(
"sizeof", SymEngine::vec_basic{}), type_(type) {
662 for (
auto& atom : SymEngine::atoms<T>(*expr)) {
663 if (SymEngine::is_a<T>(*atom)) {
679 for (
auto& atom : SymEngine::atoms<T>(*expr)) {
680 if (SymEngine::is_a<T>(*atom)) {
720 return SymEngine::subs(expr, replacements);
DynamicSizeOfFunction(const Symbol symbol)
Definition symbolic.h:477
IModFunction(const Expression lhs, const Expression rhs)
Definition symbolic.h:379
MallocUsableSizeFunction(const Symbol symbol)
Definition symbolic.h:496
SizeOfTypeFunction(const types::IType &type)
Definition symbolic.h:453
const types::IType & get_type() const
Definition symbolic.h:457
TruncI32Function(const Expression expr)
Definition symbolic.h:423
ZExtI64Function(const Expression expr)
Definition symbolic.h:405
Abstract base interface for all types in the sdfglib type system.
Definition type.h:625
Expression trunc_i32(const Expression expr)
Truncate to 32-bit integer.
Expression mod(const Expression lhs, const Expression rhs)
Integer remainder imod(lhs, rhs) with the semantics of signed C/C++ lhs % rhs on int64.
Expression max(const Expression lhs, const Expression rhs)
Maximum of two expressions.
Expression div(const Expression lhs, const Expression rhs)
Integer division idiv(lhs, rhs) with the semantics of signed C/C++ lhs / rhs on int64.
Expression add(const Expression lhs, const Expression rhs)
Addition of two expressions.
Expression floor_div(const Expression lhs, const Expression divisor)
Exact floor division floor(lhs / divisor) in terms of idiv.
Expression ceil_count(const Expression extent, const Expression chunk)
Number of chunks of size chunk (positive) covering extent: max(0, ceil(extent / chunk)).
Expression min(const Expression lhs, const Expression rhs)
Minimum of two expressions.
Expression bit_xor(const Expression lhs, const Expression rhs)
Bitwise XOR operation (integer).
Expression mul(const Expression lhs, const Expression rhs)
Multiplication of two expressions.
Expression zext_i64(const Expression expr)
Zero-extend to 64-bit integer.
Expression sub(const Expression lhs, const Expression rhs)
Subtraction of two expressions.
Expression ceil_div(const Expression dividend, const Expression divisor)
Exact ceiling division ceil(dividend / divisor) in terms of idiv.
Expression abs(const Expression expr)
Absolute value of an expression.
Expression pow(const Expression base, const Expression exp)
Power/exponentiation operation.
Condition Ne(const Expression lhs, const Expression rhs)
Inequality comparison.
Condition Eq(const Expression lhs, const Expression rhs)
Equality comparison.
Condition Gt(const Expression lhs, const Expression rhs)
Greater-than comparison.
Condition Lt(const Expression lhs, const Expression rhs)
Less-than comparison.
Condition Le(const Expression lhs, const Expression rhs)
Less-than-or-equal comparison.
Condition Ge(const Expression lhs, const Expression rhs)
Greater-than-or-equal comparison.
Integer integer(int64_t value)
Creates an integer constant.
bool is_nv(const Symbol symbol)
Checks if a symbol is an NVIDIA GPU built-in variable.
Integer one()
Creates the integer constant 1.
Condition __false__()
Creates a boolean false condition.
Integer zero()
Creates the integer constant 0.
bool is_nullptr(const Symbol symbol)
Checks if a symbol is the null pointer.
Symbol symbol(const std::string &name)
Creates a symbolic variable with the given name.
Condition __true__()
Creates a boolean true condition.
Symbol __nullptr__()
Creates a special null pointer symbol.
bool is_pointer(const Symbol symbol)
Checks if a symbol represents a pointer.
Symbol threadIdx_z()
Thread index in Z dimension.
Symbol blockIdx_x()
Block index in X dimension.
Symbol gridDim_x()
Grid dimension (blocks per grid) in X.
Symbol threadIdx_x()
Thread index in X dimension.
Symbol gridDim_z()
Grid dimension (blocks per grid) in Z.
Symbol blockIdx_z()
Block index in Z dimension.
Symbol blockDim_y()
Block dimension (threads per block) in Y.
Symbol gridDim_y()
Grid dimension (blocks per grid) in Y.
Symbol blockDim_x()
Block dimension (threads per block) in X.
Symbol threadIdx_y()
Thread index in Y dimension.
Symbol blockDim_z()
Block dimension (threads per block) in Z.
Symbol blockIdx_y()
Block index in Y dimension.
Condition Not(const Condition expr)
Logical NOT (negation) of a condition.
bool is_false(const Expression expr)
Tests if an expression evaluates to false.
bool is_true(const Expression expr)
Tests if an expression evaluates to true.
Condition And(const Condition lhs, const Condition rhs)
Logical AND of two conditions.
Condition Or(const Condition lhs, const Condition rhs)
Logical OR of two conditions.
ExpressionSet muls(const Expression expr)
Extracts all multiplication operations from an expression.
Expression simplify(const Expression expr)
Simplifies an expression.
bool has(const Expression expr)
Checks if an expression contains a specific SymEngine type.
Definition symbolic.h:661
Expression expand(const Expression expr)
Expands an expression algebraically.
SymbolSet atoms(const Expression expr)
Extracts all symbols (atoms) from an expression.
bool has_dynamic_sizeof(const Expression expr)
Checks if an expression contains a dynamic_sizeof operation.
ExpressionSet find(const Expression expr)
Finds all instances of a specific SymEngine type in an expression.
Definition symbolic.h:677
Expression inverse(const Expression expr, const Symbol symbol)
Computes the inverse of an expression with respect to a symbol.
Expression overapproximate(const Expression expr)
Overapproximates an expression by resolving min/max to upper bounds.
bool eq(const Expression lhs, const Expression rhs)
Tests structural equality of two expressions.
bool null_safe_eq(const Expression lhs, const Expression rhs)
Tests equality of expressions with null-safety.
Expression subs(const Expression expr, const Expression old_expr, const Expression new_expr)
Substitutes a sub-expression with another expression.
bool uses(const Expression expr, const Symbol sym)
Tests if an expression uses a specific symbol.
Expression factor(const Expression expr)
Factors an expression into a product of simpler terms.
Expression parse(const std::string &expr_str)
Parses a string into a symbolic expression.
Expression malloc_usable_size(const Symbol symbol)
Computes the usable size of a malloc allocation.
Expression size_of_type(const types::IType &type)
Computes the size of a type.
Expression dynamic_sizeof(const Symbol symbol)
Computes the dynamic size of a memory region.
std::vector< Expression > MultiExpression
Vector of symbolic expressions for multi-dimensional operations.
Definition symbolic.h:89
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::RCP< const SymEngine::Symbol > Symbol
Reference-counted pointer to a SymEngine Symbol.
Definition symbolic.h:71
SymEngine::RCP< const SymEngine::Number > Number
Reference-counted pointer to a SymEngine Number.
Definition symbolic.h:74
std::set< Symbol, SymEngine::RCPBasicKeyLess > SymbolSet
Ordered set of symbols.
Definition symbolic.h:95
std::unordered_map< Symbol, Expression, SymEngine::RCPBasicHash, SymEngine::RCPBasicKeyEq > SymbolMap
Map from symbols to expressions.
Definition symbolic.h:98
SymEngine::RCP< const SymEngine::Boolean > Condition
Reference-counted pointer to a boolean condition expression.
Definition symbolic.h:86
std::unordered_map< Expression, Expression, SymEngine::RCPBasicHash, SymEngine::RCPBasicKeyEq > ExpressionMap
Map from expressions to expressions.
Definition symbolic.h:107
std::vector< Symbol > ExpressionVec
Vector of expressions.
Definition symbolic.h:101
SymEngine::RCP< const SymEngine::Integer > Integer
Reference-counted pointer to a SymEngine Integer constant.
Definition symbolic.h:77
SymEngine::RCP< const SymEngine::Infty > Infty
Reference-counted pointer to a SymEngine Infinity value.
Definition symbolic.h:80
std::set< Expression, SymEngine::RCPBasicKeyLess > ExpressionSet
Ordered set of expressions.
Definition symbolic.h:104
std::vector< Symbol > SymbolVec
Vector of symbols.
Definition symbolic.h:92
SymEngine::map_basic_basic ExpressionMapping
Definition symbolic.h:109
Definition assumptions.h:55
bool substitute(Assumptions &assumptions, const symbolic::ExpressionMapping &replacements)