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.

def make_all_uppercase(
            lst: Union[list, tuple, str, set]
    ) -> Union[list, tuple, str, set]:
        """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.

        """
        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