def first_goals(goal, operator_nodes, variable_nodes, tree): goals = filter(lambda (var, value): len(variable_nodes[var][value].operators) == 1, set(flatten(get_conditions(o, tree).iteritems() for o in (operator_nodes[goal].operators | {goal})))) print set(flatten(get_conditions(o, tree).iteritems() for o in operator_nodes[goal].operators)) print goals print filter(lambda o: o != goal and any(e in goals for e in o.eff()), applicable(goal, operator_nodes, variable_nodes)) return filter(lambda o: o != goal and any(e in goals for e in o.eff()), applicable(goal, operator_nodes, variable_nodes))
def any_goals(goal, operator_nodes, variable_nodes, tree): goals = set(flatten(get_conditions(o, tree).iteritems() for o in (operator_nodes[goal].operators | {goal}))) return filter(lambda o: any(e in goals for e in o.eff()), applicable(goal, operator_nodes, variable_nodes))