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

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

类 LMCAS::groebner_detail::PolyBuilder 继承关系图:
LMCAS::groebner_detail::PolyBuilder 的协作图:

Public 成员函数

 PolyBuilder (const std::vector< std::string > &v, PolyContext &ctx, bool strict=false)
 PolyBuilder (const std::vector< std::string > &v, std::vector< std::string > &ext_v, std::unordered_map< std::string, size_t > &trans_map, std::unordered_map< size_t, std::shared_ptr< const SymbolicNode > > *aux_map, detail::RewriteBudget &budget, bool strict=false)
Poly 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
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 属性

bool failed = false

Protected 成员函数

RewriteBudget * rewrite_budget () const noexcept

Protected 属性

int current_depth = 0

静态 Protected 属性

static constexpr int MAX_DEPTH = 200

Private 成员函数

bool function_depends_on_variables (const FunctionNode &node) const
size_t get_or_create_aux_var (const std::shared_ptr< const SymbolicNode > &node)
void represent_as_aux_or_fail (const std::shared_ptr< const SymbolicNode > &node)
bool use_numeric_function (const FunctionNode &node)

Private 属性

std::unordered_map< size_t, std::shared_ptr< const SymbolicNode > > * aux_to_node
std::vector< std::string > & ext_vars
Poly result
RewriteBudget * rewrite_budget_ = nullptr
bool strict_mode
std::unordered_map< std::string, size_t > & transcendental_map
std::vector< std::string > vars

详细描述

在文件 solver_groebner_builder.hpp 第 8 行定义.

构造及析构函数说明

◆ PolyBuilder() [1/2]

LMCAS::groebner_detail::PolyBuilder::PolyBuilder ( const std::vector< std::string > & v,
PolyContext & ctx,
bool strict = false )

在文件 solver_groebner_builder.cpp 第 41 行定义.

42 : SymbolicVisitor(&ctx.budget), vars(v), ext_vars(ctx.ext_vars),
43 transcendental_map(ctx.transcendental_map), aux_to_node(&ctx.aux_to_node),
44 result(ctx.ext_vars.size()), strict_mode(strict) {}
std::unordered_map< std::string, size_t > & transcendental_map
std::unordered_map< size_t, std::shared_ptr< const SymbolicNode > > * aux_to_node
__attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::string & v

引用了 LMCAS::detail::SymbolicVisitor::SymbolicVisitor(), aux_to_node, ext_vars, result, strict_mode, transcendental_map, LMCAS::v , 以及 vars.

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

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

◆ PolyBuilder() [2/2]

LMCAS::groebner_detail::PolyBuilder::PolyBuilder ( const std::vector< std::string > & v,
std::vector< std::string > & ext_v,
std::unordered_map< std::string, size_t > & trans_map,
std::unordered_map< size_t, std::shared_ptr< const SymbolicNode > > * aux_map,
detail::RewriteBudget & budget,
bool strict = false )
inline

在文件 solver_groebner_builder.hpp 第 31 行定义.

36 : SymbolicVisitor(&budget), vars(v), ext_vars(ext_v),
37 transcendental_map(trans_map), aux_to_node(aux_map),
38 result(ext_v.size()), strict_mode(strict) {}

引用了 LMCAS::detail::SymbolicVisitor::SymbolicVisitor(), aux_to_node, ext_vars, result, strict_mode, transcendental_map, LMCAS::v , 以及 vars.

函数调用图:

成员函数说明

◆ function_depends_on_variables()

bool LMCAS::groebner_detail::PolyBuilder::function_depends_on_variables ( const FunctionNode & node) const
private

在文件 solver_groebner_conversion.cpp 第 40 行定义.

40 {
41 for (const auto& argument : node.arguments()) {
42 for (const auto& variable : vars) {
43 if (expression_depends_on_variable(argument, variable)) return true;
44 }
45 }
46 return false;
47}
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
const std::string & variable
bool expression_depends_on_variable(const detail::SymbolicNodePtr &expression, const std::string &variable, detail::RewriteBudget *budget)

引用了 LMCAS::expression_depends_on_variable(), LMCAS::variable , 以及 vars.

被这些函数引用 visit().

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

◆ get_or_create_aux_var()

size_t LMCAS::groebner_detail::PolyBuilder::get_or_create_aux_var ( const std::shared_ptr< const SymbolicNode > & node)
private

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

7 {
8
10 std::string key = tmp.to_string();
11
12 auto it = transcendental_map.find(key);
13 if (it != transcendental_map.end()) {
14 return it->second;
15 }
16
17 size_t idx = ext_vars.size();
18 std::string aux_name = "__aux_" + std::to_string(idx) + "_";
19 ext_vars.push_back(aux_name);
20 transcendental_map[key] = idx;
21
22 if (aux_to_node) {
23 (*aux_to_node)[idx] = node;
24 }
25 return idx;
26 }
inline ::LMCAS::SymbolicExpr expression_from_node(SymbolicNodePtr root)

引用了 aux_to_node, LMCAS::detail::expression_from_node(), ext_vars , 以及 transcendental_map.

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

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

◆ get_result()

Poly LMCAS::groebner_detail::PolyBuilder::get_result ( ) const
inline

在文件 solver_groebner_builder.hpp 第 40 行定义.

40{ return result; }

引用了 result.

被这些函数引用 LMCAS::anonymous_namespace{solver_groebner_system.cpp}::convert_basis_polynomial() , 以及 visit().

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

◆ represent_as_aux_or_fail()

void LMCAS::groebner_detail::PolyBuilder::represent_as_aux_or_fail ( const std::shared_ptr< const SymbolicNode > & node)
private

在文件 solver_groebner_conversion.cpp 第 28 行定义.

28 {
29 if (strict_mode) {
30 failed = true;
31 return;
32 }
33 size_t idx = get_or_create_aux_var(node);
34 result = Poly(ext_vars.size());
35 Monomial m(ext_vars.size(), 0);
36 m[idx] = 1;
38 }
size_t get_or_create_aux_var(const std::shared_ptr< const SymbolicNode > &node)
@ Rational
Rational numbers
void add_term(const Monomial &monomial, const Rational &coefficient)

引用了 LMCAS::groebner_detail::Poly::Poly(), LMCAS::groebner_detail::Poly::add_term(), ext_vars, failed, get_or_create_aux_var(), result , 以及 strict_mode.

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

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

◆ 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().

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

◆ use_numeric_function()

bool LMCAS::groebner_detail::PolyBuilder::use_numeric_function ( const FunctionNode & node)
private

在文件 solver_groebner_conversion.cpp 第 49 行定义.

49 {
53 if (!simplified || !simplified->is_number()) return false;
54 auto number = std::dynamic_pointer_cast<const NumberNode>(LMCAS::detail::node(simplified));
55 if (!number) return false;
56 if (std::holds_alternative<Rational>(number->value())) {
57 result = Poly(ext_vars.size());
58 result.add_term(Monomial(ext_vars.size(), 0), std::get<Rational>(number->value()));
59 return true;
60 }
61 if (std::holds_alternative<BigInt>(number->value())) {
62 result = Poly(ext_vars.size());
63 result.add_term(Monomial(ext_vars.size(), 0), Rational(std::get<BigInt>(number->value())));
64 return true;
65 }
66 return false;
67}
RewriteBudget * rewrite_budget() const noexcept
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
std::shared_ptr< const Node > make_node(Args &&... args)
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)

引用了 LMCAS::groebner_detail::Poly::Poly(), LMCAS::groebner_detail::Poly::add_term(), LMCAS::detail::expression_from_node(), ext_vars, LMCAS::detail::make_expression_ptr(), LMCAS::detail::make_node(), LMCAS::detail::node(), LMCAS::detail::normalize_node(), result , 以及 LMCAS::detail::SymbolicVisitor::rewrite_budget().

被这些函数引用 visit().

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

◆ visit() [1/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const AddNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_builder.cpp 第 80 行定义.

80 {
81 Poly sum(ext_vars.size());
82 for (auto& op : node.operands()) {
85 op->accept(b);
86 if (b.failed) { failed = true; return; }
87
88 Poly b_res = b.get_result();
89 align_variables(sum, b_res);
90 sum = add_poly(sum, b_res);
91 }
92 result = sum;
93 }
PolyBuilder(const std::vector< std::string > &v, PolyContext &ctx, bool strict=false)
void align_variables(Poly &a, Poly &b)
Poly add_poly(const Poly &a, const Poly &b)
const MultiPoly & b
const ExprPtr RelationOp op

引用了 PolyBuilder(), LMCAS::groebner_detail::add_poly(), LMCAS::groebner_detail::align_variables(), aux_to_node, LMCAS::b, ext_vars, failed, LMCAS::op, result, LMCAS::detail::SymbolicVisitor::rewrite_budget(), strict_mode, transcendental_map , 以及 vars.

函数调用图:

◆ visit() [2/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const ComplexNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 119 行定义.

119 {
121 }
void represent_as_aux_or_fail(const std::shared_ptr< const SymbolicNode > &node)

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [3/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const FiniteSetNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 123 行定义.

123{ represent_as_aux_or_fail(node.clone()); }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [4/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const FunctionNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 69 行定义.

69 {
70 if (strict_mode) {
71 failed = true;
72 return;
73 }
74 if (!function_depends_on_variables(node) && use_numeric_function(node)) return;
77}
bool function_depends_on_variables(const FunctionNode &node) const

引用了 failed, function_depends_on_variables(), LMCAS::detail::make_node(), represent_as_aux_or_fail(), strict_mode , 以及 use_numeric_function().

函数调用图:

◆ visit() [5/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const IntegralNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 131 行定义.

131 {
133 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [6/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const IntervalNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 125 行定义.

125{ represent_as_aux_or_fail(node.clone()); }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [7/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const LimitNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 135 行定义.

135 {
137 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [8/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const LogicalNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 91 行定义.

91 {
93 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [9/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const MatrixNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 83 行定义.

83 {
85 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [10/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const MembershipNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 127 行定义.

127{ represent_as_aux_or_fail(node.clone()); }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [11/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const MultiplyNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_builder.cpp 第 95 行定义.

95 {
96 Poly prod(ext_vars.size());
97 prod.add_term(std::vector<int>(ext_vars.size(), 0), Rational(1));
98
99 for (auto& op : node.operands()) {
102 op->accept(b);
103 if (b.failed) { failed = true; return; }
104 Poly b_res = b.get_result();
105
106 align_variables(prod, b_res);
107 prod = mul_poly(prod, b_res);
108 }
109 result = prod;
110 }
Poly mul_poly(const Poly &a, const Poly &b)

引用了 PolyBuilder(), LMCAS::groebner_detail::Poly::add_term(), LMCAS::groebner_detail::align_variables(), aux_to_node, LMCAS::b, ext_vars, failed, LMCAS::groebner_detail::mul_poly(), LMCAS::op, result, LMCAS::detail::SymbolicVisitor::rewrite_budget(), strict_mode, transcendental_map , 以及 vars.

函数调用图:

◆ visit() [12/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const NumberNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_builder.cpp 第 46 行定义.

46 {
47 result = Poly(ext_vars.size());
48
49 if (std::holds_alternative<Rational>(node.value())) {
50 result.add_term(std::vector<int>(ext_vars.size(), 0), std::get<Rational>(node.value()));
51 } else if (std::holds_alternative<BigInt>(node.value())) {
52 result.add_term(std::vector<int>(ext_vars.size(), 0), Rational(std::get<BigInt>(node.value())));
53 }
54 }

引用了 LMCAS::groebner_detail::Poly::Poly(), LMCAS::groebner_detail::Poly::add_term(), ext_vars , 以及 result.

函数调用图:

◆ visit() [13/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const PiecewiseNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 95 行定义.

95 {
97 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [14/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const PowerNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_builder.cpp 第 112 行定义.

112 {
115 node.base()->accept(builder);
116 if (builder.failed) {
117 failed = true;
118 return;
119 }
120 Poly base = builder.get_result();
121 auto exponent = integer_exponent(node);
122 if (!exponent || *exponent > BigInt(std::numeric_limits<int>::max()) ||
123 *exponent < 0) {
124 if (strict_mode) {
125 failed = true;
126 return;
127 }
129 LMCAS::detail::make_node<PowerNode>(node.base(), node.exponent()));
130 return;
131 }
132 if (*exponent == 0) {
133 result = Poly(ext_vars.size());
134 result.add_term(Monomial(ext_vars.size(), 0), Rational(1));
135 return;
136 }
137 const int count = static_cast<int>(exponent->try_to_int64().value());
138 if (!power_degrees_fit(base, count)) {
140 return;
141 }
142 Poly product(ext_vars.size());
143 product.add_term(Monomial(ext_vars.size(), 0), Rational(1));
144 for (int index = 0; index < count; ++index) {
145 extend_variables(product, base.num_vars);
146 product = mul_poly(product, base);
147 }
148 result = product;
149}
void extend_variables(Poly &polynomial, size_t count)
const ExprPtr & exponent
const std::string const ExprPtr & value

引用了 LMCAS::groebner_detail::Poly::Poly(), PolyBuilder(), LMCAS::groebner_detail::Poly::add_term(), aux_to_node, LMCAS::exponent, ext_vars, LMCAS::groebner_detail::extend_variables(), failed, get_result(), LMCAS::detail::make_node(), LMCAS::groebner_detail::mul_poly(), LMCAS::groebner_detail::Poly::num_vars, represent_as_aux_or_fail(), result, LMCAS::detail::SymbolicVisitor::rewrite_budget(), strict_mode, transcendental_map, LMCAS::value , 以及 vars.

函数调用图:

◆ visit() [15/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const ProductNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 103 行定义.

103 {
105 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [16/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const QuantifierNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 111 行定义.

111 {
113 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [17/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const QuantityNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 129 行定义.

129{ represent_as_aux_or_fail(node.clone()); }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [18/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const RelationalNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 87 行定义.

87 {
89 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [19/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const RootOfNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 139 行定义.

139 {
141 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [20/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const SetBuilderNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 115 行定义.

115 {
117 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [21/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const SummationNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 99 行定义.

99 {
101 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [22/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const TransformNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 107 行定义.

107 {
109 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [23/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const UninterpretedFunctionNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_conversion.cpp 第 79 行定义.

79 {
81 }

引用了 represent_as_aux_or_fail().

函数调用图:

◆ visit() [24/24]

void LMCAS::groebner_detail::PolyBuilder::visit ( const VariableNode & node)
overridevirtual

实现了 LMCAS::detail::SymbolicVisitor.

在文件 solver_groebner_builder.cpp 第 56 行定义.

56 {
57 result = Poly(ext_vars.size());
58
59 auto it = node.is_constant() ? ext_vars.end() :
60 std::find(ext_vars.begin(), ext_vars.end(), node.name());
61 if (it != ext_vars.end()) {
62 Monomial m(ext_vars.size(), 0);
63 m[std::distance(ext_vars.begin(), it)] = 1;
65 } else {
66
67 if (strict_mode) {
68 failed = true;
69 return;
70 }
71 size_t idx = get_or_create_aux_var(LMCAS::detail::make_node<VariableNode>(node.name(), node.is_constant()));
72
73 result = Poly(ext_vars.size());
74 Monomial m(ext_vars.size(), 0);
75 m[idx] = 1;
77 }
78 }

引用了 LMCAS::groebner_detail::Poly::Poly(), LMCAS::groebner_detail::Poly::add_term(), ext_vars, failed, get_or_create_aux_var(), LMCAS::detail::make_node(), result , 以及 strict_mode.

函数调用图:

类成员变量说明

◆ aux_to_node

std::unordered_map<size_t, std::shared_ptr<const SymbolicNode> >* LMCAS::groebner_detail::PolyBuilder::aux_to_node
private

在文件 solver_groebner_builder.hpp 第 15 行定义.

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

◆ current_depth

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

◆ ext_vars

std::vector<std::string>& LMCAS::groebner_detail::PolyBuilder::ext_vars
private

◆ failed

◆ MAX_DEPTH

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

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

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

◆ result

Poly LMCAS::groebner_detail::PolyBuilder::result
private

◆ rewrite_budget_

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

◆ strict_mode

bool LMCAS::groebner_detail::PolyBuilder::strict_mode
private

◆ transcendental_map

std::unordered_map<std::string, size_t>& LMCAS::groebner_detail::PolyBuilder::transcendental_map
private

在文件 solver_groebner_builder.hpp 第 13 行定义.

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

◆ vars

std::vector<std::string> LMCAS::groebner_detail::PolyBuilder::vars
private

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