code: def _make_graph(self) -> None:
      for rank in range(self.world_size):
          for i in range(1, self.world_size):
              f_peer = self._rotate_forward(rank, i)
              b_peer = self._rotate_backward(rank, i)
              # create directory for non-passive peers
              if not self.is_passive(rank) and (
                  self.is_passive(f_peer) and self.is_passive(b_peer)
              ):
                  self._add_peers(rank, [f_peer, b_peer])
              # create directory for passive peers
              elif self.is_passive(rank) and (
                  not (
                      self.is_passive(f_peer) or self.is_passive(b_peer)
                  )
              ):
                  self._add_peers(rank, [f_peer, b_peer])
  
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 1 for calling the DynamicBipartiteLinearGraph obj's underlying member method code with example usage: obj._make_graph() without return types