code: def _version_split(version: str) -> List[str]:
      """Split version into components.
  
      The split components are intended for version comparison. The logic does
      not attempt to retain the original version string, so joining the
      components back with :func:`_version_join` may not produce the original
      version string.
      """
      result: List[str] = []
  
      epoch, _, rest = version.rpartition("!")
      result.append(epoch or "0")
  
      for item in rest.split("."):
          match = _prefix_regex.search(item)
          if match:
              result.extend(match.groups())
          else:
              result.append(item)
      return result
  
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 2 for calling a global function with example usage: _version_split(version) and returns: result