def format(format_str, inp): try: return format_str.value.format(inp) except ValueError: panic("Incorrect format string '{}' for input '{}'.".format( format_str.value, inp) )
def register(*names): if len(names) == 0 or type(names[0]) != str: panic("Called @register without arguments") def wrap(fn): global function_list for n in names: function_list[n] = fn return wrap
def register(*names): if len(names) == 0 or not isinstance(names[0], str): panic("Called @register without arguments") def wrap(fn): global function_list for n in names: function_list[n] = fn return wrap
def handle_input(self, value): val_to_test = value if self.column and value.fttype == T_ARRAY: val_to_test = value.value[self.column - 1] result = self.function(val_to_test) if result.fttype == T_BOOL: if result.value: self.print_formatted(value) else: panic("The filter function needs to return a 'Bool', got '{}'".format(result.fttype))
def parse_args(self): parser = self.get_argument_parser() args = parser.parse_args() self.column = args.column self.arguments = args.args function_name = args.function try: self.function = function_list[function_name] except KeyError: panic("Function not found: '{}'".format(function_name))
def handle_input(self, value): val_to_test = value if self.column and value.fttype == T_ARRAY: val_to_test = value.value[self.column - 1] result = self.function(val_to_test) if result.fttype == T_BOOL: if result.value: self.print_formatted(value) else: if self.exit_when_false: self.exit_early = True else: panic("The function argument to '{}' needs to return a 'Bool', got '{}'" .format(self.name, result.fttype))
def reverse(inp): # slice arrays and string from start to finish in reversed order if type(inp) == str or type(inp) == list: return inp[::-1] # treat integers as strings elif type(inp) == int: return str(inp)[::-1] # booleans can not be reversed elif type(inp) == bool: panic("Cannot reverse bool value") # we got something unexpected else: panic("Unexpected type '{}' for input '{}'.".format( type(inp).__name__, inp))
def fn_typecheck(*args): inp = args[-1] if type_in is not None: try: inp = type_in.create_from(inp) except TypeConversionError as e: panic("Incompatible input type: expected '{}', got '{}'".format(e.type_to, e.type_from)) if len(args) > 1: result = fn(*args[0:-1], inp=inp.value) else: result = fn(inp=inp.value) if type_out is None: return TypedValue(result, inp.fttype) elif type_out == "returned": return result return TypedValue(result, type_out)
def index(idx, inp): idx = dynamic_cast(T_INT, idx).value try: return T_STRING.create_from(inp[idx]).value except IndexError: panic("array index out of range")
def initialize(self): # Initial value if len(self.arguments) != 1: panic("Initial value to foldl is required") self.acc = add_dynamic_type(self.arguments[0])