cMHN
1.1
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
pRC
prc
algorithms
solve.hpp
Go to the documentation of this file.
1
// SPDX-License-Identifier: BSD-2-Clause
2
3
#ifndef pRC_ALGORITHMS_SOLVE_H
4
#define pRC_ALGORITHMS_SOLVE_H
5
6
#include <
prc/core/basic/common.hpp
>
7
#include <
prc/core/basic/functions/zero.hpp
>
8
#include <
prc/core/basic/limits.hpp
>
9
#include <
prc/core/tensor/operator/hint.hpp
>
10
#include <
prc/core/tensor/operator/restrict.hpp
>
11
#include <
prc/core/tensor/operator/transform.hpp
>
12
#include <
prc/core/value/type_traits.hpp
>
13
14
namespace
pRC
15
{
16
template
<
Operator::Transform
T
=
Operator::Transform::None
,
17
Operator::Restrict
R
=
Operator::Restrict::None
,
18
Operator::Hint
H
=
Operator::Hint::None
,
class
Solver,
class
XA
,
19
class
XB
,
If<IsInvocable<Solver, XA, XB>
> = 0>
20
static
inline
constexpr
decltype
(
auto
)
solve
(Solver &&
solver
,
XA
&&
A
,
21
XB
&&b)
22
{
23
return
forward<Solver>
(
solver
).template
operator
()<
T
,
R
,
H
>(
24
forward<XA>
(
A
),
forward<XB>
(b));
25
}
26
27
template
<
Operator::Transform
T
=
Operator::Transform::None
,
28
Operator::Restrict
R
=
Operator::Restrict::None
,
29
Operator::Hint
H
=
Operator::Hint::None
,
class
Solver,
class
XA
,
30
class
XB
,
class
XX
,
If<IsInvocable<Solver, XA, XB, XX>
> = 0>
31
static
inline
constexpr
decltype
(
auto
)
solve
(Solver &&
solver
,
XA
&&
A
,
32
XB
&&b,
XX
&&
x0
)
33
{
34
return
forward<Solver>
(
solver
).template
operator
()<
T
,
R
,
H
>(
35
forward<XA>
(
A
),
forward<XB>
(b),
forward<XX>
(
x0
));
36
}
37
38
template
<
Operator::Transform
T
=
Operator::Transform::None
,
39
Operator::Restrict
R
=
Operator::Restrict::None
,
40
Operator::Hint
H
=
Operator::Hint::None
,
class
Solver,
class
XA
,
41
class
XB
,
class
VT
,
If<IsInvocable<Solver, XA, XB, VT>
> = 0>
42
static
inline
constexpr
decltype
(
auto
)
solve
(Solver &&
solver
,
XA
&&
A
,
43
XB
&&b,
VT
const
&tolerance)
44
{
45
return
forward<Solver>
(
solver
).template
operator
()<
T
,
R
,
H
>(
46
forward<XA>
(
A
),
forward<XB>
(b), tolerance);
47
}
48
49
template
<
Operator::Transform
T
=
Operator::Transform::None
,
50
Operator::Restrict
R
=
Operator::Restrict::None
,
51
Operator::Hint
H
=
Operator::Hint::None
,
class
Solver,
class
XA
,
52
class
XB
,
class
XX
,
class
VT
,
53
If<IsInvocable<Solver, XA, XB, XX, VT>
> = 0>
54
static
inline
constexpr
decltype
(
auto
)
solve
(Solver &&
solver
,
XA
&&
A
,
55
XB
&&b,
XX
&&
x0
,
VT
const
&tolerance)
56
{
57
return
forward<Solver>
(
solver
).template
operator
()<
T
,
R
,
H
>(
58
forward<XA>
(
A
),
forward<XB>
(b),
forward<XX>
(
x0
), tolerance);
59
}
60
61
template
<
class
Solver,
Operator::Transform
T
=
Operator::Transform::None
,
62
Operator::Restrict
R
=
Operator::Restrict::None
,
63
Operator::Hint
H
=
Operator::Hint::None
,
class
XA
,
class
XB
,
64
If<IsInvocable<Solver, XA, XB>
> = 0>
65
static
inline
constexpr
decltype
(
auto
)
solve
(
XA
&&
A
,
XB
&&b)
66
{
67
return
solve<T, R, H>
(Solver(), forward<XA>(
A
), forward<XB>(b));
68
}
69
70
template
<
class
Solver,
Operator::Transform
T
=
Operator::Transform::None
,
71
Operator::Restrict
R
=
Operator::Restrict::None
,
72
Operator::Hint
H
=
Operator::Hint::None
,
class
XA
,
class
XB
,
class
XX
,
73
If<IsInvocable<Solver, XA, XB, XX>
> = 0>
74
static
inline
constexpr
decltype
(
auto
)
solve
(
XA
&&
A
,
XB
&&b,
XX
&&
x0
)
75
{
76
return
solve<T, R, H>
(Solver(), forward<XA>(
A
), forward<XB>(b),
77
forward<XX>(
x0
));
78
}
79
80
template
<
class
Solver,
Operator::Transform
T
=
Operator::Transform::None
,
81
Operator::Restrict
R
=
Operator::Restrict::None
,
82
Operator::Hint
H
=
Operator::Hint::None
,
class
XA
,
class
XB
,
class
VT
,
83
If<IsInvocable<Solver, XA, XB, VT>
> = 0>
84
static
inline
constexpr
decltype
(
auto
)
solve
(
XA
&&
A
,
XB
&&b,
85
VT
const
&tolerance)
86
{
87
return
solve<T, R, H>
(Solver(), forward<XA>(
A
), forward<XB>(b),
88
tolerance);
89
}
90
91
template
<
class
Solver,
Operator::Transform
T
=
Operator::Transform::None
,
92
Operator::Restrict
R
=
Operator::Restrict::None
,
93
Operator::Hint
H
=
Operator::Hint::None
,
class
XA
,
class
XB
,
class
XX
,
94
class
VT
,
If<IsInvocable<Solver, XA, XB, XX, VT>
> = 0>
95
static
inline
constexpr
decltype
(
auto
)
solve
(
XA
&&
A
,
XB
&&b,
XX
&&
x0
,
96
VT
const
&tolerance)
97
{
98
return
solve<T, R, H>
(Solver(), forward<XA>(
A
), forward<XB>(b),
99
forward<XX>(
x0
), tolerance);
100
}
101
}
102
#endif
// pRC_ALGORITHMS_SOLVE_H
limits.hpp
pRC::Float<>
zero.hpp
restrict.hpp
transform.hpp
type_traits.hpp
T
pRC::Float<> T
Definition
externs_nonTT.hpp:1
hint.hpp
pRC::Operator::Restrict
Restrict
Definition
restrict.hpp:11
pRC::Operator::Restrict::None
@ None
pRC::Operator::Hint
Hint
Definition
hint.hpp:9
pRC::Operator::Hint::None
@ None
pRC::Operator::Transform
Transform
Definition
transform.hpp:11
pRC::Operator::Transform::None
@ None
pRC
Definition
cholesky.hpp:18
pRC::makeConstantSequence
static constexpr auto makeConstantSequence()
Definition
sequence.hpp:402
pRC::solve
static constexpr decltype(auto) solve(Solver &&solver, XA &&A, XB &&b)
Definition
solve.hpp:20
common.hpp
Generated by
1.10.0