LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
assumption_parse_values.cpp
浏览该文件的文档.
1
#include "
internal/assumption_parser.hpp
"
2
3
namespace
LMCAS::assumption_detail
{
4
5
namespace
{
6
7
template
<
typename
T, std::
size_t
N>
8
T
parse_named_value
(
const
std::string& text,
int
line_num,
const
char
* kind,
9
const
std::pair<const char*, T> (&values)[N]) {
10
for
(
const
auto
&
value
: values) {
11
if
(text ==
value
.first)
return
value
.second;
12
}
13
throw
std::invalid_argument(
14
"Line "
+ std::to_string(line_num) +
": unknown "
+ kind +
" '"
+ text +
"'"
);
15
}
16
17
}
18
19
Domain
parse_domain
(
const
std::string& s,
int
line_num) {
20
static
const
std::pair<const char*, Domain> values[] = {
21
{
"Complex"
,
Domain::Complex
},
22
{
"Real"
,
Domain::Real
},
23
{
"Algebraic"
,
Domain::Algebraic
},
24
{
"Rational"
,
Domain::Rational
},
25
{
"Integer"
,
Domain::Integer
},
26
{
"Natural"
,
Domain::Natural
},
27
{
"PositiveInt"
,
Domain::PositiveInt
},
28
};
29
return
parse_named_value(s, line_num,
"domain"
, values);
30
}
31
32
Sign
parse_sign
(
const
std::string& s,
int
line_num) {
33
static
const
std::pair<const char*, Sign> values[] = {
34
{
"Positive"
,
Sign::Positive
},
35
{
"Negative"
,
Sign::Negative
},
36
{
"NonNegative"
,
Sign::NonNegative
},
37
{
"NonPositive"
,
Sign::NonPositive
},
38
{
"Zero"
,
Sign::Zero
},
39
{
"NonZero"
,
Sign::NonZero
},
40
};
41
return
parse_named_value(s, line_num,
"sign"
, values);
42
}
43
44
Parity
parse_parity
(
const
std::string& s,
int
line_num) {
45
static
const
std::pair<const char*, Parity> values[] = {
46
{
"Even"
,
Parity::Even
},
47
{
"Odd"
,
Parity::Odd
},
48
};
49
return
parse_named_value(s, line_num,
"parity"
, values);
50
}
51
52
Boundedness
parse_boundedness
(
const
std::string& s,
int
line_num) {
53
static
const
std::pair<const char*, Boundedness> values[] = {
54
{
"Bounded"
,
Boundedness::Bounded
},
55
{
"Unbounded"
,
Boundedness::Unbounded
},
56
};
57
return
parse_named_value(s, line_num,
"boundedness"
, values);
58
}
59
60
Finiteness
parse_finiteness
(
const
std::string& s,
int
line_num) {
61
static
const
std::pair<const char*, Finiteness> values[] = {
62
{
"Finite"
,
Finiteness::Finite
},
63
{
"Divergent"
,
Finiteness::Divergent
},
64
};
65
return
parse_named_value(s, line_num,
"finiteness"
, values);
66
}
67
68
Definiteness
parse_definiteness
(
const
std::string& s,
int
line_num) {
69
static
const
std::pair<const char*, Definiteness> values[] = {
70
{
"PositiveDefinite"
,
Definiteness::PositiveDefinite
},
71
{
"PositiveSemiDefinite"
,
Definiteness::PositiveSemiDefinite
},
72
{
"NegativeDefinite"
,
Definiteness::NegativeDefinite
},
73
{
"NegativeSemiDefinite"
,
Definiteness::NegativeSemiDefinite
},
74
{
"Indefinite"
,
Definiteness::Indefinite
},
75
};
76
return
parse_named_value(s, line_num,
"definiteness"
, values);
77
}
78
79
Monotonicity
parse_monotonicity
(
const
std::string& s,
int
line_num) {
80
static
const
std::pair<const char*, Monotonicity> values[] = {
81
{
"Increasing"
,
Monotonicity::Increasing
},
82
{
"Decreasing"
,
Monotonicity::Decreasing
},
83
{
"NonDecreasing"
,
Monotonicity::NonDecreasing
},
84
{
"NonIncreasing"
,
Monotonicity::NonIncreasing
},
85
};
86
return
parse_named_value(s, line_num,
"monotonicity"
, values);
87
}
88
89
RelationOp
parse_relop
(
const
std::string& s,
int
line_num) {
90
static
const
std::pair<const char*, RelationOp> values[] = {
91
{
"GT"
,
RelationOp::GT
},
92
{
"LT"
,
RelationOp::LT
},
93
{
"GEQ"
,
RelationOp::GEQ
},
94
{
"LEQ"
,
RelationOp::LEQ
},
95
{
"NEQ"
,
RelationOp::NEQ
},
96
{
"EQ"
,
RelationOp::EQ
},
97
{
">"
,
RelationOp::GT
},
98
{
"<"
,
RelationOp::LT
},
99
{
">="
,
RelationOp::GEQ
},
100
{
"<="
,
RelationOp::LEQ
},
101
{
"!="
,
RelationOp::NEQ
},
102
{
"=="
,
RelationOp::EQ
},
103
};
104
return
parse_named_value(s, line_num,
"relational operator"
, values);
105
}
106
107
108
}
assumption_parser.hpp
LMCAS::assumption_detail::anonymous_namespace{assumption_parse_values.cpp}::parse_named_value
T parse_named_value(const std::string &text, int line_num, const char *kind, const std::pair< const char *, T >(&values)[N])
定义
assumption_parse_values.cpp:8
LMCAS::assumption_detail
定义
assumption_deserialization.cpp:3
LMCAS::assumption_detail::parse_domain
Domain parse_domain(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:19
LMCAS::assumption_detail::parse_relop
RelationOp parse_relop(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:89
LMCAS::assumption_detail::parse_monotonicity
Monotonicity parse_monotonicity(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:79
LMCAS::assumption_detail::parse_definiteness
Definiteness parse_definiteness(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:68
LMCAS::assumption_detail::parse_sign
Sign parse_sign(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:32
LMCAS::assumption_detail::parse_boundedness
Boundedness parse_boundedness(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:52
LMCAS::assumption_detail::parse_finiteness
Finiteness parse_finiteness(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:60
LMCAS::assumption_detail::parse_parity
Parity parse_parity(const std::string &s, int line_num)
定义
assumption_parse_values.cpp:44
LMCAS::Domain
Domain
Mathematical domain hierarchy (least specific → most specific). Complex ⊃ Real ⊃ Algebraic ⊃ Rational...
定义
assumption.hpp:15
LMCAS::Domain::Complex
@ Complex
Complex numbers (default, least specific)
定义
assumption.hpp:16
LMCAS::Domain::Rational
@ Rational
Rational numbers
定义
assumption.hpp:19
LMCAS::Domain::Natural
@ Natural
Non-negative integers (0, 1, 2, ...)
定义
assumption.hpp:21
LMCAS::Domain::Real
@ Real
Real numbers
定义
assumption.hpp:17
LMCAS::Domain::Integer
@ Integer
Integers
定义
assumption.hpp:20
LMCAS::Domain::Algebraic
@ Algebraic
Algebraic numbers (roots of polynomials with rational coefficients)
定义
assumption.hpp:18
LMCAS::Domain::PositiveInt
@ PositiveInt
Positive integers (1, 2, 3, ...)
定义
assumption.hpp:22
LMCAS::Boundedness
Boundedness
Boundedness classification for symbols.
定义
assumption.hpp:43
LMCAS::Boundedness::Unbounded
@ Unbounded
Symbol is unbounded
定义
assumption.hpp:45
LMCAS::Boundedness::Bounded
@ Bounded
Symbol has finite bounds
定义
assumption.hpp:44
LMCAS::Monotonicity
Monotonicity
Monotonicity classification for functions over intervals.
定义
assumption.hpp:57
LMCAS::Monotonicity::NonDecreasing
@ NonDecreasing
Non-decreasing (weakly increasing)
定义
assumption.hpp:60
LMCAS::Monotonicity::Decreasing
@ Decreasing
Strictly decreasing
定义
assumption.hpp:59
LMCAS::Monotonicity::NonIncreasing
@ NonIncreasing
Non-increasing (weakly decreasing)
定义
assumption.hpp:61
LMCAS::Monotonicity::Increasing
@ Increasing
Strictly increasing
定义
assumption.hpp:58
LMCAS::Definiteness
Definiteness
Matrix definiteness classification.
定义
assumption.hpp:66
LMCAS::Definiteness::NegativeSemiDefinite
@ NegativeSemiDefinite
All eigenvalues non-positive
定义
assumption.hpp:70
LMCAS::Definiteness::NegativeDefinite
@ NegativeDefinite
All eigenvalues negative
定义
assumption.hpp:69
LMCAS::Definiteness::PositiveSemiDefinite
@ PositiveSemiDefinite
All eigenvalues non-negative
定义
assumption.hpp:68
LMCAS::Definiteness::PositiveDefinite
@ PositiveDefinite
All eigenvalues positive
定义
assumption.hpp:67
LMCAS::Definiteness::Indefinite
@ Indefinite
Mixed eigenvalue signs
定义
assumption.hpp:71
LMCAS::RelationOp
RelationOp
Stable relational operator used by public APIs.
定义
symbolic.hpp:39
LMCAS::RelationOp::LEQ
@ LEQ
定义
symbolic.hpp:44
LMCAS::RelationOp::EQ
@ EQ
定义
symbolic.hpp:40
LMCAS::RelationOp::NEQ
@ NEQ
定义
symbolic.hpp:41
LMCAS::RelationOp::LT
@ LT
定义
symbolic.hpp:42
LMCAS::RelationOp::GT
@ GT
定义
symbolic.hpp:43
LMCAS::RelationOp::GEQ
@ GEQ
定义
symbolic.hpp:45
LMCAS::Finiteness
Finiteness
Finiteness classification for limits and sequences.
定义
assumption.hpp:76
LMCAS::Finiteness::Finite
@ Finite
Has a finite value or limit
定义
assumption.hpp:77
LMCAS::Finiteness::Divergent
@ Divergent
Diverges to infinity or oscillates
定义
assumption.hpp:78
LMCAS::value
const std::string const ExprPtr & value
定义
expr.hpp:293
LMCAS::Parity
Parity
Integer parity classification.
定义
assumption.hpp:36
LMCAS::Parity::Even
@ Even
Even integer
定义
assumption.hpp:37
LMCAS::Parity::Odd
@ Odd
Odd integer
定义
assumption.hpp:38
LMCAS::Sign
Sign
Sign classification for symbols and expressions.
定义
assumption.hpp:26
LMCAS::Sign::NonNegative
@ NonNegative
>= 0
定义
assumption.hpp:29
LMCAS::Sign::Positive
@ Positive
定义
assumption.hpp:27
LMCAS::Sign::NonZero
@ NonZero
!= 0
定义
assumption.hpp:32
LMCAS::Sign::Zero
@ Zero
== 0
定义
assumption.hpp:31
LMCAS::Sign::NonPositive
@ NonPositive
<= 0
定义
assumption.hpp:30
LMCAS::Sign::Negative
@ Negative
< 0
定义
assumption.hpp:28
src
assumption_parse_values.cpp
生成于
, 为 LMCAS使用
1.18.0