code: def get_parameters(tp):
      
      if NEW_TYPING:
          if (isinstance(tp, _GenericAlias) or
              isinstance(tp, type) and issubclass(tp, Generic) and
              tp is not Generic):
              return tp.__parameters__
          return ()
      if (
          is_generic_type(tp) or is_union_type(tp) or
          is_callable_type(tp) or is_tuple_type(tp)
      ):
          return tp.__parameters__ if tp.__parameters__ is not None else ()
      return ()
docs: Return type parameters of a parameterizable type as a tuple
      in lexicographic order. Parameterizable types are generic types,
      unions, tuple types and callable types. Examples::
  
          get_parameters(int) == ()
          get_parameters(Generic) == ()
          get_parameters(Union) == ()
          get_parameters(List[int]) == ()
  
          get_parameters(Generic[T]) == (T,)
          get_parameters(Tuple[List[T], List[S_co]]) == (T, S_co)
          get_parameters(Union[S_co, Tuple[T, T]][int, U]) == (U,)
          get_parameters(Mapping[T, Tuple[S_co, T]]) == (T, S_co)