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

函数

bool complex_norm_operand (const std::shared_ptr< const SymbolicNode > &first, const std::shared_ptr< const SymbolicNode > &second)
std::shared_ptr< const SymbolicNode > normalized_norm_argument (const std::shared_ptr< const SymbolicNode > &first, const std::shared_ptr< const SymbolicNode > &second, const std::array< const PowerNode *, 2 > &squares, detail::RewriteBudget *budget)
bool numeric_norm_operands (const NumberNode *first, const NumberNode *second, const std::shared_ptr< const SymbolicNode > &second_node)
bool retain_first_square (const std::shared_ptr< const SymbolicNode > &first, const std::shared_ptr< const SymbolicNode > &second)

函数说明

◆ complex_norm_operand()

bool LMCAS::anonymous_namespace{normalization_norms.cpp}::complex_norm_operand ( const std::shared_ptr< const SymbolicNode > & first,
const std::shared_ptr< const SymbolicNode > & second )

在文件 normalization_norms.cpp 第 23 行定义.

24 {
25 return dynamic_cast<const ComplexNode*>(first.get()) ||
26 dynamic_cast<const ComplexNode*>(second.get());
27}
复数节点,表示 real + imag * i。

引用了 complex_norm_operand().

被这些函数引用 complex_norm_operand().

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

◆ normalized_norm_argument()

std::shared_ptr< const SymbolicNode > LMCAS::anonymous_namespace{normalization_norms.cpp}::normalized_norm_argument ( const std::shared_ptr< const SymbolicNode > & first,
const std::shared_ptr< const SymbolicNode > & second,
const std::array< const PowerNode *, 2 > & squares,
detail::RewriteBudget * budget )

在文件 normalization_norms.cpp 第 29 行定义.

32 {
33 std::vector<std::shared_ptr<const SymbolicNode>> terms;
34 std::size_t nodes = 0;
35 terms.reserve(second ? 2 : 1);
36 if (retain_first_square(first, second)) {
37 normalization_check_children(budget, 1, first, squares[0]->exponent());
38 normalization_append(budget, nodes, terms,
39 detail::make_node<PowerNode>(first, squares[0]->exponent()));
40 }
41 if (second && !second->is_zero()) {
42 normalization_check_children(budget, 1, second, squares[1]->exponent());
43 normalization_append(budget, nodes, terms,
44 detail::make_node<PowerNode>(second, squares[1]->exponent()));
45 }
46 if (terms.size() == 1) {
47 return terms.front();
48 }
49 normalization_check_arithmetic<AddNode>(budget, terms, nodes);
50 return detail::make_node<AddNode>(std::move(terms));
51}
bool retain_first_square(const std::shared_ptr< const SymbolicNode > &first, const std::shared_ptr< const SymbolicNode > &second)
std::shared_ptr< const Node > make_node(Args &&... args)
std::size_t normalization_check_arithmetic(detail::RewriteBudget *budget, std::size_t extra_nodes, const std::shared_ptr< const Nodes > &... children)
const ExprPtr & exponent
void normalization_check_children(detail::RewriteBudget *budget, std::size_t roots, const std::shared_ptr< const Nodes > &... children)
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::exponent, LMCAS::detail::make_node(), LMCAS::normalization_append(), LMCAS::normalization_check_arithmetic(), LMCAS::normalization_check_children(), normalized_norm_argument() , 以及 retain_first_square().

被这些函数引用 normalized_norm_argument().

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

◆ numeric_norm_operands()

bool LMCAS::anonymous_namespace{normalization_norms.cpp}::numeric_norm_operands ( const NumberNode * first,
const NumberNode * second,
const std::shared_ptr< const SymbolicNode > & second_node )

在文件 normalization_norms.cpp 第 7 行定义.

8 {
9 return first && (!second_node || second);
10}

引用了 numeric_norm_operands().

被这些函数引用 numeric_norm_operands().

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

◆ retain_first_square()

bool LMCAS::anonymous_namespace{normalization_norms.cpp}::retain_first_square ( const std::shared_ptr< const SymbolicNode > & first,
const std::shared_ptr< const SymbolicNode > & second )

在文件 normalization_norms.cpp 第 12 行定义.

13 {
14 if (!first->is_zero()) {
15 return true;
16 }
17 if (!second) {
18 return true;
19 }
20 return second->is_zero();
21}

引用了 retain_first_square().

被这些函数引用 normalized_norm_argument() , 以及 retain_first_square().

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