human
Complete this python program:
def add_special_arithmetic_methods(cls, arith_method=None, comp_method=None, bool_method=None, use_numexpr=True, force=False, select=None, exclude=None, have_divmod=False):
assistant
#Here is the Python program you requested.

    """Adds the full suite of special arithmetic methods (``__add__``,
    ``__sub__``, etc.) to the class.
    Parameters
    arith_method : function (optional)
    factory for special arithmetic methods, with op string:
    f(op, name, str_rep, default_axis=None, fill_zeros=None, **eval_kwargs)
    comp_method : function, optional,
    factory for rich comparison - signature: f(op, name, str_rep)
    use_numexpr : bool, default True
    whether to accelerate with numexpr, defaults to True
    force : bool, default False
    if False, checks whether function is defined **on ``cls.__dict__``**
    before defining if True, always defines functions on class base
    select : iterable of strings (optional)
    if passed, only sets functions with names in select
    exclude : iterable of strings (optional)
    if passed, will not set functions with names in exclude
    have_divmod : bool, (optional)
    should a divmod method be added? this method is special because it
    returns a tuple of cls instead of a single element of type cls
    """
    new_methods = _create_methods(arith_method, comp_method, bool_method, use_numexpr, default_axis=None, special=True, have_divmod=have_divmod)
    def _wrap_inplace_method(method):
        '\n                                return    an    inplace    wrapper    for    this    method\n                                '
        def f(self, other):
            result = method(self, other)
            self._update_inplace(result.reindex_like(self, copy=False)._data, verify_is_copy=False)
            return self
        return f
    new_methods.update(dict(__iadd__=_wrap_inplace_method(new_methods['__add__']), __isub__=_wrap_inplace_method(new_methods['__sub__']), __imul__=_wrap_inplace_method(new_methods['__mul__']), __itruediv__=_wrap_inplace_method(new_methods['__truediv__']), __ipow__=_wrap_inplace_method(new_methods['__pow__'])))
    if (not compat.PY3):
        new_methods['__idiv__'] = new_methods['__div__']
    add_methods(cls, new_methods=new_methods, force=force, select=select, exclude=exclude)