51#ifndef DOXYGEN_SHOULD_SKIP_THIS
73 const std::vector< std::pair< std::size_t, std::size_t > >& ranges,
74 const Bijection< NodeId, std::size_t >& nodeId2columns) :
75 prior_(prior.clone()), counter_(parser, ranges, nodeId2columns) {
76 GUM_CONSTRUCTOR(Score);
80 Score::Score(
const DBRowGeneratorParser& parser,
82 const Bijection< NodeId, std::size_t >& nodeId2columns) :
83 prior_(prior.clone()), counter_(parser, nodeId2columns) {
84 GUM_CONSTRUCTOR(Score);
88 Score::Score(
const Score& from) :
89 prior_(from.prior_->clone()), counter_(from.counter_), cache_(from.cache_),
90 use_cache_(from.use_cache_) {
95 Score::Score(Score&& from) :
96 prior_(from.prior_), counter_(
std::move(from.counter_)), cache_(
std::move(from.cache_)),
97 use_cache_(from.use_cache_) {
98 from.prior_ =
nullptr;
104 if (prior_ !=
nullptr)
delete prior_;
105 GUM_DESTRUCTOR(Score);
109 Score& Score::operator=(
const Score& from) {
111 Prior* new_prior = from.prior_->clone();
112 RecordCounter new_counter = from.counter_;
113 ScoringCache new_cache = from.cache_;
115 if (prior_ !=
nullptr)
delete prior_;
118 counter_ = std::move(new_counter);
119 cache_ = std::move(new_cache);
121 use_cache_ = from.use_cache_;
127 Score& Score::operator=(Score&& from) {
129 std::swap(prior_, from.prior_);
131 counter_ = std::move(from.counter_);
132 cache_ = std::move(from.cache_);
133 use_cache_ = from.use_cache_;
145 void Score::setRanges(
const std::vector< std::pair< std::size_t, std::size_t > >& new_ranges) {
146 std::vector< std::pair< std::size_t, std::size_t > > old_ranges = ranges();
147 counter_.setRanges(new_ranges);
148 if (old_ranges != ranges()) clear();
152 void Score::clearRanges() {
153 std::vector< std::pair< std::size_t, std::size_t > > old_ranges = ranges();
154 counter_.clearRanges();
155 if (old_ranges != ranges()) clear();
163 std::vector< double > Score::marginalize_(
const NodeId X_id,
164 const std::vector< double >& N_xyz)
const {
167 const auto& nodeId2cols = this->counter_.nodeId2Columns();
168 const auto& database = this->counter_.database();
169 const std::size_t X_size
170 = database.domainSize(nodeId2cols.empty() ? X_id : nodeId2cols.second(X_id));
173 std::size_t out_size = N_xyz.size() / X_size;
176 std::vector< double > res(out_size, 0.0);
179 std::size_t xyz = std::size_t(0);
180 for (std::size_t z = std::size_t(0); z < out_size; ++z) {
181 for (std::size_t x = std::size_t(0); x < X_size; ++x, ++xyz) {
182 res[z] += N_xyz[xyz];
the class used to read a row in the database and to transform it into a set of DBRow instances that c...
the base class for all a priori
Score(const DBRowGeneratorParser &parser, const Prior &external_prior, const std::vector< std::pair< std::size_t, std::size_t > > &ranges, const Bijection< NodeId, std::size_t > &nodeId2columns=Bijection< NodeId, std::size_t >())
default constructor
include the inlined functions if necessary
gum is the global namespace for all aGrUM entities
the base class for all the scores used for learning (BIC, BDeu, etc)
the base class for all the scores used for learning (BIC, BDeu, etc)