def non_divisible_subset_len(iterable, key):
    """
     Non-divisible subset length is the size of maximal subset of the iterable where
     sum of any two numbers in the subset is not evenly divisible by key
    :param iterable: The iterable should be of type list or tuple containing numbers
    :param key: key should be a number
    :return: Returns the max length of the non-divisible subset of the iterable for given key

    Eg: non_divisible_subset_len([1, 0, 0, 2, 5, 3],3) returns 3
        Here maximal length subset is (0, 2, 5) or (2, 3, 5)
    """
    if type(iterable) == list or type(iterable) == tuple:
        pass
    else:
        raise TypeError('Iterable should be of either list or tuple')
    for item in iterable:
        if not isinstance(item, int):
            raise ValueError('Only numbers are accepted in the iterable')
    if not isinstance(key, int):
        raise ValueError('Key should be a number')
    rem = {}
    for num in iterable:
        remainder = num % key
        if remainder in rem.keys():
            rem[remainder] += 1
        else:
            rem[remainder] = 1
    max_subset_len = 0
    if 0 in rem.keys():
        max_subset_len += 1
    end = key // 2
    if key % 2 == 0:
        if end in rem.keys():
            max_subset_len += 1
    else:
        end += 1
    for i in range(1, end):
        max_subset_len += max(rem[i], rem[key - i])
    return max_subset_len
