code: def make_chars_uppercase(
              lst: Union[list, tuple, str, set],
              uppercase: int
      ) -> 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 not isinstance(uppercase, int):
              raise TypeError('uppercase must be an integer')
          if uppercase < 0:
              raise ValueError('uppercase must be bigger than zero')
  
          lowercase = Aux.lowercase_count(lst)
          if uppercase == 0 or lowercase == 0:
              return lst
          elif uppercase >= lowercase:
              # Make it all uppercase
              return Aux.make_all_uppercase(lst)
  
          arr = list(lst)
  
          # Check if at least an element is supported
          # This is required to avoid an infinite loop below
          supported = False
          for element in arr:
              if isinstance(element, (list, tuple, str, set)):
                  supported = True
                  break
  
          if supported:
              # Pick a word at random, then make a character uppercase
              count = 0
              while count < uppercase:
                  windex = randbelow(len(arr))
                  element = arr[windex]
                  # Skip unsupported types or empty ones
                  if element:
                      aux = element
                      if isinstance(element, str):
                          aux = Aux._make_one_char_uppercase(element)
                      elif isinstance(element, (list, tuple, set)):
                          aux = Aux.make_chars_uppercase(element, 1)
  
                      if aux != element:
                          arr[windex] = aux
                          count += 1
  
          if isinstance(lst, set):
              return set(arr)
          elif isinstance(lst, str):
              return ''.join(arr)
          elif isinstance(lst, tuple):
              return tuple(arr)
  
          return arr
docs: Make uppercase some randomly selected characters.
  
          The characters can be in a (mix of) string, list, tuple or set.
  
          Keyword arguments:
          lst -- the object to make all chars uppercase, which can be a (mix of)
          list, tuple, string or set.
          uppercase -- Number of characters to be set as uppercase.