def parse_stream(lisp_list, stream_map, stream_info): value_from_attribute = parse_lisp_list(lisp_list) assert set(value_from_attribute) <= { ':stream', ':wild-stream', ':inputs', ':domain', ':fluents', ':outputs', ':certified' } is_wild = (':wild-stream' in value_from_attribute) name = value_from_attribute[ ':wild-stream'] if is_wild else value_from_attribute[':stream'] domain = value_from_attribute.get(':domain', None) # TODO: dnf_from_positive_formula(value_from_attribute.get(':domain', [])) if not (get_formula_operators(domain) <= {AND}): # TODO: allow positive DNF raise ValueError( 'Stream [{}] domain must be a conjunction'.format(name)) certified = value_from_attribute.get(':certified', None) if not (get_formula_operators(certified) <= {AND}): raise ValueError( 'Stream [{}] certified must be a conjunction'.format(name)) return Stream(name, get_procedure_fn(stream_map, name), value_from_attribute.get(':inputs', []), list_from_conjunction(domain), value_from_attribute.get(':outputs', []), list_from_conjunction(certified), stream_info.get(name, StreamInfo()), fluents=value_from_attribute.get(':fluents', []), is_wild=is_wild)
def parse_common(lisp_list, stream_map, stream_info): assert (2 <= len(lisp_list) <= 3) head = tuple(lisp_list[1]) assert (is_head(head)) name = get_prefix(head) fn = get_procedure_fn(stream_map, name) domain = [] if len(lisp_list) == 3: domain = list_from_conjunction(lisp_list[2]) info = stream_info.get(name, None) return head, fn, domain, info
def parse_optimizer(lisp_list, procedures, infos): _, optimizer_name = lisp_list[:2] procedure = get_procedure_fn(procedures, optimizer_name) info = infos.get(optimizer_name, OptimizerInfo()) optimizer = Optimizer(optimizer_name, procedure, info) for sub_list in lisp_list[2:]: form = sub_list[0] if form == ':variable': optimizer.variables.append(parse_variable(optimizer, sub_list, info)) elif form == ':constraint': optimizer.constraints.append(parse_constraint(optimizer, sub_list)) elif form == ':objective': optimizer.objectives.append(sub_list[1]) else: raise ValueError(form) return optimizer.get_streams()