LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
expression_transform.hpp
浏览该文件的文档.
1
#pragma once
2
3
#include "
computation_context.hpp
"
4
#include "
symbolic.hpp
"
5
#include "
internal/symbolic_ast.hpp
"
6
#include "
internal/facts_query.hpp
"
7
#include "
internal/rewrite_budget.hpp
"
8
#include <exception>
9
#include <memory>
10
#include <string>
11
#include <utility>
12
13
namespace
LMCAS::detail
{
14
15
LMCAS_API
SymbolicNodePtr
normalize_node
(
16
const
SymbolicNodePtr
&
node
,
RewriteBudget
&
budget
,
17
const
FactsQuery
&
facts
=
no_facts
(),
Domain
domain
=
Domain::Real
);
18
LMCAS_API
SymbolicNodePtr
expand_node
(
19
const
SymbolicNodePtr
&
node
,
RewriteBudget
&
budget
,
20
const
FactsQuery
&
facts
=
no_facts
(),
Domain
domain
=
Domain::Real
);
21
LMCAS_API
SymbolicNodePtr
differentiate_node
(
22
const
SymbolicNodePtr
&
node
,
const
std::string&
variable
,
RewriteBudget
&
budget
,
23
const
FactsQuery
&
facts
=
no_facts
(),
Domain
domain
=
Domain::Real
);
24
LMCAS_API
SymbolicNodePtr
substitute_node
(
25
const
SymbolicNodePtr
&
node
,
const
std::string&
variable
,
26
const
SymbolicNodePtr
&
replacement
,
RewriteBudget
&
budget
,
27
const
FactsQuery
&
facts
=
no_facts
(),
Domain
domain
=
Domain::Real
);
28
29
template
<
typename
Transform>
30
ExpressionResult
checked_transform_expr
(
const
ExprPtr
& expression,
31
ComputationContext
&
context
,
32
const
char
*
operation
,
33
const
char
* transform_name,
34
Transform&& transform) {
35
auto
step =
context
.consume_steps(1,
operation
);
36
if
(!step)
return
ExpressionResult::failure
(step.error());
37
if
(!expression || !
LMCAS::detail::node
(expression)) {
38
return
ExpressionResult::failure
(
CasErrc::InvalidArgument
,
39
std::string(transform_name) +
40
" argument cannot be null"
,
41
operation
);
42
}
43
try
{
44
auto
result = std::forward<Transform>(transform)(*expression);
45
if
(!result || !
LMCAS::detail::node
(result)) {
46
return
ExpressionResult::failure
(
CasErrc::InternalInvariant
,
47
std::string(transform_name) +
48
" returned null"
,
49
operation
);
50
}
51
return
ExpressionResult::success
(std::move(result));
52
}
catch
(
const
CasError
& error) {
53
return
ExpressionResult::failure
(error);
54
}
catch
(
const
std::bad_alloc&) {
55
return
ExpressionResult::failure
(
CasErrc::ResourceLimit
,
56
std::string(transform_name) +
57
" allocation failed"
,
58
operation
);
59
}
catch
(
const
std::length_error& error) {
60
return
ExpressionResult::failure
(
CasErrc::ResourceLimit
, error.what(),
61
operation
);
62
}
catch
(
const
std::exception& error) {
63
return
ExpressionResult::failure
(
CasErrc::InternalInvariant
, error.what(),
64
operation
);
65
}
66
}
67
68
}
LMCAS::ComputationContext
定义
computation_context.hpp:99
LMCAS::FactsQuery
定义
facts_query.hpp:16
LMCAS::Result< std::shared_ptr< SymbolicExpr > >::failure
static Result failure(CasErrc code, std::string message, std::string operation={})
定义
result.hpp:52
LMCAS::Result< std::shared_ptr< SymbolicExpr > >::success
static Result success(std::shared_ptr< SymbolicExpr > value)
定义
result.hpp:48
LMCAS::detail::RewriteBudget
定义
rewrite_budget.hpp:15
computation_context.hpp
facts_query.hpp
LMCAS_API
#define LMCAS_API
定义
lmcas_export.hpp:13
LMCAS::detail
多元 Hensel 提升(单变量步)
定义
assumption_context.hpp:31
LMCAS::detail::differentiate_node
SymbolicNodePtr differentiate_node(const SymbolicNodePtr &node, const std::string &variable, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
定义
symbolic_core.cpp:233
LMCAS::detail::expand_node
SymbolicNodePtr expand_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
定义
symbolic_core.cpp:220
LMCAS::detail::node
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
定义
base.hpp:91
LMCAS::detail::checked_transform_expr
ExpressionResult checked_transform_expr(const ExprPtr &expression, ComputationContext &context, const char *operation, const char *transform_name, Transform &&transform)
定义
expression_transform.hpp:30
LMCAS::detail::variable
const std::string & variable
定义
expression_transform.hpp:22
LMCAS::detail::replacement
const std::string const SymbolicNodePtr & replacement
定义
expression_transform.hpp:26
LMCAS::detail::domain
RewriteBudget const FactsQuery Domain domain
定义
expression_transform.hpp:17
LMCAS::detail::SymbolicNodePtr
std::shared_ptr< const SymbolicNode > SymbolicNodePtr
定义
base.hpp:73
LMCAS::detail::no_facts
const FactsQuery & no_facts() noexcept
定义
facts_query_adapters.cpp:96
LMCAS::detail::facts
RewriteBudget const FactsQuery & facts
定义
expression_transform.hpp:17
LMCAS::detail::operation
ComputationContext const std::string & operation
定义
exact_algebraic.hpp:32
LMCAS::detail::normalize_node
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
定义
symbolic_core.cpp:201
LMCAS::detail::budget
RewriteBudget & budget
定义
expression_transform.hpp:16
LMCAS::detail::context
std::size_t std::size_t ComputationContext & context
定义
exact_algebraic.hpp:27
LMCAS::detail::substitute_node
SymbolicNodePtr substitute_node(const SymbolicNodePtr &node, const std::string &variable, const SymbolicNodePtr &replacement, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
定义
symbolic_core.cpp:247
LMCAS::Domain
Domain
Mathematical domain hierarchy (least specific → most specific). Complex ⊃ Real ⊃ Algebraic ⊃ Rational...
定义
assumption.hpp:15
LMCAS::Domain::Real
@ Real
Real numbers
定义
assumption.hpp:17
LMCAS::CasErrc::InvalidArgument
@ InvalidArgument
定义
result.hpp:13
LMCAS::CasErrc::InternalInvariant
@ InternalInvariant
定义
result.hpp:28
LMCAS::CasErrc::ResourceLimit
@ ResourceLimit
定义
result.hpp:25
LMCAS::ExpressionResult
Result< std::shared_ptr< SymbolicExpr > > ExpressionResult
Result of an operation that produces a symbolic expression.
定义
symbolic.hpp:31
LMCAS::ExprPtr
std::shared_ptr< SymbolicExpr > ExprPtr
定义
conditional_result.hpp:19
LMCAS::CasError
定义
result.hpp:31
rewrite_budget.hpp
symbolic.hpp
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.
symbolic_ast.hpp
内部 AST 定义。
src
internal
expression_transform.hpp
生成于
, 为 LMCAS使用
1.18.0