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
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
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)
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
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
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)