code: def make_definition(
      resolver: "DataResolver",
      name: str,
      definition: "DictStrAny",
      **kwargs,
  ) -> Definition:
      args = resolver, resolver.context, name, definition
      if MATRIX_KWD in definition:
          return MatrixDefinition(*args, **kwargs)
      if FOREACH_KWD in definition:
          return ForeachDefinition(*args, **kwargs)
      return EntryDefinition(*args, **kwargs)
  
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 8 for calling a global function with example usage: make_definition(resolver, name, definition) and returns: EntryDefinition, MatrixDefinition, ForeachDefinition