@Substitution(desc=desc, name1=name1, name2=name2, axis_descr=axis_descr, see_also=see_also, examples=examples, empty_value=empty_value)
@Appender(_bool_doc)
def logical_func(self, axis=0, bool_only=None, skipna=True, level=None, **kwargs):
    nv.validate_logical_func(tuple(), kwargs, fname=name)
    if (level is not None):
        if (bool_only is not None):
            raise NotImplementedError('Option bool_only is not implemented with option level.')
        return self._agg_by_level(name, axis=axis, level=level, skipna=skipna)
    return self._reduce(f, name, axis=axis, skipna=skipna, numeric_only=bool_only, filter_type='bool')
@Substitution(desc=desc, name1=name1, name2=name2, axis_descr=axis_descr, see_also=see_also, examples=examples, empty_value=empty_value)
@Appender(_bool_doc)
def logical_func(self, axis=0, bool_only=None, skipna=True, level=None, **kwargs):
    nv.validate_logical_func(tuple(), kwargs, fname=name)
    if (level is not None):
        if (bool_only is not None):
            raise NotImplementedError('Option bool_only is not implemented with option level.')
        return self._agg_by_level(name, axis=axis, level=level, skipna=skipna)
    return self._reduce(f, name, axis=axis, skipna=skipna, numeric_only=bool_only, filter_type='bool')