<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def from_directory(filepath, from_methods, *, name=None, parent=None, verbose=True):
 """Create a WrightTools Collection from a directory of source files. Parameters filepath: path-like Path to the directory on the file system from_methods: dict<str, callable> Dictionary which maps patterns (using Unix-like glob wildcard patterns) to functions which take a filepath, plus the keyword arguments ['name', 'parent', and 'verbose']. (e.g. most from_<kind> methods within WrightTools) The value can be `None` which results in that item being ignored. The *first* matching pattern encountered will be used. Therefore, if multiple patterns will match the same file, use and `OrderedDict`. Patterns are matched on the file name level, not using the full path. Keyword Arguments name: str Name to use for the root data object. Default is the directory name. parent: Collection Parent collection to insert the directory structure into. Default is a new collection in temp file. verbose: bool Print information as objects are created. Passed to the functions. Examples -------- """

    filepath = pathlib.Path(filepath).resolve()
    if name is None:
        name = filepath.name

    if verbose:
        print("Creating Collection:", name)

    root = Collection(name=name, parent=parent)

    q = queue.Queue()

    for i in filepath.iterdir():
        q.put((filepath, i.name, root))

    while not q.empty():
        path, fname, parent = q.get()
        for pattern, func in from_methods.items():
            if fnmatch.fnmatch(fname, pattern):
                if func is not None:
                    func(
                        path / fname,
                        name=os.path.splitext(fname)[0],
                        parent=parent,
                        verbose=verbose,
                    )
                break
        else:
            if (path / fname).is_dir():
                if verbose:
                    print("Creating Collection at", pathlib.PurePosixPath(parent.name) / fname)
                col = parent.create_collection(name=fname)
                for i in (path / fname).iterdir():
                    q.put((path / fname, i.name, col))
    return root