<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def expand_paths(paths=None, predicate=None, filters=None, parent_uuid=None):
 """Return an unique list of resources or collections from a list of paths. Supports fq_name and wilcards resolution. 'floating-ip/2a0a54b4-a420-485e-8372-42f70a627ec9']) [Collection('virtual-network'), Resource('floating-ip', uuid='2a0a54b4-a420-485e-8372-42f70a627ec9')] :param paths: list of paths relative to the current path that may contain wildcards (*, ?) or fq_names :type paths: [str] :param predicate: function to filter found resources :type predicate: f(resource) -> bool :param filters: list of filters for Collections :rtype: [Resource or Collection] :raises BadPath: path cannot be resolved """

    if not paths:
        paths = [Context().shell.current_path]
    else:
        paths = [Context().shell.current_path / res for res in paths]

    # use a dict to have unique paths
    # but keep them ordered
    result = OrderedDict()
    for res in parallel_map(_path_to_resources, paths,
                            kwargs={'predicate': predicate,
                                    'filters': filters,
                                    'parent_uuid': parent_uuid},
                            workers=50):
        for r in res:
            result[r.path] = r

    resources = list(result.values())
    if not resources:
        raise NotFound()
    return resources