class_docstr: Enumerates in parallel over discrete sample sites marked
  ``infer={"enumerate": "parallel"}``.
  
  :param int first_available_dim: The first tensor dimension (counting
      from the right) that is available for parallel enumeration. This
      dimension and all dimensions left may be used internally by Pyro.
      This should be a negative integer or None.
class_docstr_tok: ["Enumerates","in","parallel","over","discrete","sample","sites","marked","``","infer=","{","``","enumerate","''",":","``","parallel","''","}","``",".",":","param","int","first_available_dim",":","The","first","tensor","dimension","(","counting","from","the","right",")","that","is","available","for","parallel","enumeration",".","This","dimension","and","all","dimensions","left","may","be","used","internally","by","Pyro",".","This","should","be","a","negative","integer","or","None","."]
code: def __init__(self, first_available_dim: Optional[int] = None) -> None:
      assert (
          first_available_dim is None or first_available_dim < 0
      ), first_available_dim
      self.first_available_dim = first_available_dim
      super().__init__()
  
file_path: pyro/pyro/poutine/enum_messenger.py
imports: from typing import Any, Dict, List, Optional
  import torch
  from typing_extensions import Self
  from pyro.distributions.torch import Categorical
  from pyro.distributions.torch_distribution import TorchDistributionMixin
  from pyro.ops.indexing import Vindex
  from pyro.poutine.messenger import Messenger
  from pyro.poutine.runtime import _ENUM_ALLOCATOR, Message
  from pyro.util import ignore_jit_warnings
label_desc: Use image node_id 1 to create a new EnumMessenger object from inherited base classes: Messenger with example: obj = EnumMessenger(first_available_dim)