class_docstr: Object to map plated dims to collections of unrolled dims.
  
  :param dict dim_to_ordinal: a mapping from contraction dim to the set of
      plates over which the contraction dim is plated.
class_docstr_tok: ["Object","to","map","plated","dims","to","collections","of","unrolled","dims",".",":","param","dict","dim_to_ordinal",":","a","mapping","from","contraction","dim","to","the","set","of","plates","over","which","the","contraction","dim","is","plated","."]
docstr: Converts a plate dim + plate indices to a unrolled dim.
  
  :param str dim: a plate dimension to unroll
  :param dict indices: a mapping from plate dimension to int
  :return: a unrolled dim
  :rtype: str
docstr_tok: ["Converts","a","plate","dim","+","plate","indices","to","a","unrolled","dim",".",":","param","str","dim",":","a","plate","dimension","to","unroll",":","param","dict","indices",":","a","mapping","from","plate","dimension","to","int",":","return",":","a","unrolled","dim",":","rtype",":","str"]
code: def __call__(self, dim, indices):
      """
      Converts a plate dim + plate indices to a unrolled dim.
  
      :param str dim: a plate dimension to unroll
      :param dict indices: a mapping from plate dimension to int
      :return: a unrolled dim
      :rtype: str
      """
      plate = self._plates.get(dim, ())
      index = tuple(indices[d] for d in plate)
      key = dim, index
      if key in self._map:
          return self._map[key]
      normal_dim = next(self._symbols)
      self._map[key] = normal_dim
      return normal_dim
  
imports: import itertools
  import warnings
  from collections import OrderedDict, defaultdict
  import opt_einsum
  import torch
  from opt_einsum import shared_intermediates
  from pyro.ops.rings import BACKEND_TO_RING, LogRing
  from pyro.util import ignore_jit_warnings
label_desc: Use image node_id 2 for calling the _DimUnroller obj's underlying member method code with example usage: obj.__call__(dim, indices) and returns: normal_dim, self