Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def add_annotated_disjunction(self, facts, probabilities):
"""
Add a new annotated disjunction to the program database from
a list of `facts` and its `probabilities`.
Return a list of choice nodes.
:param facts: list of probabilistic facts
:type facts: list of problog.logic.Term
:param probabilities: list of valid individual probabilities
such that the total probability is less
than or equal to 1.0
:type probabilities: list of float in [0.0, 1.0]
:rtype: list of int
"""
disjunction = [ f.with_probability(Constant(p)) for f, p in zip(facts, probabilities) ]
self._db += AnnotatedDisjunction(heads=disjunction, body=Constant('true'))
choices = []
for node, term in enumerate(self._db._ClauseDB__nodes):
if str(term).startswith('choice'):
choices.append((term, node))
nodes = []
for term in disjunction:
term = term.with_probability(None)
for choice, node in choices:
if term in choice.functor.args:
nodes.append(node)
return nodes