.\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PYTHONCAPI_COMPAT" "1" "Oct 13, 2026" "" "pythoncapi_compat" .SH NAME pythoncapi_compat \- pythoncapi_compat .sp The \fBpythoncapi\-compat\fP project can be used to write a C or C++ extension supporting a wide range of Python versions with a single code base. It is made of the \fBpythoncapi_compat.h\fP header file. .INDENT 0.0 .IP \(bu 2 Homepage: GitHub pythoncapi\-compat project \%\&. .IP \(bu 2 Documentation \% .UNINDENT .sp Documentation: .SH PYTHONCAPI_COMPAT.H API .sp The \fBpythoncapi_compat.h\fP header file provides implementations of around 150 recent functions for old Python versions. .sp Supported Python versions: .INDENT 0.0 .IP \(bu 2 Python 3.6 \- 3.16 .IP \(bu 2 PyPy 3.6 \- 3.12 .UNINDENT .sp A C11 subset (without optional features) is required, like \fBstatic inline\fP functions: see PEP 7 \%\&. .sp C++03 and C++11 are supported on Python 3.6 and newer. .sp Private functions (name starting with \fB_Py\fP) are not supported. .sp Latest version of the header file: pythoncapi_compat.h \%\&. .SS Python 3.15 .INDENT 0.0 .TP .B PyBytesWriter *PyBytesWriter_Create(Py_ssize_t size) .UNINDENT .INDENT 0.0 .TP .B void *PyBytesWriter_GetData(PyBytesWriter *writer) .UNINDENT .INDENT 0.0 .TP .B Py_ssize_t PyBytesWriter_GetSize(PyBytesWriter *writer) .UNINDENT .INDENT 0.0 .TP .B PyObject *PyBytesWriter_FinishWithSize(PyBytesWriter *writer, Py_ssize_t size) .UNINDENT .INDENT 0.0 .TP .B PyObject *PyBytesWriter_Finish(PyBytesWriter *writer) .UNINDENT .INDENT 0.0 .TP .B PyObject *PyBytesWriter_FinishWithPointer(PyBytesWriter *writer, void *buf) .UNINDENT .INDENT 0.0 .TP .B void PyBytesWriter_Discard(PyBytesWriter *writer) .UNINDENT .INDENT 0.0 .TP .B int PyBytesWriter_Resize(PyBytesWriter *writer, Py_ssize_t size) .UNINDENT .INDENT 0.0 .TP .B int PyBytesWriter_Grow(PyBytesWriter *writer, Py_ssize_t size) .UNINDENT .INDENT 0.0 .TP .B void *PyBytesWriter_GrowAndUpdatePointer(PyBytesWriter *writer, Py_ssize_t size, void *buf) .UNINDENT .INDENT 0.0 .TP .B int PyBytesWriter_WriteBytes(PyBytesWriter *writer, const void *bytes, Py_ssize_t size) .UNINDENT .INDENT 0.0 .TP .B int PyBytesWriter_Format(PyBytesWriter *writer, const char *format, \&...) See PyBytesWriter documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *PySys_GetAttr(const char *name) See PySys_GetAttr() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PySys_GetAttrString(const char *name) See PySys_GetAttrString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PySys_GetOptionalAttr(const char *name) See PySys_GetOptionalAttr() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PySys_GetOptionalAttrString(const char *name) See PySys_GetOptionalAttrString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyTuple_FromArray(PyObject *const *array, Py_ssize_t size) See PyTuple_FromArray() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B Py_hash_t PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) See PyUnstable_Unicode_GET_CACHED_HASH() documentation \%\&. .sp On PyPy, always returns \fB\-1\fP\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnstable_SetImmortal(PyObject *op) See PyUnstable_SetImmortal() documentation \%\&. .sp Availability: Python 3.13 and newer. .sp Not available on PyPy, and not on the limited C API. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyABIInfo_Check()\fP .IP \(bu 2 \fBPyAnyDict_Check()\fP .IP \(bu 2 \fBPyAnyDict_CheckExact()\fP .IP \(bu 2 \fBPyArg_ParseArray()\fP .IP \(bu 2 \fBPyArg_ParseArrayAndKeywords()\fP .IP \(bu 2 \fBPyFrozenDict_Check()\fP .IP \(bu 2 \fBPyFrozenDict_CheckExact()\fP .IP \(bu 2 \fBPyFrozenDict_New()\fP .IP \(bu 2 \fBPyImport_CreateModuleFromInitfunc()\fP .IP \(bu 2 \fBPyModule_FromSlotsAndSpec()\fP .IP \(bu 2 \fBPyModule_GetState_DuringGC()\fP .IP \(bu 2 \fBPyModule_GetToken_DuringGC()\fP .IP \(bu 2 \fBPyObject_CallFinalizerFromDealloc()\fP .IP \(bu 2 \fBPyObject_Dump()\fP .IP \(bu 2 \fBPyObject_GetItemData_DuringGC()\fP .IP \(bu 2 \fBPyObject_GetTypeData_DuringGC()\fP .IP \(bu 2 \fBPyType_FromSlots()\fP .IP \(bu 2 \fBPyType_GetBaseByToken_DuringGC()\fP .IP \(bu 2 \fBPyType_GetModuleByToken_DuringGC()\fP .IP \(bu 2 \fBPyType_GetModuleState_DuringGC()\fP .IP \(bu 2 \fBPyType_GetModule_DuringGC()\fP .IP \(bu 2 \fBPyUnstable_DumpTraceback()\fP .IP \(bu 2 \fBPyUnstable_DumpTracebackThreads()\fP .IP \(bu 2 \fBPyUnstable_ThreadState_ResetStackProtection()\fP .IP \(bu 2 \fBPyUnstable_ThreadState_SetStackProtection()\fP .UNINDENT .SS Python 3.14 .INDENT 0.0 .TP .B struct PyLongLayout See PyLongLayout documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B const PyLongLayout \%<#\:c\:.PyLongLayout> *PyLong_GetNativeLayout(void) See PyLong_GetNativeLayout() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B struct PyLongExport See PyLongExport documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyLong_Export(PyObject *obj, PyLongExport \%<#\:c\:.PyLongExport> *export_long) See PyLong_Export() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B void PyLong_FreeExport(PyLongExport \%<#\:c\:.PyLongExport> *export_long) See PyLong_FreeExport() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B struct PyLongWriter See PyLongWriter documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyLongWriter \%<#\:c\:.PyLongWriter> *PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits) See PyLongWriter_Create() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyLongWriter_Finish(PyLongWriter \%<#\:c\:.PyLongWriter> *writer) See PyLongWriter_Finish() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B void PyLongWriter_Discard(PyLongWriter \%<#\:c\:.PyLongWriter> *writer) See PyLongWriter_Discard() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyLong_IsPositive(PyObject *obj) See PyLong_IsPositive() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_IsNegative(PyObject *obj) See PyLong_IsNegative() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_IsZero(PyObject *obj) See PyLong_IsZero() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_GetSign(PyObject *obj, int *sign) See PyLong_GetSign() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyIter_NextItem(PyObject *sep, PyObject *iterable) See PyIter_NextItem() documentation \%\&. .sp Not available on limited C API 3.9 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyBytes_Join(PyObject *sep, PyObject *iterable) See PyBytes_Join() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len) See Py_HashBuffer() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyUnicode_Equal(PyObject *str1, PyObject *str2) See PyUnicode_Equal() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyUnicodeWriter *PyUnicodeWriter_Create(Py_ssize_t length) See PyUnicodeWriter_Create() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyUnicodeWriter_Finish(PyUnicodeWriter *writer) See PyUnicodeWriter_Finish() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B void PyUnicodeWriter_Discard(PyUnicodeWriter *writer) See PyUnicodeWriter_Discard() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteChar(PyUnicodeWriter *writer, Py_UCS4 ch) See PyUnicodeWriter_WriteChar() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteUCS4(PyUnicodeWriter *writer, const Py_UCS4 *ucs4, Py_ssize_t size) See PyUnicodeWriter_WriteUCS4() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteUTF8(PyUnicodeWriter *writer, const char *str, Py_ssize_t size) See PyUnicodeWriter_WriteUTF8() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteASCII(PyUnicodeWriter *writer, const char *str, Py_ssize_t size) See PyUnicodeWriter_WriteASCII() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteWideChar(PyUnicodeWriter *writer, const wchar_t *str, Py_ssize_t size) See PyUnicodeWriter_WriteWideChar() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteStr(PyUnicodeWriter *writer, PyObject *obj) See PyUnicodeWriter_WriteStr() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteRepr(PyUnicodeWriter *writer, PyObject *obj) See PyUnicodeWriter_WriteRepr() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_WriteSubstring(PyUnicodeWriter *writer, PyObject *str, Py_ssize_t start, Py_ssize_t end) See PyUnicodeWriter_WriteSubstring() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicodeWriter_Format(PyUnicodeWriter *writer, const char *format, \&...) See PyUnicodeWriter_Format() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyLong_AsInt32(PyObject *obj, int32_t *pvalue) See PyLong_AsInt32() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_AsInt64(PyObject *obj, int64_t *pvalue) See PyLong_AsInt64() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_AsUInt32(PyObject *obj, uint32_t *pvalue) See PyLong_AsUInt32() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_AsUInt64(PyObject *obj, uint64_t *pvalue) See PyLong_AsUInt64() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyLong_FromInt32(int32_t value) See PyLong_FromInt32() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyLong_FromInt64(int64_t value) See PyLong_FromInt64() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyLong_FromUInt32(uint32_t value) See PyLong_FromUInt32() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyLong_FromUInt64(uint64_t value) See PyLong_FromUInt64() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B FILE *Py_fopen(PyObject *path, const char *mode) See Py_fopen() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_fclose(FILE *file) See Py_fclose() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyConfig_Get(const char *name) See PyConfig_Get() documentation \%\&. .sp Availability: Python 3.9 and newer. .sp Not available on PyPy and not on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyConfig_GetInt(const char *name, int *value) See PyConfig_GetInt() documentation \%\&. .sp Availability: Python 3.9 and newer. .sp Not available on PyPy and not on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnstable_Object_IsUniquelyReferenced(PyObject *op) See PyUnstable_Object_IsUniquelyReferenced() documentation \%\&. .sp Not available on PyPy. \fBPy_REFCNT()\fP semantics is different on PyPy. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnstable_TryIncRef(PyObject *op) See PyUnstable_TryIncRef() documentation \%\&. .sp Not available on PyPy. \fBPy_REFCNT()\fP semantics is different on PyPy. .UNINDENT .INDENT 0.0 .TP .B void PyUnstable_EnableTryIncRef(PyObject *op) See PyUnstable_EnableTryIncRef() documentation \%\&. .sp Not available on PyPy. \fBPy_REFCNT()\fP semantics is different on PyPy. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyImport_ImportModuleAttr(PyObject *mod_name, PyObject *attr_name) See PyImport_ImportModuleAttr() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyImport_ImportModuleAttrString(const char *mod_name, const char *attr_name) See PyImport_ImportModuleAttrString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial) See Py_PACK_FULL_VERSION() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B uint32_t Py_PACK_VERSION(int major, int minor) See Py_PACK_VERSION() documentation \%\&. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyConfig_Names()\fP .IP \(bu 2 \fBPyConfig_Set()\fP .IP \(bu 2 \fBPyInitConfig_AddModule()\fP .IP \(bu 2 \fBPyInitConfig_Create()\fP .IP \(bu 2 \fBPyInitConfig_Free()\fP .IP \(bu 2 \fBPyInitConfig_FreeStrList()\fP .IP \(bu 2 \fBPyInitConfig_GetError()\fP .IP \(bu 2 \fBPyInitConfig_GetExitCode()\fP .IP \(bu 2 \fBPyInitConfig_GetInt()\fP .IP \(bu 2 \fBPyInitConfig_GetStr()\fP .IP \(bu 2 \fBPyInitConfig_GetStrList()\fP .IP \(bu 2 \fBPyInitConfig_HasOption()\fP .IP \(bu 2 \fBPyInitConfig_SetInt()\fP .IP \(bu 2 \fBPyInitConfig_SetStr()\fP .IP \(bu 2 \fBPyInitConfig_SetStrList()\fP .IP \(bu 2 \fBPyMonitoring_FireBranchLeftEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireBranchRightEvent()\fP .IP \(bu 2 \fBPyType_Freeze()\fP .IP \(bu 2 \fBPyType_GetBaseByToken()\fP .IP \(bu 2 \fBPyUnicodeWriter_DecodeUTF8Stateful()\fP .IP \(bu 2 \fBPyUnstable_IsImmortal()\fP .IP \(bu 2 \fBPyUnstable_Object_EnableDeferredRefcount()\fP .IP \(bu 2 \fBPyUnstable_Object_IsUniqueReferencedTemporary()\fP .IP \(bu 2 \fBPy_InitializeFromInitConfig()\fP .UNINDENT .SS Python 3.13 .INDENT 0.0 .TP .B PyObject *Py_GetConstant(unsigned int constant_id) See Py_GetConstant() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyDict_GetItemRef(PyObject *p, PyObject *key, PyObject **result) See PyDict_GetItemRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyDict_GetItemStringRef(PyObject *p, const char *key, PyObject **result) See PyDict_GetItemStringRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyImport_AddModuleRef(const char *name) See PyImport_AddModuleRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result) See PyObject_GetOptionalAttr() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyObject_GetOptionalAttrString(PyObject *obj, const char *attr_name, PyObject **result) See PyObject_GetOptionalAttrString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyObject_HasAttrWithError(PyObject *obj, PyObject *attr_name) See PyObject_HasAttrWithError() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyObject_HasAttrStringWithError(PyObject *obj, const char *attr_name) See PyObject_HasAttrStringWithError() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyMapping_GetOptionalItem(PyObject *obj, PyObject *key, PyObject **result) See PyMapping_GetOptionalItem() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyMapping_GetOptionalItemString(PyObject *obj, const char *key, PyObject **result) See PyMapping_GetOptionalItemString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyMapping_HasKeyWithError(PyObject *obj, PyObject *key) See PyMapping_HasKeyWithError() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyMapping_HasKeyStringWithError(PyObject *obj, const char *key) See PyMapping_HasKeyStringWithError() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyModule_Add(PyObject *module, const char *name, PyObject *value) See PyModule_Add() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyWeakref_GetRef(PyObject *ref, PyObject **pobj) See PyWeakref_GetRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_IsFinalizing() Return non\-zero if the Python interpreter is shutting down, return 0 otherwise. .sp Availability: Python 3.3 and newer, PyPy 7.3 and newer, limited C API 3.13. .sp See Py_IsFinalizing() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyDict_ContainsString(PyObject *p, const char *key) See PyDict_ContainsString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyLong_AsInt(PyObject *obj) See PyLong_AsInt() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg) See PyObject_VisitManagedDict() documentation \%\&. .sp Availability: Python 3.11 and newer. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B void PyObject_ClearManagedDict(PyObject *obj) See PyObject_ClearManagedDict() documentation \%\&. .sp Availability: Python 3.11 and newer. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyThreadState *PyThreadState_GetUnchecked(void) See PyThreadState_GetUnchecked() documentation \%\&. .sp Available on Python 3.5.2 and newer. Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyUnicode_EqualToUTF8(PyObject *unicode, const char *str) See PyUnicode_EqualToUTF8() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyUnicode_EqualToUTF8AndSize(PyObject *unicode, const char *str, Py_ssize_t size) See PyUnicode_EqualToUTF8AndSize() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyList_Extend(PyObject *list, PyObject *iterable) See PyList_Extend() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyList_Clear(PyObject *list) See PyList_Clear() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyDict_Pop(PyObject *dict, PyObject *key, PyObject **result) See PyDict_Pop() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyDict_PopString(PyObject *dict, const char *key, PyObject **result) See PyDict_PopString() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B Py_hash_t Py_HashPointer(const void *ptr) See Py_HashPointer() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B Py_hash_t PyObject_GenericHash(PyObject *obj) See PyObject_GenericHash() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B type PyTime_t A timestamp or duration in nanoseconds, represented as a signed 64\-bit integer. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyTime_t \%<#\:c\:.PyTime_t> PyTime_MIN Minimum value of \fBPyTime_t\fP\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyTime_t \%<#\:c\:.PyTime_t> PyTime_MAX Maximum value of \fBPyTime_t\fP\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B double PyTime_AsSecondsDouble(PyTime_t \%<#\:c\:.PyTime_t> t) See PyTime_AsSecondsDouble() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyTime_Monotonic(PyTime_t \%<#\:c\:.PyTime_t> *result) See PyTime_Monotonic() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyTime_Time(PyTime_t \%<#\:c\:.PyTime_t> *result) See PyTime_Time() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyTime_PerfCounter(PyTime_t \%<#\:c\:.PyTime_t> *result) See PyTime_PerfCounter() documentation \%\&. .sp Not available on the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyList_GetItemRef(PyObject *op, Py_ssize_t index) See PyList_GetItemRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyDict_SetDefaultRef(PyObject *d, PyObject *key, PyObject *default_value, PyObject **result) See PyDict_SetDefaultRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyType_GetModuleName(PyTypeObject *type) See PyType_GetModuleName() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyType_GetFullyQualifiedName(PyTypeObject *type) See PyType_GetFullyQualifiedName() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyEval_GetFrameLocals(void) See PyEval_GetFrameLocals() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyEval_GetFrameGlobals(void) See PyEval_GetFrameGlobals() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyEval_GetFrameBuiltins(void) See PyEval_GetFrameBuiltins() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B Py_BEGIN_CRITICAL_SECTION(op) .UNINDENT .INDENT 0.0 .TP .B Py_END_CRITICAL_SECTION() .UNINDENT .INDENT 0.0 .TP .B Py_BEGIN_CRITICAL_SECTION2(a, b) .UNINDENT .INDENT 0.0 .TP .B Py_END_CRITICAL_SECTION2() See Py_BEGIN_CRITICAL_SECTION() documentation \%\&. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyErr_FormatUnraisable()\fP\&. .IP \(bu 2 \fBPyLong_AsNativeBytes()\fP .IP \(bu 2 \fBPyLong_FromNativeBytes()\fP .IP \(bu 2 \fBPyLong_FromUnsignedNativeBytes()\fP .IP \(bu 2 \fBPyMonitoring_EnterScope()\fP .IP \(bu 2 \fBPyMonitoring_ExitScope()\fP .IP \(bu 2 \fBPyMonitoring_FireCRaiseEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireCReturnEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireCallEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireExceptionHandledEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireJumpEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireLineEvent()\fP .IP \(bu 2 \fBPyMonitoring_FirePyResumeEvent()\fP .IP \(bu 2 \fBPyMonitoring_FirePyReturnEvent()\fP .IP \(bu 2 \fBPyMonitoring_FirePyStartEvent()\fP .IP \(bu 2 \fBPyMonitoring_FirePyThrowEvent()\fP .IP \(bu 2 \fBPyMonitoring_FirePyUnwindEvent()\fP .IP \(bu 2 \fBPyMonitoring_FirePyYieldEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireRaiseEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireReraiseEvent()\fP .IP \(bu 2 \fBPyMonitoring_FireStopIterationEvent()\fP .IP \(bu 2 \fBPyMutex_Lock()\fP .IP \(bu 2 \fBPyMutex_Unlock()\fP .IP \(bu 2 \fBPyRefTracer_GetTracer()\fP .IP \(bu 2 \fBPyRefTracer_SetTracer()\fP .IP \(bu 2 \fBPySys_Audit()\fP .IP \(bu 2 \fBPySys_AuditTuple()\fP .IP \(bu 2 \fBPyTime_MonotonicRaw()\fP .IP \(bu 2 \fBPyTime_PerfCounterRaw()\fP .IP \(bu 2 \fBPyTime_TimeRaw()\fP .UNINDENT .SS Python 3.12 .INDENT 0.0 .TP .B PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name) See PyFrame_GetVar() documentation \%\&. .sp Not available on PyPy nor with the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name) See PyFrame_GetVarString() documentation \%\&. .sp Not available on PyPy nor with the limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *Py_GetConstantBorrowed(unsigned int constant_id) See Py_GetConstantBorrowed() documentation \%\&. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyCode_AddWatcher()\fP .IP \(bu 2 \fBPyCode_ClearWatcher()\fP .IP \(bu 2 \fBPyDict_AddWatcher()\fP .IP \(bu 2 \fBPyDict_Watch()\fP .IP \(bu 2 \fBPyErr_DisplayException()\fP .IP \(bu 2 \fBPyErr_GetRaisedException()\fP .IP \(bu 2 \fBPyErr_SetRaisedException()\fP .IP \(bu 2 \fBPyEval_SetProfileAllThreads()\fP .IP \(bu 2 \fBPyEval_SetTraceAllThreads()\fP .IP \(bu 2 \fBPyException_GetArgs()\fP .IP \(bu 2 \fBPyException_SetArgs()\fP .IP \(bu 2 \fBPyFunction_SetVectorcall()\fP .IP \(bu 2 \fBPyObject_GetTypeData()\fP .IP \(bu 2 \fBPyType_AddWatcher()\fP .IP \(bu 2 \fBPyType_FromMetaclass()\fP (implementation too big to be backported) .IP \(bu 2 \fBPyType_Watch()\fP .IP \(bu 2 \fBPyUnstable_Code_GetExtra()\fP .IP \(bu 2 \fBPyUnstable_Code_New()\fP .IP \(bu 2 \fBPyUnstable_Code_NewWithPosOnlyArgs()\fP .IP \(bu 2 \fBPyUnstable_Code_SetExtra()\fP .IP \(bu 2 \fBPyUnstable_Eval_RequestCodeExtraIndex()\fP .IP \(bu 2 \fBPyVectorcall_Call()\fP .IP \(bu 2 \fBPy_NewInterpreterFromConfig()\fP .UNINDENT .SS Python 3.11 .INDENT 0.0 .TP .B PyObject *PyCode_GetCellvars(PyCodeObject *code) See PyCode_GetCellvars() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyCode_GetCode(PyCodeObject *code) See PyCode_GetCode() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyCode_GetFreevars(PyCodeObject *code) See PyCode_GetFreevars() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyCode_GetVarnames(PyCodeObject *code) See PyCode_GetVarnames() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyFrame_GetBuiltins(PyFrameObject *frame) See PyFrame_GetBuiltins() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyFrame_GetGlobals(PyFrameObject *frame) See PyFrame_GetGlobals() documentation \%\&. .sp Not available on PyPy. .UNINDENT .INDENT 0.0 .TP .B int PyFrame_GetLasti(PyFrameObject *frame) See PyFrame_GetLasti() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyFrame_GetLocals(PyFrameObject *frame) See PyFrame_GetLocals() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B void PyThreadState_EnterTracing(PyThreadState *tstate) See PyThreadState_EnterTracing() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B void PyThreadState_LeaveTracing(PyThreadState *tstate) See PyThreadState_LeaveTracing() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.10 and older. .UNINDENT .INDENT 0.0 .TP .B int PyFloat_Pack2(double x, unsigned char *p, int le) Pack a C double as the IEEE 754 binary16 half\-precision format. .sp Availability: Python 3.6 and newer. .sp Not available on PyPy nor on limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyFloat_Pack4(double x, unsigned char *p, int le) Pack a C double as the IEEE 754 binary32 single precision format. .sp Not available on PyPy nor on limited C API. .UNINDENT .INDENT 0.0 .TP .B int PyFloat_Pack8(double x, unsigned char *p, int le) Pack a C double as the IEEE 754 binary64 double precision format. .sp Not available on PyPy nor on limited C API. .UNINDENT .INDENT 0.0 .TP .B double PyFloat_Unpack2(const unsigned char *p, int le) Unpack the IEEE 754 binary16 half\-precision format as a C double. .sp Availability: Python 3.6 and newer. .sp Not available on PyPy nor on limited C API. .UNINDENT .INDENT 0.0 .TP .B double PyFloat_Unpack4(const unsigned char *p, int le) Unpack the IEEE 754 binary32 single precision format as a C double. .sp Not available on PyPy nor on limited C API. .UNINDENT .INDENT 0.0 .TP .B double PyFloat_Unpack8(const unsigned char *p, int le) Unpack the IEEE 754 binary64 double precision format as a C double. .sp Not available on PyPy nor on limited C API. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyType_GetName(PyTypeObject *type) See PyType_GetName() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyType_GetQualName(PyTypeObject *type) See PyType_GetQualName() documentation \%\&. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyErr_GetHandledException()\fP .IP \(bu 2 \fBPyErr_SetHandledException()\fP .IP \(bu 2 \fBPyFrame_GetGenerator()\fP .IP \(bu 2 \fBPyType_GetModuleByDef()\fP .IP \(bu 2 \fBPy_Version\fP constant .UNINDENT .SS Python 3.10 .INDENT 0.0 .TP .B PyObject *Py_NewRef(PyObject *obj) See Py_NewRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *Py_XNewRef(PyObject *obj) See Py_XNewRef() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_Is(PyObject *x, PyObject *y) See Py_Is() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_IsNone(PyObject *x) See Py_IsNone() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_IsTrue(PyObject *x) See Py_IsTrue() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_IsFalse(PyObject *x) See Py_IsFalse() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int PyModule_AddObjectRef(PyObject *module, const char *name, PyObject *value) See PyModule_AddObjectRef() documentation \%\&. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyCodec_Unregister()\fP .IP \(bu 2 \fBPyDateTime_DATE_GET_TZINFO()\fP .IP \(bu 2 \fBPyDateTime_TIME_GET_TZINFO()\fP .IP \(bu 2 \fBPyErr_SetInterruptEx()\fP .IP \(bu 2 \fBPyGC_Disable()\fP .IP \(bu 2 \fBPyGC_Enable()\fP .IP \(bu 2 \fBPyGC_IsEnabled()\fP .IP \(bu 2 \fBPyIter_Send()\fP .IP \(bu 2 \fBPySet_CheckExact()\fP .IP \(bu 2 \fBPy_TPFLAGS_DISALLOW_INSTANTIATION\fP constant .IP \(bu 2 \fBPy_TPFLAGS_IMMUTABLETYPE\fP constant .UNINDENT .SS Python 3.9 .SS PyObject .INDENT 0.0 .TP .B void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) See Py_SET_REFCNT() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B void Py_SET_TYPE(PyObject *ob, PyTypeObject *type) See Py_SET_TYPE() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B void Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) See Py_SET_SIZE() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B int Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) See Py_IS_TYPE() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyObject_CallNoArgs(PyObject *func) See PyObject_CallNoArgs() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyObject_CallOneArg(PyObject *func, PyObject *arg) See PyObject_CallOneArg() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PyObject *PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames) See PyObject_Vectorcall() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B Py_ssize_t PyVectorcall_NARGS(size_t nargsf) See PyVectorcall_NARGS() documentation \%\&. .UNINDENT .INDENT 0.0 .TP .B PY_VECTORCALL_ARGUMENTS_OFFSET See PY_VECTORCALL_ARGUMENTS_OFFSET documentation \%\&. .UNINDENT .SS PyFrameObject .INDENT 0.0 .TP .B PyCodeObject *PyFrame_GetCode(PyFrameObject *frame) See PyFrame_GetCode() documentation \%\&. .sp Not available on limited C API 3.8 and older. .UNINDENT .INDENT 0.0 .TP .B PyFrameObject *PyFrame_GetBack(PyFrameObject *frame) See PyFrame_GetBack() documentation \%\&. .sp Not available on PyPy nor with the limited C API. .UNINDENT .SS PyThreadState .INDENT 0.0 .TP .B PyFrameObject *PyThreadState_GetFrame(PyThreadState *tstate) See PyThreadState_GetFrame() documentation \%\&. .sp Availability: PyPy 3.11 and newer, and limited C API 3.9. .UNINDENT .INDENT 0.0 .TP .B PyInterpreterState *PyThreadState_GetInterpreter(PyThreadState *tstate) See PyThreadState_GetInterpreter() documentation \%\&. .sp Not available on limited C API 3.8 and older. .UNINDENT .INDENT 0.0 .TP .B uint64_t PyThreadState_GetID(PyThreadState *tstate) See PyThreadState_GetID() documentation \%\&. .sp Availability: Python 3.7. .sp Not available on PyPy nor on limited C API 3.8 and older. .UNINDENT .SS PyInterpreterState .INDENT 0.0 .TP .B PyInterpreterState *PyInterpreterState_Get(void) See PyInterpreterState_Get() documentation \%\&. .sp Not available on limited C API 3.8 and older on Unix. .sp Not available in stable ABI 3.9 and older on Windows. .UNINDENT .SS GC protocol .INDENT 0.0 .TP .B int PyObject_GC_IsTracked(PyObject *obj) See PyObject_GC_IsTracked() documentation \%\&. .sp Not available on PyPy nor on limited C API 3.9 and older. .UNINDENT .INDENT 0.0 .TP .B int PyObject_GC_IsFinalized(PyObject *obj) See PyObject_GC_IsFinalized() documentation \%\&. .sp Availability: Python 3.4. Not available on PyPy nor on limited C API 3.9 and older. .UNINDENT .SS Module helper .INDENT 0.0 .TP .B int PyModule_AddType(PyObject *module, PyTypeObject *type) See PyModule_AddType() documentation \%\&. .UNINDENT .SS Not supported .INDENT 0.0 .IP \(bu 2 \fBPyObject_VectorcallMethod()\fP .IP \(bu 2 \fBPyType_FromModuleAndSpec()\fP .IP \(bu 2 \fBPyType_GetModule()\fP .IP \(bu 2 \fBPyType_GetModuleState()\fP .IP \(bu 2 \fBPyVectorcall_CallMethod()\fP .UNINDENT .SS Python 3.8 .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyCode_NewWithPosOnlyArgs()\fP\&. .UNINDENT .SS Python 3.7 .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyContextToken_CheckExact()\fP .IP \(bu 2 \fBPyContextToken_CheckExact()\fP .IP \(bu 2 \fBPyContextVar_CheckExact()\fP .IP \(bu 2 \fBPyContextVar_Get()\fP .IP \(bu 2 \fBPyContextVar_New()\fP .IP \(bu 2 \fBPyContextVar_Reset()\fP .IP \(bu 2 \fBPyContextVar_Set()\fP .IP \(bu 2 \fBPyContext_AddWatcher()\fP .IP \(bu 2 \fBPyContext_CheckExact()\fP .IP \(bu 2 \fBPyContext_ClearWatcher()\fP .IP \(bu 2 \fBPyContext_Copy()\fP .IP \(bu 2 \fBPyContext_CopyCurrent()\fP .IP \(bu 2 \fBPyContext_Enter()\fP .IP \(bu 2 \fBPyContext_Exit()\fP .IP \(bu 2 \fBPyContext_New()\fP .IP \(bu 2 \fBPyImport_GetModule()\fP .IP \(bu 2 \fBPyInterpreterState_GetID()\fP .IP \(bu 2 \fBPyOS_AfterFork_Child()\fP .IP \(bu 2 \fBPyOS_AfterFork_Parent()\fP .IP \(bu 2 \fBPyOS_BeforeFork()\fP .IP \(bu 2 \fBPySlice_AdjustIndices()\fP .IP \(bu 2 \fBPySlice_Unpack()\fP .IP \(bu 2 \fBPyThread_tss_alloc()\fP .IP \(bu 2 \fBPyThread_tss_create()\fP .IP \(bu 2 \fBPyThread_tss_delete()\fP .IP \(bu 2 \fBPyThread_tss_free()\fP .IP \(bu 2 \fBPyThread_tss_get()\fP .IP \(bu 2 \fBPyThread_tss_is_created()\fP .IP \(bu 2 \fBPyThread_tss_set()\fP .IP \(bu 2 \fBPyTimeZone_FromOffset()\fP .IP \(bu 2 \fBPyTimeZone_FromOffsetAndName()\fP .IP \(bu 2 \fBPyTraceMalloc_Track()\fP .IP \(bu 2 \fBPyTraceMalloc_Untrack()\fP .IP \(bu 2 \fBPy_RETURN_RICHCOMPARE()\fP .IP \(bu 2 \fBPy_UNREACHABLE\fP macro .UNINDENT .SS Python 3.6 .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyErr_ResourceWarning()\fP\&. .IP \(bu 2 \fBPyErr_SetImportErrorSubclass()\fP\&. .IP \(bu 2 \fBPyOS_FSPath()\fP\&. .IP \(bu 2 \fBPy_FinalizeEx()\fP\&. .UNINDENT .SS Python 3.5 .INDENT 0.0 .TP .B Py_SETREF(op, op2) .UNINDENT .INDENT 0.0 .TP .B Py_XSETREF(op, op2) .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyCodec_NameReplaceErrors()\fP .IP \(bu 2 \fBPyErr_FormatV()\fP .IP \(bu 2 \fBPyExc_RecursionError\fP .IP \(bu 2 \fBPyMem_Calloc()\fP .IP \(bu 2 \fBPyMem_RawCalloc()\fP .IP \(bu 2 \fBPyModule_ExecDef()\fP .IP \(bu 2 \fBPyModule_FromDefAndSpec()\fP .IP \(bu 2 \fBPyModule_FromDefAndSpec2()\fP .IP \(bu 2 \fBPyNumber_InPlaceMatrixMultiply()\fP .IP \(bu 2 \fBPyNumber_MatrixMultiply()\fP .IP \(bu 2 \fBPyObject_Calloc()\fP .IP \(bu 2 \fBPy_DecodeLocale()\fP .IP \(bu 2 \fBPy_EncodeLocale()\fP .UNINDENT .SS Python 3.4 .INDENT 0.0 .TP .B Py_UNUSED(name) See Py_UNUSED() documentation \%\&. .UNINDENT .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyObject_LengthHint()\fP .IP \(bu 2 \fBPyStructSequence_InitType2()\fP .IP \(bu 2 \fBPyType_GetSlot()\fP .IP \(bu 2 \fBPy_SetStandardStreamEncoding()\fP .UNINDENT .SS Python 3.3 .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyMemoryView_FromMemory()\fP .IP \(bu 2 \fBPyUnicode_AsUCS4()\fP .IP \(bu 2 \fBPyUnicode_AsUCS4Copy()\fP .IP \(bu 2 \fBPyUnicode_CopyCharacters()\fP .IP \(bu 2 \fBPyUnicode_FindChar()\fP .IP \(bu 2 \fBPyUnicode_FromKindAndData()\fP .IP \(bu 2 \fBPyUnicode_GET_LENGTH()\fP .IP \(bu 2 \fBPyUnicode_GetLength()\fP .IP \(bu 2 \fBPyUnicode_New()\fP .IP \(bu 2 \fBPyUnicode_ReadChar()\fP .IP \(bu 2 \fBPyUnicode_Substring()\fP .IP \(bu 2 \fBPyUnicode_WriteChar()\fP .UNINDENT .SS Python 3.2 .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPy_VA_COPY\fP\&. .IP \(bu 2 \fBPySys_SetArgvEx()\fP\&. .IP \(bu 2 \fBPyLong_AsLongLongAndOverflow()\fP\&. .IP \(bu 2 \fBPyErr_NewExceptionWithDoc()\fP\&. .UNINDENT .SS Python 3.1 .sp Not supported: .INDENT 0.0 .IP \(bu 2 \fBPyCapsule_CheckExact()\fP .IP \(bu 2 \fBPyCapsule_GetContext()\fP .IP \(bu 2 \fBPyCapsule_GetDestructor()\fP .IP \(bu 2 \fBPyCapsule_GetName()\fP .IP \(bu 2 \fBPyCapsule_GetPointer()\fP .IP \(bu 2 \fBPyCapsule_Import()\fP .IP \(bu 2 \fBPyCapsule_IsValid()\fP .IP \(bu 2 \fBPyCapsule_New()\fP .IP \(bu 2 \fBPyCapsule_SetContext()\fP .IP \(bu 2 \fBPyCapsule_SetDestructor()\fP .IP \(bu 2 \fBPyCapsule_SetName()\fP .IP \(bu 2 \fBPyCapsule_SetPointer()\fP .IP \(bu 2 \fBPyOS_string_to_double()\fP .UNINDENT .SS Python 3.0 .sp There are too many changes compared to Python 2.7, but it\(aqs no longer useful to document them. .SH PYTHONCAPI-COMPAT USERS .SS Examples of projects using pythoncapi_compat.h .INDENT 0.0 .IP \(bu 2 bitarray \%: \fBbitarray/_bitarray.c\fP uses \fBPy_SET_SIZE()\fP (pythoncapi_compat.h copy \%) .IP \(bu 2 datatable \% (commit \%) .IP \(bu 2 guppy3 \% (commit \%) .IP \(bu 2 immutables \%: \fBimmutables/_map.c\fP uses \fBPy_SET_SIZE()\fP (pythoncapi_compat.h copy \%) .IP \(bu 2 Mercurial (hg) \% uses \fBPy_SET_TYPE()\fP (commit \%, pythoncapi_compat.h copy \%) .IP \(bu 2 mypy \% (mypyc, commit \%) .IP \(bu 2 numpy \%: pythoncapi\-compat Git submodule \% .IP \(bu 2 pybluez \% (commit \%) .IP \(bu 2 python\-snappy \% (commit \%) .IP \(bu 2 python\-zstandard \% uses \fBPy_SET_TYPE()\fP and \fBPy_SET_SIZE()\fP (commit \%): Mercurial extension. .IP \(bu 2 python\-zstd \% (commit \%) .IP \(bu 2 hollerith \% \fBsrc/writer.c\fP uses \fBPyObject_CallOneArg() and other Python 3.9 apis\fP (pythoncapi_compat.h copy \%) .IP \(bu 2 PyTorch \% (pythoncapi_compat.h copy \%) .IP \(bu 2 PyGObject \% (commit \%, pythoncapi\-compat Meson subproject \%) .IP \(bu 2 Pillow \% (src/thirdparty/pythoncapi_compat.h \%) .IP \(bu 2 watchdog \% (src/pythoncapi_compat.h \%) .UNINDENT .SS Projects not using pythoncapi_compat.h .sp Projects not using \fBpythoncapi_compat.h\fP: .INDENT 0.0 .IP \(bu 2 Cython doesn\(aqt use pythoncapi_compat.h: see Cython issue #3934 \%\&. For example, ModuleSetupCode.c \% provides functions like \fB__Pyx_SET_REFCNT()\fP\&. .UNINDENT .sp Project with a strict contributor agreement: .INDENT 0.0 .IP \(bu 2 zodbpickle \% .UNINDENT .SH RUN TESTS .sp To run pythoncapi\-compat tests, type: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 runtests.py .EE .UNINDENT .UNINDENT .sp To only test the current Python version, use the \fB\-c\fP or the \fB\-\-current\fP option: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 runtests.py \-\-current .EE .UNINDENT .UNINDENT .sp Verbose mode (\fB\-v\fP, \fB\-\-verbose\fP): .INDENT 0.0 .INDENT 3.5 .sp .EX python3 runtests.py \-\-verbose .EE .UNINDENT .UNINDENT .sp See tests in the \fBtests/\fP subdirectory. .SH CHANGELOG .INDENT 0.0 .IP \(bu 2 2026\-10\-12: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyEval_GetFrameBuiltins()\fP .IP \(bu 2 \fBPyEval_GetFrameGlobals()\fP .IP \(bu 2 \fBPyEval_GetFrameLocals()\fP .UNINDENT .IP \(bu 2 2026\-10\-12: Delete 5 \fBBorrow\fP functions which were specific to pythoncapi\-compat and only used by the removed script \fBupgrade_pythoncapi.py\fP: \fB_Py_StealRef()\fP \fB_Py_XStealRef()\fP \fB_PyThreadState_GetFrameBorrow()\fP \fB_PyFrame_GetCodeBorrow()\fP and \fB_PyFrame_GetBackBorrow()\fP\&. .IP \(bu 2 2026\-10\-11: Remove the \fBupgrade_pythoncapi.py\fP script. .IP \(bu 2 2026\-10\-10: Add \fBPyObject_GenericHash()\fP and \fBPyUnicodeWriter_WriteUCS4()\fP functions. runtests.py now runs tests in parallel. .IP \(bu 2 2026\-10\-08: Add support for the limited C API 3.2. .IP \(bu 2 2026\-10\-08: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyImport_ImportModuleAttr()\fP .IP \(bu 2 \fBPyImport_ImportModuleAttrString()\fP .IP \(bu 2 \fBPyType_GetFullyQualifiedName()\fP .IP \(bu 2 \fBPyType_GetModuleName()\fP .IP \(bu 2 \fBPyType_GetName()\fP .IP \(bu 2 \fBPyType_GetQualName()\fP .UNINDENT .IP \(bu 2 2026\-10\-04: Add support for the limited C API (\fBPy_LIMITED_API\fP). .IP \(bu 2 2026\-09\-23: \fBPyUnstable_Object_IsUniquelyReferenced()\fP, \fBPyUnstable_TryIncRef()\fP and \fBPyUnstable_EnableTryIncRef()\fP are no longer available on PyPy. \fBPy_REFCNT()\fP semantics is different on PyPy. .IP \(bu 2 2026\-09\-22: Add support for PyPy3.12 v8.0.0, which provides \fBPyFrame_GetCode()\fP and \fBPyInterpreterState_Get()\fP\&. .IP \(bu 2 2026\-09\-07: Remove code to support Python 2.7, Python 3.5 and PyPy for Python 2.7 (\(dqpypy2\(dq). Python 2.7 was no longer supported since August 2023. Python 3.5 was no longer supported since October 2024. .IP \(bu 2 2026\-02\-12: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyUnstable_SetImmortal()\fP .UNINDENT .IP \(bu 2 2025\-10\-14: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyTuple_FromArray()\fP .IP \(bu 2 \fBPyUnstable_Unicode_GET_CACHED_HASH()\fP .UNINDENT .IP \(bu 2 2025\-09\-18: Add PEP 782 functions: .INDENT 2.0 .IP \(bu 2 \fBPyBytesWriter_Create()\fP .IP \(bu 2 \fBPyBytesWriter_Discard()\fP .IP \(bu 2 \fBPyBytesWriter_Finish()\fP .IP \(bu 2 \fBPyBytesWriter_FinishWithPointer()\fP .IP \(bu 2 \fBPyBytesWriter_FinishWithSize()\fP .IP \(bu 2 \fBPyBytesWriter_Format()\fP .IP \(bu 2 \fBPyBytesWriter_GetData()\fP .IP \(bu 2 \fBPyBytesWriter_GetSize()\fP .IP \(bu 2 \fBPyBytesWriter_Grow()\fP .IP \(bu 2 \fBPyBytesWriter_GrowAndUpdatePointer()\fP .IP \(bu 2 \fBPyBytesWriter_Resize()\fP .IP \(bu 2 \fBPyBytesWriter_WriteBytes()\fP .UNINDENT .IP \(bu 2 2025\-09\-01: Add \fBPyUnstable_Object_IsUniquelyReferenced()\fP function. .IP \(bu 2 2025\-06\-09: Add \fBPyUnicodeWriter_WriteASCII()\fP function. .IP \(bu 2 2025\-06\-03: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPySys_GetAttr()\fP .IP \(bu 2 \fBPySys_GetAttrString()\fP .IP \(bu 2 \fBPySys_GetOptionalAttr()\fP .IP \(bu 2 \fBPySys_GetOptionalAttrString()\fP .UNINDENT .IP \(bu 2 2025\-01\-19: Add \fBPyConfig_Get()\fP functions. .IP \(bu 2 2025\-01\-06: Add \fBPy_fopen()\fP and \fBPy_fclose()\fP functions. .IP \(bu 2 2024\-12\-16: Add \fBstructmember.h\fP constants: .INDENT 2.0 .IP \(bu 2 \fBPy_T_BOOL\fP .IP \(bu 2 \fBPy_T_BYTE\fP .IP \(bu 2 \fBPy_T_CHAR\fP .IP \(bu 2 \fBPy_T_DOUBLE\fP .IP \(bu 2 \fBPy_T_FLOAT\fP .IP \(bu 2 \fBPy_T_INT\fP .IP \(bu 2 \fBPy_T_LONGLONG\fP .IP \(bu 2 \fBPy_T_LONG\fP .IP \(bu 2 \fBPy_T_OBJECT_EX\fP .IP \(bu 2 \fBPy_T_PYSSIZET\fP .IP \(bu 2 \fBPy_T_SHORT\fP .IP \(bu 2 \fBPy_T_STRING_INPLACE\fP .IP \(bu 2 \fBPy_T_STRING\fP .IP \(bu 2 \fBPy_T_UBYTE\fP .IP \(bu 2 \fBPy_T_UINT\fP .IP \(bu 2 \fBPy_T_ULONGLONG\fP .IP \(bu 2 \fBPy_T_ULONG\fP .IP \(bu 2 \fBPy_T_USHORT\fP .IP \(bu 2 \fB_Py_T_NONE\fP .IP \(bu 2 \fB_Py_T_OBJECT\fP .IP \(bu 2 \fBPy_AUDIT_READ\fP .IP \(bu 2 \fBPy_READONLY\fP .IP \(bu 2 \fB_Py_WRITE_RESTRICTED\fP .UNINDENT .IP \(bu 2 2024\-12\-13: Add functions and structs: .INDENT 2.0 .IP \(bu 2 \fBPyLongLayout\fP .IP \(bu 2 \fBPyLong_GetNativeLayout()\fP .IP \(bu 2 \fBPyLongExport\fP .IP \(bu 2 \fBPyLong_Export()\fP .IP \(bu 2 \fBPyLong_FreeExport()\fP .IP \(bu 2 \fBPyLongWriter\fP .IP \(bu 2 \fBPyLongWriter_Create()\fP .IP \(bu 2 \fBPyLongWriter_Finish()\fP .IP \(bu 2 \fBPyLongWriter_Discard()\fP .UNINDENT .IP \(bu 2 2024\-11\-12: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyLong_IsPositive()\fP .IP \(bu 2 \fBPyLong_IsNegative()\fP .IP \(bu 2 \fBPyLong_IsZero()\fP .UNINDENT .IP \(bu 2 2024\-10\-09: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyBytes_Join()\fP .IP \(bu 2 \fBPyIter_NextItem()\fP .IP \(bu 2 \fBPyLong_AsInt32()\fP .IP \(bu 2 \fBPyLong_AsInt64()\fP .IP \(bu 2 \fBPyLong_AsUInt32()\fP .IP \(bu 2 \fBPyLong_AsUInt64()\fP .IP \(bu 2 \fBPyLong_FromInt32()\fP .IP \(bu 2 \fBPyLong_FromInt64()\fP .IP \(bu 2 \fBPyLong_FromUInt32()\fP .IP \(bu 2 \fBPyLong_FromUInt64()\fP .IP \(bu 2 \fBPyUnicode_Equal()\fP .IP \(bu 2 \fBPy_HashBuffer()\fP .UNINDENT .IP \(bu 2 2024\-07\-18: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyUnicodeWriter_Create()\fP .IP \(bu 2 \fBPyUnicodeWriter_Discard()\fP .IP \(bu 2 \fBPyUnicodeWriter_Finish()\fP .IP \(bu 2 \fBPyUnicodeWriter_WriteChar()\fP .IP \(bu 2 \fBPyUnicodeWriter_WriteUTF8()\fP .IP \(bu 2 \fBPyUnicodeWriter_WriteStr()\fP .IP \(bu 2 \fBPyUnicodeWriter_WriteRepr()\fP .IP \(bu 2 \fBPyUnicodeWriter_WriteSubstring()\fP .IP \(bu 2 \fBPyUnicodeWriter_WriteWideChar()\fP .IP \(bu 2 \fBPyUnicodeWriter_Format()\fP .UNINDENT .IP \(bu 2 2024\-06\-03: Add \fBPyLong_GetSign()\fP\&. .IP \(bu 2 2024\-04\-23: Drop Python 3.5 support. It cannot be tested anymore (pip fails). .IP \(bu 2 2024\-04\-02: Add \fBPyDict_SetDefaultRef()\fP function. .IP \(bu 2 2024\-03\-29: Add \fBPyList_GetItemRef()\fP function. .IP \(bu 2 2024\-03\-21: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPy_GetConstant()\fP .IP \(bu 2 \fBPy_GetConstantBorrowed()\fP .UNINDENT .IP \(bu 2 2024\-03\-09: Add hash constants: .INDENT 2.0 .IP \(bu 2 \fBPyHASH_BITS\fP .IP \(bu 2 \fBPyHASH_IMAG\fP .IP \(bu 2 \fBPyHASH_INF\fP .IP \(bu 2 \fBPyHASH_MODULUS\fP .UNINDENT .IP \(bu 2 2024\-02\-20: Add PyTime API: .INDENT 2.0 .IP \(bu 2 \fBPyTime_t\fP type .IP \(bu 2 \fBPyTime_MIN\fP and \fBPyTime_MAX\fP constants .IP \(bu 2 \fBPyTime_AsSecondsDouble()\fP .IP \(bu 2 \fBPyTime_Monotonic()\fP .IP \(bu 2 \fBPyTime_PerfCounter()\fP .IP \(bu 2 \fBPyTime_Time()\fP .UNINDENT .IP \(bu 2 2023\-12\-15: Add function \fBPy_HashPointer()\fP\&. .IP \(bu 2 2023\-11\-14: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyDict_Pop()\fP .IP \(bu 2 \fBPyDict_PopString()\fP .UNINDENT .IP \(bu 2 2023\-11\-13: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyList_Extend()\fP .IP \(bu 2 \fBPyList_Clear()\fP .UNINDENT .IP \(bu 2 2023\-10\-04: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyUnicode_EqualToUTF8()\fP .IP \(bu 2 \fBPyUnicode_EqualToUTF8AndSize()\fP .UNINDENT .IP \(bu 2 2023\-10\-03: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyObject_VisitManagedDict()\fP .IP \(bu 2 \fBPyObject_ClearManagedDict()\fP .IP \(bu 2 \fBPyThreadState_GetUnchecked()\fP .UNINDENT .IP \(bu 2 2023\-09\-29: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyMapping_HasKeyWithError()\fP .IP \(bu 2 \fBPyMapping_HasKeyStringWithError()\fP .IP \(bu 2 \fBPyObject_HasAttrWithError()\fP .IP \(bu 2 \fBPyObject_HasAttrStringWithError()\fP .UNINDENT .IP \(bu 2 2023\-08\-25: Add \fBPyDict_ContainsString()\fP and \fBPyLong_AsInt()\fP functions. .IP \(bu 2 2023\-08\-21: Remove support for Python 2.7, Python 3.4 and older. .IP \(bu 2 2023\-08\-16: Add \fBPy_IsFinalizing()\fP function. .IP \(bu 2 2023\-07\-21: Add \fBPyDict_GetItemRef()\fP function. .IP \(bu 2 2023\-07\-18: Add \fBPyModule_Add()\fP function. .IP \(bu 2 2023\-07\-12: Add functions: .INDENT 2.0 .IP \(bu 2 \fBPyObject_GetOptionalAttr()\fP .IP \(bu 2 \fBPyObject_GetOptionalAttrString()\fP .IP \(bu 2 \fBPyMapping_GetOptionalItem()\fP .IP \(bu 2 \fBPyMapping_GetOptionalItemString()\fP .UNINDENT .IP \(bu 2 2023\-07\-05: Add \fBPyObject_Vectorcall()\fP function. .IP \(bu 2 2023\-06\-21: Add \fBPyWeakref_GetRef()\fP function. .IP \(bu 2 2023\-06\-20: Add \fBPyImport_AddModuleRef()\fP function. .IP \(bu 2 2022\-11\-15: Add experimental operations to the \fBupgrade_pythoncapi.py\fP script: \fBPy_NewRef\fP, \fBPy_CLEAR\fP and \fBPy_SETREF\fP\&. .IP \(bu 2 2022\-11\-09: Fix \fBPy_SETREF()\fP and \fBPy_XSETREF()\fP macros for gh\-98724 \%\&. .IP \(bu 2 2022\-11\-04: Add \fBPyFrame_GetVar()\fP and \fBPyFrame_GetVarString()\fP functions. .IP \(bu 2 2022\-08\-04: Add \fBPyCode_GetVarnames()\fP, \fBPyCode_GetFreevars()\fP and \fBPyCode_GetCellvars()\fP functions. .IP \(bu 2 2022\-06\-14: Fix compatibility with C++ older than C++11. .IP \(bu 2 2022\-05\-03: Add \fBPyCode_GetCode()\fP function. .IP \(bu 2 2022\-04\-26: Rename the project from \fBpythoncapi_compat\fP to \fBpythoncapi\-compat\fP: replace the underscore separator with a dash. .IP \(bu 2 2022\-04\-08: Add functions \fBPyFrame_GetLocals()\fP, \fBPyFrame_GetGlobals()\fP \fBPyFrame_GetBuiltins()\fP, and \fBPyFrame_GetLasti()\fP\&. .IP \(bu 2 2022\-03\-12: Add functions \fBPyFloat_Pack2()\fP, \fBPyFloat_Pack4()\fP, \fBPyFloat_Pack8()\fP, \fBPyFloat_Unpack2()\fP, \fBPyFloat_Unpack4()\fP and \fBPyFloat_Unpack8()\fP\&. .IP \(bu 2 2022\-03\-03: The project moved to \% .IP \(bu 2 2022\-02\-11: The project license changes from the MIT license to the Zero Clause BSD (0BSD) license. Projects copying \fBpythoncapi_compat.h\fP no longer have to include the MIT license and the copyright notice. .IP \(bu 2 2022\-02\-08: Add documentation. .IP \(bu 2 2022\-02\-09: \fBpythoncapi_compat.h\fP now supports C++ on Python 3.6 and newer: use \fBnullptr\fP and \fBreinterpret_cast\fP cast on C++, and use \fBNULL\fP and \fB(type)\fP cast on C. .IP \(bu 2 2021\-10\-15: Add \fBPyThreadState_EnterTracing()\fP and \fBPyThreadState_LeaveTracing()\fP\&. .IP \(bu 2 2021\-04\-09: Add \fBPy_Is()\fP, \fBPy_IsNone()\fP, \fBPy_IsTrue()\fP, \fBPy_IsFalse()\fP functions. .IP \(bu 2 2021\-04\-01: .INDENT 2.0 .IP \(bu 2 Add \fBPy_SETREF()\fP, \fBPy_XSETREF()\fP and \fBPy_UNUSED()\fP\&. .IP \(bu 2 Add PyPy support. .UNINDENT .IP \(bu 2 2021\-01\-27: Fix compatibility with Visual Studio 2008 for Python 2.7. .IP \(bu 2 2020\-11\-30: Creation of the \fBupgrade_pythoncapi.py\fP script. .IP \(bu 2 2020\-06\-04: Creation of the \fBpythoncapi_compat.h\fP header file. .UNINDENT .SH LINKS .INDENT 0.0 .IP \(bu 2 Python/C API Reference Manual \% .IP \(bu 2 HPy: a better API for Python \% .IP \(bu 2 Cython: C\-extensions for Python \% .IP \(bu 2 Old 2to3c project \% by David Malcolm which uses Coccinelle \% to ease migration of C extensions from Python 2 to Python 3. See also 2to3c: an implementation of Python\(aqs 2to3 for C code \% article (2009). .IP \(bu 2 PEPs related to the C API: .INDENT 2.0 .IP \(bu 2 PEP 620 \-\- Hide implementation details from the C API \% .IP \(bu 2 PEP 670 \-\- Convert macros to functions in the Python C API \% .IP \(bu 2 PEP 674 \-\- Disallow using macros as l\-values \% .UNINDENT .IP \(bu 2 Make structures opaque .INDENT 2.0 .IP \(bu 2 bpo\-39573: PyObject \% .IP \(bu 2 bpo\-40170: PyTypeObject \% .IP \(bu 2 bpo\-39947: PyThreadState \% .IP \(bu 2 bpo\-40421: PyFrameObject \% .IP \(bu 2 bpo\-47241: PyCodeObject \% .UNINDENT .UNINDENT .sp This project is distributed under the Zero Clause BSD (0BSD) license \% and is covered by the PSF Code of Conduct \%\&. .SH Author Victor Stinner .SH Copyright 2022, Victor Stinner .\" End of generated man page.