Casual Inference Data analysis and other apocrypha

import networkx as nx

var_names = ['A', 'B', 'C', 'D']
parents = [['B', 'C'], [], ['D'], []]

G = nx.DiGraph()
G.add_nodes_from(var_names)
for i, child in enumerate(var_names):
  for parent in parents[i]:
    G.add_edge(parent, child)
    
topsorted_vars = list(nx.algorithms.dag.topological_sort(G))
parents_of_a = list(G.predecessors('A'))