def __init__(self, model):
        self.model = model.copy()
        init_np_func = np.ones
        self.factors_adj_to_ = {
            var: self.model.get_adj_factors(var)
            for var in self.model.variables
        }

        self.messages = dict()
        for fac in model.factors:
            for var in fac.variables:
                self.messages[(fac, var)] = Factor.initialize_with_(
                    default_message_name(), [var], init_np_func,
                    model.get_cardinality_for_(var))
                self.messages[(fac, var)].normalize()

        for fac in model.factors:
            for var in fac.variables:
                self.messages[(var, fac)] = Factor.initialize_with_(
                    default_message_name(), [var], init_np_func,
                    model.get_cardinality_for_(var))
                self.messages[(var, fac)].normalize()
    def __init__(self, model, **kwargs):
        self.model = model.copy()

        mean_field_init_method = kwargs.get('mean_field_init_method')
        if mean_field_init_method == 'random':
            init_np_func = np.ones
        elif mean_field_init_method == 'uniform':
            init_np_func = np.random.random
        else:
            init_np_func = np.ones

        self.mean_fields = {}
        for var in self.model.variables:
            self.mean_fields[var] = Factor.initialize_with_(default_message_name(),
                                                           [var], init_np_func,
                                                           model.get_cardinality_for_(var))
            self.mean_fields[var].normalize()