def _calc_incoming_message_product(self, ii: int, without_i: bool, i: int) -> Prob:
    'Calculate the product of factor \x07 I and the incoming messages.\n\n        If without_i == True, the message coming from variable i is omitted\n        from the product.\n\n        This function is used by calc_new_message and calc_belief_f.\n        '
    f_prod = self.factors[ii].clone()
    if self.logdomain:
        f_prod.p.p = np.log(f_prod.p.p)
    for j in self.nbF[ii]:
        if (without_i and (j.node == i)):
            continue
        size = self._var_size(j.node)
        default_val = (0.0 if self.logdomain else 1.0)
        prod_j = Prob.same_value(size, default_val)
        for J in self.nbV[j.node]:
            if (J.node != ii):
                if self.logdomain:
                    prod_j += self._edges[j.node][J.iter].message
                else:
                    prod_j *= self._edges[j.node][J.iter].message
        if self.logdomain:
            f_prod += LDFactor(self.model, [j.node], prod_j)
        else:
            f_prod *= LDFactor(self.model, [j.node], prod_j)
    return f_prod.p
Calculate the product of factor  I and the incoming messages.

If without_i == True, the message coming from variable i is omitted
from the product.

This function is used by calc_new_message and calc_belief_f.
def _calc_incoming_message_product(self, ii: int, without_i: bool, i: int) -> Prob:
    'Calculate the product of factor \x07 I and the incoming messages.\n\n        If without_i == True, the message coming from variable i is omitted\n        from the product.\n\n        This function is used by calc_new_message and calc_belief_f.\n        '
    f_prod = self.factors[ii].clone()
    if self.logdomain:
        f_prod.p.p = np.log(f_prod.p.p)
    for j in self.nbF[ii]:
        if (without_i and (j.node == i)):
            continue
        size = self._var_size(j.node)
        default_val = (0.0 if self.logdomain else 1.0)
        prod_j = Prob.same_value(size, default_val)
        for J in self.nbV[j.node]:
            if (J.node != ii):
                if self.logdomain:
                    prod_j += self._edges[j.node][J.iter].message
                else:
                    prod_j *= self._edges[j.node][J.iter].message
        if self.logdomain:
            f_prod += LDFactor(self.model, [j.node], prod_j)
        else:
            f_prod *= LDFactor(self.model, [j.node], prod_j)
    return f_prod.p