def yield_deps(doc):
    """
    TODO: This implementation is very specific to a particular environment and project, and should be generalized.
    :param doc:
    :return:
    """

    this_node = DependencyNode(doc, None)

    for r in doc.references():

        other_node = DependencyNode(r, this_node)

        yield (this_node, other_node)

        if isinstance(other_node, PackageDependencyNode):
            yield from yield_deps(other_node.doc)