autoppl  v0.8
A C++ template library for probabilistic programming
var_expr_traits.hpp
Go to the documentation of this file.
1 #pragma once
2 #if __cplusplus <= 201703L
4 #else
5 #include <concepts>
6 #endif
9 
10 namespace ppl {
11 namespace util {
12 
18 template <class T>
19 struct VarExprBase : BaseCRTP<T>
20 { using BaseCRTP<T>::self; };
21 
22 template <class T>
23 inline constexpr bool var_expr_is_base_of_v =
24  std::is_base_of_v<VarExprBase<T>, T>;
25 
26 template <class VarExprType>
28 {
29  using value_t = typename VarExprType::value_t;
30  static constexpr bool has_param = VarExprType::has_param;
31 };
32 
33 #if __cplusplus <= 201703L
34 
35 template <class T>
36 inline constexpr bool is_var_expr_v =
37  is_shape_v<T> &&
38  var_expr_is_base_of_v<T> &&
39  has_type_value_t_v<T>
40  ;
41 
42 #else
43 
44 template <class T>
45 concept var_expr_c =
46  shape_c<T> &&
47  var_expr_is_base_of_v<T> &&
48  requires () {
51  } //&&
52  //(
53  // (
54  // !util::is_mat_v<T> &&
55  // requires (const MockVector<typename var_expr_traits<T>::value_t>& values,
56  // const MockVector< ad::Var<
57  // typename var_expr_traits<T>::value_t> >& ad_vars,
58  // const T& cx,
59  // size_t i) {
60  // { cx.value(values, i) } -> std::convertible_to<
61  // typename var_expr_traits<T>::value_t>;
62  // { cx.to_ad(ad_vars, ad_vars, i) } -> ad::is_ad_expr;
63  // }
64  // ) ||
65  // (
66  // util::is_mat_v<T> &&
67  // requires (const MockVector<typename var_expr_traits<T>::value_t>& values,
68  // const MockVector< ad::Var<
69  // typename var_expr_traits<T>::value_t> >& ad_vars,
70  // const T& cx,
71  // size_t i) {
72  // { cx.value(values, i, i) } -> std::convertible_to<
73  // typename var_expr_traits<T>::value_t>;
74  // { cx.to_ad(ad_vars, ad_vars, i, i) } -> ad::is_ad_expr;
75  // }
76  // )
77  //)
78  ;
79 
80 template <class T>
81 concept is_var_expr_v = var_expr_c<T>;
82 
83 #endif
84 
85 
86 } // namespace util
87 } // namespace ppl
ppl::util::var_expr_traits
Definition: var_expr_traits.hpp:28
type_traits.hpp
shape_traits.hpp
ppl::util::var_expr_is_base_of_v
constexpr bool var_expr_is_base_of_v
Definition: var_expr_traits.hpp:23
ppl::util::BaseCRTP
Definition: type_traits.hpp:65
ppl::util::var_expr_traits< VarType >::value_t
typename VarExprType::value_t value_t
Definition: var_expr_traits.hpp:29
ppl::util::is_var_expr_v
constexpr bool is_var_expr_v
Definition: var_expr_traits.hpp:36
ppl::util::var_expr_traits::has_param
static constexpr bool has_param
Definition: var_expr_traits.hpp:30
ppl
Definition: bounded.hpp:11
ppl::util::VarExprBase
Definition: var_expr_traits.hpp:20
concept.hpp