code: def _get_args(cls, args):
          # type: (tuple) -> Tuple[Any, slice, Callable]
          
          if not isinstance(args, tuple):
              raise TypeError(
                  "{}[...] takes two or three arguments.".format(cls.__name__)
              )
          elif len(args) == 2:
              type_, bound = args
              keyfunc = cls._identity
          elif len(args) == 3:
              type_, bound, keyfunc = args
          else:
              raise TypeError(
                  "Too many parameters given to {}[...]".format(cls.__name__)
              )
          if not isinstance(bound, slice):
              bound = slice(bound)
          return eval_type(type_), bound, keyfunc
docs: Return the parameters necessary to check type boundaries.
  
          Args:
              args: A tuple with two or three elements: a type, a slice
                  representing the minimum and maximum lengths allowed for values
                  of that type and, optionally, a function to use on values
                  before comparing against the bounds.
  
          Returns:
              A tuple with three elements: a type, a slice, and a function to
              apply to objects of the given type. If no function was specified,
              it returns the identity function.