def test_map_approx(self): subjs = 40 data, params_true = kabuki.generate.gen_rand_data(gen_func_df, {'A':{'loc':0, 'scale':1}, 'B': {'loc':2, 'scale':1}}, subj_noise={'loc':.1}, size=1000, subjs=subjs) model = HNodeSimple(data, depends_on={'mu': 'condition'}) model.approximate_map() model.approximate_map(individual_subjs=False) counter = 0 for condition, subj_params in params_true.iteritems(): nodes = model.nodes_db[model.nodes_db['condition'] == condition] for idx, params in enumerate(subj_params): nodes_subj = nodes[nodes['subj_idx'] == idx] for param_name, value in params.iteritems(): if param_name != 'loc': continue node = nodes_subj[nodes_subj.knode_name == 'mu_subj'] assert len(node) == 1, "Only one node should have been left after slicing." abs_error = np.abs(node.map[0] - value) self.assertTrue(abs_error < .2) counter += 1 # looping for each condition (i.e. twice) self.assertEqual(counter, subjs*2)