def METHOD_NAME(self, mask, data_t, data_f, level):
    if self.choice:
        apply_mask = self.apply_choice_mask
    else:
        apply_mask = self.apply_mask
    if level == 1:
        out = []
        param = list_match_func[self.list_match_global]([mask, data_t, data_f])
        if not all((isinstance(p, (list, tuple)) for p in param)):
            return
        for m, t, f in zip(*param):
            out.append(apply_mask(m, t, f))
        return out
    elif level >= 2:
        out = []
        param = list_match_func[self.list_match_global]([data_t, data_f])
        for t, f in zip(*param):
            out.append(self.METHOD_NAME(mask, t, f, level - 1))
        return out
    else:
        return apply_mask(mask[0], data_t, data_f)