Esempio n. 1
0
def product_of_OnePDF_and_GaussPDF(one_pdf, gauss_pdf):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(gauss_pdf.Cond, one_pdf.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(gauss_pdf.Scope, one_pdf.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(gauss_pdf.Vars, one_pdf.Vars)
    return GaussPDF(var_names_and_syms=var_names_and_symbols, param=gauss_pdf.Param.copy(), cond=cond, scope=scope)
Esempio n. 2
0
def product_of_OnePDF_and_GaussPDF(one_pdf, gauss_pdf):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(gauss_pdf.Cond, one_pdf.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(gauss_pdf.Scope, one_pdf.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(gauss_pdf.Vars, one_pdf.Vars)
    return GaussPDF(var_names_and_syms=var_names_and_symbols, param=gauss_pdf.Param.copy(), cond=cond, scope=scope)
Esempio n. 3
0
def product_of_2_GaussPDFs(pdf0, pdf1):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(pdf0.Cond, pdf1.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(pdf0.Scope, pdf1.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(pdf0.Vars, pdf1.Vars)
    param = {}
    return GaussPDF(var_names_and_syms=var_names_and_symbols, param=param, cond=cond, scope=scope)
Esempio n. 4
0
def product_of_2_GaussPDFs(pdf0, pdf1):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(pdf0.Cond, pdf1.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(pdf0.Scope, pdf1.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(pdf0.Vars, pdf1.Vars)
    param = {}
    return GaussPDF(var_names_and_syms=var_names_and_symbols, param=param, cond=cond, scope=scope)
Esempio n. 5
0
def product_of_DiscreteFinitePMF_and_continuousPDF(pmf, pdf):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(pmf.Cond, pdf.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(pmf.Scope, pdf.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(pmf.Vars, pdf.Vars)
    neg_log_p = {}
    for var_names_and_values___frozen_dict, func_value in list(pmf.Param['NegLogP'].items()):
        neg_log_p[var_names_and_values___frozen_dict] = func_value - log(pdf.Mapping)
    return DiscreteFinitePMF(var_names_and_syms=var_names_and_symbols, p_or_neg_log_p=neg_log_p, p=False,
                             cond=cond, scope=scope)
Esempio n. 6
0
def product_of_DiscreteFinitePMF_and_continuousPDF(pmf, pdf):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(pmf.Cond, pdf.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(pmf.Scope, pdf.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(pmf.Vars, pdf.Vars)
    neg_log_p = {}
    for var_names_and_values___frozen_dict, func_value in pmf.Param['NegLogP'].items():
        neg_log_p[var_names_and_values___frozen_dict] = func_value - log(pdf.Mapping)
    return DiscreteFinitePMF(var_names_and_syms=var_names_and_symbols, p_or_neg_log_p=neg_log_p, p=False,
                             cond=cond, scope=scope)
Esempio n. 7
0
 def op(self, op=mul, other=None, r=False, **kwargs):
     if isinstance(other, MathFunc):
         conds = merge_dicts_ignoring_dup_keys_and_none_values(self.Cond, other.Cond)
         scope = merge_dicts_ignoring_dup_keys_and_none_values(self.Scope, other.Scope)
         for var in (set(conds) & set(scope)):
             del conds[var]
         var_names_and_symbols = merge_dicts_ignoring_dup_keys_and_none_values(self.Vars, other.Vars)
         other_mapping = other.Mapping
     else:
         var_names_and_symbols = self.Vars.copy()
         conds = self.Cond.copy()
         scope = self.Scope.copy()
         other_mapping = other
     if isinstance(self.Mapping, MathDict):
         mapping = self.Mapping.op(op, other_mapping, r=r, **kwargs)
     elif isinstance(other_mapping, MathDict):
         mapping = other_mapping.op(op, self.Mapping, r=not r, **kwargs)
     else:
         mapping = op(self.Mapping, other_mapping, **kwargs)
     return MathFunc(var_names_and_symbols, mapping, conds, scope)
Esempio n. 8
0
def product_of_2_DiscreteFinitePMFs(pmf0, pmf1):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(pmf0.Cond, pmf1.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(pmf0.Scope, pmf1.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_syms = merge_dicts_ignoring_dup_keys_and_none_values(pmf0.Vars, pmf1.Vars)
    neg_log_p0 = pmf0.Param['NegLogP'].copy()
    neg_log_p1 = pmf1.Param['NegLogP'].copy()
    neg_log_p = {}
    for item_0, item_1 in product(list(neg_log_p0.items()), list(neg_log_p1.items())):
        var_names_and_values_0___frozen_dict, func_value_0 = item_0
        var_names_and_values_1___frozen_dict, func_value_1 = item_1
        same_vars_same_values = True
        for var in (set(var_names_and_values_0___frozen_dict) & set(var_names_and_values_1___frozen_dict)):
            if not (var_names_and_values_0___frozen_dict[var] == var_names_and_values_1___frozen_dict[var]):
                same_vars_same_values = False
                break
        if same_vars_same_values:
            neg_log_p[frozendict(set(var_names_and_values_0___frozen_dict.items()) |
                                 set(var_names_and_values_1___frozen_dict.items()))] = func_value_0 + func_value_1
    return DiscreteFinitePMF(var_names_and_syms=var_names_and_syms, p_or_neg_log_p=neg_log_p, p=False,
                             cond=cond, scope=scope)
Esempio n. 9
0
def product_of_2_DiscreteFinitePMFs(pmf0, pmf1):
    cond = merge_dicts_ignoring_dup_keys_and_none_values(pmf0.Cond, pmf1.Cond)
    scope = merge_dicts_ignoring_dup_keys_and_none_values(pmf0.Scope, pmf1.Scope)
    for var in (set(cond) & set(scope)):
        del cond[var]
    var_names_and_syms = merge_dicts_ignoring_dup_keys_and_none_values(pmf0.Vars, pmf1.Vars)
    neg_log_p0 = pmf0.Param['NegLogP'].copy()
    neg_log_p1 = pmf1.Param['NegLogP'].copy()
    neg_log_p = {}
    for item_0, item_1 in product(neg_log_p0.items(), neg_log_p1.items()):
        var_names_and_values_0___frozen_dict, func_value_0 = item_0
        var_names_and_values_1___frozen_dict, func_value_1 = item_1
        same_vars_same_values = True
        for var in (set(var_names_and_values_0___frozen_dict) & set(var_names_and_values_1___frozen_dict)):
            if not (var_names_and_values_0___frozen_dict[var] == var_names_and_values_1___frozen_dict[var]):
                same_vars_same_values = False
                break
        if same_vars_same_values:
            neg_log_p[frozendict(set(var_names_and_values_0___frozen_dict.items()) |
                                 set(var_names_and_values_1___frozen_dict.items()))] = func_value_0 + func_value_1
    return DiscreteFinitePMF(var_names_and_syms=var_names_and_syms, p_or_neg_log_p=neg_log_p, p=False,
                             cond=cond, scope=scope)
Esempio n. 10
0
 def compile(self):
     self.CompyledFunc = CompyledFunc(merge_dicts_ignoring_dup_keys_and_none_values(self.Vars, self.Param),
                                      self.Mapping)