"""Define names for all type symbols known in the standard interpreter.



Types that are part of optional modules (e.g. array) are not listed.

"""

import sys



# Iterators in Python aren't a matter of type but of protocol.  A large

# and changing number of builtin types implement *some* flavor of

# iterator.  Don't check the type!  Use hasattr to check for both

# "__iter__" and "next" attributes instead.



NoneType = type(None)

TypeType = type

ObjectType = object



IntType = int

LongType = long

FloatType = float

BooleanType = bool

try:

    ComplexType = complex

except NameError:

    pass



StringType = str



# StringTypes is already outdated.  Instead of writing "type(x) in

# types.StringTypes", you should use "isinstance(x, basestring)".  But

# we keep around for compatibility with Python 2.2.

try:

    UnicodeType = unicode

    StringTypes = (StringType, UnicodeType)

except NameError:

    StringTypes = (StringType,)



BufferType = buffer



TupleType = tuple

ListType = list

DictType = DictionaryType = dict



def _f(): pass

FunctionType = type(_f)

LambdaType = type(lambda: None)         # Same as FunctionType

try:

    CodeType = type(_f.func_code)

except RuntimeError:

    # Execution in restricted environment

    pass



def _g():

    yield 1

GeneratorType = type(_g())



class _C:

    def _m(self): pass

ClassType = type(_C)

UnboundMethodType = type(_C._m)         # Same as MethodType

_x = _C()

InstanceType = type(_x)

MethodType = type(_x._m)



BuiltinFunctionType = type(len)

BuiltinMethodType = type([].append)     # Same as BuiltinFunctionType



ModuleType = type(sys)

FileType = file

XRangeType = xrange



try:

    raise TypeError

except TypeError:

    try:

        tb = sys.exc_info()[2]

        TracebackType = type(tb)

        FrameType = type(tb.tb_frame)

    except AttributeError:

        # In the restricted environment, exc_info returns (None, None,

        # None) Then, tb.tb_frame gives an attribute error

        pass

    tb = None; del tb



SliceType = slice

EllipsisType = type(Ellipsis)



DictProxyType = type(TypeType.__dict__)

NotImplementedType = type(NotImplemented)



# For Jython, the following two types are identical

GetSetDescriptorType = type(FunctionType.func_code)

MemberDescriptorType = type(FunctionType.func_globals)



del sys, _f, _g, _C, _x                           # Not for export

