def __init__(self, maker, params, recalculate):



        the_fold = maker.get_param(params, 'f')
        hp = maker.get_param(params, 'hp')
        num_states = maker.get_param(params, 'ns')
        max_iter = maker.get_param(params, 'mx')
        which_obj = maker.get_param(params, 'wob')
        which_infer = maker.get_param(params, 'wif')
        which_reg = maker.get_param(params, 'wreg')


        self.hp = hp
        
        self.the_fold = the_fold

        training_list = self.the_fold.get_training_names()
        testing_list = self.the_fold.get_testing_names()
        import _test

        try:
            self.theta = _test.get_theta_given_training_data_and_hypers(maker, params, recalculate, num_states, max_iter, which_obj, which_reg, which_infer, training_list)
            if len(self.theta) == 0:
                raise Exception("couldn't train")
            self.results = _test.get_results_given_testing_data_and_theta(maker, params, recalculate, self.theta, which_infer, testing_list, num_states)
            if len(self.results.scores) == 0:
                raise Exception("couldn't test")
        except Exception as e:
            print e
            self.set_faulty()

        else:
            self.set_not_faulty()