code: def make_all_uppercase(
              lst: Union[list, tuple, str, set]
      ) -> Union[list, tuple, str, set]:
          
          if not isinstance(lst, (list, tuple, str, set)):
              raise TypeError('lst must be a list, a tuple, a set or a string')
  
          if isinstance(lst, str):
              return lst.upper()
  
          arr = list(lst)
  
          # enumerate is 70% slower than range
          # for i in range(len(lst)):
          #     if isinstance(arr[i], (list, tuple, str, set)):
          #         arr[i] = Aux.make_all_uppercase(arr[i])
          arr[:] = [
              Aux.make_all_uppercase(element) if (
                  isinstance(element, (list, tuple, str, set))
              ) else element for element in arr
          ]
  
          if isinstance(lst, set):
              return set(arr)
          elif isinstance(lst, tuple):
              return tuple(arr)
  
          return arr
docs: Make all characters uppercase.
  
          It supports characters in a (mix of) list, tuple, set or string.
          The return value is of the same type of the input value.