1#ifndef FREE_TENSOR_RAND_VAR_H
2#define FREE_TENSOR_RAND_VAR_H
32 std::vector<int> obs_;
36 const Ref<std::vector<int>> totCnt,
37 const std::vector<int> &initObs)
38 : name_(
name),
cond_(cond), totCnt_(totCnt), obs_(initObs) {}
40 void observe(
int value,
int cnt = 1) { obs_.at(value) += cnt; }
42 std::vector<double>
prob()
const {
43 std::vector<double> ret;
44 ret.reserve(obs_.size());
45 for (
auto &&[p, q] : views::zip(obs_, *totCnt_)) {
46 ret.emplace_back((
double)p / q);
60 const std::string &
name()
const {
return name_; }
62 friend std::ostream &
operator<<(std::ostream &os,
74 std::vector<Ref<DiscreteRandVar>>
vars_;
75 std::vector<Ref<DiscreteRandVar>>
83 const Ref<std::vector<int>> &totCnt,
int value,
84 const std::string &message =
"")
87 for (
auto &&var :
vars_) {
94 if (
auto cmp =
lhs.vars_ <=>
rhs.vars_; cmp != 0) {
97 return lhs.value_ <=>
rhs.value_;
101 return lhs.vars_ ==
rhs.vars_ &&
lhs.value_ ==
rhs.value_;
104 friend std::ostream &
operator<<(std::ostream &os,
Definition: rand_var.h:28
friend std::ostream & operator<<(std::ostream &os, const DiscreteRandVar &var)
Definition: rand_var.cc:6
DiscreteRandVar(const std::string &name, const Ref< RandCondInterface > &cond, const Ref< std::vector< int > > totCnt, const std::vector< int > &initObs)
Definition: rand_var.h:35
void observe(int value, int cnt=1)
Definition: rand_var.h:40
Ref< DiscreteRandVar > clone() const
Definition: rand_var.h:54
std::vector< double > prob() const
Definition: rand_var.h:42
const std::string & name() const
Definition: rand_var.h:60
static Ref make()
Definition: ref.h:105
Expr cond_
Definition: invert_stmts.cc:58
Definition: allocator.h:9
auto && lhs
Definition: const_fold.cc:70
auto auto && rhs
Definition: const_fold.cc:70
Definition: rand_var.h:73
std::string message_
Definition: rand_var.h:80
int value_
Definition: rand_var.h:79
friend std::ostream & operator<<(std::ostream &os, const DiscreteObservation &obs)
Definition: rand_var.cc:15
friend bool operator==(const DiscreteObservation &lhs, const DiscreteObservation &rhs)
Definition: rand_var.h:99
DiscreteObservation(const std::vector< Ref< DiscreteRandVar > > &vars, const Ref< std::vector< int > > &totCnt, int value, const std::string &message="")
Definition: rand_var.h:82
std::vector< Ref< DiscreteRandVar > > vars_
Definition: rand_var.h:74
Ref< std::vector< int > > totCnt_
Definition: rand_var.h:78
friend auto operator<=>(const DiscreteObservation &lhs, const DiscreteObservation &rhs)
Definition: rand_var.h:92
std::vector< Ref< DiscreteRandVar > > varsSnapshot_
Definition: rand_var.h:76