<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def val_to_formatted_str(val, format, enum_set=None):
 """ Return a string representation of the value given format specified. :param val: a string holding an unsigned integer to convert :param format: a string holding a format which will be used to convert the data string :param enum_set: an iterable of enums which are used as part of the converstion process Given an unsigned integer (not a wirevector!) covert that to a strong ready for output to a human to interpret. This helps deal with signed/unsigned numbers (simulation operates on values that have been converted via two's complement), but it also generates hex, binary, and enum types as outputs. It is easiest to see how it works with some examples. :: formatted_str_to_val(2, 's3') == '2' formatted_str_to_val(7, 's3') == '-1' formatted_str_to_val(5, 'b3') == '101' formatted_str_to_val(5, 'u3') == '5' formatted_str_to_val(5, 's3') == '-3' formatted_str_to_val(10, 'x3') == 'a' class Ctl(Enum):
 ADD = 5 SUB = 12 formatted_str_to_val('ADD', 'e3/Ctl', [Ctl]) == 5 formatted_str_to_val('SUB', 'e3/Ctl', [Ctl]) == 12 """

    type = format[0]
    bitwidth = int(format[1:].split('/')[0])
    bitmask = (1 << bitwidth)-1
    if type == 's':
        rval = str(val_to_signed_integer(val, bitwidth))
    elif type == 'x':
        rval = hex(val)[2:]  # cuts off '0x' at the start
    elif type == 'b':
        rval = bin(val)[2:]  # cuts off '0b' at the start
    elif type == 'u':
        rval = str(int(val))  # nothing fancy
    elif type == 'e':
        enumname = format.split('/')[1]
        enum_inst_list = [e for e in enum_set if e.__name__ == enumname]
        if len(enum_inst_list) == 0:
            raise PyrtlError('enum "{}" not found in passed enum_set "{}"'
                             .format(enumname, enum_set))
        rval = enum_inst_list[0](val).name
    else:
        raise PyrtlError('unknown format type {}'.format(format))
    return rval