def METHOD_NAME(state, a, b):
    """
    Merge data from a and b inputs according bool value(s) of state input
    :param state: list of bool values or numpy bool array
    :param a: any SV object like: list of values, list of vectors, matrix, Blender object, numpy array, None, []
    :param b: any SV object like: list of values, list of vectors, matrix, Blender object, numpy array, None, []
    :return: merged list of a and b inputs
    """
    a = None if hasattr(a, '__iter__') and len(a) == 0 else a
    b = None if hasattr(b, '__iter__') and len(b) == 0 else b
    if all([isinstance(a, np.ndarray), isinstance(b, np.ndarray)]) or \
            (any([isinstance(a, np.ndarray), isinstance(b, np.ndarray)]) and
                (any([a is None, b is None]) or
                 any([hasattr(a, '__iter__') and len(a) == 1, hasattr(b, '__iter__') and len(b) == 1]))):
        return switch_data_np(state, a, b)
    max_len = max([len(x) for x in [state, a, b] if hasattr(x, '__iter__')])
    iter_s = state if len(state) >= max_len else chain(state, repeat(state[-1], max_len - len(state)))
    iter_a = None if not hasattr(a, '__iter__') else \
                a if len(a) >= max_len else chain(a, repeat(a[-1], max_len - len(a)))
    iter_b = None if not hasattr(b, '__iter__') else \
                b if len(b) >= max_len else chain(b, repeat(b[-1], max_len - len(b)))
    if iter_a is not None and iter_b is not None:
        return [a if s else b for s, a, b in zip(iter_s, iter_a, iter_b)]
    elif iter_a is not None or iter_b is not None:
        if b is None:
            return list(compress(iter_a, iter_s))
        elif a is None:
            return list(compress(iter_b, (not s for s in iter_s)))
        else:
            return a if state[0] else b
    else:
        a = [] if a is None else a
        b = [] if b is None else b
        return a if state[0] else b