docs: def add(self, arg1, arg2=None, arg3=None, bucket_type=None):
          """
          Add inputs to a map/reduce operation. This method takes three
          different forms, depending on the provided inputs. You can
          specify either a RiakObject, a string bucket name, or a bucket,
          key, and additional arg.
  
          :param arg1: the object or bucket to add
          :type arg1: RiakObject, string
          :param arg2: a key or list of keys to add (if a bucket is
            given in arg1)
          :type arg2: string, list, None
          :param arg3: key data for this input (must be convertible to JSON)
          :type arg3: string, list, dict, None
          :param bucket_type: Optional name of a bucket type
          :type bucket_type: string, None
          :rtype: :class:`RiakMapReduce`
          """
          from riak.riak_object import RiakObject
          if (arg2 is None) and (arg3 is None):
              if isinstance(arg1, RiakObject):
                  return self.add_object(arg1)
              else:
                  return self.add_bucket(arg1, bucket_type)
          else:
              return self.add_bucket_key_data(arg1, arg2, arg3, bucket_type)