From 28e34ab5d792695654eb896cf6a99804888d6f58 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 27 Apr 2021 21:04:29 +0200 Subject: [PATCH 01/12] Doc: Reformat the C API and ABI Versioning page Mark up all the version macros, adding them to the index and allowing links to them. Clarify that these are resolved at build time. Add an example for Python 3.10. Some people might assume this is 0x10, not 0xA, based on how well PY_VERSION_HEX "reads" in hex. Link to the (upcoming) page on API and ABI stability. --- Doc/c-api/apiabiversion.rst | 82 ++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 29 deletions(-) diff --git a/Doc/c-api/apiabiversion.rst b/Doc/c-api/apiabiversion.rst index b8a8f2ff886219..d7865b6d6f1fc9 100644 --- a/Doc/c-api/apiabiversion.rst +++ b/Doc/c-api/apiabiversion.rst @@ -6,34 +6,58 @@ API and ABI Versioning *********************** -``PY_VERSION_HEX`` is the Python version number encoded in a single integer. - -For example if the ``PY_VERSION_HEX`` is set to ``0x030401a2``, the underlying -version information can be found by treating it as a 32 bit number in -the following manner: - - +-------+-------------------------+------------------------------------------------+ - | Bytes | Bits (big endian order) | Meaning | - +=======+=========================+================================================+ - | ``1`` | ``1-8`` | ``PY_MAJOR_VERSION`` (the ``3`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``2`` | ``9-16`` | ``PY_MINOR_VERSION`` (the ``4`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``3`` | ``17-24`` | ``PY_MICRO_VERSION`` (the ``1`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``4`` | ``25-28`` | ``PY_RELEASE_LEVEL`` (``0xA`` for alpha, | - | | | ``0xB`` for beta, ``0xC`` for release | - | | | candidate and ``0xF`` for final), in this | - | | | case it is alpha. | - +-------+-------------------------+------------------------------------------------+ - | | ``29-32`` | ``PY_RELEASE_SERIAL`` (the ``2`` in | - | | | ``3.4.1a2``, zero for final releases) | - +-------+-------------------------+------------------------------------------------+ - -Thus ``3.4.1a2`` is hexversion ``0x030401a2``. +CPython exposes its version number in the following macros. +Note that these correspond to the version code is built with, +not necessarily the version used at run time. -All the given macros are defined in :source:`Include/patchlevel.h`. +See :ref:`stable` for a discussion of API and ABI stability across versions. + +.. c:macro:: PY_MAJOR_VERSION + + The ``3`` in ``3.4.1a2``. + +.. c:macro:: PY_MINOR_VERSION + + The ``4`` in ``3.4.1a2``. + +.. c:macro:: PY_MICRO_VERSION + + The ``1`` in ``3.4.1a2``. + +.. c:macro:: PY_RELEASE_LEVEL + + The ``a`` in ``3.4.1a2``. + This can be ``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for release + candidate or ``0xF`` for final. +.. c:macro:: PY_RELEASE_SERIAL + + The ``2`` in ``3.4.1a2``. Zero for final releases. + +.. c:macro:: PY_VERSION_HEX + + The Python version number encoded in a single integer. + + For example if the ``PY_VERSION_HEX`` is set to ``0x030401a2``, the underlying + version information can be found by treating it as a 32 bit number in + the following manner: + + +-------+-------------------------+-------------------------+ + | Bytes | Bits (big endian order) | Meaning | + +=======+=========================+=========================+ + | 1 | 1-8 | ``PY_MAJOR_VERSION`` | + +-------+-------------------------+-------------------------+ + | 2 | 9-16 | ``PY_MINOR_VERSION`` | + +-------+-------------------------+-------------------------+ + | 3 | 17-24 | ``PY_MICRO_VERSION`` | + +-------+-------------------------+-------------------------+ + | 4 | 25-28 | ``PY_RELEASE_LEVEL`` | + + +-------------------------+-------------------------+ + | | 29-32 | ``PY_RELEASE_SERIAL`` | + +-------+-------------------------+-------------------------+ + + Thus ``3.4.1a2`` is hexversion ``0x030401a2`` and ``3.10.0`` is + hexversion ``0x030a00f0``. + + +All the given macros are defined in :source:`Include/patchlevel.h`. From 61cf85815070c883908d44f629bc364efb760c09 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 23 Apr 2021 13:53:11 +0200 Subject: [PATCH 02/12] Add Stable ABI (PEP 652) documentation --- Doc/c-api/stable.rst | 179 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 146 insertions(+), 33 deletions(-) diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 9c05cb3c82dfbe..30a7a77a3e48db 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -2,37 +2,150 @@ .. _stable: -*********************************** +******************* +C API Compatibility +******************* + +Python's C API is covered by the Backwards Compatibility Policy, :pep:`387`. +While the C API will change with every minor release (e.g. from 3.9 to 3.10), +most changes will be source-compatible, typically by only adding new API. +Changing existing API or removing API is only done after a deprecation period +or to fix serious issues. + +CPython's Application Binary Interface (ABI) is forward- and +backwards-compatible across a minor release (if these are compiled the same +way; see :ref:`stable-abi-platform` below). +So, code compiled for Python 3.10.0 will work on 3.10.8 and vice versa, +but will need to be compiled separately for 3.9.x and 3.10.x. + +Names prefixed by an underscore, such as ``_Py_InternalState``, +are private API that can change without notice even in patch releases. + + Stable Application Binary Interface -*********************************** - -Traditionally, the C API of Python will change with every release. Most changes -will be source-compatible, typically by only adding API, rather than changing -existing API or removing API (although some interfaces do get removed after -being deprecated first). - -Unfortunately, the API compatibility does not extend to binary compatibility -(the ABI). The reason is primarily the evolution of struct definitions, where -addition of a new field, or changing the type of a field, might not break the -API, but can break the ABI. As a consequence, extension modules need to be -recompiled for every Python release (although an exception is possible on Unix -when none of the affected interfaces are used). In addition, on Windows, -extension modules link with a specific pythonXY.dll and need to be recompiled to -link with a newer one. - -Since Python 3.2, a subset of the API has been declared to guarantee a stable -ABI. Extension modules wishing to use this API (called "limited API") need to -define ``Py_LIMITED_API``. A number of interpreter details then become hidden -from the extension module; in return, a module is built that works on any 3.x -version (x>=2) without recompilation. - -In some cases, the stable ABI needs to be extended with new functions. -Extension modules wishing to use these new APIs need to set ``Py_LIMITED_API`` -to the ``PY_VERSION_HEX`` value (see :ref:`apiabiversion`) of the minimum Python -version they want to support (e.g. ``0x03030000`` for Python 3.3). Such modules -will work on all subsequent Python releases, but fail to load (because of -missing symbols) on the older releases. - -As of Python 3.2, the set of functions available to the limited API is -documented in :pep:`384`. In the C API documentation, API elements that are not -part of the limited API are marked as "Not part of the limited API." +=================================== + +Python 3.2 introduced the *Limited API*, a subset of Python's C API. +Extensions that only use the Limited API can be +compiled once and work with multiple versions of Python. +Contents of the Limited API are :ref:`listed below `. + +To enable this, Python provides a *Stable ABI*: a set of symbols that will +remain compatible across Python 3.x versions. The Stable ABI contains symbols +exposed in the Limited API, but also other ones – for example, functions +necessary to support older versions of the Limited API. + +(For simplicity, this document talks about *extensions*, but the Limited API +and Stable ABI work the same way for all uses of the API – for example, +embedding Python.) + +To opt in to use the Limited API, define the macro ``Py_LIMITED_API`` +before including ``Python.h``. + +Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that +the extension will work without recompilation with all Python 3.x releases +(x>=2) on the particular :ref:`platform `. + +Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will +do the same, but allow additional API added up to specified version, +and lose compatibility with earlier versions. +Rather than using the macro directly, hardcode a minimum minor version +(e.g. ``0x030A0000`` for Python 3.10) for stability when compiling with +future Python versions. + +On Windows, extensions that use the Stable ABI should be linked against +``python3.dll`` rather than a version-specific library such as +``python39.dll``. + +On some platforms, Python will look for and load shared library files named +with the ``abi3`` tag (e.g. ``mymodule.abi3.so``). +It does not check if such extensions conform to a Stable ABI. +The user (or their packaging tools) need to ensure that, for example, +extensions built with the 3.10+ Limited API are not installed for lower +versions of Python. + +All functions in the Stable ABI are present as functions in Python's shared +library, not solely as macros. This makes them usable from languages that don't +use the C preprocessor. + + +Limited API Scope and Performance +--------------------------------- + +The goal for the Limited API is to allow everything that is possible with the +full C API, but possibly with a performance penalty. + +For example, while :c:func:`PyList_GetItem` is available, its “unsafe” macro +variant :c:func:`PyList_GET_ITEM` is not. +The macro can be faster because it can rely on version-specific implementation +details of the list object. + +Without ``Py_LIMITED_API`` defined, some C API functions are inlined or +replaced by similar macros. +Defining ``Py_LIMITED_API`` disables this inlining, allowing stability as +Python's data structures are improved, but possibly reducing performance. + +By leaving out the ``Py_LIMITED_API`` definition, it is possible to compile +a Limited API extension with a version-specific ABI, gaining performance +but limiting compatibility. +Compiling with ``Py_LIMITED_API`` will then yield an extension that can be +distributed where a version-specific one is not available – for example, +for prereleases of an upcoming Python version. + + +Limited API Caveats +------------------- + +Note that compiling with ``Py_LIMITED_API`` is *not* a complete guarantee that +code conforms to the Limited API or the Stable ABI. ``Py_LIMITED_API`` only +covers definitions, but an API also includes other issues, such as expected +semantics. + +One issue that ``Py_LIMITED_API`` does not guard against is calling a function +with arguments that are invalid in a lower Python version. +For example, consider a function that starts accepting ``NULL`` for an +argument. In Python 3.9, ``NULL`` now selects a default behavior, but in +Python 3.8, the argument will be used directly, causing a ``NULL`` dereference +and crash. A similar argument works for fields of structs. + +Another issue is that some struct fields are currently not hidden when +``Py_LIMITED_API`` is defined, even though they're part of the Limited API. + +For these reasons, we recommend testing an extension with *all* minor Python +versions it supports, and preferably to build with the *lowest* such version. + +We also recommend reviewing documentation of all used API to check +if it is explicitly part of the Limited API. Even with ``Py_LIMITED_API`` +defined, a few private declarations are exposed for technical reasons (or +even unintentionally, as bugs). + +Also note that the Limited API is not necessarily stable: compiling with +``Py_LIMITED_API`` with Python 3.8 means that the extension will +run with Python 3.12, but it will not necessarily *compile* with Python 3.12. +In particular, parts of the Limited API may be deprecated and removed, +provided that the Stable ABI stays stable. + + +.. _stable-abi-platform: + +Platform Considerations +======================= + +ABI stability depends not only on Python, but also on the compiler used, +lower-level libraries and compiler options. For the purposes of the Stable ABI, +these details define a “platform”. They usually depend on the OS +type and processor architecture + +It is the responsibility of each particular distributor of Python +to ensure that all Python versions on a particular platform are built +in a way that does not break the Stable ABI. +This is the case with Windows and macOS releases from ``python.org`` and many +third-party distributors. + + +.. _stable-abi-list: + +Contents of Limited API +======================= + +XXX: to be generated automatically From b9dc6d2e8df7049a1d2f4a439a24d884b9e6c310 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Thu, 29 Apr 2021 17:06:33 +0200 Subject: [PATCH 03/12] Mark up Py_LIMITED_API as a macro --- Doc/c-api/stable.rst | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 30a7a77a3e48db..bc77c937fefcc9 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -2,9 +2,9 @@ .. _stable: -******************* -C API Compatibility -******************* +*************** +C API Stability +*************** Python's C API is covered by the Backwards Compatibility Policy, :pep:`387`. While the C API will change with every minor release (e.g. from 3.9 to 3.10), @@ -39,19 +39,21 @@ necessary to support older versions of the Limited API. and Stable ABI work the same way for all uses of the API – for example, embedding Python.) -To opt in to use the Limited API, define the macro ``Py_LIMITED_API`` -before including ``Python.h``. +.. c:macro:: Py_LIMITED_API -Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that -the extension will work without recompilation with all Python 3.x releases -(x>=2) on the particular :ref:`platform `. + Define this macro ``Py_LIMITED_API`` before including ``Python.h`` to + opt in to only use the Limited API. -Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will -do the same, but allow additional API added up to specified version, -and lose compatibility with earlier versions. -Rather than using the macro directly, hardcode a minimum minor version -(e.g. ``0x030A0000`` for Python 3.10) for stability when compiling with -future Python versions. + Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that + the extension will work without recompilation with all Python 3.x releases + (x>=2) on the particular :ref:`platform `. + + Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will + do the same, but allow additional API added up to specified version, + and lose compatibility with earlier versions. + Rather than using the macro directly, hardcode a minimum minor version + (e.g. ``0x030A0000`` for Python 3.10) for stability when compiling with + future Python versions. On Windows, extensions that use the Stable ABI should be linked against ``python3.dll`` rather than a version-specific library such as @@ -81,13 +83,13 @@ The macro can be faster because it can rely on version-specific implementation details of the list object. Without ``Py_LIMITED_API`` defined, some C API functions are inlined or -replaced by similar macros. +replaced by macros. Defining ``Py_LIMITED_API`` disables this inlining, allowing stability as Python's data structures are improved, but possibly reducing performance. By leaving out the ``Py_LIMITED_API`` definition, it is possible to compile -a Limited API extension with a version-specific ABI, gaining performance -but limiting compatibility. +a Limited API extension with a version-specific ABI. This can improve +performance for that Python version, but will limit compatibility. Compiling with ``Py_LIMITED_API`` will then yield an extension that can be distributed where a version-specific one is not available – for example, for prereleases of an upcoming Python version. From 15cc273bab773ebe42a1c2cab91bd0a3ae754995 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Thu, 29 Apr 2021 17:06:54 +0200 Subject: [PATCH 04/12] Replace Include/README.rst with a link to the devguide Devguide PR: https://github.com/python/devguide/pull/682 --- Include/README.rst | 66 ++++------------------------------------------ 1 file changed, 5 insertions(+), 61 deletions(-) diff --git a/Include/README.rst b/Include/README.rst index d2467ca22fa038..f52e690eac9a91 100644 --- a/Include/README.rst +++ b/Include/README.rst @@ -3,66 +3,10 @@ The Python C API The C API is divided into three sections: -1. ``Include/`` -2. ``Include/cpython/`` -3. ``Include/internal/`` +1. ``Include/``: Limited API +2. ``Include/cpython/``: CPython implementation details +3. ``Include/internal/``: The internal API +Information on changing the C API is available `in the developer guide`_ -Include: Limited API -==================== - -``Include/``, excluding the ``cpython`` and ``internal`` subdirectories, -contains the public Limited API (Application Programming Interface). -The Limited API is a subset of the C API, designed to guarantee ABI -stability across Python 3 versions, and is defined in :pep:`384`. - -Guidelines for expanding the Limited API: - -- Functions *must not* steal references -- Functions *must not* return borrowed references -- Functions returning references *must* return a strong reference -- Macros should not expose implementation details -- Please start a public discussion before expanding the API -- Functions or macros with a ``_Py`` prefix do not belong in ``Include/``. - -It is possible to add a function or macro to the Limited API from a -given Python version. For example, to add a function to the Limited API -from Python 3.10 and onwards, wrap it with -``#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000``. - - -Include/cpython: CPython implementation details -=============================================== - -``Include/cpython/`` contains the public API that is excluded from the -Limited API and the Stable ABI. - -Guidelines for expanding the public API: - -- Functions *must not* steal references -- Functions *must not* return borrowed references -- Functions returning references *must* return a strong reference - - -Include/internal: The internal API -================================== - - -With PyAPI_FUNC or PyAPI_DATA ------------------------------ - -Functions or structures in ``Include/internal/`` defined with -``PyAPI_FUNC`` or ``PyAPI_DATA`` are internal functions which are -exposed only for specific use cases like debuggers and profilers. - - -With the extern keyword ------------------------ - -Functions in ``Include/internal/`` defined with the ``extern`` keyword -*must not and can not* be used outside the CPython code base. Only -built-in stdlib extensions (built with the ``Py_BUILD_CORE_BUILTIN`` -macro defined) can use such functions. - -When in doubt, new internal C functions should be defined in -``Include/internal`` using the ``extern`` keyword. +.. _in the developer guide: https://devguide.python.org/c-api/ From d3c31071bc1cd1d04d3ae0250f7701425e238c88 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 9 Feb 2021 16:24:43 +0100 Subject: [PATCH 05/12] Add a list of the stable ABI to the docs --- Doc/c-api/limited_api.inc | 862 ++++++++++++++++++++++++++++++++++++ Doc/c-api/stable.rst | 5 +- Tools/scripts/stable_abi.py | 18 + 3 files changed, 884 insertions(+), 1 deletion(-) create mode 100644 Doc/c-api/limited_api.inc diff --git a/Doc/c-api/limited_api.inc b/Doc/c-api/limited_api.inc new file mode 100644 index 00000000000000..c5eab4244fef0c --- /dev/null +++ b/Doc/c-api/limited_api.inc @@ -0,0 +1,862 @@ +.. File generated by Tools/stable_abi.py + +* :c:func:`PyAiter_Check` +* :c:func:`PyArg_Parse` +* :c:func:`PyArg_ParseTuple` +* :c:func:`PyArg_ParseTupleAndKeywords` +* :c:func:`PyArg_UnpackTuple` +* :c:func:`PyArg_VaParse` +* :c:func:`PyArg_VaParseTupleAndKeywords` +* :c:func:`PyArg_ValidateKeywordArguments` +* :c:data:`PyBaseObject_Type` +* :c:func:`PyBool_FromLong` +* :c:data:`PyBool_Type` +* :c:data:`PyByteArrayIter_Type` +* :c:func:`PyByteArray_AsString` +* :c:func:`PyByteArray_Concat` +* :c:func:`PyByteArray_FromObject` +* :c:func:`PyByteArray_FromStringAndSize` +* :c:func:`PyByteArray_Resize` +* :c:func:`PyByteArray_Size` +* :c:data:`PyByteArray_Type` +* :c:data:`PyBytesIter_Type` +* :c:func:`PyBytes_AsString` +* :c:func:`PyBytes_AsStringAndSize` +* :c:func:`PyBytes_Concat` +* :c:func:`PyBytes_ConcatAndDel` +* :c:func:`PyBytes_DecodeEscape` +* :c:func:`PyBytes_FromFormat` +* :c:func:`PyBytes_FromFormatV` +* :c:func:`PyBytes_FromObject` +* :c:func:`PyBytes_FromString` +* :c:func:`PyBytes_FromStringAndSize` +* :c:func:`PyBytes_Repr` +* :c:func:`PyBytes_Size` +* :c:data:`PyBytes_Type` +* :c:type:`PyCFunction` +* :c:type:`PyCFunctionWithKeywords` +* :c:func:`PyCFunction_Call` +* :c:func:`PyCFunction_GetFlags` +* :c:func:`PyCFunction_GetFunction` +* :c:func:`PyCFunction_GetSelf` +* :c:func:`PyCFunction_New` +* :c:func:`PyCFunction_NewEx` +* :c:data:`PyCFunction_Type` +* :c:func:`PyCMethod_New` +* :c:func:`PyCallIter_New` +* :c:data:`PyCallIter_Type` +* :c:func:`PyCallable_Check` +* :c:type:`PyCapsule_Destructor` +* :c:func:`PyCapsule_GetContext` +* :c:func:`PyCapsule_GetDestructor` +* :c:func:`PyCapsule_GetName` +* :c:func:`PyCapsule_GetPointer` +* :c:func:`PyCapsule_Import` +* :c:func:`PyCapsule_IsValid` +* :c:func:`PyCapsule_New` +* :c:func:`PyCapsule_SetContext` +* :c:func:`PyCapsule_SetDestructor` +* :c:func:`PyCapsule_SetName` +* :c:func:`PyCapsule_SetPointer` +* :c:data:`PyCapsule_Type` +* :c:data:`PyClassMethodDescr_Type` +* :c:func:`PyCodec_BackslashReplaceErrors` +* :c:func:`PyCodec_Decode` +* :c:func:`PyCodec_Decoder` +* :c:func:`PyCodec_Encode` +* :c:func:`PyCodec_Encoder` +* :c:func:`PyCodec_IgnoreErrors` +* :c:func:`PyCodec_IncrementalDecoder` +* :c:func:`PyCodec_IncrementalEncoder` +* :c:func:`PyCodec_KnownEncoding` +* :c:func:`PyCodec_LookupError` +* :c:func:`PyCodec_NameReplaceErrors` +* :c:func:`PyCodec_Register` +* :c:func:`PyCodec_RegisterError` +* :c:func:`PyCodec_ReplaceErrors` +* :c:func:`PyCodec_StreamReader` +* :c:func:`PyCodec_StreamWriter` +* :c:func:`PyCodec_StrictErrors` +* :c:data:`PyCodec_Unregister` +* :c:func:`PyCodec_XMLCharRefReplaceErrors` +* :c:func:`PyComplex_FromDoubles` +* :c:func:`PyComplex_ImagAsDouble` +* :c:func:`PyComplex_RealAsDouble` +* :c:data:`PyComplex_Type` +* :c:func:`PyDescr_NewClassMethod` +* :c:func:`PyDescr_NewGetSet` +* :c:func:`PyDescr_NewMember` +* :c:func:`PyDescr_NewMethod` +* :c:data:`PyDictItems_Type` +* :c:data:`PyDictIterItem_Type` +* :c:data:`PyDictIterKey_Type` +* :c:data:`PyDictIterValue_Type` +* :c:data:`PyDictKeys_Type` +* :c:func:`PyDictProxy_New` +* :c:data:`PyDictProxy_Type` +* :c:data:`PyDictRevIterItem_Type` +* :c:data:`PyDictRevIterKey_Type` +* :c:data:`PyDictRevIterValue_Type` +* :c:data:`PyDictValues_Type` +* :c:func:`PyDict_Clear` +* :c:func:`PyDict_Contains` +* :c:func:`PyDict_Copy` +* :c:func:`PyDict_DelItem` +* :c:func:`PyDict_DelItemString` +* :c:func:`PyDict_GetItem` +* :c:func:`PyDict_GetItemString` +* :c:func:`PyDict_GetItemWithError` +* :c:func:`PyDict_Items` +* :c:func:`PyDict_Keys` +* :c:func:`PyDict_Merge` +* :c:func:`PyDict_MergeFromSeq2` +* :c:func:`PyDict_New` +* :c:func:`PyDict_Next` +* :c:func:`PyDict_SetItem` +* :c:func:`PyDict_SetItemString` +* :c:func:`PyDict_Size` +* :c:data:`PyDict_Type` +* :c:func:`PyDict_Update` +* :c:func:`PyDict_Values` +* :c:data:`PyEllipsis_Type` +* :c:data:`PyEnum_Type` +* :c:func:`PyErr_BadArgument` +* :c:func:`PyErr_BadInternalCall` +* :c:func:`PyErr_CheckSignals` +* :c:func:`PyErr_Clear` +* :c:func:`PyErr_Display` +* :c:func:`PyErr_ExceptionMatches` +* :c:func:`PyErr_Fetch` +* :c:func:`PyErr_Format` +* :c:func:`PyErr_FormatV` +* :c:func:`PyErr_GetExcInfo` +* :c:func:`PyErr_GivenExceptionMatches` +* :c:func:`PyErr_NewException` +* :c:func:`PyErr_NewExceptionWithDoc` +* :c:func:`PyErr_NoMemory` +* :c:func:`PyErr_NormalizeException` +* :c:func:`PyErr_Occurred` +* :c:func:`PyErr_Print` +* :c:func:`PyErr_PrintEx` +* :c:func:`PyErr_ProgramText` +* :c:func:`PyErr_ResourceWarning` +* :c:func:`PyErr_Restore` +* :c:func:`PyErr_SetExcFromWindowsErr` +* :c:func:`PyErr_SetExcFromWindowsErrWithFilename` +* :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObject` +* :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObjects` +* :c:func:`PyErr_SetExcInfo` +* :c:func:`PyErr_SetFromErrno` +* :c:func:`PyErr_SetFromErrnoWithFilename` +* :c:func:`PyErr_SetFromErrnoWithFilenameObject` +* :c:func:`PyErr_SetFromErrnoWithFilenameObjects` +* :c:func:`PyErr_SetFromWindowsErr` +* :c:func:`PyErr_SetFromWindowsErrWithFilename` +* :c:func:`PyErr_SetImportError` +* :c:func:`PyErr_SetImportErrorSubclass` +* :c:func:`PyErr_SetInterrupt` +* :c:func:`PyErr_SetInterruptEx` +* :c:func:`PyErr_SetNone` +* :c:func:`PyErr_SetObject` +* :c:func:`PyErr_SetString` +* :c:func:`PyErr_SyntaxLocation` +* :c:func:`PyErr_SyntaxLocationEx` +* :c:func:`PyErr_WarnEx` +* :c:func:`PyErr_WarnExplicit` +* :c:func:`PyErr_WarnFormat` +* :c:func:`PyErr_WriteUnraisable` +* :c:func:`PyEval_AcquireLock` +* :c:func:`PyEval_AcquireThread` +* :c:func:`PyEval_CallFunction` +* :c:func:`PyEval_CallMethod` +* :c:func:`PyEval_CallObjectWithKeywords` +* :c:func:`PyEval_EvalCode` +* :c:func:`PyEval_EvalCodeEx` +* :c:func:`PyEval_EvalFrame` +* :c:func:`PyEval_EvalFrameEx` +* :c:func:`PyEval_GetBuiltins` +* :c:func:`PyEval_GetFrame` +* :c:func:`PyEval_GetFuncDesc` +* :c:func:`PyEval_GetFuncName` +* :c:func:`PyEval_GetGlobals` +* :c:func:`PyEval_GetLocals` +* :c:func:`PyEval_InitThreads` +* :c:func:`PyEval_ReleaseLock` +* :c:func:`PyEval_ReleaseThread` +* :c:func:`PyEval_RestoreThread` +* :c:func:`PyEval_SaveThread` +* :c:func:`PyEval_ThreadsInitialized` +* :c:data:`PyExc_ArithmeticError` +* :c:data:`PyExc_AssertionError` +* :c:data:`PyExc_AttributeError` +* :c:data:`PyExc_BaseException` +* :c:data:`PyExc_BlockingIOError` +* :c:data:`PyExc_BrokenPipeError` +* :c:data:`PyExc_BufferError` +* :c:data:`PyExc_BytesWarning` +* :c:data:`PyExc_ChildProcessError` +* :c:data:`PyExc_ConnectionAbortedError` +* :c:data:`PyExc_ConnectionError` +* :c:data:`PyExc_ConnectionRefusedError` +* :c:data:`PyExc_ConnectionResetError` +* :c:data:`PyExc_DeprecationWarning` +* :c:data:`PyExc_EOFError` +* :c:data:`PyExc_EncodingWarning` +* :c:data:`PyExc_EnvironmentError` +* :c:data:`PyExc_Exception` +* :c:data:`PyExc_FileExistsError` +* :c:data:`PyExc_FileNotFoundError` +* :c:data:`PyExc_FloatingPointError` +* :c:data:`PyExc_FutureWarning` +* :c:data:`PyExc_GeneratorExit` +* :c:data:`PyExc_IOError` +* :c:data:`PyExc_ImportError` +* :c:data:`PyExc_ImportWarning` +* :c:data:`PyExc_IndentationError` +* :c:data:`PyExc_IndexError` +* :c:data:`PyExc_InterruptedError` +* :c:data:`PyExc_IsADirectoryError` +* :c:data:`PyExc_KeyError` +* :c:data:`PyExc_KeyboardInterrupt` +* :c:data:`PyExc_LookupError` +* :c:data:`PyExc_MemoryError` +* :c:data:`PyExc_ModuleNotFoundError` +* :c:data:`PyExc_NameError` +* :c:data:`PyExc_NotADirectoryError` +* :c:data:`PyExc_NotImplementedError` +* :c:data:`PyExc_OSError` +* :c:data:`PyExc_OverflowError` +* :c:data:`PyExc_PendingDeprecationWarning` +* :c:data:`PyExc_PermissionError` +* :c:data:`PyExc_ProcessLookupError` +* :c:data:`PyExc_RecursionError` +* :c:data:`PyExc_ReferenceError` +* :c:data:`PyExc_ResourceWarning` +* :c:data:`PyExc_RuntimeError` +* :c:data:`PyExc_RuntimeWarning` +* :c:data:`PyExc_StopAsyncIteration` +* :c:data:`PyExc_StopIteration` +* :c:data:`PyExc_SyntaxError` +* :c:data:`PyExc_SyntaxWarning` +* :c:data:`PyExc_SystemError` +* :c:data:`PyExc_SystemExit` +* :c:data:`PyExc_TabError` +* :c:data:`PyExc_TimeoutError` +* :c:data:`PyExc_TypeError` +* :c:data:`PyExc_UnboundLocalError` +* :c:data:`PyExc_UnicodeDecodeError` +* :c:data:`PyExc_UnicodeEncodeError` +* :c:data:`PyExc_UnicodeError` +* :c:data:`PyExc_UnicodeTranslateError` +* :c:data:`PyExc_UnicodeWarning` +* :c:data:`PyExc_UserWarning` +* :c:data:`PyExc_ValueError` +* :c:data:`PyExc_Warning` +* :c:data:`PyExc_WindowsError` +* :c:data:`PyExc_ZeroDivisionError` +* :c:func:`PyExceptionClass_Name` +* :c:func:`PyException_GetCause` +* :c:func:`PyException_GetContext` +* :c:func:`PyException_GetTraceback` +* :c:func:`PyException_SetCause` +* :c:func:`PyException_SetContext` +* :c:func:`PyException_SetTraceback` +* :c:func:`PyFile_FromFd` +* :c:func:`PyFile_GetLine` +* :c:func:`PyFile_WriteObject` +* :c:func:`PyFile_WriteString` +* :c:data:`PyFilter_Type` +* :c:func:`PyFloat_AsDouble` +* :c:func:`PyFloat_FromDouble` +* :c:func:`PyFloat_FromString` +* :c:func:`PyFloat_GetInfo` +* :c:func:`PyFloat_GetMax` +* :c:func:`PyFloat_GetMin` +* :c:data:`PyFloat_Type` +* :c:func:`PyFrame_GetCode` +* :c:func:`PyFrame_GetLineNumber` +* :c:func:`PyFrozenSet_New` +* :c:data:`PyFrozenSet_Type` +* :c:func:`PyGC_Collect` +* :c:func:`PyGC_Disable` +* :c:func:`PyGC_Enable` +* :c:func:`PyGC_IsEnabled` +* :c:func:`PyGILState_Ensure` +* :c:func:`PyGILState_GetThisThreadState` +* :c:func:`PyGILState_Release` +* :c:type:`PyGILState_STATE` +* :c:type:`PyGetSetDef` +* :c:data:`PyGetSetDescr_Type` +* :c:func:`PyImport_AddModule` +* :c:func:`PyImport_AddModuleObject` +* :c:func:`PyImport_AppendInittab` +* :c:func:`PyImport_ExecCodeModule` +* :c:func:`PyImport_ExecCodeModuleEx` +* :c:func:`PyImport_ExecCodeModuleObject` +* :c:func:`PyImport_ExecCodeModuleWithPathnames` +* :c:func:`PyImport_GetImporter` +* :c:func:`PyImport_GetMagicNumber` +* :c:func:`PyImport_GetMagicTag` +* :c:func:`PyImport_GetModule` +* :c:func:`PyImport_GetModuleDict` +* :c:func:`PyImport_Import` +* :c:func:`PyImport_ImportFrozenModule` +* :c:func:`PyImport_ImportFrozenModuleObject` +* :c:func:`PyImport_ImportModule` +* :c:func:`PyImport_ImportModuleLevel` +* :c:func:`PyImport_ImportModuleLevelObject` +* :c:func:`PyImport_ImportModuleNoBlock` +* :c:func:`PyImport_ReloadModule` +* :c:func:`PyIndex_Check` +* :c:type:`PyInterpreterState` +* :c:func:`PyInterpreterState_Clear` +* :c:func:`PyInterpreterState_Delete` +* :c:func:`PyInterpreterState_Get` +* :c:func:`PyInterpreterState_GetDict` +* :c:func:`PyInterpreterState_GetID` +* :c:func:`PyInterpreterState_New` +* :c:func:`PyIter_Check` +* :c:func:`PyIter_Next` +* :c:func:`PyIter_Send` +* :c:data:`PyListIter_Type` +* :c:data:`PyListRevIter_Type` +* :c:func:`PyList_Append` +* :c:func:`PyList_AsTuple` +* :c:func:`PyList_GetItem` +* :c:func:`PyList_GetSlice` +* :c:func:`PyList_Insert` +* :c:func:`PyList_New` +* :c:func:`PyList_Reverse` +* :c:func:`PyList_SetItem` +* :c:func:`PyList_SetSlice` +* :c:func:`PyList_Size` +* :c:func:`PyList_Sort` +* :c:data:`PyList_Type` +* :c:type:`PyLongObject` +* :c:data:`PyLongRangeIter_Type` +* :c:func:`PyLong_AsDouble` +* :c:func:`PyLong_AsLong` +* :c:func:`PyLong_AsLongAndOverflow` +* :c:func:`PyLong_AsLongLong` +* :c:func:`PyLong_AsLongLongAndOverflow` +* :c:func:`PyLong_AsSize_t` +* :c:func:`PyLong_AsSsize_t` +* :c:func:`PyLong_AsUnsignedLong` +* :c:func:`PyLong_AsUnsignedLongLong` +* :c:func:`PyLong_AsUnsignedLongLongMask` +* :c:func:`PyLong_AsUnsignedLongMask` +* :c:func:`PyLong_AsVoidPtr` +* :c:func:`PyLong_FromDouble` +* :c:func:`PyLong_FromLong` +* :c:func:`PyLong_FromLongLong` +* :c:func:`PyLong_FromSize_t` +* :c:func:`PyLong_FromSsize_t` +* :c:func:`PyLong_FromString` +* :c:func:`PyLong_FromUnsignedLong` +* :c:func:`PyLong_FromUnsignedLongLong` +* :c:func:`PyLong_FromVoidPtr` +* :c:func:`PyLong_GetInfo` +* :c:data:`PyLong_Type` +* :c:data:`PyMap_Type` +* :c:func:`PyMapping_Check` +* :c:func:`PyMapping_GetItemString` +* :c:func:`PyMapping_HasKey` +* :c:func:`PyMapping_HasKeyString` +* :c:func:`PyMapping_Items` +* :c:func:`PyMapping_Keys` +* :c:func:`PyMapping_Length` +* :c:func:`PyMapping_SetItemString` +* :c:func:`PyMapping_Size` +* :c:func:`PyMapping_Values` +* :c:func:`PyMem_Calloc` +* :c:func:`PyMem_Free` +* :c:func:`PyMem_Malloc` +* :c:func:`PyMem_Realloc` +* :c:type:`PyMemberDef` +* :c:data:`PyMemberDescr_Type` +* :c:func:`PyMemoryView_FromMemory` +* :c:func:`PyMemoryView_FromObject` +* :c:func:`PyMemoryView_GetContiguous` +* :c:data:`PyMemoryView_Type` +* :c:type:`PyMethodDef` +* :c:data:`PyMethodDescr_Type` +* :c:type:`PyModuleDef` +* :c:type:`PyModuleDef_Base` +* :c:func:`PyModuleDef_Init` +* :c:data:`PyModuleDef_Type` +* :c:func:`PyModule_AddFunctions` +* :c:func:`PyModule_AddIntConstant` +* :c:func:`PyModule_AddObject` +* :c:func:`PyModule_AddObjectRef` +* :c:func:`PyModule_AddStringConstant` +* :c:func:`PyModule_AddType` +* :c:func:`PyModule_Create2` +* :c:func:`PyModule_ExecDef` +* :c:func:`PyModule_FromDefAndSpec2` +* :c:func:`PyModule_GetDef` +* :c:func:`PyModule_GetDict` +* :c:func:`PyModule_GetFilename` +* :c:func:`PyModule_GetFilenameObject` +* :c:func:`PyModule_GetName` +* :c:func:`PyModule_GetNameObject` +* :c:func:`PyModule_GetState` +* :c:func:`PyModule_New` +* :c:func:`PyModule_NewObject` +* :c:func:`PyModule_SetDocString` +* :c:data:`PyModule_Type` +* :c:func:`PyNumber_Absolute` +* :c:func:`PyNumber_Add` +* :c:func:`PyNumber_And` +* :c:func:`PyNumber_AsSsize_t` +* :c:func:`PyNumber_Check` +* :c:func:`PyNumber_Divmod` +* :c:func:`PyNumber_Float` +* :c:func:`PyNumber_FloorDivide` +* :c:func:`PyNumber_InPlaceAdd` +* :c:func:`PyNumber_InPlaceAnd` +* :c:func:`PyNumber_InPlaceFloorDivide` +* :c:func:`PyNumber_InPlaceLshift` +* :c:func:`PyNumber_InPlaceMatrixMultiply` +* :c:func:`PyNumber_InPlaceMultiply` +* :c:func:`PyNumber_InPlaceOr` +* :c:func:`PyNumber_InPlacePower` +* :c:func:`PyNumber_InPlaceRemainder` +* :c:func:`PyNumber_InPlaceRshift` +* :c:func:`PyNumber_InPlaceSubtract` +* :c:func:`PyNumber_InPlaceTrueDivide` +* :c:func:`PyNumber_InPlaceXor` +* :c:func:`PyNumber_Index` +* :c:func:`PyNumber_Invert` +* :c:func:`PyNumber_Long` +* :c:func:`PyNumber_Lshift` +* :c:func:`PyNumber_MatrixMultiply` +* :c:func:`PyNumber_Multiply` +* :c:func:`PyNumber_Negative` +* :c:func:`PyNumber_Or` +* :c:func:`PyNumber_Positive` +* :c:func:`PyNumber_Power` +* :c:func:`PyNumber_Remainder` +* :c:func:`PyNumber_Rshift` +* :c:func:`PyNumber_Subtract` +* :c:func:`PyNumber_ToBase` +* :c:func:`PyNumber_TrueDivide` +* :c:func:`PyNumber_Xor` +* :c:func:`PyOS_AfterFork` +* :c:func:`PyOS_AfterFork_Child` +* :c:func:`PyOS_AfterFork_Parent` +* :c:func:`PyOS_BeforeFork` +* :c:func:`PyOS_CheckStack` +* :c:func:`PyOS_FSPath` +* :c:data:`PyOS_InputHook` +* :c:func:`PyOS_InterruptOccurred` +* :c:func:`PyOS_double_to_string` +* :c:func:`PyOS_getsig` +* :c:func:`PyOS_mystricmp` +* :c:func:`PyOS_mystrnicmp` +* :c:func:`PyOS_setsig` +* :c:type:`PyOS_sighandler_t` +* :c:func:`PyOS_snprintf` +* :c:func:`PyOS_string_to_double` +* :c:func:`PyOS_strtol` +* :c:func:`PyOS_strtoul` +* :c:func:`PyOS_vsnprintf` +* :c:type:`PyObject` +* :c:func:`PyObject_ASCII` +* :c:func:`PyObject_AsFileDescriptor` +* :c:func:`PyObject_Bytes` +* :c:func:`PyObject_Call` +* :c:func:`PyObject_CallFunction` +* :c:func:`PyObject_CallFunctionObjArgs` +* :c:func:`PyObject_CallMethod` +* :c:func:`PyObject_CallMethodObjArgs` +* :c:func:`PyObject_CallNoArgs` +* :c:func:`PyObject_CallObject` +* :c:func:`PyObject_Calloc` +* :c:func:`PyObject_ClearWeakRefs` +* :c:func:`PyObject_DelItem` +* :c:func:`PyObject_DelItemString` +* :c:func:`PyObject_Dir` +* :c:func:`PyObject_Format` +* :c:func:`PyObject_Free` +* :c:func:`PyObject_GC_Del` +* :c:func:`PyObject_GC_IsFinalized` +* :c:func:`PyObject_GC_IsTracked` +* :c:func:`PyObject_GC_Track` +* :c:func:`PyObject_GC_UnTrack` +* :c:func:`PyObject_GenericGetAttr` +* :c:func:`PyObject_GenericGetDict` +* :c:func:`PyObject_GenericSetAttr` +* :c:func:`PyObject_GenericSetDict` +* :c:func:`PyObject_GetAiter` +* :c:func:`PyObject_GetAttr` +* :c:func:`PyObject_GetAttrString` +* :c:func:`PyObject_GetItem` +* :c:func:`PyObject_GetIter` +* :c:func:`PyObject_HasAttr` +* :c:func:`PyObject_HasAttrString` +* :c:func:`PyObject_Hash` +* :c:func:`PyObject_HashNotImplemented` +* :c:func:`PyObject_Init` +* :c:func:`PyObject_InitVar` +* :c:func:`PyObject_IsInstance` +* :c:func:`PyObject_IsSubclass` +* :c:func:`PyObject_IsTrue` +* :c:func:`PyObject_Length` +* :c:func:`PyObject_Malloc` +* :c:func:`PyObject_Not` +* :c:func:`PyObject_Realloc` +* :c:func:`PyObject_Repr` +* :c:func:`PyObject_RichCompare` +* :c:func:`PyObject_RichCompareBool` +* :c:func:`PyObject_SelfIter` +* :c:func:`PyObject_SetAttr` +* :c:func:`PyObject_SetAttrString` +* :c:func:`PyObject_SetItem` +* :c:func:`PyObject_Size` +* :c:func:`PyObject_Str` +* :c:func:`PyObject_Type` +* :c:data:`PyProperty_Type` +* :c:data:`PyRangeIter_Type` +* :c:data:`PyRange_Type` +* :c:data:`PyReversed_Type` +* :c:func:`PySeqIter_New` +* :c:data:`PySeqIter_Type` +* :c:func:`PySequence_Check` +* :c:func:`PySequence_Concat` +* :c:func:`PySequence_Contains` +* :c:func:`PySequence_Count` +* :c:func:`PySequence_DelItem` +* :c:func:`PySequence_DelSlice` +* :c:func:`PySequence_Fast` +* :c:func:`PySequence_GetItem` +* :c:func:`PySequence_GetSlice` +* :c:func:`PySequence_In` +* :c:func:`PySequence_InPlaceConcat` +* :c:func:`PySequence_InPlaceRepeat` +* :c:func:`PySequence_Index` +* :c:func:`PySequence_Length` +* :c:func:`PySequence_List` +* :c:func:`PySequence_Repeat` +* :c:func:`PySequence_SetItem` +* :c:func:`PySequence_SetSlice` +* :c:func:`PySequence_Size` +* :c:func:`PySequence_Tuple` +* :c:data:`PySetIter_Type` +* :c:func:`PySet_Add` +* :c:func:`PySet_Clear` +* :c:func:`PySet_Contains` +* :c:func:`PySet_Discard` +* :c:func:`PySet_New` +* :c:func:`PySet_Pop` +* :c:func:`PySet_Size` +* :c:data:`PySet_Type` +* :c:func:`PySlice_AdjustIndices` +* :c:func:`PySlice_GetIndices` +* :c:func:`PySlice_GetIndicesEx` +* :c:func:`PySlice_New` +* :c:data:`PySlice_Type` +* :c:func:`PySlice_Unpack` +* :c:func:`PyState_AddModule` +* :c:func:`PyState_FindModule` +* :c:func:`PyState_RemoveModule` +* :c:type:`PyStructSequence_Desc` +* :c:type:`PyStructSequence_Field` +* :c:func:`PyStructSequence_GetItem` +* :c:func:`PyStructSequence_New` +* :c:func:`PyStructSequence_NewType` +* :c:func:`PyStructSequence_SetItem` +* :c:data:`PySuper_Type` +* :c:func:`PySys_AddWarnOption` +* :c:func:`PySys_AddWarnOptionUnicode` +* :c:func:`PySys_AddXOption` +* :c:func:`PySys_FormatStderr` +* :c:func:`PySys_FormatStdout` +* :c:func:`PySys_GetObject` +* :c:func:`PySys_GetXOptions` +* :c:func:`PySys_HasWarnOptions` +* :c:func:`PySys_ResetWarnOptions` +* :c:func:`PySys_SetArgv` +* :c:func:`PySys_SetArgvEx` +* :c:func:`PySys_SetObject` +* :c:func:`PySys_SetPath` +* :c:func:`PySys_WriteStderr` +* :c:func:`PySys_WriteStdout` +* :c:type:`PyThreadState` +* :c:func:`PyThreadState_Clear` +* :c:func:`PyThreadState_Delete` +* :c:func:`PyThreadState_Get` +* :c:func:`PyThreadState_GetDict` +* :c:func:`PyThreadState_GetFrame` +* :c:func:`PyThreadState_GetID` +* :c:func:`PyThreadState_GetInterpreter` +* :c:func:`PyThreadState_New` +* :c:func:`PyThreadState_SetAsyncExc` +* :c:func:`PyThreadState_Swap` +* :c:func:`PyThread_GetInfo` +* :c:func:`PyThread_ReInitTLS` +* :c:func:`PyThread_acquire_lock` +* :c:func:`PyThread_acquire_lock_timed` +* :c:func:`PyThread_allocate_lock` +* :c:func:`PyThread_create_key` +* :c:func:`PyThread_delete_key` +* :c:func:`PyThread_delete_key_value` +* :c:func:`PyThread_exit_thread` +* :c:func:`PyThread_free_lock` +* :c:func:`PyThread_get_key_value` +* :c:func:`PyThread_get_stacksize` +* :c:func:`PyThread_get_thread_ident` +* :c:func:`PyThread_get_thread_native_id` +* :c:func:`PyThread_init_thread` +* :c:func:`PyThread_release_lock` +* :c:func:`PyThread_set_key_value` +* :c:func:`PyThread_set_stacksize` +* :c:func:`PyThread_start_new_thread` +* :c:func:`PyThread_tss_alloc` +* :c:func:`PyThread_tss_create` +* :c:func:`PyThread_tss_delete` +* :c:func:`PyThread_tss_free` +* :c:func:`PyThread_tss_get` +* :c:func:`PyThread_tss_is_created` +* :c:func:`PyThread_tss_set` +* :c:func:`PyTraceBack_Here` +* :c:func:`PyTraceBack_Print` +* :c:data:`PyTraceBack_Type` +* :c:data:`PyTupleIter_Type` +* :c:func:`PyTuple_GetItem` +* :c:func:`PyTuple_GetSlice` +* :c:func:`PyTuple_New` +* :c:func:`PyTuple_Pack` +* :c:func:`PyTuple_SetItem` +* :c:func:`PyTuple_Size` +* :c:data:`PyTuple_Type` +* :c:type:`PyTypeObject` +* :c:func:`PyType_ClearCache` +* :c:func:`PyType_FromModuleAndSpec` +* :c:func:`PyType_FromSpec` +* :c:func:`PyType_FromSpecWithBases` +* :c:func:`PyType_GenericAlloc` +* :c:func:`PyType_GenericNew` +* :c:func:`PyType_GetFlags` +* :c:func:`PyType_GetModule` +* :c:func:`PyType_GetModuleState` +* :c:func:`PyType_GetSlot` +* :c:func:`PyType_IsSubtype` +* :c:func:`PyType_Modified` +* :c:func:`PyType_Ready` +* :c:type:`PyType_Slot` +* :c:type:`PyType_Spec` +* :c:data:`PyType_Type` +* :c:func:`PyUnicodeDecodeError_Create` +* :c:func:`PyUnicodeDecodeError_GetEncoding` +* :c:func:`PyUnicodeDecodeError_GetEnd` +* :c:func:`PyUnicodeDecodeError_GetObject` +* :c:func:`PyUnicodeDecodeError_GetReason` +* :c:func:`PyUnicodeDecodeError_GetStart` +* :c:func:`PyUnicodeDecodeError_SetEnd` +* :c:func:`PyUnicodeDecodeError_SetReason` +* :c:func:`PyUnicodeDecodeError_SetStart` +* :c:func:`PyUnicodeEncodeError_GetEncoding` +* :c:func:`PyUnicodeEncodeError_GetEnd` +* :c:func:`PyUnicodeEncodeError_GetObject` +* :c:func:`PyUnicodeEncodeError_GetReason` +* :c:func:`PyUnicodeEncodeError_GetStart` +* :c:func:`PyUnicodeEncodeError_SetEnd` +* :c:func:`PyUnicodeEncodeError_SetReason` +* :c:func:`PyUnicodeEncodeError_SetStart` +* :c:data:`PyUnicodeIter_Type` +* :c:func:`PyUnicodeTranslateError_GetEnd` +* :c:func:`PyUnicodeTranslateError_GetObject` +* :c:func:`PyUnicodeTranslateError_GetReason` +* :c:func:`PyUnicodeTranslateError_GetStart` +* :c:func:`PyUnicodeTranslateError_SetEnd` +* :c:func:`PyUnicodeTranslateError_SetReason` +* :c:func:`PyUnicodeTranslateError_SetStart` +* :c:func:`PyUnicode_Append` +* :c:func:`PyUnicode_AppendAndDel` +* :c:func:`PyUnicode_AsASCIIString` +* :c:func:`PyUnicode_AsCharmapString` +* :c:func:`PyUnicode_AsDecodedObject` +* :c:func:`PyUnicode_AsDecodedUnicode` +* :c:func:`PyUnicode_AsEncodedObject` +* :c:func:`PyUnicode_AsEncodedString` +* :c:func:`PyUnicode_AsEncodedUnicode` +* :c:func:`PyUnicode_AsLatin1String` +* :c:func:`PyUnicode_AsMBCSString` +* :c:func:`PyUnicode_AsRawUnicodeEscapeString` +* :c:func:`PyUnicode_AsUCS4` +* :c:func:`PyUnicode_AsUCS4Copy` +* :c:func:`PyUnicode_AsUTF16String` +* :c:func:`PyUnicode_AsUTF32String` +* :c:func:`PyUnicode_AsUTF8AndSize` +* :c:func:`PyUnicode_AsUTF8String` +* :c:func:`PyUnicode_AsUnicodeEscapeString` +* :c:func:`PyUnicode_AsWideChar` +* :c:func:`PyUnicode_AsWideCharString` +* :c:func:`PyUnicode_BuildEncodingMap` +* :c:func:`PyUnicode_Compare` +* :c:func:`PyUnicode_CompareWithASCIIString` +* :c:func:`PyUnicode_Concat` +* :c:func:`PyUnicode_Contains` +* :c:func:`PyUnicode_Count` +* :c:func:`PyUnicode_Decode` +* :c:func:`PyUnicode_DecodeASCII` +* :c:func:`PyUnicode_DecodeCharmap` +* :c:func:`PyUnicode_DecodeCodePageStateful` +* :c:func:`PyUnicode_DecodeFSDefault` +* :c:func:`PyUnicode_DecodeFSDefaultAndSize` +* :c:func:`PyUnicode_DecodeLatin1` +* :c:func:`PyUnicode_DecodeLocale` +* :c:func:`PyUnicode_DecodeLocaleAndSize` +* :c:func:`PyUnicode_DecodeMBCS` +* :c:func:`PyUnicode_DecodeMBCSStateful` +* :c:func:`PyUnicode_DecodeRawUnicodeEscape` +* :c:func:`PyUnicode_DecodeUTF16` +* :c:func:`PyUnicode_DecodeUTF16Stateful` +* :c:func:`PyUnicode_DecodeUTF32` +* :c:func:`PyUnicode_DecodeUTF32Stateful` +* :c:func:`PyUnicode_DecodeUTF7` +* :c:func:`PyUnicode_DecodeUTF7Stateful` +* :c:func:`PyUnicode_DecodeUTF8` +* :c:func:`PyUnicode_DecodeUTF8Stateful` +* :c:func:`PyUnicode_DecodeUnicodeEscape` +* :c:func:`PyUnicode_EncodeCodePage` +* :c:func:`PyUnicode_EncodeFSDefault` +* :c:func:`PyUnicode_EncodeLocale` +* :c:func:`PyUnicode_FSConverter` +* :c:func:`PyUnicode_FSDecoder` +* :c:func:`PyUnicode_Find` +* :c:func:`PyUnicode_FindChar` +* :c:func:`PyUnicode_Format` +* :c:func:`PyUnicode_FromEncodedObject` +* :c:func:`PyUnicode_FromFormat` +* :c:func:`PyUnicode_FromFormatV` +* :c:func:`PyUnicode_FromObject` +* :c:func:`PyUnicode_FromOrdinal` +* :c:func:`PyUnicode_FromString` +* :c:func:`PyUnicode_FromStringAndSize` +* :c:func:`PyUnicode_FromWideChar` +* :c:func:`PyUnicode_GetDefaultEncoding` +* :c:func:`PyUnicode_GetLength` +* :c:func:`PyUnicode_GetSize` +* :c:func:`PyUnicode_InternFromString` +* :c:func:`PyUnicode_InternImmortal` +* :c:func:`PyUnicode_InternInPlace` +* :c:func:`PyUnicode_IsIdentifier` +* :c:func:`PyUnicode_Join` +* :c:func:`PyUnicode_Partition` +* :c:func:`PyUnicode_RPartition` +* :c:func:`PyUnicode_RSplit` +* :c:func:`PyUnicode_ReadChar` +* :c:func:`PyUnicode_Replace` +* :c:func:`PyUnicode_Resize` +* :c:func:`PyUnicode_RichCompare` +* :c:func:`PyUnicode_Split` +* :c:func:`PyUnicode_Splitlines` +* :c:func:`PyUnicode_Substring` +* :c:func:`PyUnicode_Tailmatch` +* :c:func:`PyUnicode_Translate` +* :c:data:`PyUnicode_Type` +* :c:func:`PyUnicode_WriteChar` +* :c:type:`PyVarObject` +* :c:type:`PyWeakReference` +* :c:func:`PyWeakref_GetObject` +* :c:func:`PyWeakref_NewProxy` +* :c:func:`PyWeakref_NewRef` +* :c:data:`PyWrapperDescr_Type` +* :c:func:`PyWrapper_New` +* :c:data:`PyZip_Type` +* :c:func:`Py_AddPendingCall` +* :c:func:`Py_AtExit` +* :c:macro:`Py_BEGIN_ALLOW_THREADS` +* :c:macro:`Py_BLOCK_THREADS` +* :c:func:`Py_BuildValue` +* :c:func:`Py_BytesMain` +* :c:func:`Py_CompileString` +* :c:func:`Py_DecRef` +* :c:func:`Py_DecodeLocale` +* :c:macro:`Py_END_ALLOW_THREADS` +* :c:func:`Py_EncodeLocale` +* :c:func:`Py_EndInterpreter` +* :c:func:`Py_EnterRecursiveCall` +* :c:func:`Py_Exit` +* :c:func:`Py_FatalError` +* :c:data:`Py_FileSystemDefaultEncodeErrors` +* :c:data:`Py_FileSystemDefaultEncoding` +* :c:func:`Py_Finalize` +* :c:func:`Py_FinalizeEx` +* :c:func:`Py_FrozenMain` +* :c:func:`Py_GenericAlias` +* :c:func:`Py_GenericAliasType` +* :c:func:`Py_GetBuildInfo` +* :c:func:`Py_GetCompiler` +* :c:func:`Py_GetCopyright` +* :c:func:`Py_GetExecPrefix` +* :c:func:`Py_GetPath` +* :c:func:`Py_GetPlatform` +* :c:func:`Py_GetPrefix` +* :c:func:`Py_GetProgramFullPath` +* :c:func:`Py_GetProgramName` +* :c:func:`Py_GetPythonHome` +* :c:func:`Py_GetRecursionLimit` +* :c:func:`Py_GetVersion` +* :c:data:`Py_HasFileSystemDefaultEncoding` +* :c:func:`Py_IncRef` +* :c:func:`Py_Initialize` +* :c:func:`Py_InitializeEx` +* :c:func:`Py_Is` +* :c:func:`Py_IsFalse` +* :c:func:`Py_IsInitialized` +* :c:func:`Py_IsNone` +* :c:func:`Py_IsTrue` +* :c:func:`Py_LeaveRecursiveCall` +* :c:func:`Py_Main` +* :c:func:`Py_MakePendingCalls` +* :c:func:`Py_NewInterpreter` +* :c:func:`Py_NewRef` +* :c:func:`Py_ReprEnter` +* :c:func:`Py_ReprLeave` +* :c:func:`Py_SetPath` +* :c:func:`Py_SetProgramName` +* :c:func:`Py_SetPythonHome` +* :c:func:`Py_SetRecursionLimit` +* :c:type:`Py_UCS4` +* :c:macro:`Py_UNBLOCK_THREADS` +* :c:data:`Py_UTF8Mode` +* :c:func:`Py_VaBuildValue` +* :c:func:`Py_XNewRef` +* :c:type:`Py_intptr_t` +* :c:type:`Py_ssize_t` +* :c:type:`Py_uintptr_t` +* :c:type:`_frame` +* :c:type:`_node` +* :c:type:`allocfunc` +* :c:type:`binaryfunc` +* :c:type:`descrgetfunc` +* :c:type:`descrsetfunc` +* :c:type:`destructor` +* :c:type:`getattrfunc` +* :c:type:`getattrofunc` +* :c:type:`getiterfunc` +* :c:type:`getter` +* :c:type:`hashfunc` +* :c:type:`initproc` +* :c:type:`inquiry` +* :c:type:`iternextfunc` +* :c:type:`lenfunc` +* :c:type:`newfunc` +* :c:type:`objobjargproc` +* :c:type:`objobjproc` +* :c:type:`reprfunc` +* :c:type:`richcmpfunc` +* :c:type:`setattrfunc` +* :c:type:`setattrofunc` +* :c:type:`setter` +* :c:type:`ssizeargfunc` +* :c:type:`ssizeobjargproc` +* :c:type:`ssizessizeargfunc` +* :c:type:`ssizessizeobjargproc` +* :c:type:`symtable` +* :c:type:`ternaryfunc` +* :c:type:`traverseproc` +* :c:type:`unaryfunc` +* :c:type:`visitproc` diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index bc77c937fefcc9..6eb24cb7bceddd 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -150,4 +150,7 @@ third-party distributors. Contents of Limited API ======================= -XXX: to be generated automatically + +Currently, the Limited API includes the following items: + +.. include:: limited_api.inc diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 399153db81c254..fa850150a75241 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -238,6 +238,24 @@ def gen_doc_annotations(manifest, args, outfile): write(item.name) +@generator("doc_rst", 'Doc/c-api/limited_api.inc') +def gen_doc_page(manifest, args, outfile): + """Generate/check the ReST list for stable ABI documentation""" + write = partial(print, file=outfile) + write(".. File generated by Tools/stable_abi.py") + write() + roles = { + 'function': 'func', + 'data': 'data', + 'struct': 'type', + 'macro': 'macro', + # 'const': 'const', # XXX: all undocumented + 'typedef': 'type', + } + for item in manifest.select(roles.keys(), include_abi_only=False): + write(f'* :c:{roles[item.kind]}:`{item.name}`') + + def generate_or_check(manifest, args, path, func): """Generate/check a file with a single generator From 179c132b21cd215aea603dd13b0277cb293dc588 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 9 Feb 2021 15:45:55 +0100 Subject: [PATCH 06/12] Add "Part of the Stable ABI" annotations to the documentation This replaces the existing :stableabi:, which wasn't really used. Doc/data/stable_abi.dat is expanded to include all relevant info (kind of the symbol and version it was added in), and the c_annotations Sphinx extension reads this file and adds notes similar to ones added by :stableabi: (which wasn't really used). Relevant prior work: https://github.com/python/cpython/pull/23185 Co-authored-by: Will Ayd --- Doc/conf.py | 3 +- Doc/data/stable_abi.dat | 1812 ++++++++++++------------- Doc/tools/extensions/c_annotations.py | 71 +- Tools/scripts/stable_abi.py | 35 +- 4 files changed, 935 insertions(+), 986 deletions(-) diff --git a/Doc/conf.py b/Doc/conf.py index cf250981f58752..2a1d0e3dfd873e 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -225,8 +225,9 @@ # Options for extensions # ---------------------- -# Relative filename of the reference count data file. +# Relative filename of the data files refcount_file = 'data/refcounts.dat' +stable_abi_file = 'data/stable_abi.dat' # Sphinx 2 and Sphinx 3 compatibility # ----------------------------------- diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 833228f7fd755d..853bc4f345eb6d 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -1,953 +1,863 @@ # Generated by Tools/scripts/stable_abi.py +# Fields: rest_role, name, version_added -METH_CLASS -METH_COEXIST -METH_FASTCALL -METH_METHOD -METH_NOARGS -METH_O -METH_STATIC -METH_VARARGS -PyAiter_Check -PyArg_Parse -PyArg_ParseTuple -PyArg_ParseTupleAndKeywords -PyArg_UnpackTuple -PyArg_VaParse -PyArg_VaParseTupleAndKeywords -PyArg_ValidateKeywordArguments -PyBaseObject_Type -PyBool_FromLong -PyBool_Type -PyByteArrayIter_Type -PyByteArray_AsString -PyByteArray_Concat -PyByteArray_FromObject -PyByteArray_FromStringAndSize -PyByteArray_Resize -PyByteArray_Size -PyByteArray_Type -PyBytesIter_Type -PyBytes_AsString -PyBytes_AsStringAndSize -PyBytes_Concat -PyBytes_ConcatAndDel -PyBytes_DecodeEscape -PyBytes_FromFormat -PyBytes_FromFormatV -PyBytes_FromObject -PyBytes_FromString -PyBytes_FromStringAndSize -PyBytes_Repr -PyBytes_Size -PyBytes_Type -PyCFunction -PyCFunctionWithKeywords -PyCFunction_Call -PyCFunction_GetFlags -PyCFunction_GetFunction -PyCFunction_GetSelf -PyCFunction_New -PyCFunction_NewEx -PyCFunction_Type -PyCMethod_New -PyCallIter_New -PyCallIter_Type -PyCallable_Check -PyCapsule_Destructor -PyCapsule_GetContext -PyCapsule_GetDestructor -PyCapsule_GetName -PyCapsule_GetPointer -PyCapsule_Import -PyCapsule_IsValid -PyCapsule_New -PyCapsule_SetContext -PyCapsule_SetDestructor -PyCapsule_SetName -PyCapsule_SetPointer -PyCapsule_Type -PyClassMethodDescr_Type -PyCodec_BackslashReplaceErrors -PyCodec_Decode -PyCodec_Decoder -PyCodec_Encode -PyCodec_Encoder -PyCodec_IgnoreErrors -PyCodec_IncrementalDecoder -PyCodec_IncrementalEncoder -PyCodec_KnownEncoding -PyCodec_LookupError -PyCodec_NameReplaceErrors -PyCodec_Register -PyCodec_RegisterError -PyCodec_ReplaceErrors -PyCodec_StreamReader -PyCodec_StreamWriter -PyCodec_StrictErrors -PyCodec_Unregister -PyCodec_XMLCharRefReplaceErrors -PyComplex_FromDoubles -PyComplex_ImagAsDouble -PyComplex_RealAsDouble -PyComplex_Type -PyDescr_NewClassMethod -PyDescr_NewGetSet -PyDescr_NewMember -PyDescr_NewMethod -PyDictItems_Type -PyDictIterItem_Type -PyDictIterKey_Type -PyDictIterValue_Type -PyDictKeys_Type -PyDictProxy_New -PyDictProxy_Type -PyDictRevIterItem_Type -PyDictRevIterKey_Type -PyDictRevIterValue_Type -PyDictValues_Type -PyDict_Clear -PyDict_Contains -PyDict_Copy -PyDict_DelItem -PyDict_DelItemString -PyDict_GetItem -PyDict_GetItemString -PyDict_GetItemWithError -PyDict_Items -PyDict_Keys -PyDict_Merge -PyDict_MergeFromSeq2 -PyDict_New -PyDict_Next -PyDict_SetItem -PyDict_SetItemString -PyDict_Size -PyDict_Type -PyDict_Update -PyDict_Values -PyEllipsis_Type -PyEnum_Type -PyErr_BadArgument -PyErr_BadInternalCall -PyErr_CheckSignals -PyErr_Clear -PyErr_Display -PyErr_ExceptionMatches -PyErr_Fetch -PyErr_Format -PyErr_FormatV -PyErr_GetExcInfo -PyErr_GivenExceptionMatches -PyErr_NewException -PyErr_NewExceptionWithDoc -PyErr_NoMemory -PyErr_NormalizeException -PyErr_Occurred -PyErr_Print -PyErr_PrintEx -PyErr_ProgramText -PyErr_ResourceWarning -PyErr_Restore -PyErr_SetExcFromWindowsErr -PyErr_SetExcFromWindowsErrWithFilename -PyErr_SetExcFromWindowsErrWithFilenameObject -PyErr_SetExcFromWindowsErrWithFilenameObjects -PyErr_SetExcInfo -PyErr_SetFromErrno -PyErr_SetFromErrnoWithFilename -PyErr_SetFromErrnoWithFilenameObject -PyErr_SetFromErrnoWithFilenameObjects -PyErr_SetFromWindowsErr -PyErr_SetFromWindowsErrWithFilename -PyErr_SetImportError -PyErr_SetImportErrorSubclass -PyErr_SetInterrupt -PyErr_SetInterruptEx -PyErr_SetNone -PyErr_SetObject -PyErr_SetString -PyErr_SyntaxLocation -PyErr_SyntaxLocationEx -PyErr_WarnEx -PyErr_WarnExplicit -PyErr_WarnFormat -PyErr_WriteUnraisable -PyEval_AcquireLock -PyEval_AcquireThread -PyEval_CallFunction -PyEval_CallMethod -PyEval_CallObjectWithKeywords -PyEval_EvalCode -PyEval_EvalCodeEx -PyEval_EvalFrame -PyEval_EvalFrameEx -PyEval_GetBuiltins -PyEval_GetFrame -PyEval_GetFuncDesc -PyEval_GetFuncName -PyEval_GetGlobals -PyEval_GetLocals -PyEval_InitThreads -PyEval_ReleaseLock -PyEval_ReleaseThread -PyEval_RestoreThread -PyEval_SaveThread -PyEval_ThreadsInitialized -PyExc_ArithmeticError -PyExc_AssertionError -PyExc_AttributeError -PyExc_BaseException -PyExc_BlockingIOError -PyExc_BrokenPipeError -PyExc_BufferError -PyExc_BytesWarning -PyExc_ChildProcessError -PyExc_ConnectionAbortedError -PyExc_ConnectionError -PyExc_ConnectionRefusedError -PyExc_ConnectionResetError -PyExc_DeprecationWarning -PyExc_EOFError -PyExc_EncodingWarning -PyExc_EnvironmentError -PyExc_Exception -PyExc_FileExistsError -PyExc_FileNotFoundError -PyExc_FloatingPointError -PyExc_FutureWarning -PyExc_GeneratorExit -PyExc_IOError -PyExc_ImportError -PyExc_ImportWarning -PyExc_IndentationError -PyExc_IndexError -PyExc_InterruptedError -PyExc_IsADirectoryError -PyExc_KeyError -PyExc_KeyboardInterrupt -PyExc_LookupError -PyExc_MemoryError -PyExc_ModuleNotFoundError -PyExc_NameError -PyExc_NotADirectoryError -PyExc_NotImplementedError -PyExc_OSError -PyExc_OverflowError -PyExc_PendingDeprecationWarning -PyExc_PermissionError -PyExc_ProcessLookupError -PyExc_RecursionError -PyExc_ReferenceError -PyExc_ResourceWarning -PyExc_RuntimeError -PyExc_RuntimeWarning -PyExc_StopAsyncIteration -PyExc_StopIteration -PyExc_SyntaxError -PyExc_SyntaxWarning -PyExc_SystemError -PyExc_SystemExit -PyExc_TabError -PyExc_TimeoutError -PyExc_TypeError -PyExc_UnboundLocalError -PyExc_UnicodeDecodeError -PyExc_UnicodeEncodeError -PyExc_UnicodeError -PyExc_UnicodeTranslateError -PyExc_UnicodeWarning -PyExc_UserWarning -PyExc_ValueError -PyExc_Warning -PyExc_WindowsError -PyExc_ZeroDivisionError -PyExceptionClass_Name -PyException_GetCause -PyException_GetContext -PyException_GetTraceback -PyException_SetCause -PyException_SetContext -PyException_SetTraceback -PyFile_FromFd -PyFile_GetLine -PyFile_WriteObject -PyFile_WriteString -PyFilter_Type -PyFloat_AsDouble -PyFloat_FromDouble -PyFloat_FromString -PyFloat_GetInfo -PyFloat_GetMax -PyFloat_GetMin -PyFloat_Type -PyFrame_GetCode -PyFrame_GetLineNumber -PyFrozenSet_New -PyFrozenSet_Type -PyGC_Collect -PyGC_Disable -PyGC_Enable -PyGC_IsEnabled -PyGILState_Ensure -PyGILState_GetThisThreadState -PyGILState_Release -PyGILState_STATE -PyGetSetDef -PyGetSetDescr_Type -PyImport_AddModule -PyImport_AddModuleObject -PyImport_AppendInittab -PyImport_ExecCodeModule -PyImport_ExecCodeModuleEx -PyImport_ExecCodeModuleObject -PyImport_ExecCodeModuleWithPathnames -PyImport_GetImporter -PyImport_GetMagicNumber -PyImport_GetMagicTag -PyImport_GetModule -PyImport_GetModuleDict -PyImport_Import -PyImport_ImportFrozenModule -PyImport_ImportFrozenModuleObject -PyImport_ImportModule -PyImport_ImportModuleLevel -PyImport_ImportModuleLevelObject -PyImport_ImportModuleNoBlock -PyImport_ReloadModule -PyIndex_Check -PyInterpreterState -PyInterpreterState_Clear -PyInterpreterState_Delete -PyInterpreterState_Get -PyInterpreterState_GetDict -PyInterpreterState_GetID -PyInterpreterState_New -PyIter_Check -PyIter_Next -PyIter_Send -PyListIter_Type -PyListRevIter_Type -PyList_Append -PyList_AsTuple -PyList_GetItem -PyList_GetSlice -PyList_Insert -PyList_New -PyList_Reverse -PyList_SetItem -PyList_SetSlice -PyList_Size -PyList_Sort -PyList_Type -PyLongObject -PyLongRangeIter_Type -PyLong_AsDouble -PyLong_AsLong -PyLong_AsLongAndOverflow -PyLong_AsLongLong -PyLong_AsLongLongAndOverflow -PyLong_AsSize_t -PyLong_AsSsize_t -PyLong_AsUnsignedLong -PyLong_AsUnsignedLongLong -PyLong_AsUnsignedLongLongMask -PyLong_AsUnsignedLongMask -PyLong_AsVoidPtr -PyLong_FromDouble -PyLong_FromLong -PyLong_FromLongLong -PyLong_FromSize_t -PyLong_FromSsize_t -PyLong_FromString -PyLong_FromUnsignedLong -PyLong_FromUnsignedLongLong -PyLong_FromVoidPtr -PyLong_GetInfo -PyLong_Type -PyMap_Type -PyMapping_Check -PyMapping_GetItemString -PyMapping_HasKey -PyMapping_HasKeyString -PyMapping_Items -PyMapping_Keys -PyMapping_Length -PyMapping_SetItemString -PyMapping_Size -PyMapping_Values -PyMem_Calloc -PyMem_Free -PyMem_Malloc -PyMem_Realloc -PyMemberDef -PyMemberDescr_Type -PyMemoryView_FromMemory -PyMemoryView_FromObject -PyMemoryView_GetContiguous -PyMemoryView_Type -PyMethodDef -PyMethodDescr_Type -PyModuleDef -PyModuleDef_Base -PyModuleDef_Init -PyModuleDef_Type -PyModule_AddFunctions -PyModule_AddIntConstant -PyModule_AddObject -PyModule_AddObjectRef -PyModule_AddStringConstant -PyModule_AddType -PyModule_Create2 -PyModule_ExecDef -PyModule_FromDefAndSpec2 -PyModule_GetDef -PyModule_GetDict -PyModule_GetFilename -PyModule_GetFilenameObject -PyModule_GetName -PyModule_GetNameObject -PyModule_GetState -PyModule_New -PyModule_NewObject -PyModule_SetDocString -PyModule_Type -PyNumber_Absolute -PyNumber_Add -PyNumber_And -PyNumber_AsSsize_t -PyNumber_Check -PyNumber_Divmod -PyNumber_Float -PyNumber_FloorDivide -PyNumber_InPlaceAdd -PyNumber_InPlaceAnd -PyNumber_InPlaceFloorDivide -PyNumber_InPlaceLshift -PyNumber_InPlaceMatrixMultiply -PyNumber_InPlaceMultiply -PyNumber_InPlaceOr -PyNumber_InPlacePower -PyNumber_InPlaceRemainder -PyNumber_InPlaceRshift -PyNumber_InPlaceSubtract -PyNumber_InPlaceTrueDivide -PyNumber_InPlaceXor -PyNumber_Index -PyNumber_Invert -PyNumber_Long -PyNumber_Lshift -PyNumber_MatrixMultiply -PyNumber_Multiply -PyNumber_Negative -PyNumber_Or -PyNumber_Positive -PyNumber_Power -PyNumber_Remainder -PyNumber_Rshift -PyNumber_Subtract -PyNumber_ToBase -PyNumber_TrueDivide -PyNumber_Xor -PyOS_AfterFork -PyOS_AfterFork_Child -PyOS_AfterFork_Parent -PyOS_BeforeFork -PyOS_CheckStack -PyOS_FSPath -PyOS_InputHook -PyOS_InterruptOccurred -PyOS_double_to_string -PyOS_getsig -PyOS_mystricmp -PyOS_mystrnicmp -PyOS_setsig -PyOS_sighandler_t -PyOS_snprintf -PyOS_string_to_double -PyOS_strtol -PyOS_strtoul -PyOS_vsnprintf -PyObject -PyObject_ASCII -PyObject_AsFileDescriptor -PyObject_Bytes -PyObject_Call -PyObject_CallFunction -PyObject_CallFunctionObjArgs -PyObject_CallMethod -PyObject_CallMethodObjArgs -PyObject_CallNoArgs -PyObject_CallObject -PyObject_Calloc -PyObject_ClearWeakRefs -PyObject_DelItem -PyObject_DelItemString -PyObject_Dir -PyObject_Format -PyObject_Free -PyObject_GC_Del -PyObject_GC_IsFinalized -PyObject_GC_IsTracked -PyObject_GC_Track -PyObject_GC_UnTrack -PyObject_GenericGetAttr -PyObject_GenericGetDict -PyObject_GenericSetAttr -PyObject_GenericSetDict -PyObject_GetAiter -PyObject_GetAttr -PyObject_GetAttrString -PyObject_GetItem -PyObject_GetIter -PyObject_HasAttr -PyObject_HasAttrString -PyObject_Hash -PyObject_HashNotImplemented -PyObject_Init -PyObject_InitVar -PyObject_IsInstance -PyObject_IsSubclass -PyObject_IsTrue -PyObject_Length -PyObject_Malloc -PyObject_Not -PyObject_Realloc -PyObject_Repr -PyObject_RichCompare -PyObject_RichCompareBool -PyObject_SelfIter -PyObject_SetAttr -PyObject_SetAttrString -PyObject_SetItem -PyObject_Size -PyObject_Str -PyObject_Type -PyProperty_Type -PyRangeIter_Type -PyRange_Type -PyReversed_Type -PySeqIter_New -PySeqIter_Type -PySequence_Check -PySequence_Concat -PySequence_Contains -PySequence_Count -PySequence_DelItem -PySequence_DelSlice -PySequence_Fast -PySequence_GetItem -PySequence_GetSlice -PySequence_In -PySequence_InPlaceConcat -PySequence_InPlaceRepeat -PySequence_Index -PySequence_Length -PySequence_List -PySequence_Repeat -PySequence_SetItem -PySequence_SetSlice -PySequence_Size -PySequence_Tuple -PySetIter_Type -PySet_Add -PySet_Clear -PySet_Contains -PySet_Discard -PySet_New -PySet_Pop -PySet_Size -PySet_Type -PySlice_AdjustIndices -PySlice_GetIndices -PySlice_GetIndicesEx -PySlice_New -PySlice_Type -PySlice_Unpack -PyState_AddModule -PyState_FindModule -PyState_RemoveModule -PyStructSequence_Desc -PyStructSequence_Field -PyStructSequence_GetItem -PyStructSequence_New -PyStructSequence_NewType -PyStructSequence_SetItem -PySuper_Type -PySys_AddWarnOption -PySys_AddWarnOptionUnicode -PySys_AddXOption -PySys_FormatStderr -PySys_FormatStdout -PySys_GetObject -PySys_GetXOptions -PySys_HasWarnOptions -PySys_ResetWarnOptions -PySys_SetArgv -PySys_SetArgvEx -PySys_SetObject -PySys_SetPath -PySys_WriteStderr -PySys_WriteStdout -PyThreadState -PyThreadState_Clear -PyThreadState_Delete -PyThreadState_Get -PyThreadState_GetDict -PyThreadState_GetFrame -PyThreadState_GetID -PyThreadState_GetInterpreter -PyThreadState_New -PyThreadState_SetAsyncExc -PyThreadState_Swap -PyThread_GetInfo -PyThread_ReInitTLS -PyThread_acquire_lock -PyThread_acquire_lock_timed -PyThread_allocate_lock -PyThread_create_key -PyThread_delete_key -PyThread_delete_key_value -PyThread_exit_thread -PyThread_free_lock -PyThread_get_key_value -PyThread_get_stacksize -PyThread_get_thread_ident -PyThread_get_thread_native_id -PyThread_init_thread -PyThread_release_lock -PyThread_set_key_value -PyThread_set_stacksize -PyThread_start_new_thread -PyThread_tss_alloc -PyThread_tss_create -PyThread_tss_delete -PyThread_tss_free -PyThread_tss_get -PyThread_tss_is_created -PyThread_tss_set -PyTraceBack_Here -PyTraceBack_Print -PyTraceBack_Type -PyTupleIter_Type -PyTuple_GetItem -PyTuple_GetSlice -PyTuple_New -PyTuple_Pack -PyTuple_SetItem -PyTuple_Size -PyTuple_Type -PyTypeObject -PyType_ClearCache -PyType_FromModuleAndSpec -PyType_FromSpec -PyType_FromSpecWithBases -PyType_GenericAlloc -PyType_GenericNew -PyType_GetFlags -PyType_GetModule -PyType_GetModuleState -PyType_GetSlot -PyType_IsSubtype -PyType_Modified -PyType_Ready -PyType_Slot -PyType_Spec -PyType_Type -PyUnicodeDecodeError_Create -PyUnicodeDecodeError_GetEncoding -PyUnicodeDecodeError_GetEnd -PyUnicodeDecodeError_GetObject -PyUnicodeDecodeError_GetReason -PyUnicodeDecodeError_GetStart -PyUnicodeDecodeError_SetEnd -PyUnicodeDecodeError_SetReason -PyUnicodeDecodeError_SetStart -PyUnicodeEncodeError_GetEncoding -PyUnicodeEncodeError_GetEnd -PyUnicodeEncodeError_GetObject -PyUnicodeEncodeError_GetReason -PyUnicodeEncodeError_GetStart -PyUnicodeEncodeError_SetEnd -PyUnicodeEncodeError_SetReason -PyUnicodeEncodeError_SetStart -PyUnicodeIter_Type -PyUnicodeTranslateError_GetEnd -PyUnicodeTranslateError_GetObject -PyUnicodeTranslateError_GetReason -PyUnicodeTranslateError_GetStart -PyUnicodeTranslateError_SetEnd -PyUnicodeTranslateError_SetReason -PyUnicodeTranslateError_SetStart -PyUnicode_Append -PyUnicode_AppendAndDel -PyUnicode_AsASCIIString -PyUnicode_AsCharmapString -PyUnicode_AsDecodedObject -PyUnicode_AsDecodedUnicode -PyUnicode_AsEncodedObject -PyUnicode_AsEncodedString -PyUnicode_AsEncodedUnicode -PyUnicode_AsLatin1String -PyUnicode_AsMBCSString -PyUnicode_AsRawUnicodeEscapeString -PyUnicode_AsUCS4 -PyUnicode_AsUCS4Copy -PyUnicode_AsUTF16String -PyUnicode_AsUTF32String -PyUnicode_AsUTF8AndSize -PyUnicode_AsUTF8String -PyUnicode_AsUnicodeEscapeString -PyUnicode_AsWideChar -PyUnicode_AsWideCharString -PyUnicode_BuildEncodingMap -PyUnicode_Compare -PyUnicode_CompareWithASCIIString -PyUnicode_Concat -PyUnicode_Contains -PyUnicode_Count -PyUnicode_Decode -PyUnicode_DecodeASCII -PyUnicode_DecodeCharmap -PyUnicode_DecodeCodePageStateful -PyUnicode_DecodeFSDefault -PyUnicode_DecodeFSDefaultAndSize -PyUnicode_DecodeLatin1 -PyUnicode_DecodeLocale -PyUnicode_DecodeLocaleAndSize -PyUnicode_DecodeMBCS -PyUnicode_DecodeMBCSStateful -PyUnicode_DecodeRawUnicodeEscape -PyUnicode_DecodeUTF16 -PyUnicode_DecodeUTF16Stateful -PyUnicode_DecodeUTF32 -PyUnicode_DecodeUTF32Stateful -PyUnicode_DecodeUTF7 -PyUnicode_DecodeUTF7Stateful -PyUnicode_DecodeUTF8 -PyUnicode_DecodeUTF8Stateful -PyUnicode_DecodeUnicodeEscape -PyUnicode_EncodeCodePage -PyUnicode_EncodeFSDefault -PyUnicode_EncodeLocale -PyUnicode_FSConverter -PyUnicode_FSDecoder -PyUnicode_Find -PyUnicode_FindChar -PyUnicode_Format -PyUnicode_FromEncodedObject -PyUnicode_FromFormat -PyUnicode_FromFormatV -PyUnicode_FromObject -PyUnicode_FromOrdinal -PyUnicode_FromString -PyUnicode_FromStringAndSize -PyUnicode_FromWideChar -PyUnicode_GetDefaultEncoding -PyUnicode_GetLength -PyUnicode_GetSize -PyUnicode_InternFromString -PyUnicode_InternImmortal -PyUnicode_InternInPlace -PyUnicode_IsIdentifier -PyUnicode_Join -PyUnicode_Partition -PyUnicode_RPartition -PyUnicode_RSplit -PyUnicode_ReadChar -PyUnicode_Replace -PyUnicode_Resize -PyUnicode_RichCompare -PyUnicode_Split -PyUnicode_Splitlines -PyUnicode_Substring -PyUnicode_Tailmatch -PyUnicode_Translate -PyUnicode_Type -PyUnicode_WriteChar -PyVarObject -PyWeakReference -PyWeakref_GetObject -PyWeakref_NewProxy -PyWeakref_NewRef -PyWrapperDescr_Type -PyWrapper_New -PyZip_Type -Py_AddPendingCall -Py_AtExit -Py_BEGIN_ALLOW_THREADS -Py_BLOCK_THREADS -Py_BuildValue -Py_BytesMain -Py_CompileString -Py_DecRef -Py_DecodeLocale -Py_END_ALLOW_THREADS -Py_EncodeLocale -Py_EndInterpreter -Py_EnterRecursiveCall -Py_Exit -Py_FatalError -Py_FileSystemDefaultEncodeErrors -Py_FileSystemDefaultEncoding -Py_Finalize -Py_FinalizeEx -Py_FrozenMain -Py_GenericAlias -Py_GenericAliasType -Py_GetBuildInfo -Py_GetCompiler -Py_GetCopyright -Py_GetExecPrefix -Py_GetPath -Py_GetPlatform -Py_GetPrefix -Py_GetProgramFullPath -Py_GetProgramName -Py_GetPythonHome -Py_GetRecursionLimit -Py_GetVersion -Py_HasFileSystemDefaultEncoding -Py_IncRef -Py_Initialize -Py_InitializeEx -Py_Is -Py_IsFalse -Py_IsInitialized -Py_IsNone -Py_IsTrue -Py_LeaveRecursiveCall -Py_Main -Py_MakePendingCalls -Py_NewInterpreter -Py_NewRef -Py_ReprEnter -Py_ReprLeave -Py_SetPath -Py_SetProgramName -Py_SetPythonHome -Py_SetRecursionLimit -Py_TPFLAGS_BASETYPE -Py_TPFLAGS_DEFAULT -Py_TPFLAGS_HAVE_GC -Py_TPFLAGS_METHOD_DESCRIPTOR -Py_UCS4 -Py_UNBLOCK_THREADS -Py_UTF8Mode -Py_VaBuildValue -Py_XNewRef -Py_am_aiter -Py_am_anext -Py_am_await -Py_am_send -Py_intptr_t -Py_mp_ass_subscript -Py_mp_length -Py_mp_subscript -Py_nb_absolute -Py_nb_add -Py_nb_and -Py_nb_bool -Py_nb_divmod -Py_nb_float -Py_nb_floor_divide -Py_nb_index -Py_nb_inplace_add -Py_nb_inplace_and -Py_nb_inplace_floor_divide -Py_nb_inplace_lshift -Py_nb_inplace_matrix_multiply -Py_nb_inplace_multiply -Py_nb_inplace_or -Py_nb_inplace_power -Py_nb_inplace_remainder -Py_nb_inplace_rshift -Py_nb_inplace_subtract -Py_nb_inplace_true_divide -Py_nb_inplace_xor -Py_nb_int -Py_nb_invert -Py_nb_lshift -Py_nb_matrix_multiply -Py_nb_multiply -Py_nb_negative -Py_nb_or -Py_nb_positive -Py_nb_power -Py_nb_remainder -Py_nb_rshift -Py_nb_subtract -Py_nb_true_divide -Py_nb_xor -Py_sq_ass_item -Py_sq_concat -Py_sq_contains -Py_sq_inplace_concat -Py_sq_inplace_repeat -Py_sq_item -Py_sq_length -Py_sq_repeat -Py_ssize_t -Py_tp_alloc -Py_tp_base -Py_tp_bases -Py_tp_call -Py_tp_clear -Py_tp_dealloc -Py_tp_del -Py_tp_descr_get -Py_tp_descr_set -Py_tp_doc -Py_tp_finalize -Py_tp_free -Py_tp_getattr -Py_tp_getattro -Py_tp_getset -Py_tp_hash -Py_tp_init -Py_tp_is_gc -Py_tp_iter -Py_tp_iternext -Py_tp_members -Py_tp_methods -Py_tp_new -Py_tp_repr -Py_tp_richcompare -Py_tp_setattr -Py_tp_setattro -Py_tp_str -Py_tp_traverse -Py_uintptr_t -_frame -_node -allocfunc -binaryfunc -descrgetfunc -descrsetfunc -destructor -getattrfunc -getattrofunc -getiterfunc -getter -hashfunc -initproc -inquiry -iternextfunc -lenfunc -newfunc -objobjargproc -objobjproc -reprfunc -richcmpfunc -setattrfunc -setattrofunc -setter -ssizeargfunc -ssizeobjargproc -ssizessizeargfunc -ssizessizeobjargproc -symtable -ternaryfunc -traverseproc -unaryfunc -visitproc +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 +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 +var 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 +function PyErr_SetExcFromWindowsErrWithFilename 3.7 +function PyErr_SetExcFromWindowsErrWithFilenameObject 3.7 +function PyErr_SetExcFromWindowsErrWithFilenameObjects 3.7 +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 +function PyErr_SetFromWindowsErrWithFilename 3.7 +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_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 +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 +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_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 +function PyOS_AfterFork_Child 3.7 +function PyOS_AfterFork_Parent 3.7 +function PyOS_BeforeFork 3.7 +function PyOS_CheckStack 3.7 +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_AsFileDescriptor 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_ClearWeakRefs 3.2 +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_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 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_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 +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 +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 +function PyUnicode_DecodeMBCSStateful 3.7 +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 +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_FrozenMain 3.10 +function Py_GenericAlias 3.9 +function 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 +function Py_XNewRef 3.10 +type Py_intptr_t 3.2 +type Py_ssize_t 3.2 +type Py_uintptr_t 3.2 +type _frame 3.2 +type _node 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 diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py index 76c9d920cbe31f..31e7ad7687f3d3 100644 --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -10,8 +10,10 @@ * stable API annotations - Usage: Set the `refcount_file` config value to the path to the reference + Usage: + * Set the `refcount_file` config value to the path to the reference count data file. + * Set the `stable_abi_file` config value to the path to stable ABI list. :copyright: Copyright 2007-2014 by Georg Brandl. :license: Python license. @@ -33,12 +35,10 @@ def __init__(self, name): self.result_refs = None -class Annotations(dict): - @classmethod - def fromfile(cls, filename): - d = cls() - fp = open(filename, 'r') - try: +class Annotations: + def __init__(self, refcount_filename, stable_abi_file): + self.refcount_data = {} + with open(refcount_filename, 'r') as fp: for line in fp: line = line.strip() if line[:1] in ("", "#"): @@ -50,9 +50,9 @@ def fromfile(cls, filename): function, type, arg, refcount, comment = parts # Get the entry, creating it if needed: try: - entry = d[function] + entry = self.refcount_data[function] except KeyError: - entry = d[function] = RCEntry(function) + entry = self.refcount_data[function] = RCEntry(function) if not refcount or refcount == "null": refcount = None else: @@ -64,27 +64,53 @@ def fromfile(cls, filename): else: entry.result_type = type entry.result_refs = refcount - finally: - fp.close() - return d + + self.stable_abi_data = {} + with open(stable_abi_file, 'r') as fp: + for line in fp: + if line.startswith('#') or not line.strip(): + # ignore comments and blanks + continue + objtype, name, added = line.split() + self.stable_abi_data.setdefault(objtype, {})[name] = added def add_annotations(self, app, doctree): for node in doctree.traverse(addnodes.desc_content): par = node.parent if par['domain'] != 'c': continue - if par['stableabi']: - node.insert(0, nodes.emphasis(' Part of the stable ABI.', - ' Part of the stable ABI.', - classes=['stableabi'])) - if par['objtype'] != 'function': - continue if not par[0].has_key('ids') or not par[0]['ids']: continue name = par[0]['ids'][0] if name.startswith("c."): name = name[2:] - entry = self.get(name) + + objtype = par['objtype'] + + # Stable ABI annotation. These have two forms: + # Part of the [Stable ABI](link). + # Part of the [Stable ABI](link) since version X.Y. + stable_added = self.stable_abi_data.get(objtype, {}).get(name) + if stable_added: + message = ' Part of the ' + emph_node = nodes.emphasis(message, message, + classes=['stableabi']) + ref_node = addnodes.pending_xref( + 'Stable ABI', refdomain="std", reftarget='stable', + reftype='ref', refexplicit="False") + ref_node += nodes.Text('Stable ABI') + emph_node += ref_node + if stable_added == '3.2': + # Stable ABI was introduced in 3.2. + emph_node += nodes.Text('.') + else: + emph_node += nodes.Text(f' since version {stable_added}.') + node.insert(0, emph_node) + + # Return value annotation + if objtype != 'function': + continue + entry = self.refcount_data.get(name) if not entry: continue elif not entry.result_type.endswith("Object*"): @@ -99,13 +125,16 @@ def add_annotations(self, app, doctree): def init_annotations(app): - refcounts = Annotations.fromfile( - path.join(app.srcdir, app.config.refcount_file)) + refcounts = Annotations( + path.join(app.srcdir, app.config.refcount_file), + path.join(app.srcdir, app.config.stable_abi_file), + ) app.connect('doctree-read', refcounts.add_annotations) def setup(app): app.add_config_value('refcount_file', '', True) + app.add_config_value('stable_abi_file', '', True) app.connect('builder-inited', init_annotations) # monkey-patch C object... diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index fa850150a75241..f9e91caa65f1bc 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -227,16 +227,33 @@ def sort_key(item): key=sort_key): write(f'EXPORT_DATA({item.name})') +REST_ROLES = { + 'function': 'function', + 'data': 'var', + 'struct': 'type', + 'macro': 'macro', + # 'const': 'const', # all undocumented + 'typedef': 'type', +} @generator("doc_list", 'Doc/data/stable_abi.dat') def gen_doc_annotations(manifest, args, outfile): """Generate/check the stable ABI list for documentation annotations""" write = partial(print, file=outfile) write("# Generated by Tools/scripts/stable_abi.py") + write("# Fields: rest_role, name, version_added") write() - for item in manifest.select(ABIItem.KINDS, include_abi_only=False): - write(item.name) - + for item in manifest.select(REST_ROLES.keys(), include_abi_only=False): + write(REST_ROLES[item.kind], item.name, item.added) + +REST_LINK_ROLES = { + 'function': 'func', + 'data': 'data', + 'struct': 'type', + 'macro': 'macro', + # 'const': 'const', # all undocumented + 'typedef': 'type', +} @generator("doc_rst", 'Doc/c-api/limited_api.inc') def gen_doc_page(manifest, args, outfile): @@ -244,16 +261,8 @@ def gen_doc_page(manifest, args, outfile): write = partial(print, file=outfile) write(".. File generated by Tools/stable_abi.py") write() - roles = { - 'function': 'func', - 'data': 'data', - 'struct': 'type', - 'macro': 'macro', - # 'const': 'const', # XXX: all undocumented - 'typedef': 'type', - } - for item in manifest.select(roles.keys(), include_abi_only=False): - write(f'* :c:{roles[item.kind]}:`{item.name}`') + for item in manifest.select(REST_LINK_ROLES.keys(), include_abi_only=False): + write(f'* :c:{REST_LINK_ROLES[item.kind]}:`{item.name}`') def generate_or_check(manifest, args, path, func): From 920965d9cea11e169b739a5f909a78b1c2d9e009 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 5 May 2021 19:39:30 +0200 Subject: [PATCH 07/12] Regenerate generated files --- Doc/c-api/limited_api.inc | 2 +- Doc/data/stable_abi.dat | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/c-api/limited_api.inc b/Doc/c-api/limited_api.inc index c5eab4244fef0c..5f1fd79fd69da9 100644 --- a/Doc/c-api/limited_api.inc +++ b/Doc/c-api/limited_api.inc @@ -77,7 +77,7 @@ * :c:func:`PyCodec_StreamReader` * :c:func:`PyCodec_StreamWriter` * :c:func:`PyCodec_StrictErrors` -* :c:data:`PyCodec_Unregister` +* :c:func:`PyCodec_Unregister` * :c:func:`PyCodec_XMLCharRefReplaceErrors` * :c:func:`PyComplex_FromDoubles` * :c:func:`PyComplex_ImagAsDouble` diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 853bc4f345eb6d..b6242b03968eb6 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -78,7 +78,7 @@ function PyCodec_ReplaceErrors 3.2 function PyCodec_StreamReader 3.2 function PyCodec_StreamWriter 3.2 function PyCodec_StrictErrors 3.2 -var PyCodec_Unregister 3.10 +function PyCodec_Unregister 3.10 function PyCodec_XMLCharRefReplaceErrors 3.2 function PyComplex_FromDoubles 3.2 function PyComplex_ImagAsDouble 3.2 From 6b4c8db0b2fb1b2dcaeac8705830a39260ab72d8 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 5 May 2021 17:13:25 +0200 Subject: [PATCH 08/12] Document platform-specific Limited API --- Doc/data/stable_abi.dat | 1724 ++++++++++++------------- Doc/tools/extensions/c_annotations.py | 18 +- Tools/scripts/stable_abi.py | 23 +- 3 files changed, 889 insertions(+), 876 deletions(-) diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index b6242b03968eb6..d582204f5626b9 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -1,863 +1,861 @@ -# Generated by Tools/scripts/stable_abi.py -# Fields: rest_role, name, version_added - -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 -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 -function PyErr_SetExcFromWindowsErrWithFilename 3.7 -function PyErr_SetExcFromWindowsErrWithFilenameObject 3.7 -function PyErr_SetExcFromWindowsErrWithFilenameObjects 3.7 -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 -function PyErr_SetFromWindowsErrWithFilename 3.7 -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_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 -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 -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_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 -function PyOS_AfterFork_Child 3.7 -function PyOS_AfterFork_Parent 3.7 -function PyOS_BeforeFork 3.7 -function PyOS_CheckStack 3.7 -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_AsFileDescriptor 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_ClearWeakRefs 3.2 -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_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 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_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 -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 -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 -function PyUnicode_DecodeMBCSStateful 3.7 -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 -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_FrozenMain 3.10 -function Py_GenericAlias 3.9 -function 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 -function Py_XNewRef 3.10 -type Py_intptr_t 3.2 -type Py_ssize_t 3.2 -type Py_uintptr_t 3.2 -type _frame 3.2 -type _node 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 +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, +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_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, +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_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_AsFileDescriptor,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_ClearWeakRefs,3.2, +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_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,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_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_FrozenMain,3.10, +function,Py_GenericAlias,3.9, +function,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, +function,Py_XNewRef,3.10, +type,Py_intptr_t,3.2, +type,Py_ssize_t,3.2, +type,Py_uintptr_t,3.2, +type,_frame,3.2, +type,_node,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, diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py index 31e7ad7687f3d3..1ad502539e1826 100644 --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -22,6 +22,7 @@ from os import path from docutils import nodes from docutils.parsers.rst import directives +import csv from sphinx import addnodes from sphinx.domains.c import CObject @@ -67,12 +68,10 @@ def __init__(self, refcount_filename, stable_abi_file): self.stable_abi_data = {} with open(stable_abi_file, 'r') as fp: - for line in fp: - if line.startswith('#') or not line.strip(): - # ignore comments and blanks - continue - objtype, name, added = line.split() - self.stable_abi_data.setdefault(objtype, {})[name] = added + for record in csv.DictReader(fp): + role = record['role'] + name = record['name'] + self.stable_abi_data.setdefault(role, {})[name] = record def add_annotations(self, app, doctree): for node in doctree.traverse(addnodes.desc_content): @@ -90,8 +89,9 @@ 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. - stable_added = self.stable_abi_data.get(objtype, {}).get(name) - if stable_added: + record = self.stable_abi_data.get(objtype, {}).get(name) + if record: + stable_added = record['added'] message = ' Part of the ' emph_node = nodes.emphasis(message, message, classes=['stableabi']) @@ -100,6 +100,8 @@ def add_annotations(self, app, doctree): reftype='ref', refexplicit="False") ref_node += nodes.Text('Stable ABI') emph_node += ref_node + 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('.') diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index f9e91caa65f1bc..60e621588a1195 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -21,6 +21,7 @@ import os.path import io import re +import csv MISSING = object() @@ -45,6 +46,11 @@ MACOS = (sys.platform == "darwin") UNIXY = MACOS or (sys.platform == "linux") # XXX should this be "not Windows"? +IFDEF_DOC_NOTES = { + 'MS_WINDOWS': 'on Windows', + 'HAVE_FORK': 'on platforms with fork()', + 'USE_STACKCHECK': 'on platforms with USE_STACKCHECK', +} # The stable ABI manifest (Misc/stable_abi.txt) exists only to fill the # following dataclasses. @@ -239,12 +245,19 @@ def sort_key(item): @generator("doc_list", 'Doc/data/stable_abi.dat') def gen_doc_annotations(manifest, args, outfile): """Generate/check the stable ABI list for documentation annotations""" - write = partial(print, file=outfile) - write("# Generated by Tools/scripts/stable_abi.py") - write("# Fields: rest_role, name, version_added") - write() + writer = csv.DictWriter( + outfile, ['role', 'name', 'added', 'ifdef_note'], lineterminator='\n') + writer.writeheader() for item in manifest.select(REST_ROLES.keys(), include_abi_only=False): - write(REST_ROLES[item.kind], item.name, item.added) + if item.ifdef: + ifdef_note = IFDEF_DOC_NOTES[item.ifdef] + else: + ifdef_note = None + writer.writerow({ + 'role': REST_ROLES[item.kind], + 'name': item.name, + 'added': item.added, + 'ifdef_note': ifdef_note}) REST_LINK_ROLES = { 'function': 'func', From e958d565411a346677bc31183c877e683d831651 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 5 May 2021 18:12:00 +0200 Subject: [PATCH 09/12] Generate the stable ABI list from stable_abi.dat --- Doc/c-api/limited_api.inc | 862 -------------------------- Doc/c-api/stable.rst | 2 +- Doc/tools/extensions/c_annotations.py | 43 +- Tools/scripts/stable_abi.py | 19 - 4 files changed, 40 insertions(+), 886 deletions(-) delete mode 100644 Doc/c-api/limited_api.inc diff --git a/Doc/c-api/limited_api.inc b/Doc/c-api/limited_api.inc deleted file mode 100644 index 5f1fd79fd69da9..00000000000000 --- a/Doc/c-api/limited_api.inc +++ /dev/null @@ -1,862 +0,0 @@ -.. File generated by Tools/stable_abi.py - -* :c:func:`PyAiter_Check` -* :c:func:`PyArg_Parse` -* :c:func:`PyArg_ParseTuple` -* :c:func:`PyArg_ParseTupleAndKeywords` -* :c:func:`PyArg_UnpackTuple` -* :c:func:`PyArg_VaParse` -* :c:func:`PyArg_VaParseTupleAndKeywords` -* :c:func:`PyArg_ValidateKeywordArguments` -* :c:data:`PyBaseObject_Type` -* :c:func:`PyBool_FromLong` -* :c:data:`PyBool_Type` -* :c:data:`PyByteArrayIter_Type` -* :c:func:`PyByteArray_AsString` -* :c:func:`PyByteArray_Concat` -* :c:func:`PyByteArray_FromObject` -* :c:func:`PyByteArray_FromStringAndSize` -* :c:func:`PyByteArray_Resize` -* :c:func:`PyByteArray_Size` -* :c:data:`PyByteArray_Type` -* :c:data:`PyBytesIter_Type` -* :c:func:`PyBytes_AsString` -* :c:func:`PyBytes_AsStringAndSize` -* :c:func:`PyBytes_Concat` -* :c:func:`PyBytes_ConcatAndDel` -* :c:func:`PyBytes_DecodeEscape` -* :c:func:`PyBytes_FromFormat` -* :c:func:`PyBytes_FromFormatV` -* :c:func:`PyBytes_FromObject` -* :c:func:`PyBytes_FromString` -* :c:func:`PyBytes_FromStringAndSize` -* :c:func:`PyBytes_Repr` -* :c:func:`PyBytes_Size` -* :c:data:`PyBytes_Type` -* :c:type:`PyCFunction` -* :c:type:`PyCFunctionWithKeywords` -* :c:func:`PyCFunction_Call` -* :c:func:`PyCFunction_GetFlags` -* :c:func:`PyCFunction_GetFunction` -* :c:func:`PyCFunction_GetSelf` -* :c:func:`PyCFunction_New` -* :c:func:`PyCFunction_NewEx` -* :c:data:`PyCFunction_Type` -* :c:func:`PyCMethod_New` -* :c:func:`PyCallIter_New` -* :c:data:`PyCallIter_Type` -* :c:func:`PyCallable_Check` -* :c:type:`PyCapsule_Destructor` -* :c:func:`PyCapsule_GetContext` -* :c:func:`PyCapsule_GetDestructor` -* :c:func:`PyCapsule_GetName` -* :c:func:`PyCapsule_GetPointer` -* :c:func:`PyCapsule_Import` -* :c:func:`PyCapsule_IsValid` -* :c:func:`PyCapsule_New` -* :c:func:`PyCapsule_SetContext` -* :c:func:`PyCapsule_SetDestructor` -* :c:func:`PyCapsule_SetName` -* :c:func:`PyCapsule_SetPointer` -* :c:data:`PyCapsule_Type` -* :c:data:`PyClassMethodDescr_Type` -* :c:func:`PyCodec_BackslashReplaceErrors` -* :c:func:`PyCodec_Decode` -* :c:func:`PyCodec_Decoder` -* :c:func:`PyCodec_Encode` -* :c:func:`PyCodec_Encoder` -* :c:func:`PyCodec_IgnoreErrors` -* :c:func:`PyCodec_IncrementalDecoder` -* :c:func:`PyCodec_IncrementalEncoder` -* :c:func:`PyCodec_KnownEncoding` -* :c:func:`PyCodec_LookupError` -* :c:func:`PyCodec_NameReplaceErrors` -* :c:func:`PyCodec_Register` -* :c:func:`PyCodec_RegisterError` -* :c:func:`PyCodec_ReplaceErrors` -* :c:func:`PyCodec_StreamReader` -* :c:func:`PyCodec_StreamWriter` -* :c:func:`PyCodec_StrictErrors` -* :c:func:`PyCodec_Unregister` -* :c:func:`PyCodec_XMLCharRefReplaceErrors` -* :c:func:`PyComplex_FromDoubles` -* :c:func:`PyComplex_ImagAsDouble` -* :c:func:`PyComplex_RealAsDouble` -* :c:data:`PyComplex_Type` -* :c:func:`PyDescr_NewClassMethod` -* :c:func:`PyDescr_NewGetSet` -* :c:func:`PyDescr_NewMember` -* :c:func:`PyDescr_NewMethod` -* :c:data:`PyDictItems_Type` -* :c:data:`PyDictIterItem_Type` -* :c:data:`PyDictIterKey_Type` -* :c:data:`PyDictIterValue_Type` -* :c:data:`PyDictKeys_Type` -* :c:func:`PyDictProxy_New` -* :c:data:`PyDictProxy_Type` -* :c:data:`PyDictRevIterItem_Type` -* :c:data:`PyDictRevIterKey_Type` -* :c:data:`PyDictRevIterValue_Type` -* :c:data:`PyDictValues_Type` -* :c:func:`PyDict_Clear` -* :c:func:`PyDict_Contains` -* :c:func:`PyDict_Copy` -* :c:func:`PyDict_DelItem` -* :c:func:`PyDict_DelItemString` -* :c:func:`PyDict_GetItem` -* :c:func:`PyDict_GetItemString` -* :c:func:`PyDict_GetItemWithError` -* :c:func:`PyDict_Items` -* :c:func:`PyDict_Keys` -* :c:func:`PyDict_Merge` -* :c:func:`PyDict_MergeFromSeq2` -* :c:func:`PyDict_New` -* :c:func:`PyDict_Next` -* :c:func:`PyDict_SetItem` -* :c:func:`PyDict_SetItemString` -* :c:func:`PyDict_Size` -* :c:data:`PyDict_Type` -* :c:func:`PyDict_Update` -* :c:func:`PyDict_Values` -* :c:data:`PyEllipsis_Type` -* :c:data:`PyEnum_Type` -* :c:func:`PyErr_BadArgument` -* :c:func:`PyErr_BadInternalCall` -* :c:func:`PyErr_CheckSignals` -* :c:func:`PyErr_Clear` -* :c:func:`PyErr_Display` -* :c:func:`PyErr_ExceptionMatches` -* :c:func:`PyErr_Fetch` -* :c:func:`PyErr_Format` -* :c:func:`PyErr_FormatV` -* :c:func:`PyErr_GetExcInfo` -* :c:func:`PyErr_GivenExceptionMatches` -* :c:func:`PyErr_NewException` -* :c:func:`PyErr_NewExceptionWithDoc` -* :c:func:`PyErr_NoMemory` -* :c:func:`PyErr_NormalizeException` -* :c:func:`PyErr_Occurred` -* :c:func:`PyErr_Print` -* :c:func:`PyErr_PrintEx` -* :c:func:`PyErr_ProgramText` -* :c:func:`PyErr_ResourceWarning` -* :c:func:`PyErr_Restore` -* :c:func:`PyErr_SetExcFromWindowsErr` -* :c:func:`PyErr_SetExcFromWindowsErrWithFilename` -* :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObject` -* :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObjects` -* :c:func:`PyErr_SetExcInfo` -* :c:func:`PyErr_SetFromErrno` -* :c:func:`PyErr_SetFromErrnoWithFilename` -* :c:func:`PyErr_SetFromErrnoWithFilenameObject` -* :c:func:`PyErr_SetFromErrnoWithFilenameObjects` -* :c:func:`PyErr_SetFromWindowsErr` -* :c:func:`PyErr_SetFromWindowsErrWithFilename` -* :c:func:`PyErr_SetImportError` -* :c:func:`PyErr_SetImportErrorSubclass` -* :c:func:`PyErr_SetInterrupt` -* :c:func:`PyErr_SetInterruptEx` -* :c:func:`PyErr_SetNone` -* :c:func:`PyErr_SetObject` -* :c:func:`PyErr_SetString` -* :c:func:`PyErr_SyntaxLocation` -* :c:func:`PyErr_SyntaxLocationEx` -* :c:func:`PyErr_WarnEx` -* :c:func:`PyErr_WarnExplicit` -* :c:func:`PyErr_WarnFormat` -* :c:func:`PyErr_WriteUnraisable` -* :c:func:`PyEval_AcquireLock` -* :c:func:`PyEval_AcquireThread` -* :c:func:`PyEval_CallFunction` -* :c:func:`PyEval_CallMethod` -* :c:func:`PyEval_CallObjectWithKeywords` -* :c:func:`PyEval_EvalCode` -* :c:func:`PyEval_EvalCodeEx` -* :c:func:`PyEval_EvalFrame` -* :c:func:`PyEval_EvalFrameEx` -* :c:func:`PyEval_GetBuiltins` -* :c:func:`PyEval_GetFrame` -* :c:func:`PyEval_GetFuncDesc` -* :c:func:`PyEval_GetFuncName` -* :c:func:`PyEval_GetGlobals` -* :c:func:`PyEval_GetLocals` -* :c:func:`PyEval_InitThreads` -* :c:func:`PyEval_ReleaseLock` -* :c:func:`PyEval_ReleaseThread` -* :c:func:`PyEval_RestoreThread` -* :c:func:`PyEval_SaveThread` -* :c:func:`PyEval_ThreadsInitialized` -* :c:data:`PyExc_ArithmeticError` -* :c:data:`PyExc_AssertionError` -* :c:data:`PyExc_AttributeError` -* :c:data:`PyExc_BaseException` -* :c:data:`PyExc_BlockingIOError` -* :c:data:`PyExc_BrokenPipeError` -* :c:data:`PyExc_BufferError` -* :c:data:`PyExc_BytesWarning` -* :c:data:`PyExc_ChildProcessError` -* :c:data:`PyExc_ConnectionAbortedError` -* :c:data:`PyExc_ConnectionError` -* :c:data:`PyExc_ConnectionRefusedError` -* :c:data:`PyExc_ConnectionResetError` -* :c:data:`PyExc_DeprecationWarning` -* :c:data:`PyExc_EOFError` -* :c:data:`PyExc_EncodingWarning` -* :c:data:`PyExc_EnvironmentError` -* :c:data:`PyExc_Exception` -* :c:data:`PyExc_FileExistsError` -* :c:data:`PyExc_FileNotFoundError` -* :c:data:`PyExc_FloatingPointError` -* :c:data:`PyExc_FutureWarning` -* :c:data:`PyExc_GeneratorExit` -* :c:data:`PyExc_IOError` -* :c:data:`PyExc_ImportError` -* :c:data:`PyExc_ImportWarning` -* :c:data:`PyExc_IndentationError` -* :c:data:`PyExc_IndexError` -* :c:data:`PyExc_InterruptedError` -* :c:data:`PyExc_IsADirectoryError` -* :c:data:`PyExc_KeyError` -* :c:data:`PyExc_KeyboardInterrupt` -* :c:data:`PyExc_LookupError` -* :c:data:`PyExc_MemoryError` -* :c:data:`PyExc_ModuleNotFoundError` -* :c:data:`PyExc_NameError` -* :c:data:`PyExc_NotADirectoryError` -* :c:data:`PyExc_NotImplementedError` -* :c:data:`PyExc_OSError` -* :c:data:`PyExc_OverflowError` -* :c:data:`PyExc_PendingDeprecationWarning` -* :c:data:`PyExc_PermissionError` -* :c:data:`PyExc_ProcessLookupError` -* :c:data:`PyExc_RecursionError` -* :c:data:`PyExc_ReferenceError` -* :c:data:`PyExc_ResourceWarning` -* :c:data:`PyExc_RuntimeError` -* :c:data:`PyExc_RuntimeWarning` -* :c:data:`PyExc_StopAsyncIteration` -* :c:data:`PyExc_StopIteration` -* :c:data:`PyExc_SyntaxError` -* :c:data:`PyExc_SyntaxWarning` -* :c:data:`PyExc_SystemError` -* :c:data:`PyExc_SystemExit` -* :c:data:`PyExc_TabError` -* :c:data:`PyExc_TimeoutError` -* :c:data:`PyExc_TypeError` -* :c:data:`PyExc_UnboundLocalError` -* :c:data:`PyExc_UnicodeDecodeError` -* :c:data:`PyExc_UnicodeEncodeError` -* :c:data:`PyExc_UnicodeError` -* :c:data:`PyExc_UnicodeTranslateError` -* :c:data:`PyExc_UnicodeWarning` -* :c:data:`PyExc_UserWarning` -* :c:data:`PyExc_ValueError` -* :c:data:`PyExc_Warning` -* :c:data:`PyExc_WindowsError` -* :c:data:`PyExc_ZeroDivisionError` -* :c:func:`PyExceptionClass_Name` -* :c:func:`PyException_GetCause` -* :c:func:`PyException_GetContext` -* :c:func:`PyException_GetTraceback` -* :c:func:`PyException_SetCause` -* :c:func:`PyException_SetContext` -* :c:func:`PyException_SetTraceback` -* :c:func:`PyFile_FromFd` -* :c:func:`PyFile_GetLine` -* :c:func:`PyFile_WriteObject` -* :c:func:`PyFile_WriteString` -* :c:data:`PyFilter_Type` -* :c:func:`PyFloat_AsDouble` -* :c:func:`PyFloat_FromDouble` -* :c:func:`PyFloat_FromString` -* :c:func:`PyFloat_GetInfo` -* :c:func:`PyFloat_GetMax` -* :c:func:`PyFloat_GetMin` -* :c:data:`PyFloat_Type` -* :c:func:`PyFrame_GetCode` -* :c:func:`PyFrame_GetLineNumber` -* :c:func:`PyFrozenSet_New` -* :c:data:`PyFrozenSet_Type` -* :c:func:`PyGC_Collect` -* :c:func:`PyGC_Disable` -* :c:func:`PyGC_Enable` -* :c:func:`PyGC_IsEnabled` -* :c:func:`PyGILState_Ensure` -* :c:func:`PyGILState_GetThisThreadState` -* :c:func:`PyGILState_Release` -* :c:type:`PyGILState_STATE` -* :c:type:`PyGetSetDef` -* :c:data:`PyGetSetDescr_Type` -* :c:func:`PyImport_AddModule` -* :c:func:`PyImport_AddModuleObject` -* :c:func:`PyImport_AppendInittab` -* :c:func:`PyImport_ExecCodeModule` -* :c:func:`PyImport_ExecCodeModuleEx` -* :c:func:`PyImport_ExecCodeModuleObject` -* :c:func:`PyImport_ExecCodeModuleWithPathnames` -* :c:func:`PyImport_GetImporter` -* :c:func:`PyImport_GetMagicNumber` -* :c:func:`PyImport_GetMagicTag` -* :c:func:`PyImport_GetModule` -* :c:func:`PyImport_GetModuleDict` -* :c:func:`PyImport_Import` -* :c:func:`PyImport_ImportFrozenModule` -* :c:func:`PyImport_ImportFrozenModuleObject` -* :c:func:`PyImport_ImportModule` -* :c:func:`PyImport_ImportModuleLevel` -* :c:func:`PyImport_ImportModuleLevelObject` -* :c:func:`PyImport_ImportModuleNoBlock` -* :c:func:`PyImport_ReloadModule` -* :c:func:`PyIndex_Check` -* :c:type:`PyInterpreterState` -* :c:func:`PyInterpreterState_Clear` -* :c:func:`PyInterpreterState_Delete` -* :c:func:`PyInterpreterState_Get` -* :c:func:`PyInterpreterState_GetDict` -* :c:func:`PyInterpreterState_GetID` -* :c:func:`PyInterpreterState_New` -* :c:func:`PyIter_Check` -* :c:func:`PyIter_Next` -* :c:func:`PyIter_Send` -* :c:data:`PyListIter_Type` -* :c:data:`PyListRevIter_Type` -* :c:func:`PyList_Append` -* :c:func:`PyList_AsTuple` -* :c:func:`PyList_GetItem` -* :c:func:`PyList_GetSlice` -* :c:func:`PyList_Insert` -* :c:func:`PyList_New` -* :c:func:`PyList_Reverse` -* :c:func:`PyList_SetItem` -* :c:func:`PyList_SetSlice` -* :c:func:`PyList_Size` -* :c:func:`PyList_Sort` -* :c:data:`PyList_Type` -* :c:type:`PyLongObject` -* :c:data:`PyLongRangeIter_Type` -* :c:func:`PyLong_AsDouble` -* :c:func:`PyLong_AsLong` -* :c:func:`PyLong_AsLongAndOverflow` -* :c:func:`PyLong_AsLongLong` -* :c:func:`PyLong_AsLongLongAndOverflow` -* :c:func:`PyLong_AsSize_t` -* :c:func:`PyLong_AsSsize_t` -* :c:func:`PyLong_AsUnsignedLong` -* :c:func:`PyLong_AsUnsignedLongLong` -* :c:func:`PyLong_AsUnsignedLongLongMask` -* :c:func:`PyLong_AsUnsignedLongMask` -* :c:func:`PyLong_AsVoidPtr` -* :c:func:`PyLong_FromDouble` -* :c:func:`PyLong_FromLong` -* :c:func:`PyLong_FromLongLong` -* :c:func:`PyLong_FromSize_t` -* :c:func:`PyLong_FromSsize_t` -* :c:func:`PyLong_FromString` -* :c:func:`PyLong_FromUnsignedLong` -* :c:func:`PyLong_FromUnsignedLongLong` -* :c:func:`PyLong_FromVoidPtr` -* :c:func:`PyLong_GetInfo` -* :c:data:`PyLong_Type` -* :c:data:`PyMap_Type` -* :c:func:`PyMapping_Check` -* :c:func:`PyMapping_GetItemString` -* :c:func:`PyMapping_HasKey` -* :c:func:`PyMapping_HasKeyString` -* :c:func:`PyMapping_Items` -* :c:func:`PyMapping_Keys` -* :c:func:`PyMapping_Length` -* :c:func:`PyMapping_SetItemString` -* :c:func:`PyMapping_Size` -* :c:func:`PyMapping_Values` -* :c:func:`PyMem_Calloc` -* :c:func:`PyMem_Free` -* :c:func:`PyMem_Malloc` -* :c:func:`PyMem_Realloc` -* :c:type:`PyMemberDef` -* :c:data:`PyMemberDescr_Type` -* :c:func:`PyMemoryView_FromMemory` -* :c:func:`PyMemoryView_FromObject` -* :c:func:`PyMemoryView_GetContiguous` -* :c:data:`PyMemoryView_Type` -* :c:type:`PyMethodDef` -* :c:data:`PyMethodDescr_Type` -* :c:type:`PyModuleDef` -* :c:type:`PyModuleDef_Base` -* :c:func:`PyModuleDef_Init` -* :c:data:`PyModuleDef_Type` -* :c:func:`PyModule_AddFunctions` -* :c:func:`PyModule_AddIntConstant` -* :c:func:`PyModule_AddObject` -* :c:func:`PyModule_AddObjectRef` -* :c:func:`PyModule_AddStringConstant` -* :c:func:`PyModule_AddType` -* :c:func:`PyModule_Create2` -* :c:func:`PyModule_ExecDef` -* :c:func:`PyModule_FromDefAndSpec2` -* :c:func:`PyModule_GetDef` -* :c:func:`PyModule_GetDict` -* :c:func:`PyModule_GetFilename` -* :c:func:`PyModule_GetFilenameObject` -* :c:func:`PyModule_GetName` -* :c:func:`PyModule_GetNameObject` -* :c:func:`PyModule_GetState` -* :c:func:`PyModule_New` -* :c:func:`PyModule_NewObject` -* :c:func:`PyModule_SetDocString` -* :c:data:`PyModule_Type` -* :c:func:`PyNumber_Absolute` -* :c:func:`PyNumber_Add` -* :c:func:`PyNumber_And` -* :c:func:`PyNumber_AsSsize_t` -* :c:func:`PyNumber_Check` -* :c:func:`PyNumber_Divmod` -* :c:func:`PyNumber_Float` -* :c:func:`PyNumber_FloorDivide` -* :c:func:`PyNumber_InPlaceAdd` -* :c:func:`PyNumber_InPlaceAnd` -* :c:func:`PyNumber_InPlaceFloorDivide` -* :c:func:`PyNumber_InPlaceLshift` -* :c:func:`PyNumber_InPlaceMatrixMultiply` -* :c:func:`PyNumber_InPlaceMultiply` -* :c:func:`PyNumber_InPlaceOr` -* :c:func:`PyNumber_InPlacePower` -* :c:func:`PyNumber_InPlaceRemainder` -* :c:func:`PyNumber_InPlaceRshift` -* :c:func:`PyNumber_InPlaceSubtract` -* :c:func:`PyNumber_InPlaceTrueDivide` -* :c:func:`PyNumber_InPlaceXor` -* :c:func:`PyNumber_Index` -* :c:func:`PyNumber_Invert` -* :c:func:`PyNumber_Long` -* :c:func:`PyNumber_Lshift` -* :c:func:`PyNumber_MatrixMultiply` -* :c:func:`PyNumber_Multiply` -* :c:func:`PyNumber_Negative` -* :c:func:`PyNumber_Or` -* :c:func:`PyNumber_Positive` -* :c:func:`PyNumber_Power` -* :c:func:`PyNumber_Remainder` -* :c:func:`PyNumber_Rshift` -* :c:func:`PyNumber_Subtract` -* :c:func:`PyNumber_ToBase` -* :c:func:`PyNumber_TrueDivide` -* :c:func:`PyNumber_Xor` -* :c:func:`PyOS_AfterFork` -* :c:func:`PyOS_AfterFork_Child` -* :c:func:`PyOS_AfterFork_Parent` -* :c:func:`PyOS_BeforeFork` -* :c:func:`PyOS_CheckStack` -* :c:func:`PyOS_FSPath` -* :c:data:`PyOS_InputHook` -* :c:func:`PyOS_InterruptOccurred` -* :c:func:`PyOS_double_to_string` -* :c:func:`PyOS_getsig` -* :c:func:`PyOS_mystricmp` -* :c:func:`PyOS_mystrnicmp` -* :c:func:`PyOS_setsig` -* :c:type:`PyOS_sighandler_t` -* :c:func:`PyOS_snprintf` -* :c:func:`PyOS_string_to_double` -* :c:func:`PyOS_strtol` -* :c:func:`PyOS_strtoul` -* :c:func:`PyOS_vsnprintf` -* :c:type:`PyObject` -* :c:func:`PyObject_ASCII` -* :c:func:`PyObject_AsFileDescriptor` -* :c:func:`PyObject_Bytes` -* :c:func:`PyObject_Call` -* :c:func:`PyObject_CallFunction` -* :c:func:`PyObject_CallFunctionObjArgs` -* :c:func:`PyObject_CallMethod` -* :c:func:`PyObject_CallMethodObjArgs` -* :c:func:`PyObject_CallNoArgs` -* :c:func:`PyObject_CallObject` -* :c:func:`PyObject_Calloc` -* :c:func:`PyObject_ClearWeakRefs` -* :c:func:`PyObject_DelItem` -* :c:func:`PyObject_DelItemString` -* :c:func:`PyObject_Dir` -* :c:func:`PyObject_Format` -* :c:func:`PyObject_Free` -* :c:func:`PyObject_GC_Del` -* :c:func:`PyObject_GC_IsFinalized` -* :c:func:`PyObject_GC_IsTracked` -* :c:func:`PyObject_GC_Track` -* :c:func:`PyObject_GC_UnTrack` -* :c:func:`PyObject_GenericGetAttr` -* :c:func:`PyObject_GenericGetDict` -* :c:func:`PyObject_GenericSetAttr` -* :c:func:`PyObject_GenericSetDict` -* :c:func:`PyObject_GetAiter` -* :c:func:`PyObject_GetAttr` -* :c:func:`PyObject_GetAttrString` -* :c:func:`PyObject_GetItem` -* :c:func:`PyObject_GetIter` -* :c:func:`PyObject_HasAttr` -* :c:func:`PyObject_HasAttrString` -* :c:func:`PyObject_Hash` -* :c:func:`PyObject_HashNotImplemented` -* :c:func:`PyObject_Init` -* :c:func:`PyObject_InitVar` -* :c:func:`PyObject_IsInstance` -* :c:func:`PyObject_IsSubclass` -* :c:func:`PyObject_IsTrue` -* :c:func:`PyObject_Length` -* :c:func:`PyObject_Malloc` -* :c:func:`PyObject_Not` -* :c:func:`PyObject_Realloc` -* :c:func:`PyObject_Repr` -* :c:func:`PyObject_RichCompare` -* :c:func:`PyObject_RichCompareBool` -* :c:func:`PyObject_SelfIter` -* :c:func:`PyObject_SetAttr` -* :c:func:`PyObject_SetAttrString` -* :c:func:`PyObject_SetItem` -* :c:func:`PyObject_Size` -* :c:func:`PyObject_Str` -* :c:func:`PyObject_Type` -* :c:data:`PyProperty_Type` -* :c:data:`PyRangeIter_Type` -* :c:data:`PyRange_Type` -* :c:data:`PyReversed_Type` -* :c:func:`PySeqIter_New` -* :c:data:`PySeqIter_Type` -* :c:func:`PySequence_Check` -* :c:func:`PySequence_Concat` -* :c:func:`PySequence_Contains` -* :c:func:`PySequence_Count` -* :c:func:`PySequence_DelItem` -* :c:func:`PySequence_DelSlice` -* :c:func:`PySequence_Fast` -* :c:func:`PySequence_GetItem` -* :c:func:`PySequence_GetSlice` -* :c:func:`PySequence_In` -* :c:func:`PySequence_InPlaceConcat` -* :c:func:`PySequence_InPlaceRepeat` -* :c:func:`PySequence_Index` -* :c:func:`PySequence_Length` -* :c:func:`PySequence_List` -* :c:func:`PySequence_Repeat` -* :c:func:`PySequence_SetItem` -* :c:func:`PySequence_SetSlice` -* :c:func:`PySequence_Size` -* :c:func:`PySequence_Tuple` -* :c:data:`PySetIter_Type` -* :c:func:`PySet_Add` -* :c:func:`PySet_Clear` -* :c:func:`PySet_Contains` -* :c:func:`PySet_Discard` -* :c:func:`PySet_New` -* :c:func:`PySet_Pop` -* :c:func:`PySet_Size` -* :c:data:`PySet_Type` -* :c:func:`PySlice_AdjustIndices` -* :c:func:`PySlice_GetIndices` -* :c:func:`PySlice_GetIndicesEx` -* :c:func:`PySlice_New` -* :c:data:`PySlice_Type` -* :c:func:`PySlice_Unpack` -* :c:func:`PyState_AddModule` -* :c:func:`PyState_FindModule` -* :c:func:`PyState_RemoveModule` -* :c:type:`PyStructSequence_Desc` -* :c:type:`PyStructSequence_Field` -* :c:func:`PyStructSequence_GetItem` -* :c:func:`PyStructSequence_New` -* :c:func:`PyStructSequence_NewType` -* :c:func:`PyStructSequence_SetItem` -* :c:data:`PySuper_Type` -* :c:func:`PySys_AddWarnOption` -* :c:func:`PySys_AddWarnOptionUnicode` -* :c:func:`PySys_AddXOption` -* :c:func:`PySys_FormatStderr` -* :c:func:`PySys_FormatStdout` -* :c:func:`PySys_GetObject` -* :c:func:`PySys_GetXOptions` -* :c:func:`PySys_HasWarnOptions` -* :c:func:`PySys_ResetWarnOptions` -* :c:func:`PySys_SetArgv` -* :c:func:`PySys_SetArgvEx` -* :c:func:`PySys_SetObject` -* :c:func:`PySys_SetPath` -* :c:func:`PySys_WriteStderr` -* :c:func:`PySys_WriteStdout` -* :c:type:`PyThreadState` -* :c:func:`PyThreadState_Clear` -* :c:func:`PyThreadState_Delete` -* :c:func:`PyThreadState_Get` -* :c:func:`PyThreadState_GetDict` -* :c:func:`PyThreadState_GetFrame` -* :c:func:`PyThreadState_GetID` -* :c:func:`PyThreadState_GetInterpreter` -* :c:func:`PyThreadState_New` -* :c:func:`PyThreadState_SetAsyncExc` -* :c:func:`PyThreadState_Swap` -* :c:func:`PyThread_GetInfo` -* :c:func:`PyThread_ReInitTLS` -* :c:func:`PyThread_acquire_lock` -* :c:func:`PyThread_acquire_lock_timed` -* :c:func:`PyThread_allocate_lock` -* :c:func:`PyThread_create_key` -* :c:func:`PyThread_delete_key` -* :c:func:`PyThread_delete_key_value` -* :c:func:`PyThread_exit_thread` -* :c:func:`PyThread_free_lock` -* :c:func:`PyThread_get_key_value` -* :c:func:`PyThread_get_stacksize` -* :c:func:`PyThread_get_thread_ident` -* :c:func:`PyThread_get_thread_native_id` -* :c:func:`PyThread_init_thread` -* :c:func:`PyThread_release_lock` -* :c:func:`PyThread_set_key_value` -* :c:func:`PyThread_set_stacksize` -* :c:func:`PyThread_start_new_thread` -* :c:func:`PyThread_tss_alloc` -* :c:func:`PyThread_tss_create` -* :c:func:`PyThread_tss_delete` -* :c:func:`PyThread_tss_free` -* :c:func:`PyThread_tss_get` -* :c:func:`PyThread_tss_is_created` -* :c:func:`PyThread_tss_set` -* :c:func:`PyTraceBack_Here` -* :c:func:`PyTraceBack_Print` -* :c:data:`PyTraceBack_Type` -* :c:data:`PyTupleIter_Type` -* :c:func:`PyTuple_GetItem` -* :c:func:`PyTuple_GetSlice` -* :c:func:`PyTuple_New` -* :c:func:`PyTuple_Pack` -* :c:func:`PyTuple_SetItem` -* :c:func:`PyTuple_Size` -* :c:data:`PyTuple_Type` -* :c:type:`PyTypeObject` -* :c:func:`PyType_ClearCache` -* :c:func:`PyType_FromModuleAndSpec` -* :c:func:`PyType_FromSpec` -* :c:func:`PyType_FromSpecWithBases` -* :c:func:`PyType_GenericAlloc` -* :c:func:`PyType_GenericNew` -* :c:func:`PyType_GetFlags` -* :c:func:`PyType_GetModule` -* :c:func:`PyType_GetModuleState` -* :c:func:`PyType_GetSlot` -* :c:func:`PyType_IsSubtype` -* :c:func:`PyType_Modified` -* :c:func:`PyType_Ready` -* :c:type:`PyType_Slot` -* :c:type:`PyType_Spec` -* :c:data:`PyType_Type` -* :c:func:`PyUnicodeDecodeError_Create` -* :c:func:`PyUnicodeDecodeError_GetEncoding` -* :c:func:`PyUnicodeDecodeError_GetEnd` -* :c:func:`PyUnicodeDecodeError_GetObject` -* :c:func:`PyUnicodeDecodeError_GetReason` -* :c:func:`PyUnicodeDecodeError_GetStart` -* :c:func:`PyUnicodeDecodeError_SetEnd` -* :c:func:`PyUnicodeDecodeError_SetReason` -* :c:func:`PyUnicodeDecodeError_SetStart` -* :c:func:`PyUnicodeEncodeError_GetEncoding` -* :c:func:`PyUnicodeEncodeError_GetEnd` -* :c:func:`PyUnicodeEncodeError_GetObject` -* :c:func:`PyUnicodeEncodeError_GetReason` -* :c:func:`PyUnicodeEncodeError_GetStart` -* :c:func:`PyUnicodeEncodeError_SetEnd` -* :c:func:`PyUnicodeEncodeError_SetReason` -* :c:func:`PyUnicodeEncodeError_SetStart` -* :c:data:`PyUnicodeIter_Type` -* :c:func:`PyUnicodeTranslateError_GetEnd` -* :c:func:`PyUnicodeTranslateError_GetObject` -* :c:func:`PyUnicodeTranslateError_GetReason` -* :c:func:`PyUnicodeTranslateError_GetStart` -* :c:func:`PyUnicodeTranslateError_SetEnd` -* :c:func:`PyUnicodeTranslateError_SetReason` -* :c:func:`PyUnicodeTranslateError_SetStart` -* :c:func:`PyUnicode_Append` -* :c:func:`PyUnicode_AppendAndDel` -* :c:func:`PyUnicode_AsASCIIString` -* :c:func:`PyUnicode_AsCharmapString` -* :c:func:`PyUnicode_AsDecodedObject` -* :c:func:`PyUnicode_AsDecodedUnicode` -* :c:func:`PyUnicode_AsEncodedObject` -* :c:func:`PyUnicode_AsEncodedString` -* :c:func:`PyUnicode_AsEncodedUnicode` -* :c:func:`PyUnicode_AsLatin1String` -* :c:func:`PyUnicode_AsMBCSString` -* :c:func:`PyUnicode_AsRawUnicodeEscapeString` -* :c:func:`PyUnicode_AsUCS4` -* :c:func:`PyUnicode_AsUCS4Copy` -* :c:func:`PyUnicode_AsUTF16String` -* :c:func:`PyUnicode_AsUTF32String` -* :c:func:`PyUnicode_AsUTF8AndSize` -* :c:func:`PyUnicode_AsUTF8String` -* :c:func:`PyUnicode_AsUnicodeEscapeString` -* :c:func:`PyUnicode_AsWideChar` -* :c:func:`PyUnicode_AsWideCharString` -* :c:func:`PyUnicode_BuildEncodingMap` -* :c:func:`PyUnicode_Compare` -* :c:func:`PyUnicode_CompareWithASCIIString` -* :c:func:`PyUnicode_Concat` -* :c:func:`PyUnicode_Contains` -* :c:func:`PyUnicode_Count` -* :c:func:`PyUnicode_Decode` -* :c:func:`PyUnicode_DecodeASCII` -* :c:func:`PyUnicode_DecodeCharmap` -* :c:func:`PyUnicode_DecodeCodePageStateful` -* :c:func:`PyUnicode_DecodeFSDefault` -* :c:func:`PyUnicode_DecodeFSDefaultAndSize` -* :c:func:`PyUnicode_DecodeLatin1` -* :c:func:`PyUnicode_DecodeLocale` -* :c:func:`PyUnicode_DecodeLocaleAndSize` -* :c:func:`PyUnicode_DecodeMBCS` -* :c:func:`PyUnicode_DecodeMBCSStateful` -* :c:func:`PyUnicode_DecodeRawUnicodeEscape` -* :c:func:`PyUnicode_DecodeUTF16` -* :c:func:`PyUnicode_DecodeUTF16Stateful` -* :c:func:`PyUnicode_DecodeUTF32` -* :c:func:`PyUnicode_DecodeUTF32Stateful` -* :c:func:`PyUnicode_DecodeUTF7` -* :c:func:`PyUnicode_DecodeUTF7Stateful` -* :c:func:`PyUnicode_DecodeUTF8` -* :c:func:`PyUnicode_DecodeUTF8Stateful` -* :c:func:`PyUnicode_DecodeUnicodeEscape` -* :c:func:`PyUnicode_EncodeCodePage` -* :c:func:`PyUnicode_EncodeFSDefault` -* :c:func:`PyUnicode_EncodeLocale` -* :c:func:`PyUnicode_FSConverter` -* :c:func:`PyUnicode_FSDecoder` -* :c:func:`PyUnicode_Find` -* :c:func:`PyUnicode_FindChar` -* :c:func:`PyUnicode_Format` -* :c:func:`PyUnicode_FromEncodedObject` -* :c:func:`PyUnicode_FromFormat` -* :c:func:`PyUnicode_FromFormatV` -* :c:func:`PyUnicode_FromObject` -* :c:func:`PyUnicode_FromOrdinal` -* :c:func:`PyUnicode_FromString` -* :c:func:`PyUnicode_FromStringAndSize` -* :c:func:`PyUnicode_FromWideChar` -* :c:func:`PyUnicode_GetDefaultEncoding` -* :c:func:`PyUnicode_GetLength` -* :c:func:`PyUnicode_GetSize` -* :c:func:`PyUnicode_InternFromString` -* :c:func:`PyUnicode_InternImmortal` -* :c:func:`PyUnicode_InternInPlace` -* :c:func:`PyUnicode_IsIdentifier` -* :c:func:`PyUnicode_Join` -* :c:func:`PyUnicode_Partition` -* :c:func:`PyUnicode_RPartition` -* :c:func:`PyUnicode_RSplit` -* :c:func:`PyUnicode_ReadChar` -* :c:func:`PyUnicode_Replace` -* :c:func:`PyUnicode_Resize` -* :c:func:`PyUnicode_RichCompare` -* :c:func:`PyUnicode_Split` -* :c:func:`PyUnicode_Splitlines` -* :c:func:`PyUnicode_Substring` -* :c:func:`PyUnicode_Tailmatch` -* :c:func:`PyUnicode_Translate` -* :c:data:`PyUnicode_Type` -* :c:func:`PyUnicode_WriteChar` -* :c:type:`PyVarObject` -* :c:type:`PyWeakReference` -* :c:func:`PyWeakref_GetObject` -* :c:func:`PyWeakref_NewProxy` -* :c:func:`PyWeakref_NewRef` -* :c:data:`PyWrapperDescr_Type` -* :c:func:`PyWrapper_New` -* :c:data:`PyZip_Type` -* :c:func:`Py_AddPendingCall` -* :c:func:`Py_AtExit` -* :c:macro:`Py_BEGIN_ALLOW_THREADS` -* :c:macro:`Py_BLOCK_THREADS` -* :c:func:`Py_BuildValue` -* :c:func:`Py_BytesMain` -* :c:func:`Py_CompileString` -* :c:func:`Py_DecRef` -* :c:func:`Py_DecodeLocale` -* :c:macro:`Py_END_ALLOW_THREADS` -* :c:func:`Py_EncodeLocale` -* :c:func:`Py_EndInterpreter` -* :c:func:`Py_EnterRecursiveCall` -* :c:func:`Py_Exit` -* :c:func:`Py_FatalError` -* :c:data:`Py_FileSystemDefaultEncodeErrors` -* :c:data:`Py_FileSystemDefaultEncoding` -* :c:func:`Py_Finalize` -* :c:func:`Py_FinalizeEx` -* :c:func:`Py_FrozenMain` -* :c:func:`Py_GenericAlias` -* :c:func:`Py_GenericAliasType` -* :c:func:`Py_GetBuildInfo` -* :c:func:`Py_GetCompiler` -* :c:func:`Py_GetCopyright` -* :c:func:`Py_GetExecPrefix` -* :c:func:`Py_GetPath` -* :c:func:`Py_GetPlatform` -* :c:func:`Py_GetPrefix` -* :c:func:`Py_GetProgramFullPath` -* :c:func:`Py_GetProgramName` -* :c:func:`Py_GetPythonHome` -* :c:func:`Py_GetRecursionLimit` -* :c:func:`Py_GetVersion` -* :c:data:`Py_HasFileSystemDefaultEncoding` -* :c:func:`Py_IncRef` -* :c:func:`Py_Initialize` -* :c:func:`Py_InitializeEx` -* :c:func:`Py_Is` -* :c:func:`Py_IsFalse` -* :c:func:`Py_IsInitialized` -* :c:func:`Py_IsNone` -* :c:func:`Py_IsTrue` -* :c:func:`Py_LeaveRecursiveCall` -* :c:func:`Py_Main` -* :c:func:`Py_MakePendingCalls` -* :c:func:`Py_NewInterpreter` -* :c:func:`Py_NewRef` -* :c:func:`Py_ReprEnter` -* :c:func:`Py_ReprLeave` -* :c:func:`Py_SetPath` -* :c:func:`Py_SetProgramName` -* :c:func:`Py_SetPythonHome` -* :c:func:`Py_SetRecursionLimit` -* :c:type:`Py_UCS4` -* :c:macro:`Py_UNBLOCK_THREADS` -* :c:data:`Py_UTF8Mode` -* :c:func:`Py_VaBuildValue` -* :c:func:`Py_XNewRef` -* :c:type:`Py_intptr_t` -* :c:type:`Py_ssize_t` -* :c:type:`Py_uintptr_t` -* :c:type:`_frame` -* :c:type:`_node` -* :c:type:`allocfunc` -* :c:type:`binaryfunc` -* :c:type:`descrgetfunc` -* :c:type:`descrsetfunc` -* :c:type:`destructor` -* :c:type:`getattrfunc` -* :c:type:`getattrofunc` -* :c:type:`getiterfunc` -* :c:type:`getter` -* :c:type:`hashfunc` -* :c:type:`initproc` -* :c:type:`inquiry` -* :c:type:`iternextfunc` -* :c:type:`lenfunc` -* :c:type:`newfunc` -* :c:type:`objobjargproc` -* :c:type:`objobjproc` -* :c:type:`reprfunc` -* :c:type:`richcmpfunc` -* :c:type:`setattrfunc` -* :c:type:`setattrofunc` -* :c:type:`setter` -* :c:type:`ssizeargfunc` -* :c:type:`ssizeobjargproc` -* :c:type:`ssizessizeargfunc` -* :c:type:`ssizessizeobjargproc` -* :c:type:`symtable` -* :c:type:`ternaryfunc` -* :c:type:`traverseproc` -* :c:type:`unaryfunc` -* :c:type:`visitproc` diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 6eb24cb7bceddd..f6b58dd6a1eba1 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -153,4 +153,4 @@ Contents of Limited API Currently, the Limited API includes the following items: -.. include:: limited_api.inc +.. limited-api-list:: diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py index 1ad502539e1826..489f06613eb310 100644 --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -22,12 +22,23 @@ from os import path from docutils import nodes from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from docutils.statemachine import StringList import csv from sphinx import addnodes from sphinx.domains.c import CObject +REST_ROLE_MAP = { + 'function': 'func', + 'var': 'data', + 'type': 'type', + 'macro': 'macro', + 'type': 'type', +} + + class RCEntry: def __init__(self, name): self.name = name @@ -71,7 +82,7 @@ def __init__(self, refcount_filename, stable_abi_file): for record in csv.DictReader(fp): role = record['role'] name = record['name'] - self.stable_abi_data.setdefault(role, {})[name] = record + self.stable_abi_data[name] = record def add_annotations(self, app, doctree): for node in doctree.traverse(addnodes.desc_content): @@ -89,8 +100,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. - record = self.stable_abi_data.get(objtype, {}).get(name) + record = self.stable_abi_data.get(name) if record: + if record['role'] != objtype: + raise ValueError( + f"Object type mismatch in limited API annotation " + f"for {name}: {record['role']!r} != {objtype!r}") stable_added = record['added'] message = ' Part of the ' emph_node = nodes.emphasis(message, message, @@ -127,11 +142,31 @@ def add_annotations(self, app, doctree): def init_annotations(app): - refcounts = Annotations( + annotations = Annotations( path.join(app.srcdir, app.config.refcount_file), path.join(app.srcdir, app.config.stable_abi_file), ) - app.connect('doctree-read', refcounts.add_annotations) + app.connect('doctree-read', annotations.add_annotations) + + class LimitedAPIList(Directive): + + has_content = False + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = True + + def run(self): + content = [] + for record in annotations.stable_abi_data.values(): + role = REST_ROLE_MAP[record['role']] + name = record['name'] + content.append(f'* :c:{role}:`{name}`') + + pnode = nodes.paragraph() + self.state.nested_parse(StringList(content), 0, pnode) + return [pnode] + + app.add_directive('limited-api-list', LimitedAPIList) def setup(app): diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 60e621588a1195..2ba5b66cd1258b 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -259,25 +259,6 @@ def gen_doc_annotations(manifest, args, outfile): 'added': item.added, 'ifdef_note': ifdef_note}) -REST_LINK_ROLES = { - 'function': 'func', - 'data': 'data', - 'struct': 'type', - 'macro': 'macro', - # 'const': 'const', # all undocumented - 'typedef': 'type', -} - -@generator("doc_rst", 'Doc/c-api/limited_api.inc') -def gen_doc_page(manifest, args, outfile): - """Generate/check the ReST list for stable ABI documentation""" - write = partial(print, file=outfile) - write(".. File generated by Tools/stable_abi.py") - write() - for item in manifest.select(REST_LINK_ROLES.keys(), include_abi_only=False): - write(f'* :c:{REST_LINK_ROLES[item.kind]}:`{item.name}`') - - def generate_or_check(manifest, args, path, func): """Generate/check a file with a single generator From d0792e5d7dbd2f699f2068a261ce988b53991110 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 7 May 2021 16:33:25 +0200 Subject: [PATCH 10/12] apiabiversion: Bold "build" & "run" --- Doc/c-api/apiabiversion.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/c-api/apiabiversion.rst b/Doc/c-api/apiabiversion.rst index d7865b6d6f1fc9..ab4b55f494854c 100644 --- a/Doc/c-api/apiabiversion.rst +++ b/Doc/c-api/apiabiversion.rst @@ -7,8 +7,8 @@ API and ABI Versioning *********************** CPython exposes its version number in the following macros. -Note that these correspond to the version code is built with, -not necessarily the version used at run time. +Note that these correspond to the version code is **built** with, +not necessarily the version used at **run time**. See :ref:`stable` for a discussion of API and ABI stability across versions. From 3fbc13a7e7152d807a27e9c67ce7dc9f261d649f Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 7 May 2021 16:41:19 +0200 Subject: [PATCH 11/12] PY_VERSION_HEX: Add examples to the table --- Doc/c-api/apiabiversion.rst | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/Doc/c-api/apiabiversion.rst b/Doc/c-api/apiabiversion.rst index ab4b55f494854c..04050f7dabe172 100644 --- a/Doc/c-api/apiabiversion.rst +++ b/Doc/c-api/apiabiversion.rst @@ -38,23 +38,22 @@ See :ref:`stable` for a discussion of API and ABI stability across versions. The Python version number encoded in a single integer. - For example if the ``PY_VERSION_HEX`` is set to ``0x030401a2``, the underlying - version information can be found by treating it as a 32 bit number in - the following manner: - - +-------+-------------------------+-------------------------+ - | Bytes | Bits (big endian order) | Meaning | - +=======+=========================+=========================+ - | 1 | 1-8 | ``PY_MAJOR_VERSION`` | - +-------+-------------------------+-------------------------+ - | 2 | 9-16 | ``PY_MINOR_VERSION`` | - +-------+-------------------------+-------------------------+ - | 3 | 17-24 | ``PY_MICRO_VERSION`` | - +-------+-------------------------+-------------------------+ - | 4 | 25-28 | ``PY_RELEASE_LEVEL`` | - + +-------------------------+-------------------------+ - | | 29-32 | ``PY_RELEASE_SERIAL`` | - +-------+-------------------------+-------------------------+ + The underlying version information can be found by treating it as a 32 bit + number in the following manner: + + +-------+-------------------------+-------------------------+--------------------------+ + | Bytes | Bits (big endian order) | Meaning | Value for ``3.4.1a2`` | + +=======+=========================+=========================+==========================+ + | 1 | 1-8 | ``PY_MAJOR_VERSION`` | ``0x03`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 2 | 9-16 | ``PY_MINOR_VERSION`` | ``0x04`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 3 | 17-24 | ``PY_MICRO_VERSION`` | ``0x01`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 4 | 25-28 | ``PY_RELEASE_LEVEL`` | ``0xA`` | + + +-------------------------+-------------------------+--------------------------+ + | | 29-32 | ``PY_RELEASE_SERIAL`` | ``0x2`` | + +-------+-------------------------+-------------------------+--------------------------+ Thus ``3.4.1a2`` is hexversion ``0x030401a2`` and ``3.10.0`` is hexversion ``0x030a00f0``. From 5637b1f7f523786f59c165118bec3379ad2a4617 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 7 May 2021 16:47:36 +0200 Subject: [PATCH 12/12] Reword paragraph on specific value for Py_LIMITED_API --- Doc/c-api/stable.rst | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index f6b58dd6a1eba1..2f67b097eae975 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -49,11 +49,13 @@ embedding Python.) (x>=2) on the particular :ref:`platform `. Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will - do the same, but allow additional API added up to specified version, - and lose compatibility with earlier versions. - Rather than using the macro directly, hardcode a minimum minor version - (e.g. ``0x030A0000`` for Python 3.10) for stability when compiling with - future Python versions. + limit the available API so that the extension will work without + recompilation with all Python 3 releases from the specified one. + This will allow using additional API introduced up to this version, + but the extension will lose compatibility with earlier Python versions. + Rather than using the ``PY_VERSION_HEX`` macro directly, hardcode a minimum + minor version (e.g. ``0x030A0000`` for Python 3.10) for stability when + compiling with future Python versions. On Windows, extensions that use the Stable ABI should be linked against ``python3.dll`` rather than a version-specific library such as