From d79f118d044e9b4244b5dfda35448d39202d7f56 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 6 Apr 2022 16:50:45 +0200 Subject: bpo-47115: Document which parts of structs are in limited API/stable ABI (GH-32196) Co-authored-by: Erlend Egeberg Aasland --- Doc/c-api/frame.rst | 6 +- Doc/data/stable_abi.dat | 1766 ++++++++++---------- Doc/tools/extensions/c_annotations.py | 25 +- Doc/whatsnew/3.11.rst | 6 +- .../2022-03-30-17-08-12.bpo-47115.R3wt3i.rst | 2 + Misc/stable_abi.txt | 34 +- Tools/scripts/stable_abi.py | 23 +- 7 files changed, 969 insertions(+), 893 deletions(-) create mode 100644 Misc/NEWS.d/next/Documentation/2022-03-30-17-08-12.bpo-47115.R3wt3i.rst diff --git a/Doc/c-api/frame.rst b/Doc/c-api/frame.rst index 6d265e4..f6c682c 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 ` + 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 18bbf03..7f42f9c 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 489f066..9defb24 100644 --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -36,6 +36,7 @@ REST_ROLE_MAP = { 'type': 'type', 'macro': 'macro', 'type': 'type', + 'member': 'member', } @@ -100,6 +101,12 @@ class Annotations: # 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 @@ class Annotations: 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 d580563..96902cf 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 0000000..ac7b6dc --- /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 `. diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index cc3cc56..04d2260 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 2d95178..feca9a2 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 parse_manifest(file): 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 @@ REST_ROLES = { 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): -- cgit v0.12