Retrieve raw files from QuantEcon.notebooks or other Github repo
    
    Parameters
    ----------
    file_list   list or dict
                A list of files to specify a collection of filenames	
                A dict of dir : list(files) to specify a directory
    repo        str, optional(default=REPO)
    raw 		str, optional(defualt=RAW)
    			This is here in case github changes access to their raw files through web links
    branch      str, optional(default=BRANCH)
    folder      str, optional(default=FOLDER)
    overwrite   bool, optional(default=False)
    verbose     bool, optional(default=True)

    Examples
    --------
    Consider a notebook that is dependant on a ``csv`` file to execute. If this file is 
    located in a Github repository then it can be fetched using this utility

    Assuming the file is at the root level in the ``master`` branch then:

    >>> from quantecon.util import fetch_nb_dependencies
    >>> status = fetch_nb_dependencies(["test.csv"], repo="https://<github_address>")

    More than one file may be requested in the list provided

    >>> status = fetch_nb_dependencies(["test.csv", "data.csv"], repo="https://<github_address>") 

    A folder location can be added using ``folder=``

    >>> status = fetch_nb_dependencies("test.csv", report="https://<github_address>", folder="data")

    You can also specify a specific branch using ``branch=`` keyword argument. 

    This will download the requested file(s) to your local working directory. The default
    behaviour is **not** to overwrite a local file if it is present. This can be switched off
    by setting ``overwrite=True``.

def fetch_nb_dependencies(files, repo=REPO, raw=RAW, branch=BRANCH, folder=FOLDER, overwrite=False, verbose=True):
    """
    Retrieve raw files from QuantEcon.notebooks or other Github repo
    
    Parameters
    ----------
    file_list   list or dict
                A list of files to specify a collection of filenames	
                A dict of dir : list(files) to specify a directory
    repo        str, optional(default=REPO)
    raw 		str, optional(defualt=RAW)
    			This is here in case github changes access to their raw files through web links
    branch      str, optional(default=BRANCH)
    folder      str, optional(default=FOLDER)
    overwrite   bool, optional(default=False)
    verbose     bool, optional(default=True)

    Examples
    --------
    Consider a notebook that is dependant on a ``csv`` file to execute. If this file is 
    located in a Github repository then it can be fetched using this utility

    Assuming the file is at the root level in the ``master`` branch then:

    >>> from quantecon.util import fetch_nb_dependencies
    >>> status = fetch_nb_dependencies(["test.csv"], repo="https://<github_address>")

    More than one file may be requested in the list provided

    >>> status = fetch_nb_dependencies(["test.csv", "data.csv"], repo="https://<github_address>") 

    A folder location can be added using ``folder=``

    >>> status = fetch_nb_dependencies("test.csv", report="https://<github_address>", folder="data")

    You can also specify a specific branch using ``branch=`` keyword argument. 

    This will download the requested file(s) to your local working directory. The default
    behaviour is **not** to overwrite a local file if it is present. This can be switched off
    by setting ``overwrite=True``.

    """
    import requests

    #-Generate Common Data Structure-#
    if type(files) == list:
        files = {"" : files}

    status = []

    #-Obtain each requested file-#
    for directory in files.keys():
        if directory != "":
            if verbose: print("Parsing directory: %s"%directory)
        for fl in files[directory]:
            if directory != "":
                fl = directory+"/"+fl
            #-Check for Local Copy of File (Default Behaviour is to Skip)-#
            if not overwrite:
                if os.path.isfile(fl):
                    if verbose: print(
                        "A file named %s already exists in the specified directory ... skipping download." % fl)
                    status.append(False)
                    continue
            else:
                if verbose: print("Overwriting file %s ..."%fl)
            if verbose: print("Fetching file: %s"%fl)
            #-Get file in OS agnostic way using requests-#
            url = "/".join([repo, raw, branch, folder, fl])
            r = requests.get(url)
            with open(fl, "wb") as fl:
                fl.write(r.content)
            status.append(True)

    return status