LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::anonymous_namespace{relation_store.cpp} 命名空间参考

函数

RelationOp combine_ops (RelationOp op1, RelationOp op2)
 Combine two transitive operators according to the combination rules: GT+GT→GT, GT+GEQ→GT, GEQ+GT→GT, GEQ+GEQ→GEQ.
RelationStoreResult declare_comparison_sign (const std::string &symbol, RelationOp op, PropertyStore &store)
RelationStoreResult derive_comparison_sign (const SymbolicExpr &lhs, const SymbolicExpr &rhs, RelationOp op, PropertyStore &store)
bool expr_equals (const SymbolicExpr &a, const SymbolicExpr &b)
 Check structural equality of two expression roots.
bool is_transitive_op (RelationOp op)
 Check if an operator participates in transitive closure.

函数说明

◆ combine_ops()

RelationOp LMCAS::anonymous_namespace{relation_store.cpp}::combine_ops ( RelationOp op1,
RelationOp op2 )

Combine two transitive operators according to the combination rules: GT+GT→GT, GT+GEQ→GT, GEQ+GT→GT, GEQ+GEQ→GEQ.

在文件 relation_store.cpp 第 58 行定义.

58 {
59 if (op1 == RelationOp::GEQ && op2 == RelationOp::GEQ) {
60 return RelationOp::GEQ;
61 }
62 return RelationOp::GT;
63}

引用了 combine_ops(), LMCAS::GEQ , 以及 LMCAS::GT.

被这些函数引用 combine_ops().

函数调用图:
这是这个函数的调用关系图:

◆ declare_comparison_sign()

RelationStoreResult LMCAS::anonymous_namespace{relation_store.cpp}::declare_comparison_sign ( const std::string & symbol,
RelationOp op,
PropertyStore & store )

在文件 relation_store.cpp 第 74 行定义.

75 {
76 struct SignRule {
78 Sign sign;
79 };
80 static constexpr SignRule rules[] = {
86 };
87 for (const auto& rule : rules) {
88 if (rule.op == op) return store.declare_sign(symbol, rule.sign);
89 }
91}
static Result success()
RelationOp
Stable relational operator used by public APIs.
const ExprPtr RelationOp op
Sign
Sign classification for symbols and expressions.

引用了 declare_comparison_sign(), LMCAS::GEQ, LMCAS::GT, LMCAS::LEQ, LMCAS::LT, LMCAS::Negative, LMCAS::NEQ, LMCAS::NonNegative, LMCAS::NonPositive, LMCAS::NonZero, LMCAS::op, LMCAS::Positive , 以及 LMCAS::Result< void >::success().

被这些函数引用 declare_comparison_sign() , 以及 derive_comparison_sign().

函数调用图:
这是这个函数的调用关系图:

◆ derive_comparison_sign()

RelationStoreResult LMCAS::anonymous_namespace{relation_store.cpp}::derive_comparison_sign ( const SymbolicExpr & lhs,
const SymbolicExpr & rhs,
RelationOp op,
PropertyStore & store )

在文件 relation_store.cpp 第 94 行定义.

96 {
97 const auto variable = std::dynamic_pointer_cast<const VariableNode>(LMCAS::detail::node(lhs));
98 const auto number = std::dynamic_pointer_cast<const NumberNode>(LMCAS::detail::node(rhs));
99 if (variable && !variable->is_constant() && number && number->is_zero()) {
100 return declare_comparison_sign(variable->name(), op, store);
101 }
102 const auto zero = std::dynamic_pointer_cast<const NumberNode>(LMCAS::detail::node(lhs));
103 const auto reversed_variable = std::dynamic_pointer_cast<const VariableNode>(LMCAS::detail::node(rhs));
104 if (zero && zero->is_zero() && reversed_variable &&
105 !reversed_variable->is_constant()) {
107 reversed_variable->name(), detail::reversed_relation(op), store);
108 }
110}
RelationStoreResult declare_comparison_sign(const std::string &symbol, RelationOp op, PropertyStore &store)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
constexpr RelationOp reversed_relation(RelationOp op) noexcept
const std::string & variable
const ExprPtr & rhs

引用了 declare_comparison_sign(), derive_comparison_sign(), LMCAS::detail::node(), LMCAS::op, LMCAS::detail::reversed_relation(), LMCAS::rhs, LMCAS::Result< void >::success() , 以及 LMCAS::variable.

被这些函数引用 derive_comparison_sign().

函数调用图:
这是这个函数的调用关系图:

◆ expr_equals()

bool LMCAS::anonymous_namespace{relation_store.cpp}::expr_equals ( const SymbolicExpr & a,
const SymbolicExpr & b )

Check structural equality of two expression roots.

在文件 relation_store.cpp 第 68 行定义.

68 {
69 if (!LMCAS::detail::node(a) && !LMCAS::detail::node(b)) return true;
70 if (!LMCAS::detail::node(a) || !LMCAS::detail::node(b)) return false;
71 return LMCAS::detail::node(a)->equals(*LMCAS::detail::node(b));
72}
const MultiPoly & b
__attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::shared_ptr< SymbolicExpr > & a

引用了 LMCAS::a, LMCAS::b, LMCAS::SymbolicNode::equals(), expr_equals() , 以及 LMCAS::detail::node().

被这些函数引用 expr_equals().

函数调用图:
这是这个函数的调用关系图:

◆ is_transitive_op()

bool LMCAS::anonymous_namespace{relation_store.cpp}::is_transitive_op ( RelationOp op)

Check if an operator participates in transitive closure.

Only GT and GEQ form transitive chains.

在文件 relation_store.cpp 第 50 行定义.

50 {
51 return op == RelationOp::GT || op == RelationOp::GEQ;
52}

引用了 LMCAS::GEQ, LMCAS::GT, is_transitive_op() , 以及 LMCAS::op.

被这些函数引用 is_transitive_op().

函数调用图:
这是这个函数的调用关系图: