LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::ExpandVisitor类 参考

#include </home/runner/work/docs/docs/LMCAS/src/internal/visitors/expand_visitor.hpp>

类 LMCAS::ExpandVisitor 继承关系图:
LMCAS::ExpandVisitor 的协作图:

Public 成员函数

 ExpandVisitor (detail::RewriteBudget &budget)
std::shared_ptr< const SymbolicNode > get_result () const
void visit (const AddNode &node) override
void visit (const ComplexNode &node) override
void visit (const FiniteSetNode &node) override
void visit (const FunctionNode &node) override
void visit (const IntegralNode &node) override
void visit (const IntervalNode &node) override
void visit (const LimitNode &node) override
void visit (const LogicalNode &node) override
void visit (const MatrixNode &node) override
void visit (const MembershipNode &node) override
void visit (const MultiplyNode &node) override
void visit (const NumberNode &node) override
void visit (const PiecewiseNode &node) override
LMCAS_API void visit (const PowerNode &node) override
void visit (const ProductNode &node) override
void visit (const QuantifierNode &node) override
void visit (const QuantityNode &node) override
void visit (const RelationalNode &node) override
void visit (const RootOfNode &node) override
void visit (const SetBuilderNode &node) override
void visit (const SummationNode &node) override
void visit (const TransformNode &node) override
void visit (const UninterpretedFunctionNode &node) override
void visit (const VariableNode &node) override

Public 属性

std::shared_ptr< const SymbolicNode > result
 展开结果节点。

Protected 成员函数

RewriteBudget * rewrite_budget () const noexcept

Protected 属性

int current_depth = 0

静态 Protected 属性

static constexpr int MAX_DEPTH = 200

Private 成员函数

void append_child (std::size_t &size, const std::shared_ptr< const SymbolicNode > &child) const
void check_child_count (std::size_t count, std::size_t roots=1) const
std::shared_ptr< const SymbolicNode > expand_child (const std::shared_ptr< const SymbolicNode > &child, std::size_t &size)
std::vector< std::shared_ptr< const SymbolicNode > > expand_children (const std::vector< std::shared_ptr< const SymbolicNode > > &children, std::size_t &size)
void set_result (std::shared_ptr< const SymbolicNode > candidate)
void set_result (std::shared_ptr< const SymbolicNode > candidate, std::size_t size)

Private 属性

RewriteBudget * rewrite_budget_ = nullptr

详细描述

在文件 expand_visitor.hpp 第 12 行定义.

构造及析构函数说明

◆ ExpandVisitor()

LMCAS::ExpandVisitor::ExpandVisitor ( detail::RewriteBudget & budget)
inlineexplicit

在文件 expand_visitor.hpp 第 16 行定义.

17 : SymbolicVisitor(&budget), result(nullptr) {}
std::shared_ptr< const SymbolicNode > result
展开结果节点。

引用了 LMCAS::detail::SymbolicVisitor::SymbolicVisitor() , 以及 result.

函数调用图:

成员函数说明

◆ append_child()

void LMCAS::ExpandVisitor::append_child ( std::size_t & size,
const std::shared_ptr< const SymbolicNode > & child ) const
inlineprivate

在文件 expand_visitor.hpp 第 236 行定义.

237 {
238 if (auto* budget = rewrite_budget()) {
239 size = budget->append_size(size, budget->measure(child));
240 }
241 }
std::size_t measure(const std::shared_ptr< const SymbolicNode > &node)
std::size_t append_size(std::size_t current, std::size_t child)
RewriteBudget * rewrite_budget() const noexcept

引用了 LMCAS::detail::RewriteBudget::append_size(), LMCAS::detail::RewriteBudget::measure() , 以及 LMCAS::detail::SymbolicVisitor::rewrite_budget().

被这些函数引用 expand_child() , 以及 visit().

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

◆ check_child_count()

void LMCAS::ExpandVisitor::check_child_count ( std::size_t count,
std::size_t roots = 1 ) const
inlineprivate

在文件 expand_visitor.hpp 第 230 行定义.

230 {
231 if (auto* budget = rewrite_budget()) {
232 budget->append_size(roots, count);
233 }
234 }
ExprSetResult roots(const ExprPtr &expression, const std::string &variable, ComputationContext &context, const SolveOptions &options)

引用了 LMCAS::detail::RewriteBudget::append_size(), LMCAS::detail::SymbolicVisitor::rewrite_budget() , 以及 LMCAS::roots().

被这些函数引用 expand_children(), visit(), visit(), visit() , 以及 visit().

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

◆ expand_child()

std::shared_ptr< const SymbolicNode > LMCAS::ExpandVisitor::expand_child ( const std::shared_ptr< const SymbolicNode > & child,
std::size_t & size )
inlineprivate

在文件 expand_visitor.hpp 第 243 行定义.

244 {
245 child->accept(*this);
246 append_child(size, result);
247 return result;
248 }
void append_child(std::size_t &size, const std::shared_ptr< const SymbolicNode > &child) const

引用了 append_child() , 以及 result.

被这些函数引用 expand_children(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit() , 以及 visit().

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

◆ expand_children()

std::vector< std::shared_ptr< const SymbolicNode > > LMCAS::ExpandVisitor::expand_children ( const std::vector< std::shared_ptr< const SymbolicNode > > & children,
std::size_t & size )
inlineprivate

在文件 expand_visitor.hpp 第 250 行定义.

251 {
252 check_child_count(children.size(), size);
253 std::vector<std::shared_ptr<const SymbolicNode>> expanded;
254 expanded.reserve(children.size());
255 for (const auto& child : children) {
256 auto expanded_child = expand_child(child, size);
257 expanded.push_back(std::move(expanded_child));
258 }
259 return expanded;
260 }
void check_child_count(std::size_t count, std::size_t roots=1) const
std::shared_ptr< const SymbolicNode > expand_child(const std::shared_ptr< const SymbolicNode > &child, std::size_t &size)

引用了 check_child_count() , 以及 expand_child().

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

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

◆ get_result()

std::shared_ptr< const SymbolicNode > LMCAS::ExpandVisitor::get_result ( ) const
inline

在文件 expand_visitor.hpp 第 18 行定义.

18{ return result; }

引用了 result.

被这些函数引用 LMCAS::detail::expand_node().

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

◆ rewrite_budget()

RewriteBudget * LMCAS::detail::SymbolicVisitor::rewrite_budget ( ) const
inlineprotectednoexceptinherited

在文件 base.hpp 第 220 行定义.

220{ return rewrite_budget_; }

引用了 rewrite_budget_.

被这些函数引用 LMCAS::ExpandVisitor::append_child(), LMCAS::DifferentiationVisitor::append_result(), LMCAS::ExpandVisitor::check_child_count(), LMCAS::NormalizationVisitor::collect_expanded_product(), LMCAS::NormalizationVisitor::collect_product(), LMCAS::NormalizationVisitor::collect_sum(), LMCAS::DifferentiationVisitor::differentiate_atan2(), LMCAS::NormalizationVisitor::distribute_power(), LMCAS::NormalizationVisitor::distribute_product(), LMCAS::NormalizationVisitor::expand_complex_product(), LMCAS::NormalizationVisitor::expand_product(), LMCAS::NormalizationVisitor::extract_term_coefficient(), LMCAS::NormalizationVisitor::finish_squared_norm(), LMCAS::NormalizationVisitor::fuse_matrix_product(), LMCAS::NormalizationVisitor::matrix_product_element(), LMCAS::NormalizationVisitor::merge_complex_terms(), LMCAS::NormalizationVisitor::normalize_bound_body(), LMCAS::NormalizationVisitor::normalize_function_parity(), LMCAS::NormalizationVisitor::normalize_logarithm(), LMCAS::NormalizationVisitor::normalize_matrix_product(), LMCAS::NormalizationVisitor::normalize_matrix_sum(), LMCAS::NormalizationVisitor::normalize_natural_logarithm(), LMCAS::NormalizationVisitor::normalize_nested_imaginary_power(), LMCAS::NormalizationVisitor::normalize_nested_power(), LMCAS::NormalizationVisitor::normalize_power_identity(), LMCAS::NormalizationVisitor::normalize_unary_function(), LMCAS::anonymous_namespace{expression_analysis.cpp}::FreeSubstitution::rewrite_scoped(), LMCAS::NormalizationVisitor::scale_matrix(), LMCAS::DifferentiationVisitor::set_result(), LMCAS::ExpandVisitor::set_result(), LMCAS::ExpandVisitor::set_result(), LMCAS::NormalizationVisitor::set_result(), LMCAS::NormalizationVisitor::simplify_assumed_absolute(), LMCAS::NormalizationVisitor::simplify_assumed_square_root(), LMCAS::NormalizationVisitor::try_normalize_squared_norm(), LMCAS::groebner_detail::PolyBuilder::use_numeric_function(), LMCAS::detail::SymbolicRewriter::visit(), LMCAS::detail::SymbolicRewriter::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::DifferentiationVisitor::visit(), LMCAS::ExpandVisitor::visit(), LMCAS::ExpandVisitor::visit(), LMCAS::ExpandVisitor::visit(), LMCAS::ExpandVisitor::visit(), LMCAS::ExpandVisitor::visit(), LMCAS::groebner_detail::PolyBuilder::visit(), LMCAS::groebner_detail::PolyBuilder::visit(), LMCAS::groebner_detail::PolyBuilder::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit(), LMCAS::NormalizationVisitor::visit() , 以及 LMCAS::NormalizationVisitor::visit().

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

◆ set_result() [1/2]

void LMCAS::ExpandVisitor::set_result ( std::shared_ptr< const SymbolicNode > candidate)
inlineprivate

在文件 expand_visitor.hpp 第 269 行定义.

269 {
270 const auto size = rewrite_budget()->measure_result(candidate);
271 set_result(std::move(candidate), size);
272 }
void set_result(std::shared_ptr< const SymbolicNode > candidate, std::size_t size)
std::size_t measure_result(const std::shared_ptr< const SymbolicNode > &node)

引用了 LMCAS::detail::RewriteBudget::measure_result(), LMCAS::detail::SymbolicVisitor::rewrite_budget() , 以及 set_result().

函数调用图:

◆ set_result() [2/2]

void LMCAS::ExpandVisitor::set_result ( std::shared_ptr< const SymbolicNode > candidate,
std::size_t size )
inlineprivate

在文件 expand_visitor.hpp 第 262 行定义.

262 {
263 if (auto* budget = rewrite_budget()) {
264 budget->require_nodes(size);
265 }
266 result = std::move(candidate);
267 }
void require_nodes(std::size_t nodes) const

引用了 LMCAS::detail::RewriteBudget::require_nodes(), result , 以及 LMCAS::detail::SymbolicVisitor::rewrite_budget().

被这些函数引用 set_result(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit(), visit() , 以及 visit().

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

◆ visit() [1/24]

void LMCAS::ExpandVisitor::visit ( const AddNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 29 行定义.

29 {
30 std::size_t size = 0;
31 auto new_ops = expand_children(node.operands(), size);
34 }
std::vector< std::shared_ptr< const SymbolicNode > > expand_children(const std::vector< std::shared_ptr< const SymbolicNode > > &children, std::size_t &size)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
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)

引用了 expand_children(), LMCAS::detail::make_node(), LMCAS::normalization_check_arithmetic(), LMCAS::detail::SymbolicVisitor::rewrite_budget() , 以及 set_result().

函数调用图:

◆ visit() [2/24]

void LMCAS::ExpandVisitor::visit ( const ComplexNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 209 行定义.

209 {
210 std::size_t size = 1;
211 auto expanded_r = expand_child(node.real(), size);
212 auto expanded_i = expand_child(node.imag(), size);
213 set_result(SymbolicFactory::create_complex(expanded_r, expanded_i), size);
214 }
static std::shared_ptr< const SymbolicNode > create_complex(std::shared_ptr< const SymbolicNode > real, std::shared_ptr< const SymbolicNode > imag)
创建复数节点,自动简化(若虚部为 0,则返回实部).

引用了 LMCAS::SymbolicFactory::create_complex(), expand_child() , 以及 set_result().

函数调用图:

◆ visit() [3/24]

void LMCAS::ExpandVisitor::visit ( const FiniteSetNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 181 行定义.

181 {
182 std::size_t size = 1;
183 auto elements = expand_children(node.elements(), size);
184 set_result(LMCAS::detail::make_node<FiniteSetNode>(std::move(elements)), size);
185 }

引用了 expand_children(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [4/24]

void LMCAS::ExpandVisitor::visit ( const FunctionNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 53 行定义.

53 {
54 std::size_t size = 1;
55 auto new_args = expand_children(node.arguments(), size);
57 }

引用了 expand_children(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [5/24]

void LMCAS::ExpandVisitor::visit ( const IntegralNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 88 行定义.

88 {
89 std::size_t size = 1;
90 auto body = expand_child(node.body(), size);
91 std::shared_ptr<const SymbolicNode> lower;
92 std::shared_ptr<const SymbolicNode> upper;
93 if (node.lower()) {
94 lower = expand_child(node.lower(), size);
95 upper = expand_child(node.upper(), size);
96 }
98 body, node.variable(), lower, upper), size);
99 }
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr upper
const ExprPtr & lower

引用了 expand_child(), LMCAS::lower, LMCAS::detail::make_node(), set_result() , 以及 LMCAS::upper.

函数调用图:

◆ visit() [6/24]

void LMCAS::ExpandVisitor::visit ( const IntervalNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 187 行定义.

187 {
188 std::size_t size = 1;
189 auto lower = expand_child(node.lower(), size);
190 auto upper = expand_child(node.upper(), size);
192 lower, upper, node.lower_closed(), node.upper_closed()), size);
193 }

引用了 expand_child(), LMCAS::lower, LMCAS::detail::make_node(), set_result() , 以及 LMCAS::upper.

函数调用图:

◆ visit() [7/24]

void LMCAS::ExpandVisitor::visit ( const LimitNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 215 行定义.

215 {
216 std::size_t size = 1;
217 auto body = expand_child(node.body(), size);
218 auto point = expand_child(node.point(), size);
220 body, node.variable(), point, node.direction()), size);
221 }
const std::string const LimitExprPtr & point

引用了 expand_child(), LMCAS::detail::make_node(), LMCAS::point , 以及 set_result().

函数调用图:

◆ visit() [8/24]

void LMCAS::ExpandVisitor::visit ( const LogicalNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 108 行定义.

108 {
109 std::size_t size = 1;
110 auto head = expand_child(node.left(), size);
111 std::shared_ptr<const SymbolicNode> tail = nullptr;
112 if (node.right()) {
113 tail = expand_child(node.right(), size);
114 }
116 }

引用了 expand_child(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [9/24]

void LMCAS::ExpandVisitor::visit ( const MatrixNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 65 行定义.

65 {
66 std::size_t size = 1;
67 if (rewrite_budget()) {
68 if (const auto* dense = std::get_if<MatrixNode::DenseStorage>(&node.storage())) {
69 check_child_count(dense->size());
70 for (const auto& element : *dense) {
71 append_child(size, element);
72 }
73 } else {
74 const auto& sparse = std::get<MatrixNode::SparseStorage>(node.storage());
75 check_child_count(sparse.size());
76 for (const auto& entry : sparse) {
77 append_child(size, entry.second);
78 }
79 }
80 }
81 if (const auto* dense = std::get_if<MatrixNode::DenseStorage>(&node.storage())) {
82 set_result(detail::make_node<MatrixNode>(node.rows(), node.cols(), *dense), size);
83 } else {
85 std::get<MatrixNode::SparseStorage>(node.storage())), size);
86 }
87 }
const ExprPtr & element

引用了 append_child(), check_child_count(), LMCAS::element, LMCAS::detail::make_node(), LMCAS::detail::SymbolicVisitor::rewrite_budget() , 以及 set_result().

函数调用图:

◆ visit() [10/24]

void LMCAS::ExpandVisitor::visit ( const MembershipNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 195 行定义.

195 {
196 std::size_t size = 1;
197 auto element = expand_child(node.element(), size);
198 auto set = expand_child(node.set(), size);
200 }
const ExprPtr & set

引用了 LMCAS::element, expand_child(), LMCAS::detail::make_node(), LMCAS::set , 以及 set_result().

函数调用图:

◆ visit() [11/24]

void LMCAS::ExpandVisitor::visit ( const MultiplyNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 36 行定义.

36 {
37 std::size_t size = 0;
38 auto expanded_ops = expand_children(node.operands(), size);
39 if (expanded_ops.empty()) {
41 return;
42 }
43
44 NormalizationVisitor norm(*rewrite_budget(), detail::no_facts(), Domain::Real);
45 set_result(expanded_ops[0]);
46 for (size_t i = 1; i < expanded_ops.size(); ++i) {
47 set_result(norm.expand_product(result, expanded_ops[i]));
48 }
49 }
const FactsQuery & no_facts() noexcept
@ Real
Real numbers

引用了 expand_children(), LMCAS::NormalizationVisitor::expand_product(), LMCAS::detail::make_node(), LMCAS::detail::no_facts(), LMCAS::Real, result, LMCAS::detail::SymbolicVisitor::rewrite_budget() , 以及 set_result().

函数调用图:

◆ visit() [12/24]

void LMCAS::ExpandVisitor::visit ( const NumberNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 20 行定义.

20 {
22 set_result(node.clone(), 1);
23 }

引用了 check_child_count() , 以及 set_result().

函数调用图:

◆ visit() [13/24]

void LMCAS::ExpandVisitor::visit ( const PiecewiseNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 118 行定义.

118 {
119 std::vector<PiecewiseNode::Branch> branches;
120 if (rewrite_budget()) {
121 auto minimum = rewrite_budget()->append_size(1, node.branches().size());
122 rewrite_budget()->append_size(minimum, node.branches().size());
123 }
124 branches.reserve(node.branches().size());
125 std::size_t size = 1;
126 for (const auto& branch : node.branches()) {
127 auto expression = expand_child(branch.expression, size);
128 auto condition = expand_child(branch.condition, size);
129 branches.push_back({expression, condition});
130 }
131 std::shared_ptr<const SymbolicNode> default_expr = nullptr;
132 if (node.default_expr()) {
133 default_expr = expand_child(node.default_expr(), size);
134 }
136 std::move(branches), default_expr), size);
137 }

引用了 LMCAS::detail::RewriteBudget::append_size(), expand_child(), LMCAS::detail::make_node(), LMCAS::detail::SymbolicVisitor::rewrite_budget() , 以及 set_result().

函数调用图:

◆ visit() [14/24]

void LMCAS::ExpandVisitor::visit ( const PowerNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

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

6 {
7 auto& context = rewrite_budget()->context();
8 std::size_t size = 1;
9 auto expanded_base = expand_child(node.base(), size);
10 auto expanded_exponent = expand_child(node.exponent(), size);
11 const auto number = std::dynamic_pointer_cast<const NumberNode>(expanded_exponent);
12 BigInt exponent;
13 if (try_get_integer_value(number, exponent)) {
14 if (exponent.is_zero() &&
18 return;
19 }
20 const auto count = exponent.try_to_uint64();
21 if (count && *count > 0 && *count < 20) {
22 NormalizationVisitor normalizer(*rewrite_budget(), detail::no_facts(), Domain::Real);
23 set_result(expanded_base);
24 for (std::uint64_t i = 1; i < *count; ++i) {
25 set_result(normalizer.expand_product(result, expanded_base));
26 }
27 return;
28 }
29 }
30 set_result(detail::make_node<PowerNode>(expanded_base, expanded_exponent), size);
31}
ComputationContext & context() const noexcept
Result< Tribool > query_nonzero_value(const Node &node, const FactsQuery &facts, Domain domain, ComputationContext &context)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
bool try_get_integer_value(const std::shared_ptr< const NumberNode > &node, BigInt &value)
bool normalization_can_discard(const std::shared_ptr< const SymbolicNode > &node, const FactsQuery &facts, Domain domain, ComputationContext &context)
@ Complex
Complex numbers (default, least specific)
const ExprPtr & exponent
bool normalization_proved(const Result< Tribool > &result)

引用了 LMCAS::Complex, LMCAS::context, LMCAS::detail::RewriteBudget::context(), expand_child(), LMCAS::NormalizationVisitor::expand_product(), LMCAS::exponent, LMCAS::detail::make_node(), LMCAS::detail::no_facts(), LMCAS::normalization_can_discard(), LMCAS::normalization_proved(), LMCAS::detail::query_nonzero_value(), LMCAS::Real, result, LMCAS::detail::SymbolicVisitor::rewrite_budget(), set_result() , 以及 LMCAS::try_get_integer_value().

函数调用图:

◆ visit() [15/24]

void LMCAS::ExpandVisitor::visit ( const ProductNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 148 行定义.

148 {
149 std::size_t size = 1;
150 auto body = expand_child(node.body(), size);
151 auto lower = expand_child(node.lower_bound(), size);
152 auto upper = expand_child(node.upper_bound(), size);
154 body, node.index_var(), lower, upper), size);
155 }

引用了 expand_child(), LMCAS::lower, LMCAS::detail::make_node(), set_result() , 以及 LMCAS::upper.

函数调用图:

◆ visit() [16/24]

void LMCAS::ExpandVisitor::visit ( const QuantifierNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 165 行定义.

165 {
166 std::size_t size = 1;
167 auto domain = expand_child(node.domain(), size);
168 auto predicate = expand_child(node.predicate(), size);
170 node.quantifier_type(), node.bound_var(), domain, predicate), size);
171 }
const NumberDomainSet & domain

引用了 LMCAS::domain, expand_child(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [17/24]

void LMCAS::ExpandVisitor::visit ( const QuantityNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 202 行定义.

202 {
203 std::size_t size = 1;
204 auto value = expand_child(node.value(), size);
206 value, node.dimension(), node.scale_to_base(), node.display_unit()), size);
207 }
const std::string const ExprPtr & value

引用了 expand_child(), LMCAS::detail::make_node(), set_result() , 以及 LMCAS::value.

函数调用图:

◆ visit() [18/24]

void LMCAS::ExpandVisitor::visit ( const RelationalNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 101 行定义.

101 {
102 std::size_t size = 1;
103 auto head = expand_child(node.left(), size);
104 auto tail = expand_child(node.right(), size);
106 }

引用了 expand_child(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [19/24]

void LMCAS::ExpandVisitor::visit ( const RootOfNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 223 行定义.

223 {
225 set_result(node.clone(), 1);
226 }

引用了 check_child_count() , 以及 set_result().

函数调用图:

◆ visit() [20/24]

void LMCAS::ExpandVisitor::visit ( const SetBuilderNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 173 行定义.

173 {
174 std::size_t size = 1;
175 auto domain = expand_child(node.domain(), size);
176 auto predicate = expand_child(node.predicate(), size);
178 node.element_var(), domain, predicate), size);
179 }

引用了 LMCAS::domain, expand_child(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [21/24]

void LMCAS::ExpandVisitor::visit ( const SummationNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 139 行定义.

139 {
140 std::size_t size = 1;
141 auto body = expand_child(node.body(), size);
142 auto lower = expand_child(node.lower_bound(), size);
143 auto upper = expand_child(node.upper_bound(), size);
145 body, node.index_var(), lower, upper), size);
146 }

引用了 expand_child(), LMCAS::lower, LMCAS::detail::make_node(), set_result() , 以及 LMCAS::upper.

函数调用图:

◆ visit() [22/24]

void LMCAS::ExpandVisitor::visit ( const TransformNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 157 行定义.

157 {
158 std::size_t size = 1;
159 auto body = expand_child(node.body(), size);
160 auto target = expand_child(node.target(), size);
162 node.transform_type(), body, node.source_var(), target), size);
163 }
const ExprPtr & target

引用了 expand_child(), LMCAS::detail::make_node(), set_result() , 以及 LMCAS::target.

函数调用图:

◆ visit() [23/24]

void LMCAS::ExpandVisitor::visit ( const UninterpretedFunctionNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 58 行定义.

58 {
59 std::size_t size = 1;
60 auto arguments = expand_children(node.arguments(), size);
62 node.name(), std::move(arguments)), size);
63 }

引用了 expand_children(), LMCAS::detail::make_node() , 以及 set_result().

函数调用图:

◆ visit() [24/24]

void LMCAS::ExpandVisitor::visit ( const VariableNode & node)
inlineoverridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 expand_visitor.hpp 第 24 行定义.

24 {
26 set_result(node.clone(), 1);
27 }

引用了 check_child_count() , 以及 set_result().

函数调用图:

类成员变量说明

◆ current_depth

int LMCAS::detail::SymbolicVisitor::current_depth = 0
protectedinherited

◆ MAX_DEPTH

int LMCAS::detail::SymbolicVisitor::MAX_DEPTH = 200
staticconstexprprotectedinherited

在文件 base.hpp 第 219 行定义.

被这些函数引用 LMCAS::detail::SymbolicVisitor::DepthGuard::DepthGuard().

◆ result

std::shared_ptr<const SymbolicNode> LMCAS::ExpandVisitor::result

展开结果节点。

在文件 expand_visitor.hpp 第 14 行定义.

被这些函数引用 ExpandVisitor(), expand_child(), get_result(), set_result(), visit() , 以及 visit().

◆ rewrite_budget_

RewriteBudget* LMCAS::detail::SymbolicVisitor::rewrite_budget_ = nullptr
privateinherited

该类的文档由以下文件生成: