18 extern std::atomic<bool>
CTRL_C;
32 template<
typename _datum_t,
typename _data_t=std::vector<_datum_t>>
53 virtual size_t hash()
const=0;
54 virtual std::string
string(std::string prefix=
"")
const = 0;
86 if constexpr (is_iterable_v<data_t>) {
89 for(
const auto& d : data) {
96 if(likelihood == -
infinity or std::isnan(likelihood))
break;
100 assert((sll <= 0 or breakout==-
infinity) &&
"*** Cannot use breakout if likelihoods are positive");
101 if(likelihood < breakout) {
114 throw NotImplementedError(
"*** If you use a non-iterable data_t, then you must define compute_likelihood on your own.");
154 auto [b,t] = breakoutpair;
170 return prior + likelihood/t;
184 return fp_ordering(posterior, other.
posterior);
186 else if(prior != other.
prior) {
187 return fp_ordering(prior,other.
prior);
193 return this->
hash() <=> other.
hash();
197 virtual void show(std::string prefix=
"") {
203 print(prefix, this->posterior, this->prior, this->likelihood,
QQ(this->
string()));
206 print(this->posterior, this->prior, this->likelihood,
QQ(this->
string()));
213 template<
typename _datum_t,
typename _data_t>
214 std::ostream& operator<<(std::ostream& o, Bayesable<_datum_t,_data_t>& x) {
221 template<
typename HYP>
224 template<
typename HYP>
225 std::function
get_prior = [](
const HYP& h) {
return h.prior; };
227 template<
typename HYP>
virtual size_t hash() const =0
std::string QQ(const std::string &x)
Definition: Strings.h:190
virtual double compute_tempered_likelihood(const data_t &data, int ladder_rank, const double breakout=-infinity)
Definition: Bayesable.h:119
double likelihood
Definition: Bayesable.h:43
virtual double compute_posterior(const data_t &data, const std::pair< double, double > breakoutpair=std::make_pair(-infinity, 1.0))
Compute the posterior, by calling prior and likelihood. This includes only a little bit of fanciness...
Definition: Bayesable.h:140
virtual double compute_single_likelihood(const datum_t &datum)
Compute the likelihood of a single data point.
Definition: Bayesable.h:61
A datum is the default data point for likelihoods, consisting of an input and output type...
virtual double at_temperature(double t) const
Definition: Bayesable.h:162
Definition: FleetStatistics.h:5
virtual double compute_prior()=0
double prior
Definition: Bayesable.h:42
Mostly for error checking.
virtual void clear_bayes()
Definition: Bayesable.h:65
double posterior
Definition: Bayesable.h:44
uintmax_t born
Definition: Bayesable.h:47
void print(FIRST f, ARGS... args)
Lock output_lock and print to std:cout.
Definition: IO.h:53
constexpr double infinity
Definition: Numerics.h:20
std::atomic< uintmax_t > posterior_calls(0)
virtual void show(std::string prefix="")
Definition: Bayesable.h:197
Definition: Bayesable.h:33
bool LIKELIHOOD_BREAKOUT
Definition: FleetArgs.h:61
std::function get_likelihood
Definition: Bayesable.h:228
size_t born_chain_idx
Definition: Bayesable.h:48
_datum_t datum_t
Definition: Bayesable.h:38
virtual std::string string(std::string prefix="") const =0
std::atomic< uintmax_t > hypothesis_births(0)
constexpr double NaN
Definition: Numerics.h:21
std::function get_prior
Definition: Bayesable.h:225
_data_t data_t
Definition: Bayesable.h:39
std::atomic< bool > CTRL_C
virtual double compute_likelihood(const data_t &data, const double breakout=-infinity)
Compute the likelihood of a collection of data, by calling compute_single_likelihood on each...
Definition: Bayesable.h:83
std::function get_posterior
Definition: Bayesable.h:222
Bayesable()
Definition: Bayesable.h:50