  
          self._errors = {}
          if data is not None:
              attrs = self.restore_fields(data)
              attrs = self.clean_fields(attrs)
              attrs = self.clean_all(attrs)
          else:
              self._errors['non_field_errors'] = 'No input provided'
  
          if not self._errors:
              return self.restore_object(attrs, instance=getattr(self, 'object', None))
 
</s> remove             self._errors['non_field_errors'] = 'No input provided'
 </s> add             self._errors['non_field_errors'] = ['No input provided'] </s> remove                     data = clean_method(data, source)
 </s> add                     attrs = clean_method(attrs, source) </s> remove         return data
 </s> add         return attrs </s> remove     def clean_all(self, attrs):
 </s> add     def validate_all(self, attrs): </s> remove         fields = self.get_fields(serialize=False, data=data, nested=self.opts.nested)
 </s> add         fields = self.get_fields(serialize=False, data=attrs, nested=self.opts.nested)
            attrs = self.validate_fields(attrs)
            attrs = self.validate_all(attrs)
  
          self._errors = {}
          if data is not None:
              attrs = self.restore_fields(data)
            attrs = self.validate_fields(attrs)
            attrs = self.validate_all(attrs)
            attrs = self.validate_fields(attrs)
            attrs = self.validate_all(attrs)
          else:
              self._errors['non_field_errors'] = 'No input provided'
  
          if not self._errors:
              return self.restore_object(attrs, instance=getattr(self, 'object', None))
keep keep keep keep replace replace keep keep keep keep keep
 Clean up internal names and documentation 
rest_framework/serializers.py