docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
symbolic.h
Go to the documentation of this file.
1
37
38#pragma once
39
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>
50
51#include <unordered_map>
52#include "symengine/functions.h"
53#include "symengine/subs.h"
54
55namespace sdfg {
56
57namespace types {
58// forward declaration, because it depends on contents of this file
59class IType;
60} // namespace types
61
62namespace symbolic {
63
69
71typedef SymEngine::RCP<const SymEngine::Symbol> Symbol;
72
74typedef SymEngine::RCP<const SymEngine::Number> Number;
75
77typedef SymEngine::RCP<const SymEngine::Integer> Integer;
78
80typedef SymEngine::RCP<const SymEngine::Infty> Infty;
81
83typedef SymEngine::RCP<const SymEngine::Basic> Expression;
84
86typedef SymEngine::RCP<const SymEngine::Boolean> Condition;
87
89typedef std::vector<Expression> MultiExpression;
90
92typedef std::vector<Symbol> SymbolVec;
93
95typedef std::set<Symbol, SymEngine::RCPBasicKeyLess> SymbolSet;
96
98typedef std::unordered_map<Symbol, Expression, SymEngine::RCPBasicHash, SymEngine::RCPBasicKeyEq> SymbolMap;
99
101typedef std::vector<Symbol> ExpressionVec;
102
104typedef std::set<Expression, SymEngine::RCPBasicKeyLess> ExpressionSet;
105
107typedef std::unordered_map<Expression, Expression, SymEngine::RCPBasicHash, SymEngine::RCPBasicKeyEq> ExpressionMap;
108
109typedef SymEngine::map_basic_basic ExpressionMapping;
110 // end of symbolic_types group
112
118
130Symbol symbol(const std::string& name);
131
142Integer integer(int64_t value);
143
149
155
161
167
176
183
185bool is_nullptr(const std::string& name);
186
193
202bool is_nv(const Symbol symbol);
203 // end of symbolic_creation group
205
214
226Condition And(const Condition lhs, const Condition rhs);
227
234Condition Or(const Condition lhs, const Condition rhs);
235
242
248bool is_true(const Expression expr);
249
255bool is_false(const Expression expr);
256 // end of symbolic_logic group
258
275
282Expression add(const Expression lhs, const Expression rhs);
283
290Expression sub(const Expression lhs, const Expression rhs);
291
298Expression mul(const Expression lhs, const Expression rhs);
299
306Expression div(const Expression lhs, const Expression rhs);
307
314Expression floor_div(const Expression lhs, const Expression divisor);
315
322Expression ceil_div(const Expression dividend, const Expression divisor);
323
330Expression ceil_count(const Expression extent, const Expression chunk);
331
338Expression min(const Expression lhs, const Expression rhs);
339
346Expression max(const Expression lhs, const Expression rhs);
347
354
361Expression mod(const Expression lhs, const Expression rhs);
362
371
377class IModFunction : public SymEngine::FunctionSymbol {
378public:
379 IModFunction(const Expression lhs, const Expression rhs) : FunctionSymbol("imod", {lhs, rhs}) {
380 }
381};
382
389Expression pow(const Expression base, const Expression exp);
390
397
403class ZExtI64Function : public SymEngine::FunctionSymbol {
404public:
405 explicit ZExtI64Function(const Expression expr) : FunctionSymbol("zext_i64", expr) {
406 }
407};
408
415
421class TruncI32Function : public SymEngine::FunctionSymbol {
422public:
423 explicit TruncI32Function(const Expression expr) : FunctionSymbol("trunc_i32", expr) {
424 }
425};
426 // end of symbolic_arithmetic group
428
434
441
448class SizeOfTypeFunction : public SymEngine::FunctionSymbol {
449private:
450 const types::IType& type_;
451
452public:
453 explicit SizeOfTypeFunction(const types::IType& type)
454 : FunctionSymbol("sizeof", SymEngine::vec_basic{}), type_(type) {
455 }
456
457 const types::IType& get_type() const {
458 return type_;
459 }
460};
461
471
475class DynamicSizeOfFunction : public SymEngine::FunctionSymbol {
476public:
477 explicit DynamicSizeOfFunction(const Symbol symbol) : FunctionSymbol("dynamic_sizeof", symbol) {
478 }
479};
480
490
494class MallocUsableSizeFunction : public SymEngine::FunctionSymbol {
495public:
496 explicit MallocUsableSizeFunction(const Symbol symbol) : FunctionSymbol("malloc_usable_size", symbol) {
497 }
498};
499 // end of symbolic_sizeof group
501
510
517Condition Eq(const Expression lhs, const Expression rhs);
518
525Condition Ne(const Expression lhs, const Expression rhs);
526
533Condition Lt(const Expression lhs, const Expression rhs);
534
541Condition Gt(const Expression lhs, const Expression rhs);
542
549Condition Le(const Expression lhs, const Expression rhs);
550
557Condition Ge(const Expression lhs, const Expression rhs);
558 // end of symbolic_comparison group
560
569
578
589
598
612
619bool eq(const Expression lhs, const Expression rhs);
620
629bool null_safe_eq(const Expression lhs, const Expression rhs);
630
637bool uses(const Expression expr, const Symbol sym);
638
645bool uses(const Expression expr, const std::string& name);
646
653
660template<typename T>
661inline bool has(const Expression expr) {
662 for (auto& atom : SymEngine::atoms<T>(*expr)) {
663 if (SymEngine::is_a<T>(*atom)) {
664 return true;
665 }
666 }
667 return false;
668}
669
676template<typename T>
677inline ExpressionSet find(const Expression expr) {
678 ExpressionSet res;
679 for (auto& atom : SymEngine::atoms<T>(*expr)) {
680 if (SymEngine::is_a<T>(*atom)) {
681 res.insert(atom);
682 }
683 }
684 return res;
685}
686
693
700
714Expression subs(const Expression expr, const Expression old_expr, const Expression new_expr);
715
719inline Expression subs(const Expression expr, const symbolic::ExpressionMapping& replacements) {
720 return SymEngine::subs(expr, replacements);
721}
722
730Condition subs(const Condition expr, const Expression old_expr, const Expression new_expr);
731
735Condition subs(const Condition expr, const symbolic::ExpressionMapping& replacements);
736
738
740
750 // end of symbolic_manipulation group
752
761
764
767
770
773
776
779
782
785
788
791
794
797 // end of symbolic_gpu group
799
805
817Expression parse(const std::string& expr_str);
818 // end of symbolic_parsing group
820
821} // namespace symbolic
822} // namespace sdfg
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)
Definition symbolic.h:57
Definition analysis.h:7