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

函数

bool sum_term_less (const std::shared_ptr< const SymbolicNode > &left, const std::shared_ptr< const SymbolicNode > &right)
std::shared_ptr< const SymbolicNode > weighted_term (const std::shared_ptr< const SymbolicNode > &term, const std::shared_ptr< const NumberNode > &coefficient, detail::RewriteBudget *budget)

函数说明

◆ sum_term_less()

bool LMCAS::anonymous_namespace{normalization_arithmetic.cpp}::sum_term_less ( const std::shared_ptr< const SymbolicNode > & left,
const std::shared_ptr< const SymbolicNode > & right )

在文件 normalization_arithmetic.cpp 第 6 行定义.

7 {
8 const BigInt a = get_node_degree_helper(left);
9 const BigInt b = get_node_degree_helper(right);
10 if (a != b) {
11 return a > b;
12 }
13 const bool left_number = std::dynamic_pointer_cast<const NumberNode>(left) != nullptr;
14 const bool right_number = std::dynamic_pointer_cast<const NumberNode>(right) != nullptr;
15 if (left_number != right_number) {
16 return right_number;
17 }
18 return left->compare(*right) < 0;
19}
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
const ExprPtr & right
BigInt get_node_degree_helper(const std::shared_ptr< const SymbolicNode > &node)
计算 AST 节点的多项式次数

引用了 LMCAS::a, LMCAS::b, LMCAS::get_node_degree_helper(), LMCAS::right , 以及 sum_term_less().

被这些函数引用 sum_term_less().

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

◆ weighted_term()

std::shared_ptr< const SymbolicNode > LMCAS::anonymous_namespace{normalization_arithmetic.cpp}::weighted_term ( const std::shared_ptr< const SymbolicNode > & term,
const std::shared_ptr< const NumberNode > & coefficient,
detail::RewriteBudget * budget )

在文件 normalization_arithmetic.cpp 第 21 行定义.

23 {
24 if (coefficient->is_one()) {
25 return term;
26 }
27 std::vector<std::shared_ptr<const SymbolicNode>> operands;
28 std::size_t nodes = 0;
29 normalization_append(budget, nodes, operands, coefficient);
30 if (const auto multiply = std::dynamic_pointer_cast<const MultiplyNode>(term)) {
31 for (const auto& child : multiply->operands()) {
32 normalization_append(budget, nodes, operands, child);
33 }
34 } else {
35 normalization_append(budget, nodes, operands, term);
36 }
37 return make_normalized_multiply_node(operands, budget);
38}
std::shared_ptr< const SymbolicNode > make_normalized_multiply_node(const std::vector< std::shared_ptr< const SymbolicNode > > &operands, detail::RewriteBudget *budget=nullptr)
void normalization_append(detail::RewriteBudget *budget, std::size_t &nodes, std::vector< std::shared_ptr< const SymbolicNode > > &children, std::shared_ptr< const SymbolicNode > child)

引用了 LMCAS::make_normalized_multiply_node(), LMCAS::normalization_append() , 以及 weighted_term().

被这些函数引用 weighted_term().

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