class_docstr: This contains the data structures to track the execution order. We track
  the pre-forward order on the *first* iteration for forward prefetching
  (which thus assumes static graph) and the post-forward order on *every*
  iteration for backward prefetching (which thus does not assume static
  graph but may be provide an incorrect order).
code: def __init__(
      self,
      debug_level: dist.DebugLevel,
      backward_prefetch_limit: int,
      forward_prefetch_limit: int,
  ) -> None:
      # Tracks the (static) pre-forward order for execution order validation
      # and forward prefetching
      self.handles_pre_forward_order: List[FlatParamHandle] = []
      # Tracks the post-forward order for pre-backward prefetching
      self.handles_post_forward_order: List[
          Optional[FlatParamHandle]
      ] = []
      self._iter = 0
  
      # Gives the max number of backward/forward prefetched all-gathers by a
      # single module
      self._backward_prefetch_limit = backward_prefetch_limit
      self._forward_prefetch_limit = forward_prefetch_limit
  
      # Data structures for execution order validation
      self._checking_order: bool = debug_level == dist.DebugLevel.DETAIL
      self.process_group: Optional[dist.ProcessGroup] = None
      self.world_size: Optional[int] = None
      self.all_handles: List[FlatParamHandle] = []
      # Names are prefixed from the root module
      self.param_to_fqn: Dict[nn.Parameter, List[str]] = {}
      # Current index in the pre-forward execution order
      self.current_order_index = 0
      self.warn_status = _ExecOrderWarnStatus.NONE
  
imports: import itertools
  import warnings
  from enum import auto, Enum
  from typing import Dict, List, Optional, Tuple, Union
  import torch
  import torch.distributed
  import torch.distributed.fsdp._traversal_utils
  import torch.nn
  from torch.distributed.fsdp._common_utils import _FSDPState, _get_param_to_fqns
  from torch.distributed.fsdp._flat_param import FlatParamHandle
label_desc: Use image node_id 1 to create a new _ExecOrderData object  with example: obj = _ExecOrderData(debug_level, backward_prefetch_limit, forward_prefetch_limit)