80 auto Ip =
p_.completeInstantiation();
81 auto Iq =
q_.completeInstantiation();
86 for (
Idx ite = 0; ite < Ip.nbrDim(); ++ite) {
87 map.
insert(&Ip.variable(ite), &
q_.variableFromName(Ip.variable(ite).name()));
89 GUM_SCALAR pp, pq, pmid, lpp, lpq, lpmid;
90 for (Ip.setFirst(); !Ip.end(); ++Ip) {
91 Iq.setValsFrom(map, Ip);
92 pp =
p_.jointProbability(Ip);
93 pq =
q_.jointProbability(Iq);
94 pmid = (pp + pq) / 2.0;
100 hellinger_ += std::pow(std::sqrt(pp) - std::sqrt(pq), 2);
103 if (pp != (GUM_SCALAR)0.0) {
104 if (pq != (GUM_SCALAR)0.0) {
105 klPQ_ -= pp * (lpq - lpp);
111 if (pq != (GUM_SCALAR)0.0) {
112 if (pp != (GUM_SCALAR)0.0) {
113 klQP_ -= pq * (lpp - lpq);
118 if (pmid != (GUM_SCALAR)0.0) {
119 jsd_ += pp * lpp + pq * lpq