autoppl  v0.8
A C++ template library for probabilistic programming
activate.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <utility>
6 
7 namespace ppl {
8 namespace expr {
9 
22 template <class ExprType>
23 inline auto activate(ExprType&& expr)
24 {
25  using expr_t = std::decay_t<ExprType>;
26  if constexpr (util::is_model_expr_v<expr_t>) {
27 
28  util::OffsetPack cont_param_offset;
29  util::OffsetPack disc_param_offset;
30  auto activate__ = [&](auto& eq_node) {
31  auto& var = eq_node.get_variable();
32  using var_t = std::decay_t<decltype(var)>;
33  if constexpr (util::is_param_v<var_t>) {
34  if constexpr (util::var_traits<var_t>::is_cont_v) {
35  var.activate(cont_param_offset);
36  } else if constexpr (util::var_traits<var_t>::is_disc_v) {
37  var.activate(disc_param_offset);
38  }
39  }
40  };
41  expr.traverse(activate__);
42  return std::make_pair(cont_param_offset, disc_param_offset);
43 
44  } else if constexpr (util::is_var_expr_v<expr_t>) {
45 
46  util::OffsetPack cont_param_offset;
47  util::OffsetPack disc_param_offset;
48  auto activate__ = [&](auto& eq_node) {
49  auto& var = eq_node.get_variable();
50  using var_t = std::decay_t<decltype(var)>;
51  static_assert(util::is_tparam_v<var_t>);
52  if constexpr (util::var_traits<var_t>::is_cont_v) {
53  var.activate(cont_param_offset);
54  } else if constexpr (util::var_traits<var_t>::is_disc_v) {
55  var.activate(disc_param_offset);
56  }
57  };
58  expr.traverse(activate__);
59 
60  return std::make_pair(cont_param_offset, disc_param_offset);
61 
62  } else {
63 
64  static_assert(util::is_model_expr_v<expr_t>,
65  "Expression must be a model or variable expression");
66  }
67 }
68 
69 } // namespace expr
70 } // namespace ppl
var_traits.hpp
model_expr_traits.hpp
ppl::util::var_traits
Definition: var_traits.hpp:40
offset_pack.hpp
ppl::util::var_t
typename details::var< V, T >::type var_t
Definition: shape_traits.hpp:132
ppl
Definition: bounded.hpp:11
ppl::util::OffsetPack
Definition: offset_pack.hpp:9
ppl::expr::activate
auto activate(ExprType &&expr)
Definition: activate.hpp:23