Ejemplo n.º 1
0
    def at(self, var_and_param_names_and_values={}, **kw_var_and_param_names_and_values):
        var_and_param_names_and_values =\
            combine_dict_and_kwargs(var_and_param_names_and_values, kw_var_and_param_names_and_values)

        cond = deepcopy(self.Cond)   # just to be careful
        scope = deepcopy(self.Scope)   # just to be careful
        param = self.Param.copy()
        syms_and_values = {}
        for var, value in list(var_and_param_names_and_values.items()):
            if var in self.Vars:
                if var in cond:
                    cond[var] = value
                if var in scope:
                    scope[var] = value
                syms_and_values[self.Vars[var]] = value
            if var in param:
                try:
                    syms_and_values[param[var]] = value
                except:
                    pass
                param[var] = value

        cond = sympy_xreplace(cond, syms_and_values)
        scope = sympy_xreplace(scope, syms_and_values)

        self.CompyledFunc = None   # remove compiled version because many things can be changing

        if self.is_discrete_finite():
            neg_log_p = {}
            s = set(var_and_param_names_and_values)
            s_items = set(var_and_param_names_and_values.items())
            for var_values___frozen_dict, mapping_value in list(param['NegLogP'].items()):
                other_items___dict = dict(set(var_values___frozen_dict.items()) - s_items)
                if not (set(other_items___dict) & s):
                    neg_log_p[frozendict(set(var_values___frozen_dict.items()) - set(cond.items()))] =\
                        sympy_xreplace(mapping_value, syms_and_values)
            return DiscreteFinitePMF(var_names_and_syms=self.Vars.copy(), p_or_neg_log_p=neg_log_p, p=False,
                                     cond=cond, scope=scope)
        else:
            pdf = self.copy()
            pdf.Cond = cond
            pdf.Scope = scope
            pdf.Param = sympy_xreplace(param, syms_and_values)
            #print(pdf.Mapping)
            #print(syms_and_values)
            #print(type(syms_and_values.keys().pop()))
            pdf.Mapping = sympy_xreplace(pdf.Mapping, syms_and_values)
            return pdf
Ejemplo n.º 2
0
    def at(self, var_and_param_names_and_values={}, **kw_var_and_param_names_and_values):
        var_and_param_names_and_values =\
            combine_dict_and_kwargs(var_and_param_names_and_values, kw_var_and_param_names_and_values)

        cond = deepcopy(self.Cond)   # just to be careful
        scope = deepcopy(self.Scope)   # just to be careful
        param = self.Param.copy()
        syms_and_values = {}
        for var, value in var_and_param_names_and_values.items():
            if var in self.Vars:
                if var in cond:
                    cond[var] = value
                if var in scope:
                    scope[var] = value
                syms_and_values[self.Vars[var]] = value
            if var in param:
                try:
                    syms_and_values[param[var]] = value
                except:
                    pass
                param[var] = value

        cond = sympy_xreplace(cond, syms_and_values)
        scope = sympy_xreplace(scope, syms_and_values)

        self.CompyledFunc = None   # remove compiled version because many things can be changing

        if self.is_discrete_finite():
            neg_log_p = {}
            s = set(var_and_param_names_and_values)
            s_items = set(var_and_param_names_and_values.items())
            for var_values___frozen_dict, mapping_value in param['NegLogP'].items():
                other_items___dict = dict(set(var_values___frozen_dict.items()) - s_items)
                if not (set(other_items___dict) & s):
                    neg_log_p[frozendict(set(var_values___frozen_dict.items()) - set(cond.items()))] =\
                        sympy_xreplace(mapping_value, syms_and_values)
            return DiscreteFinitePMF(var_names_and_syms=self.Vars.copy(), p_or_neg_log_p=neg_log_p, p=False,
                                     cond=cond, scope=scope)
        else:
            pdf = self.copy()
            pdf.Cond = cond
            pdf.Scope = scope
            pdf.Param = sympy_xreplace(param, syms_and_values)
            #print(pdf.Mapping)
            #print(syms_and_values)
            #print(type(syms_and_values.keys().pop()))
            pdf.Mapping = sympy_xreplace(pdf.Mapping, syms_and_values)
            return pdf
Ejemplo n.º 3
0
def gauss_neg_log_dens(pdf, var_and_param_names_and_values={}, **kw_var_and_param_names_and_values):
    var_and_param_names_and_values = combine_dict_and_kwargs(var_and_param_names_and_values,
                                                             kw_var_and_param_names_and_values)
    if not pdf.PreProcessed:
        pdf.preprocess()
    if pdf.LogDetCov is None:
        neg_log_dens = (pdf.NumDims * log(2 * pi) + log(det(pdf.Cov)) +
                        det(pdf.DemeanedVarVector * pdf.Cov.inverse() * pdf.DemeanedVarVector.T)) / 2
    else:
        neg_log_dens = (pdf.NumDims * log(2 * pi) + pdf.LogDetCov +
                        det(pdf.DemeanedVarVector * Matrix(pdf.InvCov) * pdf.DemeanedVarVector.T)) / 2
    return sympy_xreplace(neg_log_dens, var_and_param_names_and_values)
Ejemplo n.º 4
0
def gauss_neg_log_dens(pdf, var_and_param_names_and_values={}, **kw_var_and_param_names_and_values):
    var_and_param_names_and_values = combine_dict_and_kwargs(var_and_param_names_and_values,
                                                             kw_var_and_param_names_and_values)
    if not pdf.PreProcessed:
        pdf.preprocess()
    if pdf.LogDetCov is None:
        neg_log_dens = (pdf.NumDims * log(2 * pi) + log(det(pdf.Cov)) +
                        det(pdf.DemeanedVarVector * pdf.Cov.inverse() * pdf.DemeanedVarVector.T)) / 2
    else:
        neg_log_dens = (pdf.NumDims * log(2 * pi) + pdf.LogDetCov +
                        det(pdf.DemeanedVarVector * Matrix(pdf.InvCov) * pdf.DemeanedVarVector.T)) / 2
    return sympy_xreplace(neg_log_dens, var_and_param_names_and_values)
Ejemplo n.º 5
0
def discrete_finite_neg_log_mass(pmf, var_names_and_values={}):
    v = var_names_and_values.copy()
    for var, value in list(var_names_and_values.items()):
        if (value is None) or is_non_atomic_sympy_expr(value):
            del v[var]
    s0 = set(v.items())
    d = MathDict(())
    for var_names_and_values___frozen_dict, func_value in list(pmf.Param['NegLogP'].items()):
        spare_var_values = dict(s0 - set(var_names_and_values___frozen_dict.items()))
        s = set(spare_var_values.keys())
        if not(s) or (s and not(s & set(var_names_and_values___frozen_dict))):
            d[var_names_and_values___frozen_dict] = sympy_xreplace(func_value, var_names_and_values)
    return d
Ejemplo n.º 6
0
def discrete_finite_neg_log_mass(pmf, var_names_and_values={}):
    v = var_names_and_values.copy()
    for var, value in var_names_and_values.items():
        if (value is None) or is_non_atomic_sympy_expr(value):
            del v[var]
    s0 = set(v.items())
    d = MathDict(())
    for var_names_and_values___frozen_dict, func_value in pmf.Param['NegLogP'].items():
        spare_var_values = dict(s0 - set(var_names_and_values___frozen_dict.items()))
        s = set(spare_var_values.keys())
        if not(s) or (s and not(s & set(var_names_and_values___frozen_dict))):
            d[var_names_and_values___frozen_dict] = sympy_xreplace(func_value, var_names_and_values)
    return d
Ejemplo n.º 7
0
 def at(self, vars_and_values___dict={}, **kw_vars_and_values___dict):
     vars_and_values___dict = combine_dict_and_kwargs(vars_and_values___dict, kw_vars_and_values___dict)
     for var in (set(self.Vars) & set(vars_and_values___dict)):
         vars_and_values___dict[self.Vars[var]] = vars_and_values___dict[var]
     conds = self.Cond.copy()
     scope = self.Scope.copy()
     for var, value in vars_and_values___dict.items():
         if var in conds:
             conds.update({var: value})
         if var in scope:
             scope.update({var: value})
     conds = sympy_xreplace(conds, vars_and_values___dict)
     scope = sympy_xreplace(scope, vars_and_values___dict)
     if hasattr(self.Mapping, 'keys'):
         mapping = {}
         for vars_and_values___frozen_dict, func_value in self.Mapping.items():
             other_items___dict = dict(set(vars_and_values___frozen_dict.items()) -
                                       set(vars_and_values___dict.items()))
             if not (set(other_items___dict) and set(vars_and_values___dict)):
                 mapping[frozendict(set(vars_and_values___frozen_dict.items()) - set(conds.items()))] =\
                     sympy_xreplace(func_value, vars_and_values___dict)
     else:
         mapping = sympy_xreplace(self.Mapping, vars_and_values___dict)
     return MathFunc(self.Vars.copy(), mapping, cond=conds, scope=scope)