# This file lists the contents of the Limited API and Stable ABI.
# Please append new items at the end.

# The syntax of this file is not fixed.
# It is designed to be read only by Tools/stable_abi.py, which can change
# without notice.

# For the history of the stable ABI prior to this file,
# see the history of PC/python3dll.c and before that, PC/python3.def,
# and PC/pythonXYstub.def


# The current format is TOML.

# There are these kinds of top-level "items":
# - struct: A C struct. See `struct_abi_kind` for how much of the struct is
#   exposed.
# - function: A function that must be kept available (and exported, i.e. not
#   converted to a macro).
# - const: A simple value, defined with `#define`.
# - macro: A preprocessor macro more complex than a simple `const` value.
# - data: An exported object, which must continue to be available but its exact
#   value may change.
# - typedef: A C typedef which is used in other definitions in the limited API.
#   Its size/layout/signature must not change.
# - feature_macro: Other items may be conditional on whether this macro
#   is defined or not.

# Each top-level item can have details defined for it:
# - added: The version in which the item was added to the stable ABI.
# - ifdef: The item is only available if the given feature_macro is defined.
# - abi_only: If present, the item is not part of the Limited API, but it *is*
#   part of the stable ABI. The item will not show up in user-facing docs.
#   Typically used for:
#   - private functions called by public macros, e.g. _Py_BuildValue_SizeT
#   - items that were part of the limited API in the past, and must remain part
#     of the stable ABI.
#   - a combination of the above (functions that were called by macros that
#     were public in the past)
# - struct_abi_kind: for `struct`, defines how much of the struct is exposed:
#   - 'full-abi': All of the struct is part of the ABI, including the size
#     (users may define arrays of these structs).
#     Typically used for initalization, rather than at runtime.
#   - 'opaque': No members are part of the ABI, nor is the size. The Limited
#     API only handles these via pointers. The C definition should be
#     incomplete (opaque).
#   - 'members': Only specific members are part of the stable ABI.
#     The struct's size may change, so it can't be used in arrays.
#     Do not add new structs of this kind without an extremely good reason.
# - members: For `struct` with struct_abi_kind = 'members', a list of the
#   exposed members.
# - doc: for `feature_macro`, the blurb added in documentation
# - windows: for `feature_macro`, this macro is defined on Windows.
#   (This info is used to generate the DLL manifest and needs to be available
#   on all platforms.)

# Removing items from this file is generally not allowed, and additions should
# be considered with that in mind. See the devguide for exact rules:
#    https://devguide.python.org/c-api/#limited-api

# User-facing docs are at:
#    https://docs.python.org/3/c-api/stable.html#stable


# Feature macros for optional functionality:

[feature_macro.MS_WINDOWS]
    doc = 'on Windows'
    windows = true
[feature_macro.HAVE_FORK]
    doc = 'on platforms with fork()'
[feature_macro.USE_STACKCHECK]
    doc = 'on platforms with USE_STACKCHECK'
    windows = 'maybe'
[feature_macro.PY_HAVE_THREAD_NATIVE_ID]
    doc = 'on platforms with native thread IDs'
    windows = true
[feature_macro.Py_REF_DEBUG]
    doc = 'when Python is compiled in debug mode (with Py_REF_DEBUG)'
    windows = 'maybe'


# Mentioned in PEP 384:

[struct.PyObject]
    added = '3.2'
    members = ['ob_refcnt', 'ob_type']
    struct_abi_kind = 'members'
[struct.PyVarObject]
    added = '3.2'
    members = ['ob_base', 'ob_size']
    struct_abi_kind = 'members'
[struct.PyMethodDef]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyMemberDef]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyGetSetDef]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyModuleDef_Base]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyModuleDef]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyStructSequence_Field]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyStructSequence_Desc]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyType_Slot]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyType_Spec]
    added = '3.2'
    struct_abi_kind = 'full-abi'
[struct.PyThreadState]
    added = '3.2'
    struct_abi_kind = 'opaque'
[struct.PyInterpreterState]
    added = '3.2'
    struct_abi_kind = 'opaque'
[struct.PyFrameObject]
    added = '3.2'
    struct_abi_kind = 'opaque'
[struct.symtable]
    added = '3.2'
    struct_abi_kind = 'opaque'
[struct.PyWeakReference]
    added = '3.2'
    struct_abi_kind = 'opaque'
[struct.PyLongObject]
    added = '3.2'
    struct_abi_kind = 'opaque'
[struct.PyTypeObject]
    added = '3.2'
    struct_abi_kind = 'opaque'

[function.PyType_FromSpec]
    added = '3.2'

[const.Py_tp_dealloc]
    added = '3.2'
[const.Py_tp_getattr]
    added = '3.2'
[const.Py_tp_setattr]
    added = '3.2'
[const.Py_tp_repr]
    added = '3.2'
[const.Py_tp_hash]
    added = '3.2'
[const.Py_tp_call]
    added = '3.2'
[const.Py_tp_str]
    added = '3.2'
[const.Py_tp_getattro]
    added = '3.2'
[const.Py_tp_setattro]
    added = '3.2'
[const.Py_tp_doc]
    added = '3.2'
[const.Py_tp_traverse]
    added = '3.2'
[const.Py_tp_clear]
    added = '3.2'
[const.Py_tp_richcompare]
    added = '3.2'
[const.Py_tp_iter]
    added = '3.2'
[const.Py_tp_iternext]
    added = '3.2'
[const.Py_tp_methods]
    added = '3.2'
[const.Py_tp_base]
    added = '3.2'
[const.Py_tp_descr_get]
    added = '3.2'
[const.Py_tp_descr_set]
    added = '3.2'
[const.Py_tp_init]
    added = '3.2'
[const.Py_tp_alloc]
    added = '3.2'
[const.Py_tp_new]
    added = '3.2'
[const.Py_tp_members]
    added = '3.2'
[const.Py_tp_getset]
    added = '3.2'
[const.Py_tp_free]
    added = '3.2'
[const.Py_tp_is_gc]
    added = '3.2'
[const.Py_tp_bases]
    added = '3.2'
[const.Py_tp_del]
    added = '3.2'
[const.Py_nb_add]
    added = '3.2'
[const.Py_nb_subtract]
    added = '3.2'
[const.Py_nb_multiply]
    added = '3.2'
[const.Py_nb_remainder]
    added = '3.2'
[const.Py_nb_divmod]
    added = '3.2'
[const.Py_nb_power]
    added = '3.2'
[const.Py_nb_negative]
    added = '3.2'
[const.Py_nb_positive]
    added = '3.2'
[const.Py_nb_absolute]
    added = '3.2'
[const.Py_nb_bool]
    added = '3.2'
[const.Py_nb_invert]
    added = '3.2'
[const.Py_nb_lshift]
    added = '3.2'
[const.Py_nb_rshift]
    added = '3.2'
[const.Py_nb_and]
    added = '3.2'
[const.Py_nb_xor]
    added = '3.2'
[const.Py_nb_or]
    added = '3.2'
[const.Py_nb_int]
    added = '3.2'
[const.Py_nb_float]
    added = '3.2'
[const.Py_nb_inplace_add]
    added = '3.2'
[const.Py_nb_inplace_subtract]
    added = '3.2'
[const.Py_nb_inplace_multiply]
    added = '3.2'
[const.Py_nb_inplace_remainder]
    added = '3.2'
[const.Py_nb_inplace_power]
    added = '3.2'
[const.Py_nb_inplace_lshift]
    added = '3.2'
[const.Py_nb_inplace_rshift]
    added = '3.2'
[const.Py_nb_inplace_and]
    added = '3.2'
[const.Py_nb_inplace_xor]
    added = '3.2'
[const.Py_nb_inplace_or]
    added = '3.2'
[const.Py_nb_floor_divide]
    added = '3.2'
[const.Py_nb_true_divide]
    added = '3.2'
[const.Py_nb_inplace_floor_divide]
    added = '3.2'
[const.Py_nb_inplace_true_divide]
    added = '3.2'
[const.Py_nb_index]
    added = '3.2'
[const.Py_sq_length]
    added = '3.2'
[const.Py_sq_concat]
    added = '3.2'
[const.Py_sq_repeat]
    added = '3.2'
[const.Py_sq_item]
    added = '3.2'
[const.Py_sq_ass_item]
    added = '3.2'
[const.Py_sq_contains]
    added = '3.2'
[const.Py_sq_inplace_concat]
    added = '3.2'
[const.Py_sq_inplace_repeat]
    added = '3.2'
[const.Py_mp_length]
    added = '3.2'
[const.Py_mp_subscript]
    added = '3.2'
[const.Py_mp_ass_subscript]
    added = '3.2'

[typedef.Py_uintptr_t]
    added = '3.2'
[typedef.Py_intptr_t]
    added = '3.2'
[typedef.Py_ssize_t]
    added = '3.2'
[typedef.unaryfunc]
    added = '3.2'
[typedef.binaryfunc]
    added = '3.2'
[typedef.ternaryfunc]
    added = '3.2'
[typedef.inquiry]
    added = '3.2'
[typedef.lenfunc]
    added = '3.2'
[typedef.ssizeargfunc]
    added = '3.2'
[typedef.ssizessizeargfunc]
    added = '3.2'
[typedef.ssizeobjargproc]
    added = '3.2'
[typedef.ssizessizeobjargproc]
    added = '3.2'
[typedef.objobjargproc]
    added = '3.2'
[typedef.objobjproc]
    added = '3.2'
[typedef.visitproc]
    added = '3.2'
[typedef.traverseproc]
    added = '3.2'
[typedef.destructor]
    added = '3.2'
[typedef.getattrfunc]
    added = '3.2'
[typedef.getattrofunc]
    added = '3.2'
[typedef.setattrfunc]
    added = '3.2'
[typedef.setattrofunc]
    added = '3.2'
[typedef.reprfunc]
    added = '3.2'
[typedef.hashfunc]
    added = '3.2'
[typedef.richcmpfunc]
    added = '3.2'
[typedef.getiterfunc]
    added = '3.2'
[typedef.iternextfunc]
    added = '3.2'
[typedef.descrgetfunc]
    added = '3.2'
[typedef.descrsetfunc]
    added = '3.2'
[typedef.initproc]
    added = '3.2'
[typedef.newfunc]
    added = '3.2'
[typedef.allocfunc]
    added = '3.2'
[typedef.PyCFunction]
    added = '3.2'
[typedef.PyCFunctionWithKeywords]
    added = '3.2'
[typedef.PyCapsule_Destructor]
    added = '3.2'
[typedef.getter]
    added = '3.2'
[typedef.setter]
    added = '3.2'
[typedef.PyOS_sighandler_t]
    added = '3.2'
[typedef.PyGILState_STATE]
    added = '3.2'
[typedef.Py_UCS4]
    added = '3.2'

[macro.Py_BEGIN_ALLOW_THREADS]
    added = '3.2'
[macro.Py_BLOCK_THREADS]
    added = '3.2'
[macro.Py_UNBLOCK_THREADS]
    added = '3.2'
[macro.Py_END_ALLOW_THREADS]
    added = '3.2'

# The following were added in PC/python3.def in the initial stable ABI commit,
# 4d0d471a8031de90a2b1ce99c4ac4780e60b3bc9,
# and later amendments in 3.2:
# 0d012f284be829c6217f60523db0e1671b7db9d9
# c83bc3c1fbed14d27a5de3032e24d2cf006a7c4b

[function.PyArg_Parse]
    added = '3.2'
[function.PyArg_ParseTuple]
    added = '3.2'
[function.PyArg_ParseTupleAndKeywords]
    added = '3.2'
[function.PyArg_UnpackTuple]
    added = '3.2'
[function.PyArg_VaParse]
    added = '3.2'
[function.PyArg_VaParseTupleAndKeywords]
    added = '3.2'
[function.PyArg_ValidateKeywordArguments]
    added = '3.2'
[data.PyBaseObject_Type]
    added = '3.2'
[function.PyBool_FromLong]
    added = '3.2'
[data.PyBool_Type]
    added = '3.2'
[data.PyByteArrayIter_Type]
    added = '3.2'
[function.PyByteArray_AsString]
    added = '3.2'
[function.PyByteArray_Concat]
    added = '3.2'
[function.PyByteArray_FromObject]
    added = '3.2'
[function.PyByteArray_FromStringAndSize]
    added = '3.2'
[function.PyByteArray_Resize]
    added = '3.2'
[function.PyByteArray_Size]
    added = '3.2'
[data.PyByteArray_Type]
    added = '3.2'
[data.PyBytesIter_Type]
    added = '3.2'
[function.PyBytes_AsString]
    added = '3.2'
[function.PyBytes_AsStringAndSize]
    added = '3.2'
[function.PyBytes_Concat]
    added = '3.2'
[function.PyBytes_ConcatAndDel]
    added = '3.2'
[function.PyBytes_DecodeEscape]
    added = '3.2'
[function.PyBytes_FromFormat]
    added = '3.2'
[function.PyBytes_FromFormatV]
    added = '3.2'
[function.PyBytes_FromObject]
    added = '3.2'
[function.PyBytes_FromString]
    added = '3.2'
[function.PyBytes_FromStringAndSize]
    added = '3.2'
[function.PyBytes_Repr]
    added = '3.2'
[function.PyBytes_Size]
    added = '3.2'
[data.PyBytes_Type]
    added = '3.2'
[function.PyCFunction_Call]
    added = '3.2'
[function.PyCFunction_GetFlags]
    added = '3.2'
[function.PyCFunction_GetFunction]
    added = '3.2'
[function.PyCFunction_GetSelf]
    added = '3.2'
[function.PyCFunction_NewEx]
    added = '3.2'
[data.PyCFunction_Type]
    added = '3.2'
[function.PyCallIter_New]
    added = '3.2'
[data.PyCallIter_Type]
    added = '3.2'
[function.PyCallable_Check]
    added = '3.2'
[function.PyCapsule_GetContext]
    added = '3.2'
[function.PyCapsule_GetDestructor]
    added = '3.2'
[function.PyCapsule_GetName]
    added = '3.2'
[function.PyCapsule_GetPointer]
    added = '3.2'
[function.PyCapsule_Import]
    added = '3.2'
[function.PyCapsule_IsValid]
    added = '3.2'
[function.PyCapsule_New]
    added = '3.2'
[function.PyCapsule_SetContext]
    added = '3.2'
[function.PyCapsule_SetDestructor]
    added = '3.2'
[function.PyCapsule_SetName]
    added = '3.2'
[function.PyCapsule_SetPointer]
    added = '3.2'
[data.PyCapsule_Type]
    added = '3.2'
[data.PyClassMethodDescr_Type]
    added = '3.2'
[function.PyCodec_BackslashReplaceErrors]
    added = '3.2'
[function.PyCodec_Decode]
    added = '3.2'
[function.PyCodec_Decoder]
    added = '3.2'
[function.PyCodec_Encode]
    added = '3.2'
[function.PyCodec_Encoder]
    added = '3.2'
[function.PyCodec_IgnoreErrors]
    added = '3.2'
[function.PyCodec_IncrementalDecoder]
    added = '3.2'
[function.PyCodec_IncrementalEncoder]
    added = '3.2'
[function.PyCodec_KnownEncoding]
    added = '3.2'
[function.PyCodec_LookupError]
    added = '3.2'
[function.PyCodec_Register]
    added = '3.2'
[function.PyCodec_RegisterError]
    added = '3.2'
[function.PyCodec_ReplaceErrors]
    added = '3.2'
[function.PyCodec_StreamReader]
    added = '3.2'
[function.PyCodec_StreamWriter]
    added = '3.2'
[function.PyCodec_StrictErrors]
    added = '3.2'
[function.PyCodec_XMLCharRefReplaceErrors]
    added = '3.2'
[function.PyComplex_FromDoubles]
    added = '3.2'
[function.PyComplex_ImagAsDouble]
    added = '3.2'
[function.PyComplex_RealAsDouble]
    added = '3.2'
[data.PyComplex_Type]
    added = '3.2'
[function.PyDescr_NewClassMethod]
    added = '3.2'
[function.PyDescr_NewGetSet]
    added = '3.2'
[function.PyDescr_NewMember]
    added = '3.2'
[function.PyDescr_NewMethod]
    added = '3.2'
[data.PyDictItems_Type]
    added = '3.2'
[data.PyDictIterItem_Type]
    added = '3.2'
[data.PyDictIterKey_Type]
    added = '3.2'
[data.PyDictIterValue_Type]
    added = '3.2'
[data.PyDictKeys_Type]
    added = '3.2'
[function.PyDictProxy_New]
    added = '3.2'
[data.PyDictProxy_Type]
    added = '3.2'
[data.PyDictValues_Type]
    added = '3.2'
[function.PyDict_Clear]
    added = '3.2'
[function.PyDict_Contains]
    added = '3.2'
[function.PyDict_Copy]
    added = '3.2'
[function.PyDict_DelItem]
    added = '3.2'
[function.PyDict_DelItemString]
    added = '3.2'
[function.PyDict_GetItem]
    added = '3.2'
[function.PyDict_GetItemString]
    added = '3.2'
[function.PyDict_GetItemWithError]
    added = '3.2'
[function.PyDict_Items]
    added = '3.2'
[function.PyDict_Keys]
    added = '3.2'
[function.PyDict_Merge]
    added = '3.2'
[function.PyDict_MergeFromSeq2]
    added = '3.2'
[function.PyDict_New]
    added = '3.2'
[function.PyDict_Next]
    added = '3.2'
[function.PyDict_SetItem]
    added = '3.2'
[function.PyDict_SetItemString]
    added = '3.2'
[function.PyDict_Size]
    added = '3.2'
[data.PyDict_Type]
    added = '3.2'
[function.PyDict_Update]
    added = '3.2'
[function.PyDict_Values]
    added = '3.2'
[data.PyEllipsis_Type]
    added = '3.2'
[data.PyEnum_Type]
    added = '3.2'
[function.PyErr_BadArgument]
    added = '3.2'
[function.PyErr_BadInternalCall]
    added = '3.2'
[function.PyErr_CheckSignals]
    added = '3.2'
[function.PyErr_Clear]
    added = '3.2'
[function.PyErr_Display]
    added = '3.2'
[function.PyErr_ExceptionMatches]
    added = '3.2'
[function.PyErr_Fetch]
    added = '3.2'
[function.PyErr_Format]
    added = '3.2'
[function.PyErr_GivenExceptionMatches]
    added = '3.2'
[function.PyErr_NewException]
    added = '3.2'
[function.PyErr_NewExceptionWithDoc]
    added = '3.2'
[function.PyErr_NoMemory]
    added = '3.2'
[function.PyErr_NormalizeException]
    added = '3.2'
[function.PyErr_Occurred]
    added = '3.2'
[function.PyErr_Print]
    added = '3.2'
[function.PyErr_PrintEx]
    added = '3.2'
[function.PyErr_ProgramText]
    added = '3.2'
[function.PyErr_Restore]
    added = '3.2'
[function.PyErr_SetFromErrno]
    added = '3.2'
[function.PyErr_SetFromErrnoWithFilename]
    added = '3.2'
[function.PyErr_SetFromErrnoWithFilenameObject]
    added = '3.2'
[function.PyErr_SetInterrupt]
    added = '3.2'
[function.PyErr_SetNone]
    added = '3.2'
[function.PyErr_SetObject]
    added = '3.2'
[function.PyErr_SetString]
    added = '3.2'
[function.PyErr_SyntaxLocation]
    added = '3.2'
[function.PyErr_WarnEx]
    added = '3.2'
[function.PyErr_WarnExplicit]
    added = '3.2'
[function.PyErr_WarnFormat]
    added = '3.2'
[function.PyErr_WriteUnraisable]
    added = '3.2'
[function.PyEval_AcquireLock]
    added = '3.2'
[function.PyEval_AcquireThread]
    added = '3.2'
[function.PyEval_CallFunction]
    added = '3.2'
[function.PyEval_CallMethod]
    added = '3.2'
[function.PyEval_CallObjectWithKeywords]
    added = '3.2'
[function.PyEval_EvalCode]
    added = '3.2'
[function.PyEval_EvalCodeEx]
    added = '3.2'
[function.PyEval_EvalFrame]
    added = '3.2'
[function.PyEval_EvalFrameEx]
    added = '3.2'
[function.PyEval_GetBuiltins]
    added = '3.2'
[function.PyEval_GetFrame]
    added = '3.2'
[function.PyEval_GetFuncDesc]
    added = '3.2'
[function.PyEval_GetFuncName]
    added = '3.2'
[function.PyEval_GetGlobals]
    added = '3.2'
[function.PyEval_GetLocals]
    added = '3.2'
[function.PyEval_InitThreads]
    added = '3.2'
[function.PyEval_ReleaseLock]
    added = '3.2'
[function.PyEval_ReleaseThread]
    added = '3.2'
[function.PyEval_RestoreThread]
    added = '3.2'
[function.PyEval_SaveThread]
    added = '3.2'
[function.PyEval_ThreadsInitialized]
    added = '3.2'
[data.PyExc_ArithmeticError]
    added = '3.2'
[data.PyExc_AssertionError]
    added = '3.2'
[data.PyExc_AttributeError]
    added = '3.2'
[data.PyExc_BaseException]
    added = '3.2'
[data.PyExc_BaseExceptionGroup]
    added = '3.11'
[data.PyExc_BufferError]
    added = '3.2'
[data.PyExc_BytesWarning]
    added = '3.2'
[data.PyExc_DeprecationWarning]
    added = '3.2'
[data.PyExc_EOFError]
    added = '3.2'
[data.PyExc_EnvironmentError]
    added = '3.2'
[data.PyExc_Exception]
    added = '3.2'
[data.PyExc_FloatingPointError]
    added = '3.2'
[data.PyExc_FutureWarning]
    added = '3.2'
[data.PyExc_GeneratorExit]
    added = '3.2'
[data.PyExc_IOError]
    added = '3.2'
[data.PyExc_ImportError]
    added = '3.2'
[data.PyExc_ImportWarning]
    added = '3.2'
[data.PyExc_IndentationError]
    added = '3.2'
[data.PyExc_IndexError]
    added = '3.2'
[data.PyExc_KeyError]
    added = '3.2'
[data.PyExc_KeyboardInterrupt]
    added = '3.2'
[data.PyExc_LookupError]
    added = '3.2'
[data.PyExc_MemoryError]
    added = '3.2'
[data.PyExc_NameError]
    added = '3.2'
[data.PyExc_NotImplementedError]
    added = '3.2'
[data.PyExc_OSError]
    added = '3.2'
[data.PyExc_OverflowError]
    added = '3.2'
[data.PyExc_PendingDeprecationWarning]
    added = '3.2'
[data.PyExc_ReferenceError]
    added = '3.2'
[data.PyExc_RuntimeError]
    added = '3.2'
[data.PyExc_RuntimeWarning]
    added = '3.2'
[data.PyExc_StopIteration]
    added = '3.2'
[data.PyExc_SyntaxError]
    added = '3.2'
[data.PyExc_SyntaxWarning]
    added = '3.2'
[data.PyExc_SystemError]
    added = '3.2'
[data.PyExc_SystemExit]
    added = '3.2'
[data.PyExc_TabError]
    added = '3.2'
[data.PyExc_TypeError]
    added = '3.2'
[data.PyExc_UnboundLocalError]
    added = '3.2'
[data.PyExc_UnicodeDecodeError]
    added = '3.2'
[data.PyExc_UnicodeEncodeError]
    added = '3.2'
[data.PyExc_UnicodeError]
    added = '3.2'
[data.PyExc_UnicodeTranslateError]
    added = '3.2'
[data.PyExc_UnicodeWarning]
    added = '3.2'
[data.PyExc_UserWarning]
    added = '3.2'
[data.PyExc_ValueError]
    added = '3.2'
[data.PyExc_Warning]
    added = '3.2'
[data.PyExc_ZeroDivisionError]
    added = '3.2'
[function.PyException_GetCause]
    added = '3.2'
[function.PyException_GetContext]
    added = '3.2'
[function.PyException_GetTraceback]
    added = '3.2'
[function.PyException_SetCause]
    added = '3.2'
[function.PyException_SetContext]
    added = '3.2'
[function.PyException_SetTraceback]
    added = '3.2'
[function.PyFile_FromFd]
    added = '3.2'
[function.PyFile_GetLine]
    added = '3.2'
[function.PyFile_WriteObject]
    added = '3.2'
[function.PyFile_WriteString]
    added = '3.2'
[data.PyFilter_Type]
    added = '3.2'
[function.PyFloat_AsDouble]
    added = '3.2'
[function.PyFloat_FromDouble]
    added = '3.2'
[function.PyFloat_FromString]
    added = '3.2'
[function.PyFloat_GetInfo]
    added = '3.2'
[function.PyFloat_GetMax]
    added = '3.2'
[function.PyFloat_GetMin]
    added = '3.2'
[data.PyFloat_Type]
    added = '3.2'
[function.PyFrozenSet_New]
    added = '3.2'
[data.PyFrozenSet_Type]
    added = '3.2'
[function.PyGC_Collect]
    added = '3.2'
[function.PyGILState_Ensure]
    added = '3.2'
[function.PyGILState_GetThisThreadState]
    added = '3.2'
[function.PyGILState_Release]
    added = '3.2'
[data.PyGetSetDescr_Type]
    added = '3.2'
[function.PyImport_AddModule]
    added = '3.2'
[function.PyImport_AppendInittab]
    added = '3.2'
[function.PyImport_ExecCodeModule]
    added = '3.2'
[function.PyImport_ExecCodeModuleEx]
    added = '3.2'
[function.PyImport_ExecCodeModuleWithPathnames]
    added = '3.2'
[function.PyImport_GetImporter]
    added = '3.2'
[function.PyImport_GetMagicNumber]
    added = '3.2'
[function.PyImport_GetMagicTag]
    added = '3.2'
[function.PyImport_GetModuleDict]
    added = '3.2'
[function.PyImport_Import]
    added = '3.2'
[function.PyImport_ImportFrozenModule]
    added = '3.2'
[function.PyImport_ImportModule]
    added = '3.2'
[function.PyImport_ImportModuleLevel]
    added = '3.2'
[function.PyImport_ImportModuleNoBlock]
    added = '3.2'
[function.PyImport_ReloadModule]
    added = '3.2'
[function.PyInterpreterState_Clear]
    added = '3.2'
[function.PyInterpreterState_Delete]
    added = '3.2'
[function.PyInterpreterState_New]
    added = '3.2'
[function.PyIter_Next]
    added = '3.2'
[data.PyListIter_Type]
    added = '3.2'
[data.PyListRevIter_Type]
    added = '3.2'
[function.PyList_Append]
    added = '3.2'
[function.PyList_AsTuple]
    added = '3.2'
[function.PyList_GetItem]
    added = '3.2'
[function.PyList_GetSlice]
    added = '3.2'
[function.PyList_Insert]
    added = '3.2'
[function.PyList_New]
    added = '3.2'
[function.PyList_Reverse]
    added = '3.2'
[function.PyList_SetItem]
    added = '3.2'
[function.PyList_SetSlice]
    added = '3.2'
[function.PyList_Size]
    added = '3.2'
[function.PyList_Sort]
    added = '3.2'
[data.PyList_Type]
    added = '3.2'
[data.PyLongRangeIter_Type]
    added = '3.2'
[function.PyLong_AsDouble]
    added = '3.2'
[function.PyLong_AsLong]
    added = '3.2'
[function.PyLong_AsLongAndOverflow]
    added = '3.2'
[function.PyLong_AsLongLong]
    added = '3.2'
[function.PyLong_AsLongLongAndOverflow]
    added = '3.2'
[function.PyLong_AsSize_t]
    added = '3.2'
[function.PyLong_AsSsize_t]
    added = '3.2'
[function.PyLong_AsUnsignedLong]
    added = '3.2'
[function.PyLong_AsUnsignedLongLong]
    added = '3.2'
[function.PyLong_AsUnsignedLongLongMask]
    added = '3.2'
[function.PyLong_AsUnsignedLongMask]
    added = '3.2'
[function.PyLong_AsVoidPtr]
    added = '3.2'
[function.PyLong_FromDouble]
    added = '3.2'
[function.PyLong_FromLong]
    added = '3.2'
[function.PyLong_FromLongLong]
    added = '3.2'
[function.PyLong_FromSize_t]
    added = '3.2'
[function.PyLong_FromSsize_t]
    added = '3.2'
[function.PyLong_FromString]
    added = '3.2'
[function.PyLong_FromUnsignedLong]
    added = '3.2'
[function.PyLong_FromUnsignedLongLong]
    added = '3.2'
[function.PyLong_FromVoidPtr]
    added = '3.2'
[function.PyLong_GetInfo]
    added = '3.2'
[data.PyLong_Type]
    added = '3.2'
[data.PyMap_Type]
    added = '3.2'
[function.PyMapping_Check]
    added = '3.2'
[function.PyMapping_GetItemString]
    added = '3.2'
[function.PyMapping_HasKey]
    added = '3.2'
[function.PyMapping_HasKeyString]
    added = '3.2'
[function.PyMapping_Items]
    added = '3.2'
[function.PyMapping_Keys]
    added = '3.2'
[function.PyMapping_Length]
    added = '3.2'
[function.PyMapping_SetItemString]
    added = '3.2'
[function.PyMapping_Size]
    added = '3.2'
[function.PyMapping_Values]
    added = '3.2'
[function.PyMem_Free]
    added = '3.2'
[function.PyMem_Malloc]
    added = '3.2'
[function.PyMem_Realloc]
    added = '3.2'
[data.PyMemberDescr_Type]
    added = '3.2'
[function.PyMemoryView_FromObject]
    added = '3.2'
[function.PyMemoryView_GetContiguous]
    added = '3.2'
[data.PyMemoryView_Type]
    added = '3.2'
[data.PyMethodDescr_Type]
    added = '3.2'
[function.PyModule_AddIntConstant]
    added = '3.2'
[function.PyModule_AddObject]
    added = '3.2'
[function.PyModule_AddStringConstant]
    added = '3.2'
[function.PyModule_Create2]
    added = '3.2'
[function.PyModule_GetDef]
    added = '3.2'
[function.PyModule_GetDict]
    added = '3.2'
[function.PyModule_GetFilename]
    added = '3.2'
[function.PyModule_GetFilenameObject]
    added = '3.2'
[function.PyModule_GetName]
    added = '3.2'
[function.PyModule_GetState]
    added = '3.2'
[function.PyModule_New]
    added = '3.2'
[data.PyModule_Type]
    added = '3.2'
[function.PyNumber_Absolute]
    added = '3.2'
[function.PyNumber_Add]
    added = '3.2'
[function.PyNumber_And]
    added = '3.2'
[function.PyNumber_AsSsize_t]
    added = '3.2'
[function.PyNumber_Check]
    added = '3.2'
[function.PyNumber_Divmod]
    added = '3.2'
[function.PyNumber_Float]
    added = '3.2'
[function.PyNumber_FloorDivide]
    added = '3.2'
[function.PyNumber_InPlaceAdd]
    added = '3.2'
[function.PyNumber_InPlaceAnd]
    added = '3.2'
[function.PyNumber_InPlaceFloorDivide]
    added = '3.2'
[function.PyNumber_InPlaceLshift]
    added = '3.2'
[function.PyNumber_InPlaceMultiply]
    added = '3.2'
[function.PyNumber_InPlaceOr]
    added = '3.2'
[function.PyNumber_InPlacePower]
    added = '3.2'
[function.PyNumber_InPlaceRemainder]
    added = '3.2'
[function.PyNumber_InPlaceRshift]
    added = '3.2'
[function.PyNumber_InPlaceSubtract]
    added = '3.2'
[function.PyNumber_InPlaceTrueDivide]
    added = '3.2'
[function.PyNumber_InPlaceXor]
    added = '3.2'
[function.PyNumber_Index]
    added = '3.2'
[function.PyNumber_Invert]
    added = '3.2'
[function.PyNumber_Long]
    added = '3.2'
[function.PyNumber_Lshift]
    added = '3.2'
[function.PyNumber_Multiply]
    added = '3.2'
[function.PyNumber_Negative]
    added = '3.2'
[function.PyNumber_Or]
    added = '3.2'
[function.PyNumber_Positive]
    added = '3.2'
[function.PyNumber_Power]
    added = '3.2'
[function.PyNumber_Remainder]
    added = '3.2'
[function.PyNumber_Rshift]
    added = '3.2'
[function.PyNumber_Subtract]
    added = '3.2'
[function.PyNumber_ToBase]
    added = '3.2'
[function.PyNumber_TrueDivide]
    added = '3.2'
[function.PyNumber_Xor]
    added = '3.2'
[function.PyOS_AfterFork]
    added = '3.2'
    ifdef = 'HAVE_FORK'
[data.PyOS_InputHook]
    added = '3.2'
[function.PyOS_InterruptOccurred]
    added = '3.2'
[function.PyOS_double_to_string]
    added = '3.2'
[function.PyOS_getsig]
    added = '3.2'
[function.PyOS_mystricmp]
    added = '3.2'
[function.PyOS_mystrnicmp]
    added = '3.2'
[function.PyOS_setsig]
    added = '3.2'
[function.PyOS_snprintf]
    added = '3.2'
[function.PyOS_string_to_double]
    added = '3.2'
[function.PyOS_strtol]
    added = '3.2'
[function.PyOS_strtoul]
    added = '3.2'
[function.PyOS_vsnprintf]
    added = '3.2'
[function.PyObject_ASCII]
    added = '3.2'
[function.PyObject_AsFileDescriptor]
    added = '3.2'
[function.PyObject_Bytes]
    added = '3.2'
[function.PyObject_Call]
    added = '3.2'
[function.PyObject_CallFunction]
    added = '3.2'
[function.PyObject_CallFunctionObjArgs]
    added = '3.2'
[function.PyObject_CallMethod]
    added = '3.2'
[function.PyObject_CallMethodObjArgs]
    added = '3.2'
[function.PyObject_CallObject]
    added = '3.2'
[function.PyObject_ClearWeakRefs]
    added = '3.2'
[function.PyObject_DelItem]
    added = '3.2'
[function.PyObject_DelItemString]
    added = '3.2'
[function.PyObject_Dir]
    added = '3.2'
[function.PyObject_Format]
    added = '3.2'
[function.PyObject_Free]
    added = '3.2'
[function.PyObject_GC_Del]
    added = '3.2'
[function.PyObject_GC_Track]
    added = '3.2'
[function.PyObject_GC_UnTrack]
    added = '3.2'
[function.PyObject_GenericGetAttr]
    added = '3.2'
[function.PyObject_GenericSetAttr]
    added = '3.2'
[function.PyObject_GetAttr]
    added = '3.2'
[function.PyObject_GetAttrString]
    added = '3.2'
[function.PyObject_GetItem]
    added = '3.2'
[function.PyObject_GetIter]
    added = '3.2'
[function.PyObject_HasAttr]
    added = '3.2'
[function.PyObject_HasAttrString]
    added = '3.2'
[function.PyObject_Hash]
    added = '3.2'
[function.PyObject_HashNotImplemented]
    added = '3.2'
[function.PyObject_Init]
    added = '3.2'
[function.PyObject_InitVar]
    added = '3.2'
[function.PyObject_IsInstance]
    added = '3.2'
[function.PyObject_IsSubclass]
    added = '3.2'
[function.PyObject_IsTrue]
    added = '3.2'
[function.PyObject_Length]
    added = '3.2'
[function.PyObject_Malloc]
    added = '3.2'
[function.PyObject_Not]
    added = '3.2'
[function.PyObject_Realloc]
    added = '3.2'
[function.PyObject_Repr]
    added = '3.2'
[function.PyObject_RichCompare]
    added = '3.2'
[function.PyObject_RichCompareBool]
    added = '3.2'
[function.PyObject_SelfIter]
    added = '3.2'
[function.PyObject_SetAttr]
    added = '3.2'
[function.PyObject_SetAttrString]
    added = '3.2'
[function.PyObject_SetItem]
    added = '3.2'
[function.PyObject_Size]
    added = '3.2'
[function.PyObject_Str]
    added = '3.2'
[function.PyObject_Type]
    added = '3.2'
[data.PyProperty_Type]
    added = '3.2'
[data.PyRangeIter_Type]
    added = '3.2'
[data.PyRange_Type]
    added = '3.2'
[data.PyReversed_Type]
    added = '3.2'
[function.PySeqIter_New]
    added = '3.2'
[data.PySeqIter_Type]
    added = '3.2'
[function.PySequence_Check]
    added = '3.2'
[function.PySequence_Concat]
    added = '3.2'
[function.PySequence_Contains]
    added = '3.2'
[function.PySequence_Count]
    added = '3.2'
[function.PySequence_DelItem]
    added = '3.2'
[function.PySequence_DelSlice]
    added = '3.2'
[function.PySequence_Fast]
    added = '3.2'
[function.PySequence_GetItem]
    added = '3.2'
[function.PySequence_GetSlice]
    added = '3.2'
[function.PySequence_In]
    added = '3.2'
[function.PySequence_InPlaceConcat]
    added = '3.2'
[function.PySequence_InPlaceRepeat]
    added = '3.2'
[function.PySequence_Index]
    added = '3.2'
[function.PySequence_Length]
    added = '3.2'
[function.PySequence_List]
    added = '3.2'
[function.PySequence_Repeat]
    added = '3.2'
[function.PySequence_SetItem]
    added = '3.2'
[function.PySequence_SetSlice]
    added = '3.2'
[function.PySequence_Size]
    added = '3.2'
[function.PySequence_Tuple]
    added = '3.2'
[data.PySetIter_Type]
    added = '3.2'
[function.PySet_Add]
    added = '3.2'
[function.PySet_Clear]
    added = '3.2'
[function.PySet_Contains]
    added = '3.2'
[function.PySet_Discard]
    added = '3.2'
[function.PySet_New]
    added = '3.2'
[function.PySet_Pop]
    added = '3.2'
[function.PySet_Size]
    added = '3.2'
[data.PySet_Type]
    added = '3.2'
[function.PySlice_GetIndices]
    added = '3.2'
[function.PySlice_GetIndicesEx]
    added = '3.2'
[function.PySlice_New]
    added = '3.2'
[data.PySlice_Type]
    added = '3.2'
[function.PyState_FindModule]
    added = '3.2'
[function.PyStructSequence_GetItem]
    added = '3.2'
[function.PyStructSequence_New]
    added = '3.2'
[function.PyStructSequence_NewType]
    added = '3.2'
[function.PyStructSequence_SetItem]
    added = '3.2'
[data.PySuper_Type]
    added = '3.2'
[function.PySys_AddWarnOption]
    added = '3.2'
[function.PySys_AddWarnOptionUnicode]
    added = '3.2'
[function.PySys_FormatStderr]
    added = '3.2'
[function.PySys_FormatStdout]
    added = '3.2'
[function.PySys_GetObject]
    added = '3.2'
[function.PySys_HasWarnOptions]
    added = '3.2'
[function.PySys_ResetWarnOptions]
    added = '3.2'
[function.PySys_SetArgv]
    added = '3.2'
[function.PySys_SetArgvEx]
    added = '3.2'
[function.PySys_SetObject]
    added = '3.2'
[function.PySys_SetPath]
    added = '3.2'
[function.PySys_WriteStderr]
    added = '3.2'
[function.PySys_WriteStdout]
    added = '3.2'
[function.PyThreadState_Clear]
    added = '3.2'
[function.PyThreadState_Delete]
    added = '3.2'
[function.PyThreadState_DeleteCurrent]
    added = '3.2'
    abi_only = true
[function.PyThreadState_Get]
    added = '3.2'
[function.PyThreadState_GetDict]
    added = '3.2'
[function.PyThreadState_New]
    added = '3.2'
[function.PyThreadState_SetAsyncExc]
    added = '3.2'
[function.PyThreadState_Swap]
    added = '3.2'
[function.PyTraceBack_Here]
    added = '3.2'
[function.PyTraceBack_Print]
    added = '3.2'
[data.PyTraceBack_Type]
    added = '3.2'
[data.PyTupleIter_Type]
    added = '3.2'
[function.PyTuple_GetItem]
    added = '3.2'
[function.PyTuple_GetSlice]
    added = '3.2'
[function.PyTuple_New]
    added = '3.2'
[function.PyTuple_Pack]
    added = '3.2'
[function.PyTuple_SetItem]
    added = '3.2'
[function.PyTuple_Size]
    added = '3.2'
[data.PyTuple_Type]
    added = '3.2'
[function.PyType_ClearCache]
    added = '3.2'
[function.PyType_GenericAlloc]
    added = '3.2'
[function.PyType_GenericNew]
    added = '3.2'
[function.PyType_GetFlags]
    added = '3.2'
[function.PyType_IsSubtype]
    added = '3.2'
[function.PyType_Modified]
    added = '3.2'
[function.PyType_Ready]
    added = '3.2'
[data.PyType_Type]
    added = '3.2'
[function.PyUnicodeDecodeError_Create]
    added = '3.2'
[function.PyUnicodeDecodeError_GetEncoding]
    added = '3.2'
[function.PyUnicodeDecodeError_GetEnd]
    added = '3.2'
[function.PyUnicodeDecodeError_GetObject]
    added = '3.2'
[function.PyUnicodeDecodeError_GetReason]
    added = '3.2'
[function.PyUnicodeDecodeError_GetStart]
    added = '3.2'
[function.PyUnicodeDecodeError_SetEnd]
    added = '3.2'
[function.PyUnicodeDecodeError_SetReason]
    added = '3.2'
[function.PyUnicodeDecodeError_SetStart]
    added = '3.2'
[function.PyUnicodeEncodeError_GetEncoding]
    added = '3.2'
[function.PyUnicodeEncodeError_GetEnd]
    added = '3.2'
[function.PyUnicodeEncodeError_GetObject]
    added = '3.2'
[function.PyUnicodeEncodeError_GetReason]
    added = '3.2'
[function.PyUnicodeEncodeError_GetStart]
    added = '3.2'
[function.PyUnicodeEncodeError_SetEnd]
    added = '3.2'
[function.PyUnicodeEncodeError_SetReason]
    added = '3.2'
[function.PyUnicodeEncodeError_SetStart]
    added = '3.2'
[data.PyUnicodeIter_Type]
    added = '3.2'
[function.PyUnicodeTranslateError_GetEnd]
    added = '3.2'
[function.PyUnicodeTranslateError_GetObject]
    added = '3.2'
[function.PyUnicodeTranslateError_GetReason]
    added = '3.2'
[function.PyUnicodeTranslateError_GetStart]
    added = '3.2'
[function.PyUnicodeTranslateError_SetEnd]
    added = '3.2'
[function.PyUnicodeTranslateError_SetReason]
    added = '3.2'
[function.PyUnicodeTranslateError_SetStart]
    added = '3.2'
[function.PyUnicode_Append]
    added = '3.2'
[function.PyUnicode_AppendAndDel]
    added = '3.2'
[function.PyUnicode_AsASCIIString]
    added = '3.2'
[function.PyUnicode_AsCharmapString]
    added = '3.2'
[function.PyUnicode_AsDecodedObject]
    added = '3.2'
[function.PyUnicode_AsDecodedUnicode]
    added = '3.2'
[function.PyUnicode_AsEncodedObject]
    added = '3.2'
[function.PyUnicode_AsEncodedString]
    added = '3.2'
[function.PyUnicode_AsEncodedUnicode]
    added = '3.2'
[function.PyUnicode_AsLatin1String]
    added = '3.2'
[function.PyUnicode_AsRawUnicodeEscapeString]
    added = '3.2'
[function.PyUnicode_AsUTF16String]
    added = '3.2'
[function.PyUnicode_AsUTF32String]
    added = '3.2'
[function.PyUnicode_AsUTF8String]
    added = '3.2'
[function.PyUnicode_AsUnicodeEscapeString]
    added = '3.2'
[function.PyUnicode_AsWideChar]
    added = '3.2'
[function.PyUnicode_Compare]
    added = '3.2'
[function.PyUnicode_Concat]
    added = '3.2'
[function.PyUnicode_Contains]
    added = '3.2'
[function.PyUnicode_Count]
    added = '3.2'
[function.PyUnicode_Decode]
    added = '3.2'
[function.PyUnicode_DecodeASCII]
    added = '3.2'
[function.PyUnicode_DecodeCharmap]
    added = '3.2'
[function.PyUnicode_DecodeFSDefault]
    added = '3.2'
[function.PyUnicode_DecodeFSDefaultAndSize]
    added = '3.2'
[function.PyUnicode_DecodeLatin1]
    added = '3.2'
[function.PyUnicode_DecodeRawUnicodeEscape]
    added = '3.2'
[function.PyUnicode_DecodeUTF16]
    added = '3.2'
[function.PyUnicode_DecodeUTF16Stateful]
    added = '3.2'
[function.PyUnicode_DecodeUTF32]
    added = '3.2'
[function.PyUnicode_DecodeUTF32Stateful]
    added = '3.2'
[function.PyUnicode_DecodeUTF8]
    added = '3.2'
[function.PyUnicode_DecodeUTF8Stateful]
    added = '3.2'
[function.PyUnicode_DecodeUnicodeEscape]
    added = '3.2'
[function.PyUnicode_FSConverter]
    added = '3.2'
[function.PyUnicode_FSDecoder]
    added = '3.2'
[function.PyUnicode_Find]
    added = '3.2'
[function.PyUnicode_Format]
    added = '3.2'
[function.PyUnicode_FromEncodedObject]
    added = '3.2'
[function.PyUnicode_FromFormat]
    added = '3.2'
[function.PyUnicode_FromFormatV]
    added = '3.2'
[function.PyUnicode_FromObject]
    added = '3.2'
[function.PyUnicode_FromOrdinal]
    added = '3.2'
[function.PyUnicode_FromString]
    added = '3.2'
[function.PyUnicode_FromStringAndSize]
    added = '3.2'
[function.PyUnicode_FromWideChar]
    added = '3.2'
[function.PyUnicode_GetDefaultEncoding]
    added = '3.2'
[function.PyUnicode_GetSize]
    added = '3.2'
[function.PyUnicode_IsIdentifier]
    added = '3.2'
[function.PyUnicode_Join]
    added = '3.2'
[function.PyUnicode_Partition]
    added = '3.2'
[function.PyUnicode_RPartition]
    added = '3.2'
[function.PyUnicode_RSplit]
    added = '3.2'
[function.PyUnicode_Replace]
    added = '3.2'
[function.PyUnicode_Resize]
    added = '3.2'
[function.PyUnicode_RichCompare]
    added = '3.2'
[function.PyUnicode_Split]
    added = '3.2'
[function.PyUnicode_Splitlines]
    added = '3.2'
[function.PyUnicode_Tailmatch]
    added = '3.2'
[function.PyUnicode_Translate]
    added = '3.2'
[function.PyUnicode_BuildEncodingMap]
    added = '3.2'
[function.PyUnicode_CompareWithASCIIString]
    added = '3.2'
[function.PyUnicode_DecodeUTF7]
    added = '3.2'
[function.PyUnicode_DecodeUTF7Stateful]
    added = '3.2'
[function.PyUnicode_EncodeFSDefault]
    added = '3.2'
[function.PyUnicode_InternFromString]
    added = '3.2'
[function.PyUnicode_InternImmortal]
    added = '3.2'
[function.PyUnicode_InternInPlace]
    added = '3.2'
[data.PyUnicode_Type]
    added = '3.2'
[function.PyWeakref_GetObject]
    added = '3.2'
[function.PyWeakref_NewProxy]
    added = '3.2'
[function.PyWeakref_NewRef]
    added = '3.2'
[data.PyWrapperDescr_Type]
    added = '3.2'
[function.PyWrapper_New]
    added = '3.2'
[data.PyZip_Type]
    added = '3.2'
[function.Py_AddPendingCall]
    added = '3.2'
[function.Py_AtExit]
    added = '3.2'
[function.Py_BuildValue]
    added = '3.2'
[function.Py_CompileString]
    added = '3.2'
[function.Py_DecRef]
    added = '3.2'
[function.Py_EndInterpreter]
    added = '3.2'
[function.Py_Exit]
    added = '3.2'
[function.Py_FatalError]
    added = '3.2'
[data.Py_FileSystemDefaultEncoding]
    added = '3.2'
[function.Py_Finalize]
    added = '3.2'
[function.Py_GetBuildInfo]
    added = '3.2'
[function.Py_GetCompiler]
    added = '3.2'
[function.Py_GetCopyright]
    added = '3.2'
[function.Py_GetExecPrefix]
    added = '3.2'
[function.Py_GetPath]
    added = '3.2'
[function.Py_GetPlatform]
    added = '3.2'
[function.Py_GetPrefix]
    added = '3.2'
[function.Py_GetProgramFullPath]
    added = '3.2'
[function.Py_GetProgramName]
    added = '3.2'
[function.Py_GetPythonHome]
    added = '3.2'
[function.Py_GetRecursionLimit]
    added = '3.2'
[function.Py_GetVersion]
    added = '3.2'
[data.Py_HasFileSystemDefaultEncoding]
    added = '3.2'
[function.Py_IncRef]
    added = '3.2'
[function.Py_Initialize]
    added = '3.2'
[function.Py_InitializeEx]
    added = '3.2'
[function.Py_IsInitialized]
    added = '3.2'
[function.Py_Main]
    added = '3.2'
[function.Py_MakePendingCalls]
    added = '3.2'
[function.Py_NewInterpreter]
    added = '3.2'
[function.Py_ReprEnter]
    added = '3.2'
[function.Py_ReprLeave]
    added = '3.2'
[function.Py_SetProgramName]
    added = '3.2'
[function.Py_SetPythonHome]
    added = '3.2'
[function.Py_SetRecursionLimit]
    added = '3.2'
[function.Py_VaBuildValue]
    added = '3.2'

[function._PyErr_BadInternalCall]
    added = '3.2'
    abi_only = true
[function._PyObject_CallFunction_SizeT]
    added = '3.2'
    abi_only = true
[function._PyObject_CallMethod_SizeT]
    added = '3.2'
    abi_only = true
[function._PyObject_GC_New]
    added = '3.2'
    abi_only = true
[function._PyObject_GC_NewVar]
    added = '3.2'
    abi_only = true
[function._PyObject_GC_Resize]
    added = '3.2'
    abi_only = true
[function._PyObject_New]
    added = '3.2'
    abi_only = true
[function._PyObject_NewVar]
    added = '3.2'
    abi_only = true
[function._PyState_AddModule]
    added = '3.2'
    abi_only = true
[function._PyThreadState_Init]
    added = '3.2'
    abi_only = true
[function._PyThreadState_Prealloc]
    added = '3.2'
    abi_only = true
[data._PyWeakref_CallableProxyType]
    added = '3.2'
    abi_only = true
[data._PyWeakref_ProxyType]
    added = '3.2'
    abi_only = true
[data._PyWeakref_RefType]
    added = '3.2'
    abi_only = true
[function._Py_BuildValue_SizeT]
    added = '3.2'
    abi_only = true
[function._Py_CheckRecursiveCall]
    added = '3.2'
    abi_only = true
[function._Py_Dealloc]
    added = '3.2'
    abi_only = true
[data._Py_EllipsisObject]
    added = '3.2'
    abi_only = true
[data._Py_FalseStruct]
    added = '3.2'
    abi_only = true
[data._Py_NoneStruct]
    added = '3.2'
    abi_only = true
[data._Py_NotImplementedStruct]
    added = '3.2'
    abi_only = true
[data._Py_SwappedOp]
    added = '3.2'
    abi_only = true
[data._Py_TrueStruct]
    added = '3.2'
    abi_only = true
[function._Py_VaBuildValue_SizeT]
    added = '3.2'
    abi_only = true

# Old buffer protocol support (deprecated)

[function.PyObject_AsCharBuffer]
    added = '3.2'
[function.PyObject_AsReadBuffer]
    added = '3.2'
[function.PyObject_AsWriteBuffer]
    added = '3.2'
[function.PyObject_CheckReadBuffer]
    added = '3.2'

# Flags are implicitly part of the ABI:

[const.Py_TPFLAGS_DEFAULT]
    added = '3.2'
[const.Py_TPFLAGS_BASETYPE]
    added = '3.2'
[const.Py_TPFLAGS_HAVE_GC]
    added = '3.2'

[const.METH_VARARGS]
    added = '3.2'
[const.METH_NOARGS]
    added = '3.2'
[const.METH_O]
    added = '3.2'
[const.METH_CLASS]
    added = '3.2'
[const.METH_STATIC]
    added = '3.2'
[const.METH_COEXIST]
    added = '3.2'
# METH_STACKLESS is undocumented
# METH_FASTCALL is not part of limited API.

# The following are defined in private headers, but historically
# they were exported as part of the stable ABI.
[function.PyMarshal_ReadObjectFromString]
    added = '3.2'
    abi_only = true
[function.PyMarshal_WriteObjectToString]
    added = '3.2'
    abi_only = true
[function.PyMember_GetOne]
    added = '3.2'
    abi_only = true
[function.PyMember_SetOne]
    added = '3.2'
    abi_only = true

# TLS api is deprecated; superseded by TSS API

[function.PyThread_ReInitTLS]
    added = '3.2'
[function.PyThread_create_key]
    added = '3.2'
[function.PyThread_delete_key]
    added = '3.2'
[function.PyThread_set_key_value]
    added = '3.2'
[function.PyThread_get_key_value]
    added = '3.2'
[function.PyThread_delete_key_value]
    added = '3.2'
[function.PyThread_acquire_lock]
    added = '3.2'
[function.PyThread_acquire_lock_timed]
    added = '3.2'
[function.PyThread_allocate_lock]
    added = '3.2'
[function.PyThread_exit_thread]
    added = '3.2'
[function.PyThread_free_lock]
    added = '3.2'
[function.PyThread_get_stacksize]
    added = '3.2'
[function.PyThread_get_thread_ident]
    added = '3.2'
[function.PyThread_get_thread_native_id]
    added = '3.2'
    ifdef = 'PY_HAVE_THREAD_NATIVE_ID'
[function.PyThread_init_thread]
    added = '3.2'
[function.PyThread_release_lock]
    added = '3.2'
[function.PyThread_set_stacksize]
    added = '3.2'
[function.PyThread_start_new_thread]
    added = '3.2'

# The following were added in PC/python3.def in Python 3.3:
# 7800f75827b1be557be16f3b18f5170fbf9fae08
# 9c56409d3353b8cd4cfc19e0467bbe23fd34fc92
# 75aeaa9b18667219bbacbc58ba6efecccef9dfbd

[function.PyState_AddModule]
    added = '3.3'
[function.PyState_RemoveModule]
    added = '3.3'
[function.PyType_FromSpecWithBases]
    added = '3.3'
[function._PyArg_Parse_SizeT]
    added = '3.3'
    abi_only = true
[function._PyArg_ParseTuple_SizeT]
    added = '3.3'
    abi_only = true
[function._PyArg_ParseTupleAndKeywords_SizeT]
    added = '3.3'
    abi_only = true
[function._PyArg_VaParse_SizeT]
    added = '3.3'
    abi_only = true
[function._PyArg_VaParseTupleAndKeywords_SizeT]
    added = '3.3'
    abi_only = true
[function.PyThread_GetInfo]
    added = '3.3'

# The following were added in PC/python3.def in Python 3.4:
# 3ba3a3ee56c142e93d6bbe20ff6bf939212a30f0

[function.PyCFunction_New]
    added = '3.4'
[function.PyType_GetSlot]
    added = '3.4'

# The following were added in PC/python3.def in Python 3.5:
# 11d7b1423fc44d764eba7065ea5eba58ed748b21
# f3b73ad51da3097d7915796fdc62608b1ab90c0a

[function.PyErr_FormatV]
    added = '3.5'
[function.PyModuleDef_Init]
    added = '3.5'
[data.PyModuleDef_Type]
    added = '3.5'

# New slots in 3.5:
# d51374ed78a3e3145911a16cdf3b9b84b3ba7d15 - Matrix multiplication (PEP 465)
# 7544508f0245173bff5866aa1598c8f6cce1fc5f - Async iterators (PEP 492)
# 0969a9f8abcf98bb43ea77b1dd050426adcfb4f7 - tp_finalize

[const.Py_nb_matrix_multiply]
    added = '3.5'
[const.Py_nb_inplace_matrix_multiply]
    added = '3.5'
[const.Py_am_await]
    added = '3.5'
[const.Py_am_aiter]
    added = '3.5'
[const.Py_am_anext]
    added = '3.5'
[const.Py_tp_finalize]
    added = '3.5'

# The following were added in PC/python3.def in Python 3.6:

[function.Py_FinalizeEx]
    added = '3.6'

[function.PyOS_FSPath]
    added = '3.6'
[function.PyErr_ResourceWarning]
    added = '3.6'
[function.PyErr_SetImportErrorSubclass]
    added = '3.6'
[data.PyExc_ModuleNotFoundError]
    added = '3.6'

# The following were added in PC/python3.def in Python 3.6.1 and 3.5.3/3.5.4:

[function.PyCodec_NameReplaceErrors]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyErr_GetExcInfo]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyErr_SetExcInfo]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyErr_SetFromErrnoWithFilenameObjects]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyErr_SetImportError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyErr_SyntaxLocationEx]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_BlockingIOError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_BrokenPipeError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ChildProcessError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ConnectionAbortedError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ConnectionError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ConnectionRefusedError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ConnectionResetError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_FileExistsError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_FileNotFoundError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_InterruptedError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_IsADirectoryError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_NotADirectoryError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_PermissionError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ProcessLookupError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_RecursionError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_ResourceWarning]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_StopAsyncIteration]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[data.PyExc_TimeoutError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyImport_AddModuleObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyImport_ExecCodeModuleObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyImport_ImportFrozenModuleObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyImport_ImportModuleLevelObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyMem_Calloc]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyMemoryView_FromMemory]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyModule_AddFunctions]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyModule_ExecDef]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyModule_FromDefAndSpec2]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyModule_GetNameObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyModule_NewObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyModule_SetDocString]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyNumber_InPlaceMatrixMultiply]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyNumber_MatrixMultiply]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyObject_Calloc]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyObject_GenericSetDict]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PySys_AddXOption]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PySys_GetXOptions]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_AsUCS4]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_AsUCS4Copy]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_AsWideCharString]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_DecodeLocale]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_DecodeLocaleAndSize]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_EncodeLocale]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_FindChar]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_GetLength]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_ReadChar]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_Substring]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyUnicode_WriteChar]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.Py_DecodeLocale]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.Py_EncodeLocale]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.Py_SetPath]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
[function.PyErr_SetExcFromWindowsErr]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyErr_SetExcFromWindowsErrWithFilename]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyErr_SetExcFromWindowsErrWithFilenameObject]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyErr_SetExcFromWindowsErrWithFilenameObjects]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyErr_SetFromWindowsErr]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyErr_SetFromWindowsErrWithFilename]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[data.PyExc_WindowsError]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyOS_CheckStack]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'USE_STACKCHECK'
[function.PyUnicode_AsMBCSString]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyUnicode_DecodeCodePageStateful]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyUnicode_DecodeMBCS]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyUnicode_DecodeMBCSStateful]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'
[function.PyUnicode_EncodeCodePage]
    added = '3.7'  # (and 3.6.1 and 3.5.3)
    ifdef = 'MS_WINDOWS'

# 3.5.4:
[function.PySlice_AdjustIndices]
    added = '3.7'  # (and 3.6.1 and 3.5.4)
[function.PySlice_Unpack]
    added = '3.7'  # (and 3.6.1 and 3.5.4)

# The following were added in PC/python3.def in Python 3.7:

[function.PyInterpreterState_GetID]
    added = '3.7'
[function.PyThread_tss_alloc]
    added = '3.7'
[function.PyThread_tss_create]
    added = '3.7'
[function.PyThread_tss_delete]
    added = '3.7'
[function.PyThread_tss_free]
    added = '3.7'
[function.PyThread_tss_get]
    added = '3.7'
[function.PyThread_tss_is_created]
    added = '3.7'
[function.PyThread_tss_set]
    added = '3.7'
[function.PyOS_BeforeFork]
    added = '3.7'
    ifdef = 'HAVE_FORK'
[function.PyOS_AfterFork_Parent]
    added = '3.7'
    ifdef = 'HAVE_FORK'
[function.PyOS_AfterFork_Child]
    added = '3.7'
    ifdef = 'HAVE_FORK'

# New method flags in 3.7 (PEP 590):

[const.METH_FASTCALL]
    added = '3.7'
[const.METH_METHOD]
    added = '3.7'

# The following were added in PC/python3.def in Python 3.8:

[function.PyImport_GetModule]
    added = '3.8'
[data.Py_UTF8Mode]
    added = '3.8'
[function.PyExceptionClass_Name]
    added = '3.8'
[function.PyIndex_Check]
    added = '3.8'
[function.PyIter_Check]
    added = '3.8'
[data.PyDictRevIterItem_Type]
    added = '3.8'
[data.PyDictRevIterKey_Type]
    added = '3.8'
[data.PyDictRevIterValue_Type]
    added = '3.8'
[function.PyInterpreterState_GetDict]
    added = '3.8'
[function.Py_BytesMain]
    added = '3.8'

# New type flag (PEP 590):

[const.Py_TPFLAGS_METHOD_DESCRIPTOR]
    added = '3.8'

# The following were added in PC/python3.def in Python 3.9:

[function.Py_EnterRecursiveCall]
    added = '3.9'
[function.Py_LeaveRecursiveCall]
    added = '3.9'
[function.Py_GenericAlias]
    added = '3.9'
[data.Py_GenericAliasType]
    added = '3.9'
[function.PyCMethod_New]
    added = '3.9'
[function.PyInterpreterState_Get]
    added = '3.9'
[function.PyObject_GC_IsFinalized]
    added = '3.9'
[function.PyObject_GC_IsTracked]
    added = '3.9'

# The following were added in PC/python3.def in Python 3.10:

[function.Py_GetArgcArgv]
    added = '3.10'
    abi_only = true
[function.PyIter_Send]
    added = '3.10'
[function.PyUnicode_AsUTF8AndSize]
    added = '3.10'
[function.PyObject_GenericGetDict]
    added = '3.10'
[function.Py_NewRef]
    added = '3.10'
[function.Py_XNewRef]
    added = '3.10'
[function.PyModule_AddType]
    added = '3.10'
[function.PyType_FromModuleAndSpec]
    added = '3.10'
[function.PyType_GetModule]
    added = '3.10'
[function.PyType_GetModuleState]
    added = '3.10'
[function.PyFrame_GetLineNumber]
    added = '3.10'
[function.PyFrame_GetCode]
    added = '3.10'
[function.PyObject_CallNoArgs]
    added = '3.10'
[function.PyThreadState_GetFrame]
    added = '3.10'
[function.PyThreadState_GetID]
    added = '3.10'
[function.PyThreadState_GetInterpreter]
    added = '3.10'
[function.PyModule_AddObjectRef]
    added = '3.10'
[data.Py_FileSystemDefaultEncodeErrors]
    added = '3.10'
[function.PyCodec_Unregister]
    added = '3.10'
[function.PyErr_SetInterruptEx]
    added = '3.10'
[function.Py_Is]
    added = '3.10'
[function.Py_IsTrue]
    added = '3.10'
[function.Py_IsFalse]
    added = '3.10'
[function.Py_IsNone]
    added = '3.10'
[function._Py_IncRef]
    added = '3.10'
    abi_only = true
[function._Py_DecRef]
    added = '3.10'
    abi_only = true
[function.PyAIter_Check]
    added = '3.10'
[function.PyObject_GetAIter]
    added = '3.10'
[data.PyExc_EncodingWarning]
    added = '3.10'

# Support for Stable ABI in debug builds

[data._Py_RefTotal]
    added = '3.10'
    ifdef = 'Py_REF_DEBUG'
    abi_only = true
[function._Py_NegativeRefcount]
    added = '3.10'
    ifdef = 'Py_REF_DEBUG'
    abi_only = true

# New slots in 3.10:

[const.Py_am_send]
    added = '3.10'


# New GC control functions in Py3.10 (https://bugs.python.org/issue28254)

[function.PyGC_Disable]
    added = '3.10'
[function.PyGC_Enable]
    added = '3.10'
[function.PyGC_IsEnabled]
    added = '3.10'

# Add new C API in Python 3.11

[function.PyType_GetName]
    added = '3.11'
[function.PyType_GetQualName]
    added = '3.11'
[data.PyStructSequence_UnnamedField]
    added = '3.11'

# Add stable Py_buffer API in Python 3.11 (https://bugs.python.org/issue45459)
[struct.Py_buffer]
    added = '3.11'
    struct_abi_kind = 'full-abi'
[function.PyObject_CheckBuffer]
    added = '3.11'
[function.PyObject_GetBuffer]
    added = '3.11'
[function.PyBuffer_GetPointer]
    added = '3.11'
[function.PyBuffer_SizeFromFormat]
    added = '3.11'
[function.PyBuffer_ToContiguous]
    added = '3.11'
[function.PyBuffer_FromContiguous]
    added = '3.11'
[function.PyObject_CopyData]
    added = '3.11'
[function.PyBuffer_IsContiguous]
    added = '3.11'
[function.PyBuffer_FillContiguousStrides]
    added = '3.11'
[function.PyBuffer_FillInfo]
    added = '3.11'
[function.PyBuffer_Release]
    added = '3.11'
[function.PyMemoryView_FromBuffer]
    added = '3.11'

# Constants for Py_buffer API added to this list in Python 3.11.1 (https://github.com/python/cpython/issues/98680)
# (they were available with 3.11.0)
[const.PyBUF_MAX_NDIM]
    added = '3.11'
[const.PyBUF_SIMPLE]
    added = '3.11'
[const.PyBUF_WRITABLE]
    added = '3.11'
[const.PyBUF_FORMAT]
    added = '3.11'
[const.PyBUF_ND]
    added = '3.11'
[const.PyBUF_STRIDES]
    added = '3.11'
[const.PyBUF_C_CONTIGUOUS]
    added = '3.11'
[const.PyBUF_F_CONTIGUOUS]
    added = '3.11'
[const.PyBUF_ANY_CONTIGUOUS]
    added = '3.11'
[const.PyBUF_INDIRECT]
    added = '3.11'
[const.PyBUF_CONTIG]
    added = '3.11'
[const.PyBUF_CONTIG_RO]
    added = '3.11'
[const.PyBUF_STRIDED]
    added = '3.11'
[const.PyBUF_STRIDED_RO]
    added = '3.11'
[const.PyBUF_RECORDS]
    added = '3.11'
[const.PyBUF_RECORDS_RO]
    added = '3.11'
[const.PyBUF_FULL]
    added = '3.11'
[const.PyBUF_FULL_RO]
    added = '3.11'
[const.PyBUF_READ]
    added = '3.11'
[const.PyBUF_WRITE]
    added = '3.11'


# (Detailed comments aren't really needed for further entries: from here on
#  we can use version control logs.)

[data.Py_Version]
    added = '3.11'
[function.PyErr_GetHandledException]
    added = '3.11'
[function.PyErr_SetHandledException]
    added = '3.11'
