docstr: Convert sequence to Mapping with keys normalized.
docstr_tok: ["Convert","sequence","to","Mapping","with","keys","normalized","."]
code: def normalized_iterable(self) -> Dict[str, "DictStrAny"]:
      """Convert sequence to Mapping with keys normalized."""
      iterable = self.resolved_iterable
      assert isinstance(iterable, Mapping)
  
      ret: Dict[str, "DictStrAny"] = {}
      matrix = {key: enumerate(v) for key, v in iterable.items()}
      for combination in product(*matrix.values()):
          d: "DictStrAny" = {}
          fragments: List[str] = []
          for k, (i, v) in zip(matrix.keys(), combination):
              d[k] = v
              fragments.append(
                  f"{k}{i}" if is_map_or_seq(v) else to_str(v)
              )
  
          key = "-".join(fragments)
          ret[key] = d
      return ret
  
imports: import logging
  import os
  from collections.abc import Mapping, Sequence
  from copy import deepcopy
  from itertools import product
  from typing import TYPE_CHECKING, Any, Dict, List, NamedTuple, Optional, Tuple, Type, Union
  from funcy import collecting, first, isa, join, reraise
  from dvc.exceptions import DvcException
  from dvc.log import logger
  from dvc.parsing.interpolate import ParseError
  from dvc.utils.objects import cached_property
  from .context import Context, ContextError, KeyNotInContext, MergeError, Node, VarsAlreadyLoaded
  from .interpolate import check_recursive_parse_errors, is_interpolated_string, recurse, to_str
label_desc: Use image node_id 6 for calling the MatrixDefinition obj's underlying member method code with example usage: obj.normalized_iterable() and returns: ret