code: def graph_from_connections(env, directed=False):
      
      G = DiGraph() if directed else Graph()
      conn_list = env.get_connections(data=True)
      for agent, conns in conn_list:
          G.add_node(agent)
          ebunch = []
          for nb, data in conns.items():
              ebunch.append((agent, nb, data))
          if len(ebunch) > 0:
              G.add_edges_from(ebunch)
      return G
docs: Create NetworkX graph from agent connections in a given environment.
  
      :param env:
          Environment where the agents live. The environment must be derived from
          :class:`~creamas.core.environment.Environment`,
          :class:`~creamas.mp.MultiEnvironment` or
          :class:`~creamas.ds.DistributedEnvironment`.
  
      :param bool directed:
          If ``True``, creates an instance of :class:`~networkx.digraph.DiGraph`,
          otherwise creates an instance of :class:`~networkx.graph.Graph`.
  
      :returns: The created NetworkX graph.
      :rtype:
          :class:`~networkx.digraph.DiGraph` or :class:`~networkx.graph.Graph`
  
      .. note::
  
          If the created graph is undirected and two connected agents have
          different data stored for each other, then the data for the given edge
          is chosen randomly between the two agents.