def get_cluster_values(stream_plan): param_from_obj = {} macro_from_micro = [] inputs, domain, outputs, certified, functions = [], set(), [], set(), set() input_objects, output_objects = [], [] fluent_facts = [] for result in stream_plan: local_mapping = {} # global_from_local stream = result.instance.external add_result_inputs(result, param_from_obj, local_mapping, inputs, input_objects) domain.update(set(substitute_expression(stream.domain, local_mapping)) - certified) if isinstance(result, PredicateResult): # functions.append(Equal(stream.head, result.value)) # TODO: do I need the new mapping here? mapping = {inp: param_from_obj[inp] for inp in result.instance.input_objects} functions.update(substitute_expression(result.get_certified(), mapping)) elif isinstance(result, FunctionResult): functions.add(substitute_expression(Minimize(stream.head), local_mapping)) else: fluent_facts.extend(result.instance.fluent_facts) add_result_outputs(result, param_from_obj, local_mapping, outputs, output_objects) certified.update(substitute_expression(stream.certified, local_mapping)) macro_from_micro.append(local_mapping) #assert not fluent_facts return inputs, domain, outputs, certified, functions, \ macro_from_micro, input_objects, output_objects, fluent_facts
('motion', '?q3', '?t2', '?q2'), #('conf', '?q0'), #('conf', '?q1'), #('conf', '?q2'), #('conf', '?q3'), #('pose', 'A', '?p0'), #('pose', 'B', '?p1'), #('traj', '?t0'), #('traj', '?t1'), #('traj', '?t2'), #('traj', '?t3'), ] OBJECTIVES = [ Minimize(('dist', CONF0, '?q0')), Minimize(('dist', '?q0', '?q1')), Minimize(('dist', '?q1', '?q3')), Minimize(('dist', '?q3', '?q2')), ] ################################################## # SKELETON = TIGHT_SKELETON SKELETON = [ ('move', ['r0', CONF0, '?t0', '?q0']), ('pick', ['r0', 'A', POSE0, '?g0', '?q0']), ('move', ['r0', '?q0', '?t1', '?q1']), ('place', ['r0', 'A', '?p0', '?g0', '?q1']), ('move', ['r0', '?q1', '?t3', '?q3']), ('pick', ['r0', 'B', POSE1, '?g1', '?q3']),