code: def _version_join(components: List[str]) -> str:
      """Join split version components into a version string.
  
      This function assumes the input came from :func:`_version_split`, where the
      first component must be the epoch (either empty or numeric), and all other
      components numeric.
      """
      epoch, *rest = components
      return f"{epoch}!{'.'.join(rest)}"
  
imports: import abc
  import itertools
  import re
  from typing import Callable, Iterable, Iterator, List, Optional, Tuple, TypeVar, Union
  from .utils import canonicalize_version
  from .version import Version
label_desc: Use image node_id 3 for calling a global function with example usage: _version_join(components) and returns: epoch, str, str