docstr: Returns the pairwise process groups between rank and the out and
  in-peers corresponding to 'self.rank'
docstr_tok: ["Returns","the","pairwise","process","groups","between","rank","and","the","out","and","in-peers","corresponding","to","'self.rank","'"]
code: def get_edges(
      self, rotate: bool = False
  ) -> Tuple[List[Edge], List[Edge]]:
      """Returns the pairwise process groups between rank and the out and
      in-peers corresponding to 'self.rank'"""
      # cycle through in- and out-peers by updating group-index
      if rotate:
          self._rotate_group_indices()
  
      # get out- and in-peers using new group-indices
      out_edges, in_edges = [], []
      for group_index in self._group_indices:
          out_edges.append(self.phone_book[self.rank][group_index])
          for rank, edges in enumerate(self.phone_book):
              if rank == self.rank:
                  continue
              if (
                  self.rank * self.nprocs_per_node
                  == edges[group_index].dest
              ):
                  in_edges.append(self.phone_book[rank][group_index])
      return out_edges, in_edges
  
imports: from abc import ABC, abstractmethod
  from math import log
  from typing import List, Optional, Tuple
  import torch
  import torch.distributed
label_desc: Use image node_id 11 for calling the GraphManager obj's underlying member method code with example usage: obj.get_edges(rotate) and returns: out_edges,  in_edges