'Simplify a data graph by removing all temp variable nodes on the graph.
:param networkx.DiGraph data_graph: The data dependence graph to simplify.
:return: The simplified graph.
:rtype: networkx.MultiDiGraph'

def _simplify_data_graph(self, data_graph):

    graph = networkx.MultiDiGraph(data_graph)
    all_nodes = [n for n in graph.nodes_iter() if isinstance(n.variable, SimTemporaryVariable)]
    for tmp_node in all_nodes:
        in_edges = graph.in_edges(tmp_node, data=True)
        out_edges = graph.out_edges(tmp_node, data=True)
        for (pred, _, _) in in_edges:
            graph.remove_edge(pred, tmp_node)
        for (_, suc, _) in out_edges:
            graph.remove_edge(tmp_node, suc)
        for (pred, _, data_in) in in_edges:
            for (_, suc, data_out) in out_edges:
                if ((pred is not tmp_node) and (suc is not tmp_node)):
                    data = data_in.copy()
                    data.update(data_out)
                    graph.add_edge(pred, suc, **data)
        graph.remove_node(tmp_node)
    return graph
