def _make_logical_function(cls, name, name1, name2, axis_descr, desc, f, see_also, examples, empty_value):

    @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')
    return set_function_name(logical_func, name, cls)
def _make_logical_function(cls, name, name1, name2, axis_descr, desc, f, see_also, examples, empty_value):

    @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')
    return set_function_name(logical_func, name, cls)