Pending Removal in Future Versions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The following APIs are deprecated and will be removed,
although there is currently no date scheduled for their removal.

* :c:macro:`Py_TPFLAGS_HAVE_FINALIZE`:
  Unneeded since Python 3.8.
* :c:func:`PyErr_Fetch`:
  Use :c:func:`PyErr_GetRaisedException` instead.
* :c:func:`PyErr_NormalizeException`:
  Use :c:func:`PyErr_GetRaisedException` instead.
* :c:func:`PyErr_Restore`:
  Use :c:func:`PyErr_SetRaisedException` instead.
* :c:func:`PyModule_GetFilename`:
  Use :c:func:`PyModule_GetFilenameObject` instead.
* :c:func:`PyOS_AfterFork`:
  Use :c:func:`PyOS_AfterFork_Child` instead.
* :c:func:`PySlice_GetIndicesEx`:
  Use :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices` instead.
* :c:func:`!PyUnicode_AsDecodedObject`:
  Use :c:func:`PyCodec_Decode` instead.
* :c:func:`!PyUnicode_AsDecodedUnicode`:
  Use :c:func:`PyCodec_Decode` instead.
* :c:func:`!PyUnicode_AsEncodedObject`:
  Use :c:func:`PyCodec_Encode` instead.
* :c:func:`!PyUnicode_AsEncodedUnicode`:
  Use :c:func:`PyCodec_Encode` instead.
* :c:func:`PyUnicode_READY`:
  Unneeded since Python 3.12
* :c:func:`!PyErr_Display`:
  Use :c:func:`PyErr_DisplayException` instead.
* :c:func:`!_PyErr_ChainExceptions`:
  Use :c:func:`!_PyErr_ChainExceptions1` instead.
* :c:member:`!PyBytesObject.ob_shash` member:
  call :c:func:`PyObject_Hash` instead.
* :c:member:`!PyDictObject.ma_version_tag` member.
* Thread Local Storage (TLS) API:

  * :c:func:`PyThread_create_key`:
    Use :c:func:`PyThread_tss_alloc` instead.
  * :c:func:`PyThread_delete_key`:
    Use :c:func:`PyThread_tss_free` instead.
  * :c:func:`PyThread_set_key_value`:
    Use :c:func:`PyThread_tss_set` instead.
  * :c:func:`PyThread_get_key_value`:
    Use :c:func:`PyThread_tss_get` instead.
  * :c:func:`PyThread_delete_key_value`:
    Use :c:func:`PyThread_tss_delete` instead.
  * :c:func:`PyThread_ReInitTLS`:
    Unneeded since Python 3.7.
