def parseAnsSetFromPredicates(self, predicates_list):
        """ compose as a string every solution in the predicate list given"""
        model_mgr = ModelManager()

        # parse predicates for each time step
        # TODO: add applicable and selected heuristics
        for predicate_string in predicates_list:
            pred_obj    = pred_parser.predicateStringToParsedPredicate(predicate_string)
            time        = pred_parser.getTimeFromPredObject(pred_obj)
            if time != None:
                self.addPredicateForTimeStep(time, pred_obj)
            # look for substitution data, to swap variables
            if pred_obj.name == 'substitutedDegree':
                _, degree = pred_parser.argsToListOfStrings(pred_obj)
                self.sub_data['degree'] = degree
                self.sub_data['step'] = int(time.step)
            if pred_obj.name == 'solutionValue' :
                # rational numbers are represented as numer, denom ordered pairs
                _, numer, denom = pred_parser.argsToListOfStrings(pred_obj)
                soln_value      = numer if denom == '1' else numer +'/' + denom 
                self.soln_list.append(soln_value)


            # add predicate to model manager
            model_mgr.addPredicate(predicate_string)

        # handle post processing at solution level, and step level
        self.solutionLevelPostProcessing()
        for eqn_step in self.solution_steps.values():
            eqn_step.postProcessStepData(model_mgr)
def getTestModelMgr():
    mgr = ModelManager()
    mgr.addPredicate('_areBeingMultiplied(_time(0,1), _id(2,1), _id(2,2))')
    mgr.addPredicate('__isLessThan(_id(2,1), _id(2,2))')
    #mgr.addPredicate('_isSumOfTerms(_time(0,1), _id(2,1))')

    return mgr