3#ifndef pRC_TENSOR_TRAIN_COMMON_FUNCTIONS_ROUND_H
4#define pRC_TENSOR_TRAIN_COMMON_FUNCTIONS_ROUND_H
16 template<
class Ranks,
class X,
class R = RemoveReference<X>,
17 class V =
typename R::Value,
class VT = V,
18 If<All<IsFloat<V>, IsFloat<VT>>> = 0,
19 If<Any<TensorTrain::IsTensorish<R>, TensorTrain::IsOperatorish<R>>> = 0,
20 If<IsSizes<Ranks>> = 0,
22 typename Ranks::Dimension() ==
typename R::Dimension() - 1)>> = 0>
23 static inline constexpr auto round(
X &&a,
27 [&a, &tolerance](
auto const...
seq)
38 constexpr auto RAL = RA::size(0);
39 constexpr auto RAR = RA::size(
typename RA::Dimension() - 1);
43 if constexpr(
C ==
typename R::Dimension() - 1)
47 typename R::Dimension{}>()),
56 forward<Xs>(
cores)..., forward<XA>(a)));
60 auto const [
q,
r] =
qr(
65 typename RA::Dimension() - 1>(),
66 [&
q =
q](
auto const...
seq)
126 typename R::Dimension{}>()),
139 min(Ranks::size(
C - 1),
RAL, RA::size() /
RAL);
147 typename RA::Dimension() - 1>(),
148 [&
v =
v](
auto const...
seq)
155 contract<
typename RB::Dimension() - 1, 0>(
162 })(forward<X>(a).template
core<seq>()...);
166 template<
class X,
class R = RemoveReference<X>,
class V =
typename R::Value,
167 class VT = V, If<All<IsFloat<V>, IsFloat<VT>>> = 0,
168 If<Any<TensorTrain::IsTensorish<R>, TensorTrain::IsOperatorish<R>>> = 0>
169 static inline constexpr auto round(
X &&a,
175 template<Size C,
class X,
class R = RemoveReference<X>,
176 class V =
typename R::Value,
class VT = V,
177 If<All<IsFloat<V>, IsFloat<VT>>> = 0,
178 If<Any<TensorTrain::IsTensorish<R>, TensorTrain::IsOperatorish<R>>> = 0>
179 static inline constexpr auto round(
X &&a,
184 forward<X>(a), tolerance);
188 class V =
typename R::Value,
class VT =
V,
192 If<
IsSatisfied<(
sizeof...(Cs) ==
typename R::Dimension() - 1)>> = 0>
193 static inline constexpr auto round(
X &&a,
194 VT const &tolerance = NumericLimits<VT>::epsilon())
pRC::Size const D
Definition CalculatePThetaTests.cpp:9
static constexpr auto fromCores(Xs &&...cores)
Definition from_cores.hpp:13
Definition cholesky.hpp:18
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr X min(X &&a)
Definition min.hpp:13
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
Size Index
Definition type_traits.hpp:21
static constexpr auto exp(Complex< T > const &a)
Definition exp.hpp:12
std::size_t Size
Definition type_traits.hpp:20
std::remove_reference_t< T > RemoveReference
Definition type_traits.hpp:56
static constexpr auto zero()
Definition zero.hpp:12
static constexpr auto reverse(Direction const D)
Definition direction.hpp:24
std::enable_if_t< B{}, int > If
Definition type_traits.hpp:68
Constant< Bool, B > IsSatisfied
Definition type_traits.hpp:71
static constexpr auto contract(X &&a)
Definition contract.hpp:20
RecursiveLambda(X &&) -> RecursiveLambda< RemoveReference< X > >
static constexpr auto qr(X &&input)
Definition qr.hpp:24
static constexpr auto forwardAsTuple(Xs &&...args)
Definition type_traits.hpp:202
static constexpr auto makeRange()
Definition sequence.hpp:379
static constexpr auto adjoint(JacobiRotation< T > const &a)
Definition jacobi_rotation.hpp:325
Sequence< Size, Ns... > Sizes
Definition type_traits.hpp:238
static constexpr auto makeSeries()
Definition sequence.hpp:351
static constexpr auto fromDiagonal(X &&a)
Definition from_diagonal.hpp:21
static constexpr auto log(Complex< T > const &a)
Definition log.hpp:11
static constexpr auto reshape(X &&a)
Definition reshape.hpp:17
static constexpr auto norm(Complex< T > const &a)
Definition norm.hpp:11
static constexpr auto round(Complex< T > const &a)
Definition round.hpp:12
Direction
Definition direction.hpp:9
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
Definition sequence.hpp:344