[Python-checkins] bpo-47115: Document which parts of structs are in limited API/stable ABI (GH-32196)

encukou webhook-mailer at python.org
Wed Apr 6 10:51:00 EDT 2022


https://github.com/python/cpython/commit/d79f118d044e9b4244b5dfda35448d39202d7f56
commit: d79f118d044e9b4244b5dfda35448d39202d7f56
branch: main
author: Petr Viktorin <encukou at gmail.com>
committer: encukou <encukou at gmail.com>
date: 2022-04-06T16:50:45+02:00
summary:

bpo-47115: Document which parts of structs are in limited API/stable ABI (GH-32196)


Co-authored-by: Erlend Egeberg Aasland <erlend.aasland at innova.no>

files:
A Misc/NEWS.d/next/Documentation/2022-03-30-17-08-12.bpo-47115.R3wt3i.rst
M Doc/c-api/frame.rst
M Doc/data/stable_abi.dat
M Doc/tools/extensions/c_annotations.py
M Doc/whatsnew/3.11.rst
M Misc/stable_abi.txt
M Tools/scripts/stable_abi.py

diff --git a/Doc/c-api/frame.rst b/Doc/c-api/frame.rst
index 6d265e45659f9..f6c682c1e6c1c 100644
--- a/Doc/c-api/frame.rst
+++ b/Doc/c-api/frame.rst
@@ -7,10 +7,12 @@ Frame Objects
 
    The C structure of the objects used to describe frame objects.
 
-   The structure is not part of the C API.
+   There are no public members in this structure.
 
    .. versionchanged:: 3.11
-      The structure moved to the internal C API headers.
+      The members of this structure were removed from the public C API.
+      Refer to the :ref:`What's New entry <pyframeobject-3.11-hiding>`
+      for details.
 
 The :c:func:`PyEval_GetFrame` and :c:func:`PyThreadState_GetFrame` functions
 can be used to get a frame object.
diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat
index 18bbf03187b30..7f42f9c12de71 100644
--- a/Doc/data/stable_abi.dat
+++ b/Doc/data/stable_abi.dat
@@ -1,881 +1,885 @@
-role,name,added,ifdef_note
-function,PyAIter_Check,3.10,
-function,PyArg_Parse,3.2,
-function,PyArg_ParseTuple,3.2,
-function,PyArg_ParseTupleAndKeywords,3.2,
-function,PyArg_UnpackTuple,3.2,
-function,PyArg_VaParse,3.2,
-function,PyArg_VaParseTupleAndKeywords,3.2,
-function,PyArg_ValidateKeywordArguments,3.2,
-var,PyBaseObject_Type,3.2,
-function,PyBool_FromLong,3.2,
-var,PyBool_Type,3.2,
-function,PyBuffer_FillContiguousStrides,3.11,
-function,PyBuffer_FillInfo,3.11,
-function,PyBuffer_FromContiguous,3.11,
-function,PyBuffer_GetPointer,3.11,
-function,PyBuffer_IsContiguous,3.11,
-function,PyBuffer_Release,3.11,
-function,PyBuffer_SizeFromFormat,3.11,
-function,PyBuffer_ToContiguous,3.11,
-var,PyByteArrayIter_Type,3.2,
-function,PyByteArray_AsString,3.2,
-function,PyByteArray_Concat,3.2,
-function,PyByteArray_FromObject,3.2,
-function,PyByteArray_FromStringAndSize,3.2,
-function,PyByteArray_Resize,3.2,
-function,PyByteArray_Size,3.2,
-var,PyByteArray_Type,3.2,
-var,PyBytesIter_Type,3.2,
-function,PyBytes_AsString,3.2,
-function,PyBytes_AsStringAndSize,3.2,
-function,PyBytes_Concat,3.2,
-function,PyBytes_ConcatAndDel,3.2,
-function,PyBytes_DecodeEscape,3.2,
-function,PyBytes_FromFormat,3.2,
-function,PyBytes_FromFormatV,3.2,
-function,PyBytes_FromObject,3.2,
-function,PyBytes_FromString,3.2,
-function,PyBytes_FromStringAndSize,3.2,
-function,PyBytes_Repr,3.2,
-function,PyBytes_Size,3.2,
-var,PyBytes_Type,3.2,
-type,PyCFunction,3.2,
-type,PyCFunctionWithKeywords,3.2,
-function,PyCFunction_Call,3.2,
-function,PyCFunction_GetFlags,3.2,
-function,PyCFunction_GetFunction,3.2,
-function,PyCFunction_GetSelf,3.2,
-function,PyCFunction_New,3.4,
-function,PyCFunction_NewEx,3.2,
-var,PyCFunction_Type,3.2,
-function,PyCMethod_New,3.9,
-function,PyCallIter_New,3.2,
-var,PyCallIter_Type,3.2,
-function,PyCallable_Check,3.2,
-type,PyCapsule_Destructor,3.2,
-function,PyCapsule_GetContext,3.2,
-function,PyCapsule_GetDestructor,3.2,
-function,PyCapsule_GetName,3.2,
-function,PyCapsule_GetPointer,3.2,
-function,PyCapsule_Import,3.2,
-function,PyCapsule_IsValid,3.2,
-function,PyCapsule_New,3.2,
-function,PyCapsule_SetContext,3.2,
-function,PyCapsule_SetDestructor,3.2,
-function,PyCapsule_SetName,3.2,
-function,PyCapsule_SetPointer,3.2,
-var,PyCapsule_Type,3.2,
-var,PyClassMethodDescr_Type,3.2,
-function,PyCodec_BackslashReplaceErrors,3.2,
-function,PyCodec_Decode,3.2,
-function,PyCodec_Decoder,3.2,
-function,PyCodec_Encode,3.2,
-function,PyCodec_Encoder,3.2,
-function,PyCodec_IgnoreErrors,3.2,
-function,PyCodec_IncrementalDecoder,3.2,
-function,PyCodec_IncrementalEncoder,3.2,
-function,PyCodec_KnownEncoding,3.2,
-function,PyCodec_LookupError,3.2,
-function,PyCodec_NameReplaceErrors,3.7,
-function,PyCodec_Register,3.2,
-function,PyCodec_RegisterError,3.2,
-function,PyCodec_ReplaceErrors,3.2,
-function,PyCodec_StreamReader,3.2,
-function,PyCodec_StreamWriter,3.2,
-function,PyCodec_StrictErrors,3.2,
-function,PyCodec_Unregister,3.10,
-function,PyCodec_XMLCharRefReplaceErrors,3.2,
-function,PyComplex_FromDoubles,3.2,
-function,PyComplex_ImagAsDouble,3.2,
-function,PyComplex_RealAsDouble,3.2,
-var,PyComplex_Type,3.2,
-function,PyDescr_NewClassMethod,3.2,
-function,PyDescr_NewGetSet,3.2,
-function,PyDescr_NewMember,3.2,
-function,PyDescr_NewMethod,3.2,
-var,PyDictItems_Type,3.2,
-var,PyDictIterItem_Type,3.2,
-var,PyDictIterKey_Type,3.2,
-var,PyDictIterValue_Type,3.2,
-var,PyDictKeys_Type,3.2,
-function,PyDictProxy_New,3.2,
-var,PyDictProxy_Type,3.2,
-var,PyDictRevIterItem_Type,3.8,
-var,PyDictRevIterKey_Type,3.8,
-var,PyDictRevIterValue_Type,3.8,
-var,PyDictValues_Type,3.2,
-function,PyDict_Clear,3.2,
-function,PyDict_Contains,3.2,
-function,PyDict_Copy,3.2,
-function,PyDict_DelItem,3.2,
-function,PyDict_DelItemString,3.2,
-function,PyDict_GetItem,3.2,
-function,PyDict_GetItemString,3.2,
-function,PyDict_GetItemWithError,3.2,
-function,PyDict_Items,3.2,
-function,PyDict_Keys,3.2,
-function,PyDict_Merge,3.2,
-function,PyDict_MergeFromSeq2,3.2,
-function,PyDict_New,3.2,
-function,PyDict_Next,3.2,
-function,PyDict_SetItem,3.2,
-function,PyDict_SetItemString,3.2,
-function,PyDict_Size,3.2,
-var,PyDict_Type,3.2,
-function,PyDict_Update,3.2,
-function,PyDict_Values,3.2,
-var,PyEllipsis_Type,3.2,
-var,PyEnum_Type,3.2,
-function,PyErr_BadArgument,3.2,
-function,PyErr_BadInternalCall,3.2,
-function,PyErr_CheckSignals,3.2,
-function,PyErr_Clear,3.2,
-function,PyErr_Display,3.2,
-function,PyErr_ExceptionMatches,3.2,
-function,PyErr_Fetch,3.2,
-function,PyErr_Format,3.2,
-function,PyErr_FormatV,3.5,
-function,PyErr_GetExcInfo,3.7,
-function,PyErr_GivenExceptionMatches,3.2,
-function,PyErr_NewException,3.2,
-function,PyErr_NewExceptionWithDoc,3.2,
-function,PyErr_NoMemory,3.2,
-function,PyErr_NormalizeException,3.2,
-function,PyErr_Occurred,3.2,
-function,PyErr_Print,3.2,
-function,PyErr_PrintEx,3.2,
-function,PyErr_ProgramText,3.2,
-function,PyErr_ResourceWarning,3.6,
-function,PyErr_Restore,3.2,
-function,PyErr_SetExcFromWindowsErr,3.7,on Windows
-function,PyErr_SetExcFromWindowsErrWithFilename,3.7,on Windows
-function,PyErr_SetExcFromWindowsErrWithFilenameObject,3.7,on Windows
-function,PyErr_SetExcFromWindowsErrWithFilenameObjects,3.7,on Windows
-function,PyErr_SetExcInfo,3.7,
-function,PyErr_SetFromErrno,3.2,
-function,PyErr_SetFromErrnoWithFilename,3.2,
-function,PyErr_SetFromErrnoWithFilenameObject,3.2,
-function,PyErr_SetFromErrnoWithFilenameObjects,3.7,
-function,PyErr_SetFromWindowsErr,3.7,on Windows
-function,PyErr_SetFromWindowsErrWithFilename,3.7,on Windows
-function,PyErr_SetImportError,3.7,
-function,PyErr_SetImportErrorSubclass,3.6,
-function,PyErr_SetInterrupt,3.2,
-function,PyErr_SetInterruptEx,3.10,
-function,PyErr_SetNone,3.2,
-function,PyErr_SetObject,3.2,
-function,PyErr_SetString,3.2,
-function,PyErr_SyntaxLocation,3.2,
-function,PyErr_SyntaxLocationEx,3.7,
-function,PyErr_WarnEx,3.2,
-function,PyErr_WarnExplicit,3.2,
-function,PyErr_WarnFormat,3.2,
-function,PyErr_WriteUnraisable,3.2,
-function,PyEval_AcquireLock,3.2,
-function,PyEval_AcquireThread,3.2,
-function,PyEval_CallFunction,3.2,
-function,PyEval_CallMethod,3.2,
-function,PyEval_CallObjectWithKeywords,3.2,
-function,PyEval_EvalCode,3.2,
-function,PyEval_EvalCodeEx,3.2,
-function,PyEval_EvalFrame,3.2,
-function,PyEval_EvalFrameEx,3.2,
-function,PyEval_GetBuiltins,3.2,
-function,PyEval_GetFrame,3.2,
-function,PyEval_GetFuncDesc,3.2,
-function,PyEval_GetFuncName,3.2,
-function,PyEval_GetGlobals,3.2,
-function,PyEval_GetLocals,3.2,
-function,PyEval_InitThreads,3.2,
-function,PyEval_ReleaseLock,3.2,
-function,PyEval_ReleaseThread,3.2,
-function,PyEval_RestoreThread,3.2,
-function,PyEval_SaveThread,3.2,
-function,PyEval_ThreadsInitialized,3.2,
-var,PyExc_ArithmeticError,3.2,
-var,PyExc_AssertionError,3.2,
-var,PyExc_AttributeError,3.2,
-var,PyExc_BaseException,3.2,
-var,PyExc_BaseExceptionGroup,3.11,
-var,PyExc_BlockingIOError,3.7,
-var,PyExc_BrokenPipeError,3.7,
-var,PyExc_BufferError,3.2,
-var,PyExc_BytesWarning,3.2,
-var,PyExc_ChildProcessError,3.7,
-var,PyExc_ConnectionAbortedError,3.7,
-var,PyExc_ConnectionError,3.7,
-var,PyExc_ConnectionRefusedError,3.7,
-var,PyExc_ConnectionResetError,3.7,
-var,PyExc_DeprecationWarning,3.2,
-var,PyExc_EOFError,3.2,
-var,PyExc_EncodingWarning,3.10,
-var,PyExc_EnvironmentError,3.2,
-var,PyExc_Exception,3.2,
-var,PyExc_FileExistsError,3.7,
-var,PyExc_FileNotFoundError,3.7,
-var,PyExc_FloatingPointError,3.2,
-var,PyExc_FutureWarning,3.2,
-var,PyExc_GeneratorExit,3.2,
-var,PyExc_IOError,3.2,
-var,PyExc_ImportError,3.2,
-var,PyExc_ImportWarning,3.2,
-var,PyExc_IndentationError,3.2,
-var,PyExc_IndexError,3.2,
-var,PyExc_InterruptedError,3.7,
-var,PyExc_IsADirectoryError,3.7,
-var,PyExc_KeyError,3.2,
-var,PyExc_KeyboardInterrupt,3.2,
-var,PyExc_LookupError,3.2,
-var,PyExc_MemoryError,3.2,
-var,PyExc_ModuleNotFoundError,3.6,
-var,PyExc_NameError,3.2,
-var,PyExc_NotADirectoryError,3.7,
-var,PyExc_NotImplementedError,3.2,
-var,PyExc_OSError,3.2,
-var,PyExc_OverflowError,3.2,
-var,PyExc_PendingDeprecationWarning,3.2,
-var,PyExc_PermissionError,3.7,
-var,PyExc_ProcessLookupError,3.7,
-var,PyExc_RecursionError,3.7,
-var,PyExc_ReferenceError,3.2,
-var,PyExc_ResourceWarning,3.7,
-var,PyExc_RuntimeError,3.2,
-var,PyExc_RuntimeWarning,3.2,
-var,PyExc_StopAsyncIteration,3.7,
-var,PyExc_StopIteration,3.2,
-var,PyExc_SyntaxError,3.2,
-var,PyExc_SyntaxWarning,3.2,
-var,PyExc_SystemError,3.2,
-var,PyExc_SystemExit,3.2,
-var,PyExc_TabError,3.2,
-var,PyExc_TimeoutError,3.7,
-var,PyExc_TypeError,3.2,
-var,PyExc_UnboundLocalError,3.2,
-var,PyExc_UnicodeDecodeError,3.2,
-var,PyExc_UnicodeEncodeError,3.2,
-var,PyExc_UnicodeError,3.2,
-var,PyExc_UnicodeTranslateError,3.2,
-var,PyExc_UnicodeWarning,3.2,
-var,PyExc_UserWarning,3.2,
-var,PyExc_ValueError,3.2,
-var,PyExc_Warning,3.2,
-var,PyExc_WindowsError,3.7,on Windows
-var,PyExc_ZeroDivisionError,3.2,
-function,PyExceptionClass_Name,3.8,
-function,PyException_GetCause,3.2,
-function,PyException_GetContext,3.2,
-function,PyException_GetTraceback,3.2,
-function,PyException_SetCause,3.2,
-function,PyException_SetContext,3.2,
-function,PyException_SetTraceback,3.2,
-function,PyFile_FromFd,3.2,
-function,PyFile_GetLine,3.2,
-function,PyFile_WriteObject,3.2,
-function,PyFile_WriteString,3.2,
-var,PyFilter_Type,3.2,
-function,PyFloat_AsDouble,3.2,
-function,PyFloat_FromDouble,3.2,
-function,PyFloat_FromString,3.2,
-function,PyFloat_GetInfo,3.2,
-function,PyFloat_GetMax,3.2,
-function,PyFloat_GetMin,3.2,
-var,PyFloat_Type,3.2,
-type,PyFrameObject,3.2,
-function,PyFrame_GetCode,3.10,
-function,PyFrame_GetLineNumber,3.10,
-function,PyFrozenSet_New,3.2,
-var,PyFrozenSet_Type,3.2,
-function,PyGC_Collect,3.2,
-function,PyGC_Disable,3.10,
-function,PyGC_Enable,3.10,
-function,PyGC_IsEnabled,3.10,
-function,PyGILState_Ensure,3.2,
-function,PyGILState_GetThisThreadState,3.2,
-function,PyGILState_Release,3.2,
-type,PyGILState_STATE,3.2,
-type,PyGetSetDef,3.2,
-var,PyGetSetDescr_Type,3.2,
-function,PyImport_AddModule,3.2,
-function,PyImport_AddModuleObject,3.7,
-function,PyImport_AppendInittab,3.2,
-function,PyImport_ExecCodeModule,3.2,
-function,PyImport_ExecCodeModuleEx,3.2,
-function,PyImport_ExecCodeModuleObject,3.7,
-function,PyImport_ExecCodeModuleWithPathnames,3.2,
-function,PyImport_GetImporter,3.2,
-function,PyImport_GetMagicNumber,3.2,
-function,PyImport_GetMagicTag,3.2,
-function,PyImport_GetModule,3.8,
-function,PyImport_GetModuleDict,3.2,
-function,PyImport_Import,3.2,
-function,PyImport_ImportFrozenModule,3.2,
-function,PyImport_ImportFrozenModuleObject,3.7,
-function,PyImport_ImportModule,3.2,
-function,PyImport_ImportModuleLevel,3.2,
-function,PyImport_ImportModuleLevelObject,3.7,
-function,PyImport_ImportModuleNoBlock,3.2,
-function,PyImport_ReloadModule,3.2,
-function,PyIndex_Check,3.8,
-type,PyInterpreterState,3.2,
-function,PyInterpreterState_Clear,3.2,
-function,PyInterpreterState_Delete,3.2,
-function,PyInterpreterState_Get,3.9,
-function,PyInterpreterState_GetDict,3.8,
-function,PyInterpreterState_GetID,3.7,
-function,PyInterpreterState_New,3.2,
-function,PyIter_Check,3.8,
-function,PyIter_Next,3.2,
-function,PyIter_Send,3.10,
-var,PyListIter_Type,3.2,
-var,PyListRevIter_Type,3.2,
-function,PyList_Append,3.2,
-function,PyList_AsTuple,3.2,
-function,PyList_GetItem,3.2,
-function,PyList_GetSlice,3.2,
-function,PyList_Insert,3.2,
-function,PyList_New,3.2,
-function,PyList_Reverse,3.2,
-function,PyList_SetItem,3.2,
-function,PyList_SetSlice,3.2,
-function,PyList_Size,3.2,
-function,PyList_Sort,3.2,
-var,PyList_Type,3.2,
-type,PyLongObject,3.2,
-var,PyLongRangeIter_Type,3.2,
-function,PyLong_AsDouble,3.2,
-function,PyLong_AsLong,3.2,
-function,PyLong_AsLongAndOverflow,3.2,
-function,PyLong_AsLongLong,3.2,
-function,PyLong_AsLongLongAndOverflow,3.2,
-function,PyLong_AsSize_t,3.2,
-function,PyLong_AsSsize_t,3.2,
-function,PyLong_AsUnsignedLong,3.2,
-function,PyLong_AsUnsignedLongLong,3.2,
-function,PyLong_AsUnsignedLongLongMask,3.2,
-function,PyLong_AsUnsignedLongMask,3.2,
-function,PyLong_AsVoidPtr,3.2,
-function,PyLong_FromDouble,3.2,
-function,PyLong_FromLong,3.2,
-function,PyLong_FromLongLong,3.2,
-function,PyLong_FromSize_t,3.2,
-function,PyLong_FromSsize_t,3.2,
-function,PyLong_FromString,3.2,
-function,PyLong_FromUnsignedLong,3.2,
-function,PyLong_FromUnsignedLongLong,3.2,
-function,PyLong_FromVoidPtr,3.2,
-function,PyLong_GetInfo,3.2,
-var,PyLong_Type,3.2,
-var,PyMap_Type,3.2,
-function,PyMapping_Check,3.2,
-function,PyMapping_GetItemString,3.2,
-function,PyMapping_HasKey,3.2,
-function,PyMapping_HasKeyString,3.2,
-function,PyMapping_Items,3.2,
-function,PyMapping_Keys,3.2,
-function,PyMapping_Length,3.2,
-function,PyMapping_SetItemString,3.2,
-function,PyMapping_Size,3.2,
-function,PyMapping_Values,3.2,
-function,PyMem_Calloc,3.7,
-function,PyMem_Free,3.2,
-function,PyMem_Malloc,3.2,
-function,PyMem_Realloc,3.2,
-type,PyMemberDef,3.2,
-var,PyMemberDescr_Type,3.2,
-function,PyMemoryView_FromBuffer,3.11,
-function,PyMemoryView_FromMemory,3.7,
-function,PyMemoryView_FromObject,3.2,
-function,PyMemoryView_GetContiguous,3.2,
-var,PyMemoryView_Type,3.2,
-type,PyMethodDef,3.2,
-var,PyMethodDescr_Type,3.2,
-type,PyModuleDef,3.2,
-type,PyModuleDef_Base,3.2,
-function,PyModuleDef_Init,3.5,
-var,PyModuleDef_Type,3.5,
-function,PyModule_AddFunctions,3.7,
-function,PyModule_AddIntConstant,3.2,
-function,PyModule_AddObject,3.2,
-function,PyModule_AddObjectRef,3.10,
-function,PyModule_AddStringConstant,3.2,
-function,PyModule_AddType,3.10,
-function,PyModule_Create2,3.2,
-function,PyModule_ExecDef,3.7,
-function,PyModule_FromDefAndSpec2,3.7,
-function,PyModule_GetDef,3.2,
-function,PyModule_GetDict,3.2,
-function,PyModule_GetFilename,3.2,
-function,PyModule_GetFilenameObject,3.2,
-function,PyModule_GetName,3.2,
-function,PyModule_GetNameObject,3.7,
-function,PyModule_GetState,3.2,
-function,PyModule_New,3.2,
-function,PyModule_NewObject,3.7,
-function,PyModule_SetDocString,3.7,
-var,PyModule_Type,3.2,
-function,PyNumber_Absolute,3.2,
-function,PyNumber_Add,3.2,
-function,PyNumber_And,3.2,
-function,PyNumber_AsSsize_t,3.2,
-function,PyNumber_Check,3.2,
-function,PyNumber_Divmod,3.2,
-function,PyNumber_Float,3.2,
-function,PyNumber_FloorDivide,3.2,
-function,PyNumber_InPlaceAdd,3.2,
-function,PyNumber_InPlaceAnd,3.2,
-function,PyNumber_InPlaceFloorDivide,3.2,
-function,PyNumber_InPlaceLshift,3.2,
-function,PyNumber_InPlaceMatrixMultiply,3.7,
-function,PyNumber_InPlaceMultiply,3.2,
-function,PyNumber_InPlaceOr,3.2,
-function,PyNumber_InPlacePower,3.2,
-function,PyNumber_InPlaceRemainder,3.2,
-function,PyNumber_InPlaceRshift,3.2,
-function,PyNumber_InPlaceSubtract,3.2,
-function,PyNumber_InPlaceTrueDivide,3.2,
-function,PyNumber_InPlaceXor,3.2,
-function,PyNumber_Index,3.2,
-function,PyNumber_Invert,3.2,
-function,PyNumber_Long,3.2,
-function,PyNumber_Lshift,3.2,
-function,PyNumber_MatrixMultiply,3.7,
-function,PyNumber_Multiply,3.2,
-function,PyNumber_Negative,3.2,
-function,PyNumber_Or,3.2,
-function,PyNumber_Positive,3.2,
-function,PyNumber_Power,3.2,
-function,PyNumber_Remainder,3.2,
-function,PyNumber_Rshift,3.2,
-function,PyNumber_Subtract,3.2,
-function,PyNumber_ToBase,3.2,
-function,PyNumber_TrueDivide,3.2,
-function,PyNumber_Xor,3.2,
-function,PyOS_AfterFork,3.2,on platforms with fork()
-function,PyOS_AfterFork_Child,3.7,on platforms with fork()
-function,PyOS_AfterFork_Parent,3.7,on platforms with fork()
-function,PyOS_BeforeFork,3.7,on platforms with fork()
-function,PyOS_CheckStack,3.7,on platforms with USE_STACKCHECK
-function,PyOS_FSPath,3.6,
-var,PyOS_InputHook,3.2,
-function,PyOS_InterruptOccurred,3.2,
-function,PyOS_double_to_string,3.2,
-function,PyOS_getsig,3.2,
-function,PyOS_mystricmp,3.2,
-function,PyOS_mystrnicmp,3.2,
-function,PyOS_setsig,3.2,
-type,PyOS_sighandler_t,3.2,
-function,PyOS_snprintf,3.2,
-function,PyOS_string_to_double,3.2,
-function,PyOS_strtol,3.2,
-function,PyOS_strtoul,3.2,
-function,PyOS_vsnprintf,3.2,
-type,PyObject,3.2,
-function,PyObject_ASCII,3.2,
-function,PyObject_AsCharBuffer,3.2,
-function,PyObject_AsFileDescriptor,3.2,
-function,PyObject_AsReadBuffer,3.2,
-function,PyObject_AsWriteBuffer,3.2,
-function,PyObject_Bytes,3.2,
-function,PyObject_Call,3.2,
-function,PyObject_CallFunction,3.2,
-function,PyObject_CallFunctionObjArgs,3.2,
-function,PyObject_CallMethod,3.2,
-function,PyObject_CallMethodObjArgs,3.2,
-function,PyObject_CallNoArgs,3.10,
-function,PyObject_CallObject,3.2,
-function,PyObject_Calloc,3.7,
-function,PyObject_CheckBuffer,3.11,
-function,PyObject_CheckReadBuffer,3.2,
-function,PyObject_ClearWeakRefs,3.2,
-function,PyObject_CopyData,3.11,
-function,PyObject_DelItem,3.2,
-function,PyObject_DelItemString,3.2,
-function,PyObject_Dir,3.2,
-function,PyObject_Format,3.2,
-function,PyObject_Free,3.2,
-function,PyObject_GC_Del,3.2,
-function,PyObject_GC_IsFinalized,3.9,
-function,PyObject_GC_IsTracked,3.9,
-function,PyObject_GC_Track,3.2,
-function,PyObject_GC_UnTrack,3.2,
-function,PyObject_GenericGetAttr,3.2,
-function,PyObject_GenericGetDict,3.10,
-function,PyObject_GenericSetAttr,3.2,
-function,PyObject_GenericSetDict,3.7,
-function,PyObject_GetAIter,3.10,
-function,PyObject_GetAttr,3.2,
-function,PyObject_GetAttrString,3.2,
-function,PyObject_GetBuffer,3.11,
-function,PyObject_GetItem,3.2,
-function,PyObject_GetIter,3.2,
-function,PyObject_HasAttr,3.2,
-function,PyObject_HasAttrString,3.2,
-function,PyObject_Hash,3.2,
-function,PyObject_HashNotImplemented,3.2,
-function,PyObject_Init,3.2,
-function,PyObject_InitVar,3.2,
-function,PyObject_IsInstance,3.2,
-function,PyObject_IsSubclass,3.2,
-function,PyObject_IsTrue,3.2,
-function,PyObject_Length,3.2,
-function,PyObject_Malloc,3.2,
-function,PyObject_Not,3.2,
-function,PyObject_Realloc,3.2,
-function,PyObject_Repr,3.2,
-function,PyObject_RichCompare,3.2,
-function,PyObject_RichCompareBool,3.2,
-function,PyObject_SelfIter,3.2,
-function,PyObject_SetAttr,3.2,
-function,PyObject_SetAttrString,3.2,
-function,PyObject_SetItem,3.2,
-function,PyObject_Size,3.2,
-function,PyObject_Str,3.2,
-function,PyObject_Type,3.2,
-var,PyProperty_Type,3.2,
-var,PyRangeIter_Type,3.2,
-var,PyRange_Type,3.2,
-var,PyReversed_Type,3.2,
-function,PySeqIter_New,3.2,
-var,PySeqIter_Type,3.2,
-function,PySequence_Check,3.2,
-function,PySequence_Concat,3.2,
-function,PySequence_Contains,3.2,
-function,PySequence_Count,3.2,
-function,PySequence_DelItem,3.2,
-function,PySequence_DelSlice,3.2,
-function,PySequence_Fast,3.2,
-function,PySequence_GetItem,3.2,
-function,PySequence_GetSlice,3.2,
-function,PySequence_In,3.2,
-function,PySequence_InPlaceConcat,3.2,
-function,PySequence_InPlaceRepeat,3.2,
-function,PySequence_Index,3.2,
-function,PySequence_Length,3.2,
-function,PySequence_List,3.2,
-function,PySequence_Repeat,3.2,
-function,PySequence_SetItem,3.2,
-function,PySequence_SetSlice,3.2,
-function,PySequence_Size,3.2,
-function,PySequence_Tuple,3.2,
-var,PySetIter_Type,3.2,
-function,PySet_Add,3.2,
-function,PySet_Clear,3.2,
-function,PySet_Contains,3.2,
-function,PySet_Discard,3.2,
-function,PySet_New,3.2,
-function,PySet_Pop,3.2,
-function,PySet_Size,3.2,
-var,PySet_Type,3.2,
-function,PySlice_AdjustIndices,3.7,
-function,PySlice_GetIndices,3.2,
-function,PySlice_GetIndicesEx,3.2,
-function,PySlice_New,3.2,
-var,PySlice_Type,3.2,
-function,PySlice_Unpack,3.7,
-function,PyState_AddModule,3.3,
-function,PyState_FindModule,3.2,
-function,PyState_RemoveModule,3.3,
-type,PyStructSequence_Desc,3.2,
-type,PyStructSequence_Field,3.2,
-function,PyStructSequence_GetItem,3.2,
-function,PyStructSequence_New,3.2,
-function,PyStructSequence_NewType,3.2,
-function,PyStructSequence_SetItem,3.2,
-var,PyStructSequence_UnnamedField,3.11,
-var,PySuper_Type,3.2,
-function,PySys_AddWarnOption,3.2,
-function,PySys_AddWarnOptionUnicode,3.2,
-function,PySys_AddXOption,3.7,
-function,PySys_FormatStderr,3.2,
-function,PySys_FormatStdout,3.2,
-function,PySys_GetObject,3.2,
-function,PySys_GetXOptions,3.7,
-function,PySys_HasWarnOptions,3.2,
-function,PySys_ResetWarnOptions,3.2,
-function,PySys_SetArgv,3.2,
-function,PySys_SetArgvEx,3.2,
-function,PySys_SetObject,3.2,
-function,PySys_SetPath,3.2,
-function,PySys_WriteStderr,3.2,
-function,PySys_WriteStdout,3.2,
-type,PyThreadState,3.2,
-function,PyThreadState_Clear,3.2,
-function,PyThreadState_Delete,3.2,
-function,PyThreadState_Get,3.2,
-function,PyThreadState_GetDict,3.2,
-function,PyThreadState_GetFrame,3.10,
-function,PyThreadState_GetID,3.10,
-function,PyThreadState_GetInterpreter,3.10,
-function,PyThreadState_New,3.2,
-function,PyThreadState_SetAsyncExc,3.2,
-function,PyThreadState_Swap,3.2,
-function,PyThread_GetInfo,3.3,
-function,PyThread_ReInitTLS,3.2,
-function,PyThread_acquire_lock,3.2,
-function,PyThread_acquire_lock_timed,3.2,
-function,PyThread_allocate_lock,3.2,
-function,PyThread_create_key,3.2,
-function,PyThread_delete_key,3.2,
-function,PyThread_delete_key_value,3.2,
-function,PyThread_exit_thread,3.2,
-function,PyThread_free_lock,3.2,
-function,PyThread_get_key_value,3.2,
-function,PyThread_get_stacksize,3.2,
-function,PyThread_get_thread_ident,3.2,
-function,PyThread_get_thread_native_id,3.2,
-function,PyThread_init_thread,3.2,
-function,PyThread_release_lock,3.2,
-function,PyThread_set_key_value,3.2,
-function,PyThread_set_stacksize,3.2,
-function,PyThread_start_new_thread,3.2,
-function,PyThread_tss_alloc,3.7,
-function,PyThread_tss_create,3.7,
-function,PyThread_tss_delete,3.7,
-function,PyThread_tss_free,3.7,
-function,PyThread_tss_get,3.7,
-function,PyThread_tss_is_created,3.7,
-function,PyThread_tss_set,3.7,
-function,PyTraceBack_Here,3.2,
-function,PyTraceBack_Print,3.2,
-var,PyTraceBack_Type,3.2,
-var,PyTupleIter_Type,3.2,
-function,PyTuple_GetItem,3.2,
-function,PyTuple_GetSlice,3.2,
-function,PyTuple_New,3.2,
-function,PyTuple_Pack,3.2,
-function,PyTuple_SetItem,3.2,
-function,PyTuple_Size,3.2,
-var,PyTuple_Type,3.2,
-type,PyTypeObject,3.2,
-function,PyType_ClearCache,3.2,
-function,PyType_FromModuleAndSpec,3.10,
-function,PyType_FromSpec,3.2,
-function,PyType_FromSpecWithBases,3.3,
-function,PyType_GenericAlloc,3.2,
-function,PyType_GenericNew,3.2,
-function,PyType_GetFlags,3.2,
-function,PyType_GetModule,3.10,
-function,PyType_GetModuleState,3.10,
-function,PyType_GetName,3.11,
-function,PyType_GetQualName,3.11,
-function,PyType_GetSlot,3.4,
-function,PyType_IsSubtype,3.2,
-function,PyType_Modified,3.2,
-function,PyType_Ready,3.2,
-type,PyType_Slot,3.2,
-type,PyType_Spec,3.2,
-var,PyType_Type,3.2,
-function,PyUnicodeDecodeError_Create,3.2,
-function,PyUnicodeDecodeError_GetEncoding,3.2,
-function,PyUnicodeDecodeError_GetEnd,3.2,
-function,PyUnicodeDecodeError_GetObject,3.2,
-function,PyUnicodeDecodeError_GetReason,3.2,
-function,PyUnicodeDecodeError_GetStart,3.2,
-function,PyUnicodeDecodeError_SetEnd,3.2,
-function,PyUnicodeDecodeError_SetReason,3.2,
-function,PyUnicodeDecodeError_SetStart,3.2,
-function,PyUnicodeEncodeError_GetEncoding,3.2,
-function,PyUnicodeEncodeError_GetEnd,3.2,
-function,PyUnicodeEncodeError_GetObject,3.2,
-function,PyUnicodeEncodeError_GetReason,3.2,
-function,PyUnicodeEncodeError_GetStart,3.2,
-function,PyUnicodeEncodeError_SetEnd,3.2,
-function,PyUnicodeEncodeError_SetReason,3.2,
-function,PyUnicodeEncodeError_SetStart,3.2,
-var,PyUnicodeIter_Type,3.2,
-function,PyUnicodeTranslateError_GetEnd,3.2,
-function,PyUnicodeTranslateError_GetObject,3.2,
-function,PyUnicodeTranslateError_GetReason,3.2,
-function,PyUnicodeTranslateError_GetStart,3.2,
-function,PyUnicodeTranslateError_SetEnd,3.2,
-function,PyUnicodeTranslateError_SetReason,3.2,
-function,PyUnicodeTranslateError_SetStart,3.2,
-function,PyUnicode_Append,3.2,
-function,PyUnicode_AppendAndDel,3.2,
-function,PyUnicode_AsASCIIString,3.2,
-function,PyUnicode_AsCharmapString,3.2,
-function,PyUnicode_AsDecodedObject,3.2,
-function,PyUnicode_AsDecodedUnicode,3.2,
-function,PyUnicode_AsEncodedObject,3.2,
-function,PyUnicode_AsEncodedString,3.2,
-function,PyUnicode_AsEncodedUnicode,3.2,
-function,PyUnicode_AsLatin1String,3.2,
-function,PyUnicode_AsMBCSString,3.7,on Windows
-function,PyUnicode_AsRawUnicodeEscapeString,3.2,
-function,PyUnicode_AsUCS4,3.7,
-function,PyUnicode_AsUCS4Copy,3.7,
-function,PyUnicode_AsUTF16String,3.2,
-function,PyUnicode_AsUTF32String,3.2,
-function,PyUnicode_AsUTF8AndSize,3.10,
-function,PyUnicode_AsUTF8String,3.2,
-function,PyUnicode_AsUnicodeEscapeString,3.2,
-function,PyUnicode_AsWideChar,3.2,
-function,PyUnicode_AsWideCharString,3.7,
-function,PyUnicode_BuildEncodingMap,3.2,
-function,PyUnicode_Compare,3.2,
-function,PyUnicode_CompareWithASCIIString,3.2,
-function,PyUnicode_Concat,3.2,
-function,PyUnicode_Contains,3.2,
-function,PyUnicode_Count,3.2,
-function,PyUnicode_Decode,3.2,
-function,PyUnicode_DecodeASCII,3.2,
-function,PyUnicode_DecodeCharmap,3.2,
-function,PyUnicode_DecodeCodePageStateful,3.7,on Windows
-function,PyUnicode_DecodeFSDefault,3.2,
-function,PyUnicode_DecodeFSDefaultAndSize,3.2,
-function,PyUnicode_DecodeLatin1,3.2,
-function,PyUnicode_DecodeLocale,3.7,
-function,PyUnicode_DecodeLocaleAndSize,3.7,
-function,PyUnicode_DecodeMBCS,3.7,on Windows
-function,PyUnicode_DecodeMBCSStateful,3.7,on Windows
-function,PyUnicode_DecodeRawUnicodeEscape,3.2,
-function,PyUnicode_DecodeUTF16,3.2,
-function,PyUnicode_DecodeUTF16Stateful,3.2,
-function,PyUnicode_DecodeUTF32,3.2,
-function,PyUnicode_DecodeUTF32Stateful,3.2,
-function,PyUnicode_DecodeUTF7,3.2,
-function,PyUnicode_DecodeUTF7Stateful,3.2,
-function,PyUnicode_DecodeUTF8,3.2,
-function,PyUnicode_DecodeUTF8Stateful,3.2,
-function,PyUnicode_DecodeUnicodeEscape,3.2,
-function,PyUnicode_EncodeCodePage,3.7,on Windows
-function,PyUnicode_EncodeFSDefault,3.2,
-function,PyUnicode_EncodeLocale,3.7,
-function,PyUnicode_FSConverter,3.2,
-function,PyUnicode_FSDecoder,3.2,
-function,PyUnicode_Find,3.2,
-function,PyUnicode_FindChar,3.7,
-function,PyUnicode_Format,3.2,
-function,PyUnicode_FromEncodedObject,3.2,
-function,PyUnicode_FromFormat,3.2,
-function,PyUnicode_FromFormatV,3.2,
-function,PyUnicode_FromObject,3.2,
-function,PyUnicode_FromOrdinal,3.2,
-function,PyUnicode_FromString,3.2,
-function,PyUnicode_FromStringAndSize,3.2,
-function,PyUnicode_FromWideChar,3.2,
-function,PyUnicode_GetDefaultEncoding,3.2,
-function,PyUnicode_GetLength,3.7,
-function,PyUnicode_GetSize,3.2,
-function,PyUnicode_InternFromString,3.2,
-function,PyUnicode_InternImmortal,3.2,
-function,PyUnicode_InternInPlace,3.2,
-function,PyUnicode_IsIdentifier,3.2,
-function,PyUnicode_Join,3.2,
-function,PyUnicode_Partition,3.2,
-function,PyUnicode_RPartition,3.2,
-function,PyUnicode_RSplit,3.2,
-function,PyUnicode_ReadChar,3.7,
-function,PyUnicode_Replace,3.2,
-function,PyUnicode_Resize,3.2,
-function,PyUnicode_RichCompare,3.2,
-function,PyUnicode_Split,3.2,
-function,PyUnicode_Splitlines,3.2,
-function,PyUnicode_Substring,3.7,
-function,PyUnicode_Tailmatch,3.2,
-function,PyUnicode_Translate,3.2,
-var,PyUnicode_Type,3.2,
-function,PyUnicode_WriteChar,3.7,
-type,PyVarObject,3.2,
-type,PyWeakReference,3.2,
-function,PyWeakref_GetObject,3.2,
-function,PyWeakref_NewProxy,3.2,
-function,PyWeakref_NewRef,3.2,
-var,PyWrapperDescr_Type,3.2,
-function,PyWrapper_New,3.2,
-var,PyZip_Type,3.2,
-function,Py_AddPendingCall,3.2,
-function,Py_AtExit,3.2,
-macro,Py_BEGIN_ALLOW_THREADS,3.2,
-macro,Py_BLOCK_THREADS,3.2,
-function,Py_BuildValue,3.2,
-function,Py_BytesMain,3.8,
-function,Py_CompileString,3.2,
-function,Py_DecRef,3.2,
-function,Py_DecodeLocale,3.7,
-macro,Py_END_ALLOW_THREADS,3.2,
-function,Py_EncodeLocale,3.7,
-function,Py_EndInterpreter,3.2,
-function,Py_EnterRecursiveCall,3.9,
-function,Py_Exit,3.2,
-function,Py_FatalError,3.2,
-var,Py_FileSystemDefaultEncodeErrors,3.10,
-var,Py_FileSystemDefaultEncoding,3.2,
-function,Py_Finalize,3.2,
-function,Py_FinalizeEx,3.6,
-function,Py_GenericAlias,3.9,
-var,Py_GenericAliasType,3.9,
-function,Py_GetBuildInfo,3.2,
-function,Py_GetCompiler,3.2,
-function,Py_GetCopyright,3.2,
-function,Py_GetExecPrefix,3.2,
-function,Py_GetPath,3.2,
-function,Py_GetPlatform,3.2,
-function,Py_GetPrefix,3.2,
-function,Py_GetProgramFullPath,3.2,
-function,Py_GetProgramName,3.2,
-function,Py_GetPythonHome,3.2,
-function,Py_GetRecursionLimit,3.2,
-function,Py_GetVersion,3.2,
-var,Py_HasFileSystemDefaultEncoding,3.2,
-function,Py_IncRef,3.2,
-function,Py_Initialize,3.2,
-function,Py_InitializeEx,3.2,
-function,Py_Is,3.10,
-function,Py_IsFalse,3.10,
-function,Py_IsInitialized,3.2,
-function,Py_IsNone,3.10,
-function,Py_IsTrue,3.10,
-function,Py_LeaveRecursiveCall,3.9,
-function,Py_Main,3.2,
-function,Py_MakePendingCalls,3.2,
-function,Py_NewInterpreter,3.2,
-function,Py_NewRef,3.10,
-function,Py_ReprEnter,3.2,
-function,Py_ReprLeave,3.2,
-function,Py_SetPath,3.7,
-function,Py_SetProgramName,3.2,
-function,Py_SetPythonHome,3.2,
-function,Py_SetRecursionLimit,3.2,
-type,Py_UCS4,3.2,
-macro,Py_UNBLOCK_THREADS,3.2,
-var,Py_UTF8Mode,3.8,
-function,Py_VaBuildValue,3.2,
-var,Py_Version,3.11,
-function,Py_XNewRef,3.10,
-type,Py_buffer,3.11,
-type,Py_intptr_t,3.2,
-type,Py_ssize_t,3.2,
-type,Py_uintptr_t,3.2,
-type,allocfunc,3.2,
-type,binaryfunc,3.2,
-type,descrgetfunc,3.2,
-type,descrsetfunc,3.2,
-type,destructor,3.2,
-type,getattrfunc,3.2,
-type,getattrofunc,3.2,
-type,getiterfunc,3.2,
-type,getter,3.2,
-type,hashfunc,3.2,
-type,initproc,3.2,
-type,inquiry,3.2,
-type,iternextfunc,3.2,
-type,lenfunc,3.2,
-type,newfunc,3.2,
-type,objobjargproc,3.2,
-type,objobjproc,3.2,
-type,reprfunc,3.2,
-type,richcmpfunc,3.2,
-type,setattrfunc,3.2,
-type,setattrofunc,3.2,
-type,setter,3.2,
-type,ssizeargfunc,3.2,
-type,ssizeobjargproc,3.2,
-type,ssizessizeargfunc,3.2,
-type,ssizessizeobjargproc,3.2,
-type,symtable,3.2,
-type,ternaryfunc,3.2,
-type,traverseproc,3.2,
-type,unaryfunc,3.2,
-type,visitproc,3.2,
+role,name,added,ifdef_note,struct_abi_kind
+function,PyAIter_Check,3.10,,
+function,PyArg_Parse,3.2,,
+function,PyArg_ParseTuple,3.2,,
+function,PyArg_ParseTupleAndKeywords,3.2,,
+function,PyArg_UnpackTuple,3.2,,
+function,PyArg_VaParse,3.2,,
+function,PyArg_VaParseTupleAndKeywords,3.2,,
+function,PyArg_ValidateKeywordArguments,3.2,,
+var,PyBaseObject_Type,3.2,,
+function,PyBool_FromLong,3.2,,
+var,PyBool_Type,3.2,,
+function,PyBuffer_FillContiguousStrides,3.11,,
+function,PyBuffer_FillInfo,3.11,,
+function,PyBuffer_FromContiguous,3.11,,
+function,PyBuffer_GetPointer,3.11,,
+function,PyBuffer_IsContiguous,3.11,,
+function,PyBuffer_Release,3.11,,
+function,PyBuffer_SizeFromFormat,3.11,,
+function,PyBuffer_ToContiguous,3.11,,
+var,PyByteArrayIter_Type,3.2,,
+function,PyByteArray_AsString,3.2,,
+function,PyByteArray_Concat,3.2,,
+function,PyByteArray_FromObject,3.2,,
+function,PyByteArray_FromStringAndSize,3.2,,
+function,PyByteArray_Resize,3.2,,
+function,PyByteArray_Size,3.2,,
+var,PyByteArray_Type,3.2,,
+var,PyBytesIter_Type,3.2,,
+function,PyBytes_AsString,3.2,,
+function,PyBytes_AsStringAndSize,3.2,,
+function,PyBytes_Concat,3.2,,
+function,PyBytes_ConcatAndDel,3.2,,
+function,PyBytes_DecodeEscape,3.2,,
+function,PyBytes_FromFormat,3.2,,
+function,PyBytes_FromFormatV,3.2,,
+function,PyBytes_FromObject,3.2,,
+function,PyBytes_FromString,3.2,,
+function,PyBytes_FromStringAndSize,3.2,,
+function,PyBytes_Repr,3.2,,
+function,PyBytes_Size,3.2,,
+var,PyBytes_Type,3.2,,
+type,PyCFunction,3.2,,
+type,PyCFunctionWithKeywords,3.2,,
+function,PyCFunction_Call,3.2,,
+function,PyCFunction_GetFlags,3.2,,
+function,PyCFunction_GetFunction,3.2,,
+function,PyCFunction_GetSelf,3.2,,
+function,PyCFunction_New,3.4,,
+function,PyCFunction_NewEx,3.2,,
+var,PyCFunction_Type,3.2,,
+function,PyCMethod_New,3.9,,
+function,PyCallIter_New,3.2,,
+var,PyCallIter_Type,3.2,,
+function,PyCallable_Check,3.2,,
+type,PyCapsule_Destructor,3.2,,
+function,PyCapsule_GetContext,3.2,,
+function,PyCapsule_GetDestructor,3.2,,
+function,PyCapsule_GetName,3.2,,
+function,PyCapsule_GetPointer,3.2,,
+function,PyCapsule_Import,3.2,,
+function,PyCapsule_IsValid,3.2,,
+function,PyCapsule_New,3.2,,
+function,PyCapsule_SetContext,3.2,,
+function,PyCapsule_SetDestructor,3.2,,
+function,PyCapsule_SetName,3.2,,
+function,PyCapsule_SetPointer,3.2,,
+var,PyCapsule_Type,3.2,,
+var,PyClassMethodDescr_Type,3.2,,
+function,PyCodec_BackslashReplaceErrors,3.2,,
+function,PyCodec_Decode,3.2,,
+function,PyCodec_Decoder,3.2,,
+function,PyCodec_Encode,3.2,,
+function,PyCodec_Encoder,3.2,,
+function,PyCodec_IgnoreErrors,3.2,,
+function,PyCodec_IncrementalDecoder,3.2,,
+function,PyCodec_IncrementalEncoder,3.2,,
+function,PyCodec_KnownEncoding,3.2,,
+function,PyCodec_LookupError,3.2,,
+function,PyCodec_NameReplaceErrors,3.7,,
+function,PyCodec_Register,3.2,,
+function,PyCodec_RegisterError,3.2,,
+function,PyCodec_ReplaceErrors,3.2,,
+function,PyCodec_StreamReader,3.2,,
+function,PyCodec_StreamWriter,3.2,,
+function,PyCodec_StrictErrors,3.2,,
+function,PyCodec_Unregister,3.10,,
+function,PyCodec_XMLCharRefReplaceErrors,3.2,,
+function,PyComplex_FromDoubles,3.2,,
+function,PyComplex_ImagAsDouble,3.2,,
+function,PyComplex_RealAsDouble,3.2,,
+var,PyComplex_Type,3.2,,
+function,PyDescr_NewClassMethod,3.2,,
+function,PyDescr_NewGetSet,3.2,,
+function,PyDescr_NewMember,3.2,,
+function,PyDescr_NewMethod,3.2,,
+var,PyDictItems_Type,3.2,,
+var,PyDictIterItem_Type,3.2,,
+var,PyDictIterKey_Type,3.2,,
+var,PyDictIterValue_Type,3.2,,
+var,PyDictKeys_Type,3.2,,
+function,PyDictProxy_New,3.2,,
+var,PyDictProxy_Type,3.2,,
+var,PyDictRevIterItem_Type,3.8,,
+var,PyDictRevIterKey_Type,3.8,,
+var,PyDictRevIterValue_Type,3.8,,
+var,PyDictValues_Type,3.2,,
+function,PyDict_Clear,3.2,,
+function,PyDict_Contains,3.2,,
+function,PyDict_Copy,3.2,,
+function,PyDict_DelItem,3.2,,
+function,PyDict_DelItemString,3.2,,
+function,PyDict_GetItem,3.2,,
+function,PyDict_GetItemString,3.2,,
+function,PyDict_GetItemWithError,3.2,,
+function,PyDict_Items,3.2,,
+function,PyDict_Keys,3.2,,
+function,PyDict_Merge,3.2,,
+function,PyDict_MergeFromSeq2,3.2,,
+function,PyDict_New,3.2,,
+function,PyDict_Next,3.2,,
+function,PyDict_SetItem,3.2,,
+function,PyDict_SetItemString,3.2,,
+function,PyDict_Size,3.2,,
+var,PyDict_Type,3.2,,
+function,PyDict_Update,3.2,,
+function,PyDict_Values,3.2,,
+var,PyEllipsis_Type,3.2,,
+var,PyEnum_Type,3.2,,
+function,PyErr_BadArgument,3.2,,
+function,PyErr_BadInternalCall,3.2,,
+function,PyErr_CheckSignals,3.2,,
+function,PyErr_Clear,3.2,,
+function,PyErr_Display,3.2,,
+function,PyErr_ExceptionMatches,3.2,,
+function,PyErr_Fetch,3.2,,
+function,PyErr_Format,3.2,,
+function,PyErr_FormatV,3.5,,
+function,PyErr_GetExcInfo,3.7,,
+function,PyErr_GivenExceptionMatches,3.2,,
+function,PyErr_NewException,3.2,,
+function,PyErr_NewExceptionWithDoc,3.2,,
+function,PyErr_NoMemory,3.2,,
+function,PyErr_NormalizeException,3.2,,
+function,PyErr_Occurred,3.2,,
+function,PyErr_Print,3.2,,
+function,PyErr_PrintEx,3.2,,
+function,PyErr_ProgramText,3.2,,
+function,PyErr_ResourceWarning,3.6,,
+function,PyErr_Restore,3.2,,
+function,PyErr_SetExcFromWindowsErr,3.7,on Windows,
+function,PyErr_SetExcFromWindowsErrWithFilename,3.7,on Windows,
+function,PyErr_SetExcFromWindowsErrWithFilenameObject,3.7,on Windows,
+function,PyErr_SetExcFromWindowsErrWithFilenameObjects,3.7,on Windows,
+function,PyErr_SetExcInfo,3.7,,
+function,PyErr_SetFromErrno,3.2,,
+function,PyErr_SetFromErrnoWithFilename,3.2,,
+function,PyErr_SetFromErrnoWithFilenameObject,3.2,,
+function,PyErr_SetFromErrnoWithFilenameObjects,3.7,,
+function,PyErr_SetFromWindowsErr,3.7,on Windows,
+function,PyErr_SetFromWindowsErrWithFilename,3.7,on Windows,
+function,PyErr_SetImportError,3.7,,
+function,PyErr_SetImportErrorSubclass,3.6,,
+function,PyErr_SetInterrupt,3.2,,
+function,PyErr_SetInterruptEx,3.10,,
+function,PyErr_SetNone,3.2,,
+function,PyErr_SetObject,3.2,,
+function,PyErr_SetString,3.2,,
+function,PyErr_SyntaxLocation,3.2,,
+function,PyErr_SyntaxLocationEx,3.7,,
+function,PyErr_WarnEx,3.2,,
+function,PyErr_WarnExplicit,3.2,,
+function,PyErr_WarnFormat,3.2,,
+function,PyErr_WriteUnraisable,3.2,,
+function,PyEval_AcquireLock,3.2,,
+function,PyEval_AcquireThread,3.2,,
+function,PyEval_CallFunction,3.2,,
+function,PyEval_CallMethod,3.2,,
+function,PyEval_CallObjectWithKeywords,3.2,,
+function,PyEval_EvalCode,3.2,,
+function,PyEval_EvalCodeEx,3.2,,
+function,PyEval_EvalFrame,3.2,,
+function,PyEval_EvalFrameEx,3.2,,
+function,PyEval_GetBuiltins,3.2,,
+function,PyEval_GetFrame,3.2,,
+function,PyEval_GetFuncDesc,3.2,,
+function,PyEval_GetFuncName,3.2,,
+function,PyEval_GetGlobals,3.2,,
+function,PyEval_GetLocals,3.2,,
+function,PyEval_InitThreads,3.2,,
+function,PyEval_ReleaseLock,3.2,,
+function,PyEval_ReleaseThread,3.2,,
+function,PyEval_RestoreThread,3.2,,
+function,PyEval_SaveThread,3.2,,
+function,PyEval_ThreadsInitialized,3.2,,
+var,PyExc_ArithmeticError,3.2,,
+var,PyExc_AssertionError,3.2,,
+var,PyExc_AttributeError,3.2,,
+var,PyExc_BaseException,3.2,,
+var,PyExc_BaseExceptionGroup,3.11,,
+var,PyExc_BlockingIOError,3.7,,
+var,PyExc_BrokenPipeError,3.7,,
+var,PyExc_BufferError,3.2,,
+var,PyExc_BytesWarning,3.2,,
+var,PyExc_ChildProcessError,3.7,,
+var,PyExc_ConnectionAbortedError,3.7,,
+var,PyExc_ConnectionError,3.7,,
+var,PyExc_ConnectionRefusedError,3.7,,
+var,PyExc_ConnectionResetError,3.7,,
+var,PyExc_DeprecationWarning,3.2,,
+var,PyExc_EOFError,3.2,,
+var,PyExc_EncodingWarning,3.10,,
+var,PyExc_EnvironmentError,3.2,,
+var,PyExc_Exception,3.2,,
+var,PyExc_FileExistsError,3.7,,
+var,PyExc_FileNotFoundError,3.7,,
+var,PyExc_FloatingPointError,3.2,,
+var,PyExc_FutureWarning,3.2,,
+var,PyExc_GeneratorExit,3.2,,
+var,PyExc_IOError,3.2,,
+var,PyExc_ImportError,3.2,,
+var,PyExc_ImportWarning,3.2,,
+var,PyExc_IndentationError,3.2,,
+var,PyExc_IndexError,3.2,,
+var,PyExc_InterruptedError,3.7,,
+var,PyExc_IsADirectoryError,3.7,,
+var,PyExc_KeyError,3.2,,
+var,PyExc_KeyboardInterrupt,3.2,,
+var,PyExc_LookupError,3.2,,
+var,PyExc_MemoryError,3.2,,
+var,PyExc_ModuleNotFoundError,3.6,,
+var,PyExc_NameError,3.2,,
+var,PyExc_NotADirectoryError,3.7,,
+var,PyExc_NotImplementedError,3.2,,
+var,PyExc_OSError,3.2,,
+var,PyExc_OverflowError,3.2,,
+var,PyExc_PendingDeprecationWarning,3.2,,
+var,PyExc_PermissionError,3.7,,
+var,PyExc_ProcessLookupError,3.7,,
+var,PyExc_RecursionError,3.7,,
+var,PyExc_ReferenceError,3.2,,
+var,PyExc_ResourceWarning,3.7,,
+var,PyExc_RuntimeError,3.2,,
+var,PyExc_RuntimeWarning,3.2,,
+var,PyExc_StopAsyncIteration,3.7,,
+var,PyExc_StopIteration,3.2,,
+var,PyExc_SyntaxError,3.2,,
+var,PyExc_SyntaxWarning,3.2,,
+var,PyExc_SystemError,3.2,,
+var,PyExc_SystemExit,3.2,,
+var,PyExc_TabError,3.2,,
+var,PyExc_TimeoutError,3.7,,
+var,PyExc_TypeError,3.2,,
+var,PyExc_UnboundLocalError,3.2,,
+var,PyExc_UnicodeDecodeError,3.2,,
+var,PyExc_UnicodeEncodeError,3.2,,
+var,PyExc_UnicodeError,3.2,,
+var,PyExc_UnicodeTranslateError,3.2,,
+var,PyExc_UnicodeWarning,3.2,,
+var,PyExc_UserWarning,3.2,,
+var,PyExc_ValueError,3.2,,
+var,PyExc_Warning,3.2,,
+var,PyExc_WindowsError,3.7,on Windows,
+var,PyExc_ZeroDivisionError,3.2,,
+function,PyExceptionClass_Name,3.8,,
+function,PyException_GetCause,3.2,,
+function,PyException_GetContext,3.2,,
+function,PyException_GetTraceback,3.2,,
+function,PyException_SetCause,3.2,,
+function,PyException_SetContext,3.2,,
+function,PyException_SetTraceback,3.2,,
+function,PyFile_FromFd,3.2,,
+function,PyFile_GetLine,3.2,,
+function,PyFile_WriteObject,3.2,,
+function,PyFile_WriteString,3.2,,
+var,PyFilter_Type,3.2,,
+function,PyFloat_AsDouble,3.2,,
+function,PyFloat_FromDouble,3.2,,
+function,PyFloat_FromString,3.2,,
+function,PyFloat_GetInfo,3.2,,
+function,PyFloat_GetMax,3.2,,
+function,PyFloat_GetMin,3.2,,
+var,PyFloat_Type,3.2,,
+type,PyFrameObject,3.2,,opaque
+function,PyFrame_GetCode,3.10,,
+function,PyFrame_GetLineNumber,3.10,,
+function,PyFrozenSet_New,3.2,,
+var,PyFrozenSet_Type,3.2,,
+function,PyGC_Collect,3.2,,
+function,PyGC_Disable,3.10,,
+function,PyGC_Enable,3.10,,
+function,PyGC_IsEnabled,3.10,,
+function,PyGILState_Ensure,3.2,,
+function,PyGILState_GetThisThreadState,3.2,,
+function,PyGILState_Release,3.2,,
+type,PyGILState_STATE,3.2,,
+type,PyGetSetDef,3.2,,full-abi
+var,PyGetSetDescr_Type,3.2,,
+function,PyImport_AddModule,3.2,,
+function,PyImport_AddModuleObject,3.7,,
+function,PyImport_AppendInittab,3.2,,
+function,PyImport_ExecCodeModule,3.2,,
+function,PyImport_ExecCodeModuleEx,3.2,,
+function,PyImport_ExecCodeModuleObject,3.7,,
+function,PyImport_ExecCodeModuleWithPathnames,3.2,,
+function,PyImport_GetImporter,3.2,,
+function,PyImport_GetMagicNumber,3.2,,
+function,PyImport_GetMagicTag,3.2,,
+function,PyImport_GetModule,3.8,,
+function,PyImport_GetModuleDict,3.2,,
+function,PyImport_Import,3.2,,
+function,PyImport_ImportFrozenModule,3.2,,
+function,PyImport_ImportFrozenModuleObject,3.7,,
+function,PyImport_ImportModule,3.2,,
+function,PyImport_ImportModuleLevel,3.2,,
+function,PyImport_ImportModuleLevelObject,3.7,,
+function,PyImport_ImportModuleNoBlock,3.2,,
+function,PyImport_ReloadModule,3.2,,
+function,PyIndex_Check,3.8,,
+type,PyInterpreterState,3.2,,opaque
+function,PyInterpreterState_Clear,3.2,,
+function,PyInterpreterState_Delete,3.2,,
+function,PyInterpreterState_Get,3.9,,
+function,PyInterpreterState_GetDict,3.8,,
+function,PyInterpreterState_GetID,3.7,,
+function,PyInterpreterState_New,3.2,,
+function,PyIter_Check,3.8,,
+function,PyIter_Next,3.2,,
+function,PyIter_Send,3.10,,
+var,PyListIter_Type,3.2,,
+var,PyListRevIter_Type,3.2,,
+function,PyList_Append,3.2,,
+function,PyList_AsTuple,3.2,,
+function,PyList_GetItem,3.2,,
+function,PyList_GetSlice,3.2,,
+function,PyList_Insert,3.2,,
+function,PyList_New,3.2,,
+function,PyList_Reverse,3.2,,
+function,PyList_SetItem,3.2,,
+function,PyList_SetSlice,3.2,,
+function,PyList_Size,3.2,,
+function,PyList_Sort,3.2,,
+var,PyList_Type,3.2,,
+type,PyLongObject,3.2,,opaque
+var,PyLongRangeIter_Type,3.2,,
+function,PyLong_AsDouble,3.2,,
+function,PyLong_AsLong,3.2,,
+function,PyLong_AsLongAndOverflow,3.2,,
+function,PyLong_AsLongLong,3.2,,
+function,PyLong_AsLongLongAndOverflow,3.2,,
+function,PyLong_AsSize_t,3.2,,
+function,PyLong_AsSsize_t,3.2,,
+function,PyLong_AsUnsignedLong,3.2,,
+function,PyLong_AsUnsignedLongLong,3.2,,
+function,PyLong_AsUnsignedLongLongMask,3.2,,
+function,PyLong_AsUnsignedLongMask,3.2,,
+function,PyLong_AsVoidPtr,3.2,,
+function,PyLong_FromDouble,3.2,,
+function,PyLong_FromLong,3.2,,
+function,PyLong_FromLongLong,3.2,,
+function,PyLong_FromSize_t,3.2,,
+function,PyLong_FromSsize_t,3.2,,
+function,PyLong_FromString,3.2,,
+function,PyLong_FromUnsignedLong,3.2,,
+function,PyLong_FromUnsignedLongLong,3.2,,
+function,PyLong_FromVoidPtr,3.2,,
+function,PyLong_GetInfo,3.2,,
+var,PyLong_Type,3.2,,
+var,PyMap_Type,3.2,,
+function,PyMapping_Check,3.2,,
+function,PyMapping_GetItemString,3.2,,
+function,PyMapping_HasKey,3.2,,
+function,PyMapping_HasKeyString,3.2,,
+function,PyMapping_Items,3.2,,
+function,PyMapping_Keys,3.2,,
+function,PyMapping_Length,3.2,,
+function,PyMapping_SetItemString,3.2,,
+function,PyMapping_Size,3.2,,
+function,PyMapping_Values,3.2,,
+function,PyMem_Calloc,3.7,,
+function,PyMem_Free,3.2,,
+function,PyMem_Malloc,3.2,,
+function,PyMem_Realloc,3.2,,
+type,PyMemberDef,3.2,,full-abi
+var,PyMemberDescr_Type,3.2,,
+function,PyMemoryView_FromBuffer,3.11,,
+function,PyMemoryView_FromMemory,3.7,,
+function,PyMemoryView_FromObject,3.2,,
+function,PyMemoryView_GetContiguous,3.2,,
+var,PyMemoryView_Type,3.2,,
+type,PyMethodDef,3.2,,full-abi
+var,PyMethodDescr_Type,3.2,,
+type,PyModuleDef,3.2,,full-abi
+type,PyModuleDef_Base,3.2,,full-abi
+function,PyModuleDef_Init,3.5,,
+var,PyModuleDef_Type,3.5,,
+function,PyModule_AddFunctions,3.7,,
+function,PyModule_AddIntConstant,3.2,,
+function,PyModule_AddObject,3.2,,
+function,PyModule_AddObjectRef,3.10,,
+function,PyModule_AddStringConstant,3.2,,
+function,PyModule_AddType,3.10,,
+function,PyModule_Create2,3.2,,
+function,PyModule_ExecDef,3.7,,
+function,PyModule_FromDefAndSpec2,3.7,,
+function,PyModule_GetDef,3.2,,
+function,PyModule_GetDict,3.2,,
+function,PyModule_GetFilename,3.2,,
+function,PyModule_GetFilenameObject,3.2,,
+function,PyModule_GetName,3.2,,
+function,PyModule_GetNameObject,3.7,,
+function,PyModule_GetState,3.2,,
+function,PyModule_New,3.2,,
+function,PyModule_NewObject,3.7,,
+function,PyModule_SetDocString,3.7,,
+var,PyModule_Type,3.2,,
+function,PyNumber_Absolute,3.2,,
+function,PyNumber_Add,3.2,,
+function,PyNumber_And,3.2,,
+function,PyNumber_AsSsize_t,3.2,,
+function,PyNumber_Check,3.2,,
+function,PyNumber_Divmod,3.2,,
+function,PyNumber_Float,3.2,,
+function,PyNumber_FloorDivide,3.2,,
+function,PyNumber_InPlaceAdd,3.2,,
+function,PyNumber_InPlaceAnd,3.2,,
+function,PyNumber_InPlaceFloorDivide,3.2,,
+function,PyNumber_InPlaceLshift,3.2,,
+function,PyNumber_InPlaceMatrixMultiply,3.7,,
+function,PyNumber_InPlaceMultiply,3.2,,
+function,PyNumber_InPlaceOr,3.2,,
+function,PyNumber_InPlacePower,3.2,,
+function,PyNumber_InPlaceRemainder,3.2,,
+function,PyNumber_InPlaceRshift,3.2,,
+function,PyNumber_InPlaceSubtract,3.2,,
+function,PyNumber_InPlaceTrueDivide,3.2,,
+function,PyNumber_InPlaceXor,3.2,,
+function,PyNumber_Index,3.2,,
+function,PyNumber_Invert,3.2,,
+function,PyNumber_Long,3.2,,
+function,PyNumber_Lshift,3.2,,
+function,PyNumber_MatrixMultiply,3.7,,
+function,PyNumber_Multiply,3.2,,
+function,PyNumber_Negative,3.2,,
+function,PyNumber_Or,3.2,,
+function,PyNumber_Positive,3.2,,
+function,PyNumber_Power,3.2,,
+function,PyNumber_Remainder,3.2,,
+function,PyNumber_Rshift,3.2,,
+function,PyNumber_Subtract,3.2,,
+function,PyNumber_ToBase,3.2,,
+function,PyNumber_TrueDivide,3.2,,
+function,PyNumber_Xor,3.2,,
+function,PyOS_AfterFork,3.2,on platforms with fork(),
+function,PyOS_AfterFork_Child,3.7,on platforms with fork(),
+function,PyOS_AfterFork_Parent,3.7,on platforms with fork(),
+function,PyOS_BeforeFork,3.7,on platforms with fork(),
+function,PyOS_CheckStack,3.7,on platforms with USE_STACKCHECK,
+function,PyOS_FSPath,3.6,,
+var,PyOS_InputHook,3.2,,
+function,PyOS_InterruptOccurred,3.2,,
+function,PyOS_double_to_string,3.2,,
+function,PyOS_getsig,3.2,,
+function,PyOS_mystricmp,3.2,,
+function,PyOS_mystrnicmp,3.2,,
+function,PyOS_setsig,3.2,,
+type,PyOS_sighandler_t,3.2,,
+function,PyOS_snprintf,3.2,,
+function,PyOS_string_to_double,3.2,,
+function,PyOS_strtol,3.2,,
+function,PyOS_strtoul,3.2,,
+function,PyOS_vsnprintf,3.2,,
+type,PyObject,3.2,,members
+member,PyObject.ob_refcnt,3.2,,
+member,PyObject.ob_type,3.2,,
+function,PyObject_ASCII,3.2,,
+function,PyObject_AsCharBuffer,3.2,,
+function,PyObject_AsFileDescriptor,3.2,,
+function,PyObject_AsReadBuffer,3.2,,
+function,PyObject_AsWriteBuffer,3.2,,
+function,PyObject_Bytes,3.2,,
+function,PyObject_Call,3.2,,
+function,PyObject_CallFunction,3.2,,
+function,PyObject_CallFunctionObjArgs,3.2,,
+function,PyObject_CallMethod,3.2,,
+function,PyObject_CallMethodObjArgs,3.2,,
+function,PyObject_CallNoArgs,3.10,,
+function,PyObject_CallObject,3.2,,
+function,PyObject_Calloc,3.7,,
+function,PyObject_CheckBuffer,3.11,,
+function,PyObject_CheckReadBuffer,3.2,,
+function,PyObject_ClearWeakRefs,3.2,,
+function,PyObject_CopyData,3.11,,
+function,PyObject_DelItem,3.2,,
+function,PyObject_DelItemString,3.2,,
+function,PyObject_Dir,3.2,,
+function,PyObject_Format,3.2,,
+function,PyObject_Free,3.2,,
+function,PyObject_GC_Del,3.2,,
+function,PyObject_GC_IsFinalized,3.9,,
+function,PyObject_GC_IsTracked,3.9,,
+function,PyObject_GC_Track,3.2,,
+function,PyObject_GC_UnTrack,3.2,,
+function,PyObject_GenericGetAttr,3.2,,
+function,PyObject_GenericGetDict,3.10,,
+function,PyObject_GenericSetAttr,3.2,,
+function,PyObject_GenericSetDict,3.7,,
+function,PyObject_GetAIter,3.10,,
+function,PyObject_GetAttr,3.2,,
+function,PyObject_GetAttrString,3.2,,
+function,PyObject_GetBuffer,3.11,,
+function,PyObject_GetItem,3.2,,
+function,PyObject_GetIter,3.2,,
+function,PyObject_HasAttr,3.2,,
+function,PyObject_HasAttrString,3.2,,
+function,PyObject_Hash,3.2,,
+function,PyObject_HashNotImplemented,3.2,,
+function,PyObject_Init,3.2,,
+function,PyObject_InitVar,3.2,,
+function,PyObject_IsInstance,3.2,,
+function,PyObject_IsSubclass,3.2,,
+function,PyObject_IsTrue,3.2,,
+function,PyObject_Length,3.2,,
+function,PyObject_Malloc,3.2,,
+function,PyObject_Not,3.2,,
+function,PyObject_Realloc,3.2,,
+function,PyObject_Repr,3.2,,
+function,PyObject_RichCompare,3.2,,
+function,PyObject_RichCompareBool,3.2,,
+function,PyObject_SelfIter,3.2,,
+function,PyObject_SetAttr,3.2,,
+function,PyObject_SetAttrString,3.2,,
+function,PyObject_SetItem,3.2,,
+function,PyObject_Size,3.2,,
+function,PyObject_Str,3.2,,
+function,PyObject_Type,3.2,,
+var,PyProperty_Type,3.2,,
+var,PyRangeIter_Type,3.2,,
+var,PyRange_Type,3.2,,
+var,PyReversed_Type,3.2,,
+function,PySeqIter_New,3.2,,
+var,PySeqIter_Type,3.2,,
+function,PySequence_Check,3.2,,
+function,PySequence_Concat,3.2,,
+function,PySequence_Contains,3.2,,
+function,PySequence_Count,3.2,,
+function,PySequence_DelItem,3.2,,
+function,PySequence_DelSlice,3.2,,
+function,PySequence_Fast,3.2,,
+function,PySequence_GetItem,3.2,,
+function,PySequence_GetSlice,3.2,,
+function,PySequence_In,3.2,,
+function,PySequence_InPlaceConcat,3.2,,
+function,PySequence_InPlaceRepeat,3.2,,
+function,PySequence_Index,3.2,,
+function,PySequence_Length,3.2,,
+function,PySequence_List,3.2,,
+function,PySequence_Repeat,3.2,,
+function,PySequence_SetItem,3.2,,
+function,PySequence_SetSlice,3.2,,
+function,PySequence_Size,3.2,,
+function,PySequence_Tuple,3.2,,
+var,PySetIter_Type,3.2,,
+function,PySet_Add,3.2,,
+function,PySet_Clear,3.2,,
+function,PySet_Contains,3.2,,
+function,PySet_Discard,3.2,,
+function,PySet_New,3.2,,
+function,PySet_Pop,3.2,,
+function,PySet_Size,3.2,,
+var,PySet_Type,3.2,,
+function,PySlice_AdjustIndices,3.7,,
+function,PySlice_GetIndices,3.2,,
+function,PySlice_GetIndicesEx,3.2,,
+function,PySlice_New,3.2,,
+var,PySlice_Type,3.2,,
+function,PySlice_Unpack,3.7,,
+function,PyState_AddModule,3.3,,
+function,PyState_FindModule,3.2,,
+function,PyState_RemoveModule,3.3,,
+type,PyStructSequence_Desc,3.2,,full-abi
+type,PyStructSequence_Field,3.2,,full-abi
+function,PyStructSequence_GetItem,3.2,,
+function,PyStructSequence_New,3.2,,
+function,PyStructSequence_NewType,3.2,,
+function,PyStructSequence_SetItem,3.2,,
+var,PyStructSequence_UnnamedField,3.11,,
+var,PySuper_Type,3.2,,
+function,PySys_AddWarnOption,3.2,,
+function,PySys_AddWarnOptionUnicode,3.2,,
+function,PySys_AddXOption,3.7,,
+function,PySys_FormatStderr,3.2,,
+function,PySys_FormatStdout,3.2,,
+function,PySys_GetObject,3.2,,
+function,PySys_GetXOptions,3.7,,
+function,PySys_HasWarnOptions,3.2,,
+function,PySys_ResetWarnOptions,3.2,,
+function,PySys_SetArgv,3.2,,
+function,PySys_SetArgvEx,3.2,,
+function,PySys_SetObject,3.2,,
+function,PySys_SetPath,3.2,,
+function,PySys_WriteStderr,3.2,,
+function,PySys_WriteStdout,3.2,,
+type,PyThreadState,3.2,,opaque
+function,PyThreadState_Clear,3.2,,
+function,PyThreadState_Delete,3.2,,
+function,PyThreadState_Get,3.2,,
+function,PyThreadState_GetDict,3.2,,
+function,PyThreadState_GetFrame,3.10,,
+function,PyThreadState_GetID,3.10,,
+function,PyThreadState_GetInterpreter,3.10,,
+function,PyThreadState_New,3.2,,
+function,PyThreadState_SetAsyncExc,3.2,,
+function,PyThreadState_Swap,3.2,,
+function,PyThread_GetInfo,3.3,,
+function,PyThread_ReInitTLS,3.2,,
+function,PyThread_acquire_lock,3.2,,
+function,PyThread_acquire_lock_timed,3.2,,
+function,PyThread_allocate_lock,3.2,,
+function,PyThread_create_key,3.2,,
+function,PyThread_delete_key,3.2,,
+function,PyThread_delete_key_value,3.2,,
+function,PyThread_exit_thread,3.2,,
+function,PyThread_free_lock,3.2,,
+function,PyThread_get_key_value,3.2,,
+function,PyThread_get_stacksize,3.2,,
+function,PyThread_get_thread_ident,3.2,,
+function,PyThread_get_thread_native_id,3.2,,
+function,PyThread_init_thread,3.2,,
+function,PyThread_release_lock,3.2,,
+function,PyThread_set_key_value,3.2,,
+function,PyThread_set_stacksize,3.2,,
+function,PyThread_start_new_thread,3.2,,
+function,PyThread_tss_alloc,3.7,,
+function,PyThread_tss_create,3.7,,
+function,PyThread_tss_delete,3.7,,
+function,PyThread_tss_free,3.7,,
+function,PyThread_tss_get,3.7,,
+function,PyThread_tss_is_created,3.7,,
+function,PyThread_tss_set,3.7,,
+function,PyTraceBack_Here,3.2,,
+function,PyTraceBack_Print,3.2,,
+var,PyTraceBack_Type,3.2,,
+var,PyTupleIter_Type,3.2,,
+function,PyTuple_GetItem,3.2,,
+function,PyTuple_GetSlice,3.2,,
+function,PyTuple_New,3.2,,
+function,PyTuple_Pack,3.2,,
+function,PyTuple_SetItem,3.2,,
+function,PyTuple_Size,3.2,,
+var,PyTuple_Type,3.2,,
+type,PyTypeObject,3.2,,opaque
+function,PyType_ClearCache,3.2,,
+function,PyType_FromModuleAndSpec,3.10,,
+function,PyType_FromSpec,3.2,,
+function,PyType_FromSpecWithBases,3.3,,
+function,PyType_GenericAlloc,3.2,,
+function,PyType_GenericNew,3.2,,
+function,PyType_GetFlags,3.2,,
+function,PyType_GetModule,3.10,,
+function,PyType_GetModuleState,3.10,,
+function,PyType_GetName,3.11,,
+function,PyType_GetQualName,3.11,,
+function,PyType_GetSlot,3.4,,
+function,PyType_IsSubtype,3.2,,
+function,PyType_Modified,3.2,,
+function,PyType_Ready,3.2,,
+type,PyType_Slot,3.2,,full-abi
+type,PyType_Spec,3.2,,full-abi
+var,PyType_Type,3.2,,
+function,PyUnicodeDecodeError_Create,3.2,,
+function,PyUnicodeDecodeError_GetEncoding,3.2,,
+function,PyUnicodeDecodeError_GetEnd,3.2,,
+function,PyUnicodeDecodeError_GetObject,3.2,,
+function,PyUnicodeDecodeError_GetReason,3.2,,
+function,PyUnicodeDecodeError_GetStart,3.2,,
+function,PyUnicodeDecodeError_SetEnd,3.2,,
+function,PyUnicodeDecodeError_SetReason,3.2,,
+function,PyUnicodeDecodeError_SetStart,3.2,,
+function,PyUnicodeEncodeError_GetEncoding,3.2,,
+function,PyUnicodeEncodeError_GetEnd,3.2,,
+function,PyUnicodeEncodeError_GetObject,3.2,,
+function,PyUnicodeEncodeError_GetReason,3.2,,
+function,PyUnicodeEncodeError_GetStart,3.2,,
+function,PyUnicodeEncodeError_SetEnd,3.2,,
+function,PyUnicodeEncodeError_SetReason,3.2,,
+function,PyUnicodeEncodeError_SetStart,3.2,,
+var,PyUnicodeIter_Type,3.2,,
+function,PyUnicodeTranslateError_GetEnd,3.2,,
+function,PyUnicodeTranslateError_GetObject,3.2,,
+function,PyUnicodeTranslateError_GetReason,3.2,,
+function,PyUnicodeTranslateError_GetStart,3.2,,
+function,PyUnicodeTranslateError_SetEnd,3.2,,
+function,PyUnicodeTranslateError_SetReason,3.2,,
+function,PyUnicodeTranslateError_SetStart,3.2,,
+function,PyUnicode_Append,3.2,,
+function,PyUnicode_AppendAndDel,3.2,,
+function,PyUnicode_AsASCIIString,3.2,,
+function,PyUnicode_AsCharmapString,3.2,,
+function,PyUnicode_AsDecodedObject,3.2,,
+function,PyUnicode_AsDecodedUnicode,3.2,,
+function,PyUnicode_AsEncodedObject,3.2,,
+function,PyUnicode_AsEncodedString,3.2,,
+function,PyUnicode_AsEncodedUnicode,3.2,,
+function,PyUnicode_AsLatin1String,3.2,,
+function,PyUnicode_AsMBCSString,3.7,on Windows,
+function,PyUnicode_AsRawUnicodeEscapeString,3.2,,
+function,PyUnicode_AsUCS4,3.7,,
+function,PyUnicode_AsUCS4Copy,3.7,,
+function,PyUnicode_AsUTF16String,3.2,,
+function,PyUnicode_AsUTF32String,3.2,,
+function,PyUnicode_AsUTF8AndSize,3.10,,
+function,PyUnicode_AsUTF8String,3.2,,
+function,PyUnicode_AsUnicodeEscapeString,3.2,,
+function,PyUnicode_AsWideChar,3.2,,
+function,PyUnicode_AsWideCharString,3.7,,
+function,PyUnicode_BuildEncodingMap,3.2,,
+function,PyUnicode_Compare,3.2,,
+function,PyUnicode_CompareWithASCIIString,3.2,,
+function,PyUnicode_Concat,3.2,,
+function,PyUnicode_Contains,3.2,,
+function,PyUnicode_Count,3.2,,
+function,PyUnicode_Decode,3.2,,
+function,PyUnicode_DecodeASCII,3.2,,
+function,PyUnicode_DecodeCharmap,3.2,,
+function,PyUnicode_DecodeCodePageStateful,3.7,on Windows,
+function,PyUnicode_DecodeFSDefault,3.2,,
+function,PyUnicode_DecodeFSDefaultAndSize,3.2,,
+function,PyUnicode_DecodeLatin1,3.2,,
+function,PyUnicode_DecodeLocale,3.7,,
+function,PyUnicode_DecodeLocaleAndSize,3.7,,
+function,PyUnicode_DecodeMBCS,3.7,on Windows,
+function,PyUnicode_DecodeMBCSStateful,3.7,on Windows,
+function,PyUnicode_DecodeRawUnicodeEscape,3.2,,
+function,PyUnicode_DecodeUTF16,3.2,,
+function,PyUnicode_DecodeUTF16Stateful,3.2,,
+function,PyUnicode_DecodeUTF32,3.2,,
+function,PyUnicode_DecodeUTF32Stateful,3.2,,
+function,PyUnicode_DecodeUTF7,3.2,,
+function,PyUnicode_DecodeUTF7Stateful,3.2,,
+function,PyUnicode_DecodeUTF8,3.2,,
+function,PyUnicode_DecodeUTF8Stateful,3.2,,
+function,PyUnicode_DecodeUnicodeEscape,3.2,,
+function,PyUnicode_EncodeCodePage,3.7,on Windows,
+function,PyUnicode_EncodeFSDefault,3.2,,
+function,PyUnicode_EncodeLocale,3.7,,
+function,PyUnicode_FSConverter,3.2,,
+function,PyUnicode_FSDecoder,3.2,,
+function,PyUnicode_Find,3.2,,
+function,PyUnicode_FindChar,3.7,,
+function,PyUnicode_Format,3.2,,
+function,PyUnicode_FromEncodedObject,3.2,,
+function,PyUnicode_FromFormat,3.2,,
+function,PyUnicode_FromFormatV,3.2,,
+function,PyUnicode_FromObject,3.2,,
+function,PyUnicode_FromOrdinal,3.2,,
+function,PyUnicode_FromString,3.2,,
+function,PyUnicode_FromStringAndSize,3.2,,
+function,PyUnicode_FromWideChar,3.2,,
+function,PyUnicode_GetDefaultEncoding,3.2,,
+function,PyUnicode_GetLength,3.7,,
+function,PyUnicode_GetSize,3.2,,
+function,PyUnicode_InternFromString,3.2,,
+function,PyUnicode_InternImmortal,3.2,,
+function,PyUnicode_InternInPlace,3.2,,
+function,PyUnicode_IsIdentifier,3.2,,
+function,PyUnicode_Join,3.2,,
+function,PyUnicode_Partition,3.2,,
+function,PyUnicode_RPartition,3.2,,
+function,PyUnicode_RSplit,3.2,,
+function,PyUnicode_ReadChar,3.7,,
+function,PyUnicode_Replace,3.2,,
+function,PyUnicode_Resize,3.2,,
+function,PyUnicode_RichCompare,3.2,,
+function,PyUnicode_Split,3.2,,
+function,PyUnicode_Splitlines,3.2,,
+function,PyUnicode_Substring,3.7,,
+function,PyUnicode_Tailmatch,3.2,,
+function,PyUnicode_Translate,3.2,,
+var,PyUnicode_Type,3.2,,
+function,PyUnicode_WriteChar,3.7,,
+type,PyVarObject,3.2,,members
+member,PyVarObject.ob_base,3.2,,
+member,PyVarObject.ob_size,3.2,,
+type,PyWeakReference,3.2,,opaque
+function,PyWeakref_GetObject,3.2,,
+function,PyWeakref_NewProxy,3.2,,
+function,PyWeakref_NewRef,3.2,,
+var,PyWrapperDescr_Type,3.2,,
+function,PyWrapper_New,3.2,,
+var,PyZip_Type,3.2,,
+function,Py_AddPendingCall,3.2,,
+function,Py_AtExit,3.2,,
+macro,Py_BEGIN_ALLOW_THREADS,3.2,,
+macro,Py_BLOCK_THREADS,3.2,,
+function,Py_BuildValue,3.2,,
+function,Py_BytesMain,3.8,,
+function,Py_CompileString,3.2,,
+function,Py_DecRef,3.2,,
+function,Py_DecodeLocale,3.7,,
+macro,Py_END_ALLOW_THREADS,3.2,,
+function,Py_EncodeLocale,3.7,,
+function,Py_EndInterpreter,3.2,,
+function,Py_EnterRecursiveCall,3.9,,
+function,Py_Exit,3.2,,
+function,Py_FatalError,3.2,,
+var,Py_FileSystemDefaultEncodeErrors,3.10,,
+var,Py_FileSystemDefaultEncoding,3.2,,
+function,Py_Finalize,3.2,,
+function,Py_FinalizeEx,3.6,,
+function,Py_GenericAlias,3.9,,
+var,Py_GenericAliasType,3.9,,
+function,Py_GetBuildInfo,3.2,,
+function,Py_GetCompiler,3.2,,
+function,Py_GetCopyright,3.2,,
+function,Py_GetExecPrefix,3.2,,
+function,Py_GetPath,3.2,,
+function,Py_GetPlatform,3.2,,
+function,Py_GetPrefix,3.2,,
+function,Py_GetProgramFullPath,3.2,,
+function,Py_GetProgramName,3.2,,
+function,Py_GetPythonHome,3.2,,
+function,Py_GetRecursionLimit,3.2,,
+function,Py_GetVersion,3.2,,
+var,Py_HasFileSystemDefaultEncoding,3.2,,
+function,Py_IncRef,3.2,,
+function,Py_Initialize,3.2,,
+function,Py_InitializeEx,3.2,,
+function,Py_Is,3.10,,
+function,Py_IsFalse,3.10,,
+function,Py_IsInitialized,3.2,,
+function,Py_IsNone,3.10,,
+function,Py_IsTrue,3.10,,
+function,Py_LeaveRecursiveCall,3.9,,
+function,Py_Main,3.2,,
+function,Py_MakePendingCalls,3.2,,
+function,Py_NewInterpreter,3.2,,
+function,Py_NewRef,3.10,,
+function,Py_ReprEnter,3.2,,
+function,Py_ReprLeave,3.2,,
+function,Py_SetPath,3.7,,
+function,Py_SetProgramName,3.2,,
+function,Py_SetPythonHome,3.2,,
+function,Py_SetRecursionLimit,3.2,,
+type,Py_UCS4,3.2,,
+macro,Py_UNBLOCK_THREADS,3.2,,
+var,Py_UTF8Mode,3.8,,
+function,Py_VaBuildValue,3.2,,
+var,Py_Version,3.11,,
+function,Py_XNewRef,3.10,,
+type,Py_buffer,3.11,,full-abi
+type,Py_intptr_t,3.2,,
+type,Py_ssize_t,3.2,,
+type,Py_uintptr_t,3.2,,
+type,allocfunc,3.2,,
+type,binaryfunc,3.2,,
+type,descrgetfunc,3.2,,
+type,descrsetfunc,3.2,,
+type,destructor,3.2,,
+type,getattrfunc,3.2,,
+type,getattrofunc,3.2,,
+type,getiterfunc,3.2,,
+type,getter,3.2,,
+type,hashfunc,3.2,,
+type,initproc,3.2,,
+type,inquiry,3.2,,
+type,iternextfunc,3.2,,
+type,lenfunc,3.2,,
+type,newfunc,3.2,,
+type,objobjargproc,3.2,,
+type,objobjproc,3.2,,
+type,reprfunc,3.2,,
+type,richcmpfunc,3.2,,
+type,setattrfunc,3.2,,
+type,setattrofunc,3.2,,
+type,setter,3.2,,
+type,ssizeargfunc,3.2,,
+type,ssizeobjargproc,3.2,,
+type,ssizessizeargfunc,3.2,,
+type,ssizessizeobjargproc,3.2,,
+type,symtable,3.2,,opaque
+type,ternaryfunc,3.2,,
+type,traverseproc,3.2,,
+type,unaryfunc,3.2,,
+type,visitproc,3.2,,
diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py
index 489f06613eb31..9defb24a0331e 100644
--- a/Doc/tools/extensions/c_annotations.py
+++ b/Doc/tools/extensions/c_annotations.py
@@ -36,6 +36,7 @@
     'type': 'type',
     'macro': 'macro',
     'type': 'type',
+    'member': 'member',
 }
 
 
@@ -100,6 +101,12 @@ def add_annotations(self, app, doctree):
             # Stable ABI annotation. These have two forms:
             #   Part of the [Stable ABI](link).
             #   Part of the [Stable ABI](link) since version X.Y.
+            # For structs, there's some more info in the message:
+            #   Part of the [Limited API](link) (as an opaque struct).
+            #   Part of the [Stable ABI](link) (including all members).
+            #   Part of the [Limited API](link) (Only some members are part
+            #       of the stable ABI.).
+            # ... all of which can have "since version X.Y" appended.
             record = self.stable_abi_data.get(name)
             if record:
                 if record['role'] != objtype:
@@ -113,15 +120,27 @@ def add_annotations(self, app, doctree):
                 ref_node = addnodes.pending_xref(
                     'Stable ABI', refdomain="std", reftarget='stable',
                     reftype='ref', refexplicit="False")
-                ref_node += nodes.Text('Stable ABI')
+                struct_abi_kind = record['struct_abi_kind']
+                if struct_abi_kind in {'opaque', 'members'}:
+                    ref_node += nodes.Text('Limited API')
+                else:
+                    ref_node += nodes.Text('Stable ABI')
                 emph_node += ref_node
+                if struct_abi_kind == 'opaque':
+                    emph_node += nodes.Text(' (as an opaque struct)')
+                elif struct_abi_kind == 'full-abi':
+                    emph_node += nodes.Text(' (including all members)')
                 if record['ifdef_note']:
                     emph_node += nodes.Text(' ' + record['ifdef_note'])
                 if stable_added == '3.2':
                     # Stable ABI was introduced in 3.2.
-                    emph_node += nodes.Text('.')
+                    pass
                 else:
-                    emph_node += nodes.Text(f' since version {stable_added}.')
+                    emph_node += nodes.Text(f' since version {stable_added}')
+                emph_node += nodes.Text('.')
+                if struct_abi_kind == 'members':
+                    emph_node += nodes.Text(
+                        ' (Only some members are part of the stable ABI.)')
                 node.insert(0, emph_node)
 
             # Return value annotation
diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst
index d58056394d864..96902cf61b46d 100644
--- a/Doc/whatsnew/3.11.rst
+++ b/Doc/whatsnew/3.11.rst
@@ -1214,8 +1214,10 @@ Porting to Python 3.11
   which are not available in the limited C API.
   (Contributed by Victor Stinner in :issue:`46007`.)
 
-* The :c:type:`PyFrameObject` structure member has been moved to the internal C
-  API headers.
+.. _pyframeobject-3.11-hiding:
+
+* The :c:type:`PyFrameObject` structure members have been removed from the
+  public C API.
 
   While the documentation notes that the :c:type:`PyFrameObject` fields are
   subject to change at any time, they have been stable for a long time and were
diff --git a/Misc/NEWS.d/next/Documentation/2022-03-30-17-08-12.bpo-47115.R3wt3i.rst b/Misc/NEWS.d/next/Documentation/2022-03-30-17-08-12.bpo-47115.R3wt3i.rst
new file mode 100644
index 0000000000000..ac7b6dcb32d5f
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2022-03-30-17-08-12.bpo-47115.R3wt3i.rst
@@ -0,0 +1,2 @@
+The documentation now lists which members of C structs are part of the
+:ref:`Limited API/Stable ABI <stable>`.
diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt
index cc3cc56d472d9..04d22603cc19b 100644
--- a/Misc/stable_abi.txt
+++ b/Misc/stable_abi.txt
@@ -42,6 +42,15 @@
 #   - a combination of the above (functions that were called by macros that
 #     were public in the past)
 
+# For structs, one of the following must be set:
+# - opaque: The struct name is available in the Limited API, but its members
+#   are not. Users must manipulate it via pointers.
+# - members: Space-separated list of members which are part of the
+#   Limited API and Stable ABI.
+#   Members that aren't listed are not accessible to applications.
+# - full-abi: The entire struct -- all its members and its size -- is part of
+#   the Stable ABI, and must not change.
+
 # 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
@@ -54,40 +63,58 @@
 
 struct PyObject
     added 3.2
+    members ob_refcnt ob_type
 struct PyVarObject
     added 3.2
+    members ob_base ob_size
 struct PyMethodDef
     added 3.2
+    full-abi
 struct PyMemberDef
     added 3.2
+    full-abi
 struct PyGetSetDef
     added 3.2
+    full-abi
 struct PyModuleDef_Base
     added 3.2
+    full-abi
 struct PyModuleDef
     added 3.2
+    full-abi
 struct PyStructSequence_Field
     added 3.2
+    full-abi
 struct PyStructSequence_Desc
     added 3.2
+    full-abi
 struct PyType_Slot
     added 3.2
+    full-abi
 struct PyType_Spec
     added 3.2
+    full-abi
 struct PyThreadState
     added 3.2
+    opaque
 struct PyInterpreterState
     added 3.2
+    opaque
 struct PyFrameObject
     added 3.2
+    opaque
 struct symtable
     added 3.2
+    opaque
 struct PyWeakReference
     added 3.2
+    opaque
 struct PyLongObject
     added 3.2
+    opaque
 struct PyTypeObject
     added 3.2
+    opaque
 
 function PyType_FromSpec
     added 3.2
@@ -299,11 +326,11 @@ typedef newfunc
     added 3.2
 typedef allocfunc
     added 3.2
-struct PyCFunction
+typedef PyCFunction
     added 3.2
-struct PyCFunctionWithKeywords
+typedef PyCFunctionWithKeywords
     added 3.2
-struct PyCapsule_Destructor
+typedef PyCapsule_Destructor
     added 3.2
 typedef getter
     added 3.2
@@ -2194,6 +2221,7 @@ data PyStructSequence_UnnamedField
 # Add stable Py_buffer API in Python 3.11 (https://bugs.python.org/issue45459)
 struct Py_buffer
     added 3.11
+    full-abi
 function PyObject_CheckBuffer
     added 3.11
 function PyObject_GetBuffer
diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py
index 2d951788d12c4..feca9a2ba5a4c 100755
--- a/Tools/scripts/stable_abi.py
+++ b/Tools/scripts/stable_abi.py
@@ -118,6 +118,8 @@ class ABIItem:
     contents: list = dataclasses.field(default_factory=list)
     abi_only: bool = False
     ifdef: str = None
+    struct_abi_kind: str = None
+    members: list = None
 
     KINDS = frozenset({
         'struct', 'function', 'macro', 'data', 'const', 'typedef',
@@ -172,6 +174,15 @@ def raise_error(msg):
             if parent.kind not in {'function', 'data'}:
                 raise_error(f'{kind} cannot go in {parent.kind}')
             parent.abi_only = True
+        elif kind in {'members', 'full-abi', 'opaque'}:
+            if parent.kind not in {'struct'}:
+                raise_error(f'{kind} cannot go in {parent.kind}')
+            if prev := getattr(parent, 'struct_abi_kind', None):
+                raise_error(
+                    f'{parent.name} already has {prev}, cannot add {kind}')
+            parent.struct_abi_kind = kind
+            if kind == 'members':
+                parent.members = content.split()
         else:
             raise_error(f"unknown kind {kind!r}")
             # When adding more, update the comment in stable_abi.txt.
@@ -246,7 +257,9 @@ def sort_key(item):
 def gen_doc_annotations(manifest, args, outfile):
     """Generate/check the stable ABI list for documentation annotations"""
     writer = csv.DictWriter(
-        outfile, ['role', 'name', 'added', 'ifdef_note'], lineterminator='\n')
+        outfile,
+        ['role', 'name', 'added', 'ifdef_note', 'struct_abi_kind'],
+        lineterminator='\n')
     writer.writeheader()
     for item in manifest.select(REST_ROLES.keys(), include_abi_only=False):
         if item.ifdef:
@@ -257,7 +270,13 @@ def gen_doc_annotations(manifest, args, outfile):
             'role': REST_ROLES[item.kind],
             'name': item.name,
             'added': item.added,
-            'ifdef_note': ifdef_note})
+            'ifdef_note': ifdef_note,
+            'struct_abi_kind': item.struct_abi_kind})
+        for member_name in item.members or ():
+            writer.writerow({
+                'role': 'member',
+                'name': f'{item.name}.{member_name}',
+                'added': item.added})
 
 @generator("ctypes_test", 'Lib/test/test_stable_abi_ctypes.py')
 def gen_ctypes_test(manifest, args, outfile):



More information about the Python-checkins mailing list