Go to the documentation of this file.
33 {continuousFrontals.begin(), continuousFrontals.end()},
34 KeyVector{continuousParents.begin(), continuousParents.end()}),
36 {discreteFrontals.begin(), discreteFrontals.end()},
37 {discreteParents.begin(), discreteParents.end()}),
38 continuousFrontals.size() + discreteFrontals.size()) {}
42 const std::shared_ptr<GaussianConditional> &continuousConditional)
44 continuousConditional->nrFrontals()) {
45 inner_ = continuousConditional;
50 const std::shared_ptr<DiscreteConditional> &discreteConditional)
52 discreteConditional->nrFrontals()) {
53 inner_ = discreteConditional;
58 const std::shared_ptr<GaussianMixture> &gaussianMixture)
60 gaussianMixture->
keys().begin() +
61 gaussianMixture->nrContinuous()),
62 gaussianMixture->discreteKeys()),
78 if (
isHybrid()) std::cout <<
"Hybrid ";
83 const size_t N =
keys().size();
96 std::cout <<
"(" <<
formatter(dk.first) <<
", " << dk.second <<
")";
106 if (
e ==
nullptr)
return false;
108 auto other =
e->asMixture();
112 auto other =
e->asGaussian();
116 auto other =
e->asDiscrete();
127 return gc->error(
values.continuous());
133 return dc->error(
values.discrete());
135 throw std::runtime_error(
136 "HybridConditional::error: conditional type not handled");
142 return gc->logProbability(
values.continuous());
145 return gm->logProbability(
values);
148 return dc->logProbability(
values.discrete());
150 throw std::runtime_error(
151 "HybridConditional::logProbability: conditional type not handled");
157 return gc->logNormalizationConstant();
160 return gm->logNormalizationConstant();
163 return dc->logNormalizationConstant();
165 throw std::runtime_error(
166 "HybridConditional::logProbability: conditional type not handled");
void print(const std::string &s="Conditional", const KeyFormatter &formatter=DefaultKeyFormatter) const
Array< double, 1, 3 > e(1./3., 0.5, 2.)
HybridConditional()=default
Default constructor needed for serialization.
bool isDiscrete() const
True if this is a factor of discrete variables only.
const KeyFormatter & formatter
DiscreteKeys is a set of keys that can be assembled using the & operator.
const EIGEN_DEVICE_FUNC ExpReturnType exp() const
GaussianMixture::shared_ptr asMixture() const
Return HybridConditional as a GaussianMixture.
bool isHybrid() const
True is this is a Discrete-Continuous factor.
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
double evaluate(const HybridValues &values) const override
Return the probability (or density) of the underlying conditional.
void print(const std::string &s="Hybrid Conditional: ", const KeyFormatter &formatter=DefaultKeyFormatter) const override
GTSAM-style print.
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
KeyVector CollectKeys(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)
double error(const HybridValues &values) const override
Return the error of the underlying conditional.
DiscreteKeys discreteKeys_
bool isContinuous() const
True if this is a factor of continuous variables only.
std::shared_ptr< Factor > inner_
Type-erased pointer to the inner type.
const KeyVector & keys() const
Access the factor's involved variable keys.
double logNormalizationConstant() const override
DiscreteConditional::shared_ptr asDiscrete() const
Return conditional as a DiscreteConditional.
GaussianConditional::shared_ptr asGaussian() const
Return HybridConditional as a GaussianConditional.
bool equals(const HybridFactor &other, double tol=1e-9) const override
GTSAM-style equals.
double logProbability(const HybridValues &values) const override
Return the log-probability (or density) of the underlying conditional.
DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1, const DiscreteKeys &key2)
gtsam
Author(s):
autogenerated on Tue Jun 25 2024 03:01:00