Exemple #1
0
    def ground(self, rule, functor=None, arguments=None):
        """Generate ground program for the given rule.

        :param rule: rule to evaluate
        :type rule: Rule
        :param functor: override rule functor
        :type functor: str
        :param arguments: query arguments (None if non-ground)
        :type arguments: list[tuple[Term]] | None
        :return: ground program
        :rtype: LogicFormula
        """
        if rule is None:
            db = self._database
            target = Term(functor)
        else:
            db = self._database.extend()
            target = None
            for clause in rule.to_clauses(functor):
                target = clause.head
                db += clause

        if arguments is not None:
            queries = [target.with_args(*args) for args in arguments]
        else:
            queries = [target]

        with Timer("Grounding", logger="probfoil"):
            return self._database.engine.ground_all(db, queries=queries)
 def test_state_space(self):
     running = Term('running')
     fluents = [ running.with_args(Constant('c%d' % i), Constant(0)) for i in range(1, 4) ]
     states = StateSpace(fluents)
     for i, state in enumerate(states):
         self.assertEqual(len(state), 3)
         n = 0
         for j, (fluent, value) in enumerate(state.items()):
             self.assertEqual(fluent.functor, 'running')
             self.assertEqual(fluent.args[0], 'c%d' % (j + 1))
             self.assertEqual(fluent.args[-1], 0)
             n += value * (2**j)
         self.assertEqual(n, i)
Exemple #3
0
 def test_state_space(self):
     running = Term('running')
     fluents = [
         running.with_args(Constant('c%d' % i), Constant(0))
         for i in range(1, 4)
     ]
     states = StateSpace(fluents)
     for i, state in enumerate(states):
         self.assertEqual(len(state), 3)
         n = 0
         for j, (fluent, value) in enumerate(state.items()):
             self.assertEqual(fluent.functor, 'running')
             self.assertEqual(fluent.args[0], 'c%d' % (j + 1))
             self.assertEqual(fluent.args[-1], 0)
             n += value * (2**j)
         self.assertEqual(n, i)
Exemple #4
0
    def ground(self, rule, functor=None, arguments=None):
        if rule is None:
            db = self._database
            target = Term(functor)
        else:
            db = self._database.extend()
            target = None
            for clause in rule.to_clauses(functor):
                target = clause.head
                db += clause

        if arguments is not None:
            # pdb.set_trace()
            queries = [target.with_args(*args) for args in arguments]
        else:
            queries = [target]

        return self._database.engine.ground_all(db, queries=queries)