<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def evaluate_trace_request(data, tracer=tracer):
 """ Evaluate given string trace request. Usage:: Umbra -t "{'umbra.engine' : ('.*', 0), 'umbra.preferences' : (r'.*', 0)}" Umbra -t "['umbra.engine', 'umbra.preferences']" Umbra -t "'umbra.engine, umbra.preferences" :param data: Trace request. :type data: unicode :param tracer: Tracer. :type tracer: object :return: Definition success. :rtype: bool """


    data = ast.literal_eval(data)

    if isinstance(data, str):
        modules = dict.fromkeys(map(lambda x: x.strip(), data.split(",")), (None, None))
    elif isinstance(data, list):
        modules = dict.fromkeys(data, (None, None))
    elif isinstance(data, dict):
        modules = data

    for module, (pattern, flags) in modules.iteritems():
        __import__(module)
        pattern = pattern if pattern is not None else r".*"
        flags = flags if flags is not None else re.IGNORECASE
        trace_module(sys.modules[module], tracer, pattern, flags)
    return True