docs: def to_simple(self, value, **options):  # nolint
          " Simplify object. "
  
          # (string, unicode)
          if isinstance(value, basestring):
              return smart_unicode(value)
  
          # (int, long, float, real, complex, decimal)
          if isinstance(value, Number):
              return float(str(value)) if isinstance(value, Decimal) else value
  
          # (datetime, data, time)
          if isinstance(value, (datetime, date, time)):
              return self.to_simple_datetime(value)
  
          # (dict, ordereddict, mutable mapping)
          if isinstance(value, collections.MutableMapping):
              return dict(
                  (k, self.to_simple(v, **options)) for k, v in value.items())
  
          # (tuple, list, set, iterators)
          if isinstance(value, collections.Iterable):
              return [self.to_simple(o, **options) for o in value]
  
          # (None, True, False)
          if value is None or value is True or value is False:
              return value
  
          if hasattr(value, 'to_simple') and not inspect.isclass(value):
              return self.to_simple(value.to_simple(self), **options)
  
          if isinstance(value, Model):
              return self.to_simple_model(value, **options)
  
          return str(value)