def is_reducible(obj):
    '\n    Returns false if of a type which have special casing,\n    and should not have their __reduce__ methods used\n    '
    if (is_collections(obj) and (not isinstance(obj, collections.defaultdict))):
        return True
    if (type(obj) in NON_REDUCIBLE_TYPES):
        return False
    elif (obj is object):
        return False
    elif is_list_like(obj):
        return False
    elif isinstance(obj, types.ModuleType):
        return False
    elif is_dictionary_subclass(obj):
        return False
    elif is_reducible_sequence_subclass(obj):
        return False
    elif isinstance(getattr(obj, '__slots__', None), iterator_types):
        return False
    elif (is_type(obj) and (obj.__module__ == 'datetime')):
        return False
    return True
Returns false if of a type which have special casing,
and should not have their __reduce__ methods used
def is_reducible(obj):
    '\n    Returns false if of a type which have special casing,\n    and should not have their __reduce__ methods used\n    '
    if (is_collections(obj) and (not isinstance(obj, collections.defaultdict))):
        return True
    if (type(obj) in NON_REDUCIBLE_TYPES):
        return False
    elif (obj is object):
        return False
    elif is_list_like(obj):
        return False
    elif isinstance(obj, types.ModuleType):
        return False
    elif is_dictionary_subclass(obj):
        return False
    elif is_reducible_sequence_subclass(obj):
        return False
    elif isinstance(getattr(obj, '__slots__', None), iterator_types):
        return False
    elif (is_type(obj) and (obj.__module__ == 'datetime')):
        return False
    return True