'For a piece of data, attempts to recognize it and provide a simplified
form of something complex.
This brings complex Python data structures down to native types of the
serialization format(s).'

def to_simple(self, data, options):

    if (data is None):
        return None
    data_type = type(data)
    stype = _STR
    for dt in data_type.__mro__:
        try:
            stype = _SIMPLETYPES[dt]
            break
        except KeyError:
            pass
    if (stype == _NUM):
        return data
    if (stype == _DICT):
        to_simple = self.to_simple
        return {key: to_simple(val, options) for (key, val) in six.iteritems(data)}
    if (stype == _STR):
        return force_text(data)
    if (stype == _LIST):
        to_simple = self.to_simple
        return [to_simple(item, options) for item in data]
    if (stype == _BUNDLE):
        to_simple = self.to_simple
        return {key: to_simple(val, options) for (key, val) in six.iteritems(data.data)}
    if (stype == _DATETIME):
        return self.format_datetime(data)
    if (stype == _DATE):
        return self.format_date(data)
    if (stype == _TIME):
        return self.format_time(data)
