# Buggy code
def __build_graph(self, target, commands, outs):
    import networkx
    from dvc.stage import Stage

    stage = Stage.load(self.repo, target)
    node = os.path.relpath(stage.path, self.repo.root_dir)

    pipelines = list(filter(lambda g: node in g.nodes(), self.repo.pipelines()))

    assert len(pipelines) == 1
    G = pipelines[0]
    stages = networkx.get_node_attributes(G, "stage")

    nodes = []
    for n in G.nodes():
        stage = stages[n]
        if commands:
            if stage.cmd is None:
                continue
            nodes.append(stage.cmd)
        elif outs:
            for out in stage.outs:
                nodes.append(str(out))
        else:
            nodes.append(stage.relpath)

    edges = []
    for e in G.edges():
        from_stage = stages[e[0]]
        to_stage = stages[e[1]]
        if commands:
            if to_stage.cmd is None:
                continue
            edges.append((from_stage.cmd, to_stage.cmd))
        elif outs:
            for from_out in from_stage.outs:
                for to_out in to_stage.outs:
                    edges.append((str(from_out), str(to_out)))
        else:
            edges.append((from_stage.relpath, to_stage.relpath))

    return nodes, edges, networkx.is_tree(G)


# Traceback (ValueError)
ERROR: failed to pull data from the cloud - path is on mount 'F:', start on mount 'C:'
Traceback (most recent call last):
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\command\data_sync.py", line 46, in
do_run recursive=self.args.recursive,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\repo\pull.py", line 24, in pull
recursive=recursive,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\repo\fetch.py", line 27, in fetch
used, jobs, remote=remote, show_checksums=show_checksums
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\data_cloud.py", line 144, in pull
show_checksums=show_checksums,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 493, in pull
download=True,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 459, in _process
download=download,
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 358, in status
local_exists = self.cache_exists(md5s)
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 232, in cache_exists
return list(filter(lambda md5: not self.changed_cache_file(md5), md5s))
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 232, in <lambda>
return list(filter(lambda md5: not self.changed_cache_file(md5), md5s))
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\base.py", line 518, in changed_cache_file
actual = self.get_checksum(cache_info)
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\base.py", line 275, in get_checksum
checksum = self.get_file_checksum(path_info)
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\remote\local\__init__.py", line 208, in get_file_checksum
return file_md5(path_info.path)[0]
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\site-packages\dvc\utils\__init__.py", line 48, in file_md5                      logger.info(msg.format(os.path.relpath(fname)))
File "c:\users\srg\appdata\local\continuum\anaconda3\envs\tf-keras\lib\ntpath.py", line 584, in relpath
path_drive, start_drive))                                                                                                                        ValueError: path is on mount 'F:', start on mount 'C:'

# Fixed code
def __build_graph(self, target, commands, outs):
    import networkx
    from dvc.stage import Stage

    stage = Stage.load(self.repo, target)
    node = relpath(stage.path, self.repo.root_dir)

    pipelines = list(filter(lambda g: node in g.nodes(), self.repo.pipelines()))

    assert len(pipelines) == 1
    G = pipelines[0]
    stages = networkx.get_node_attributes(G, "stage")

    nodes = []
    for n in G.nodes():
        stage = stages[n]
        if commands:
            if stage.cmd is None:
                continue
            nodes.append(stage.cmd)
        elif outs:
            for out in stage.outs:
                nodes.append(str(out))
        else:
            nodes.append(stage.relpath)

    edges = []
    for e in G.edges():
        from_stage = stages[e[0]]
        to_stage = stages[e[1]]
        if commands:
            if to_stage.cmd is None:
                continue
            edges.append((from_stage.cmd, to_stage.cmd))
        elif outs:
            for from_out in from_stage.outs:
                for to_out in to_stage.outs:
                    edges.append((str(from_out), str(to_out)))
        else:
            edges.append((from_stage.relpath, to_stage.relpath))

    return nodes, edges, networkx.is_tree(G)