Example #1
0
File: msat.py Project: idkwim/pysmt
 def get_model(self):
     assignment = {}
     msat_iterator = mathsat.msat_create_model_iterator(self.msat_env)
     while mathsat.msat_model_iterator_has_next(msat_iterator):
         term, value = mathsat.msat_model_iterator_next(msat_iterator)
         pysmt_term = self.converter.back(term)
         pysmt_value = self.converter.back(value)
         if self.environment.stc.get_type(pysmt_term).is_real_type() and \
            pysmt_value.is_int_constant():
             pysmt_value = self.mgr.Real(pysmt_value.constant_value())
         assignment[pysmt_term] = pysmt_value
     mathsat.msat_destroy_model_iterator(msat_iterator)
     return EagerModel(assignment=assignment, environment=self.environment)
Example #2
0
 def get_model(self):
     assignment = {}
     msat_iterator = mathsat.msat_create_model_iterator(self.msat_env)
     while mathsat.msat_model_iterator_has_next(msat_iterator):
         term, value = mathsat.msat_model_iterator_next(msat_iterator)
         pysmt_term = self.converter.back(term)
         pysmt_value = self.converter.back(value)
         if self.environment.stc.get_type(pysmt_term).is_real_type() and \
            pysmt_value.is_int_constant():
             pysmt_value = self.mgr.Real(pysmt_value.constant_value())
         assignment[pysmt_term] = pysmt_value
     mathsat.msat_destroy_model_iterator(msat_iterator)
     return EagerModel(assignment=assignment, environment=self.environment)
Example #3
0
    def __iter__(self):
        """Overloading of iterator from Model.  We iterate only on the
        variables defined in the assignment.
        """
        it = mathsat.msat_model_create_iterator(self.msat_model)
        if mathsat.MSAT_ERROR_MODEL_ITERATOR(it):
            raise InternalSolverError("model iteration")

        while mathsat.msat_model_iterator_has_next(it):
            t, v = mathsat.msat_model_iterator_next(it)
            if mathsat.msat_term_is_constant(self.msat_env(), t):
                pt = self.converter.back(t)
                pv = self.converter.back(v)
                if self.environment.stc.get_type(pt).is_real_type() and \
                       pv.is_int_constant():
                    pv = self.environment.formula_manager.Real(
                        pv.constant_value())
                yield (pt, pv)

        mathsat.msat_destroy_model_iterator(it)