#include <config.h>
#include <sampler/SliceFactory.h>
#include <sampler/RealSliceSampler.h>
#include <sampler/DiscreteSliceSampler.h>
#include <stdexcept>
using std::logic_error;
bool SliceFactory::canSample(StochasticNode * snode, Graph const &graph) const
{
return RealSliceSampler::canSample(snode, graph) ||
DiscreteSliceSampler::canSample(snode, graph);
}
Sampler *SliceFactory::makeGibbsSampler(StochasticNode *snode,
Graph const &graph) const
{
if (RealSliceSampler::canSample(snode, graph)) {
return new RealSliceSampler(snode, graph);
}
else if (DiscreteSliceSampler::canSample(snode, graph)) {
return new DiscreteSliceSampler(snode, graph);
}
else {
throw logic_error("Unable to construct slice sampler");
}
}