code: def generic_tags(
      interpreter=None,  # type: Optional[str]
      abis=None,  # type: Optional[Iterable[str]]
      platforms=None,  # type: Optional[Iterable[str]]
      **kwargs,  # type: bool
  ):
      # type: (...) -> Iterator[Tag]
      """
      Yields the tags for a generic interpreter.
  
      The tags consist of:
      - <interpreter>-<abi>-<platform>
  
      The "none" ABI will be added if it was not explicitly provided.
      """
      warn = _warn_keyword_parameter("generic_tags", kwargs)
      if not interpreter:
          interp_name = interpreter_name()
          interp_version = interpreter_version(warn=warn)
          interpreter = "".join([interp_name, interp_version])
      if abis is None:
          abis = _generic_abi()
      platforms = list(platforms or _platform_tags())
      abis = list(abis)
      if "none" not in abis:
          abis.append("none")
      for abi in abis:
          for platform_ in platforms:
              yield Tag(interpreter, abi, platform_)
  
imports: from __future__ import absolute_import
  import distutils.util
  import collections
  import logging
  import os
  import platform
  import re
  import struct
  import sys
  import sysconfig
  import warnings
  from ._typing import TYPE_CHECKING, cast
label_desc: Use image node_id 9 for calling a global function with example usage: generic_tags(interpreter, abis, platforms) without return types