pair: stackable; streams
This module defines base classes for standard Python codecs (encoders and
- decoders) and provides access to the internal Python codec registry which
- manages the codec and error handling lookup process.
-
- It defines the following functions:
+ decoders) and provides access to the internal Python codec registry, which
+ manages the codec and error handling lookup process. Most standard codecs
+ are :term:`text encodings <text encoding>`, which encode text to bytes,
+ but there are also codecs provided that encode text to text, and bytes to
+ bytes. Custom codecs may encode and decode between arbitrary types, but some
+ module features are restricted to use specifically with
+ :term:`text encodings <text encoding>`, or with codecs that encode to
+ :class:`bytes`.
+
+ The module defines the following functions for encoding and decoding with
+ any codec:
-.. function:: encode(obj, [encoding[, errors]])
+.. function:: encode(obj, encoding='utf-8', errors='strict')
- Encodes *obj* using the codec registered for *encoding*. The default
- encoding is ``utf-8``.
+ Encodes *obj* using the codec registered for *encoding*.
*Errors* may be given to set the desired error handling scheme. The
- default error handler is ``strict`` meaning that encoding errors raise
+ default error handler is ``'strict'`` meaning that encoding errors raise
:exc:`ValueError` (or a more codec specific subclass, such as
:exc:`UnicodeEncodeError`). Refer to :ref:`codec-base-classes` for more
information on codec error handling.
-.. function:: decode(obj, [encoding[, errors]])
+.. function:: decode(obj, encoding='utf-8', errors='strict')
- Decodes *obj* using the codec registered for *encoding*. The default
- encoding is ``utf-8``.
+ Decodes *obj* using the codec registered for *encoding*.
*Errors* may be given to set the desired error handling scheme. The
- default error handler is ``strict`` meaning that decoding errors raise
+ default error handler is ``'strict'`` meaning that decoding errors raise
:exc:`ValueError` (or a more codec specific subclass, such as
:exc:`UnicodeDecodeError`). Refer to :ref:`codec-base-classes` for more
information on codec error handling.
- .. function:: register(search_function)
-
- Register a codec search function. Search functions are expected to take one
- argument, the encoding name in all lower case letters, and return a
- :class:`CodecInfo` object having the following attributes:
-
- * ``name`` The name of the encoding;
-
- * ``encode`` The stateless encoding function;
+ The full details for each codec can also be looked up directly:
- * ``decode`` The stateless decoding function;
-
- * ``incrementalencoder`` An incremental encoder class or factory function;
-
- * ``incrementaldecoder`` An incremental decoder class or factory function;
-
- * ``streamwriter`` A stream writer class or factory function;
-
- * ``streamreader`` A stream reader class or factory function.
-
- The various functions or classes take the following arguments:
+ .. function:: lookup(encoding)
- *encode* and *decode*: These must be functions or methods which have the same
- interface as the :meth:`~Codec.encode`/:meth:`~Codec.decode` methods of Codec
- instances (see :ref:`Codec Interface <codec-objects>`). The functions/methods
- are expected to work in a stateless mode.
+ Looks up the codec info in the Python codec registry and returns a
+ :class:`CodecInfo` object as defined below.
- *incrementalencoder* and *incrementaldecoder*: These have to be factory
- functions providing the following interface:
+ Encodings are first looked up in the registry's cache. If not found, the list of
+ registered search functions is scanned. If no :class:`CodecInfo` object is
+ found, a :exc:`LookupError` is raised. Otherwise, the :class:`CodecInfo` object
+ is stored in the cache and returned to the caller.
- ``factory(errors='strict')``
+ .. class:: CodecInfo(encode, decode, streamreader=None, streamwriter=None, incrementalencoder=None, incrementaldecoder=None, name=None)
- The factory functions must return objects providing the interfaces defined by
- the base classes :class:`IncrementalEncoder` and :class:`IncrementalDecoder`,
- respectively. Incremental codecs can maintain state.
+ Codec details when looking up the codec registry. The constructor
+ arguments are stored in attributes of the same name:
- *streamreader* and *streamwriter*: These have to be factory functions providing
- the following interface:
- ``factory(stream, errors='strict')``
+ .. attribute:: name
- The factory functions must return objects providing the interfaces defined by
- the base classes :class:`StreamReader` and :class:`StreamWriter`, respectively.
- Stream codecs can maintain state.
+ The name of the encoding.
- Possible values for errors are
- * ``'strict'``: raise an exception in case of an encoding error
- * ``'replace'``: replace malformed data with a suitable replacement marker,
- such as ``'?'`` or ``'\ufffd'``
- * ``'ignore'``: ignore malformed data and continue without further notice
- * ``'xmlcharrefreplace'``: replace with the appropriate XML character
- reference (for encoding only)
- * ``'backslashreplace'``: replace with backslashed escape sequences (for
- encoding only)
- * ``'namereplace'``: replace with ``\N{...}`` escape sequences (for
- encoding only)
- * ``'surrogateescape'``: on decoding, replace with code points in the Unicode
- Private Use Area ranging from U+DC80 to U+DCFF. These private code
- points will then be turned back into the same bytes when the
- ``surrogateescape`` error handler is used when encoding the data.
- (See :pep:`383` for more.)
+ .. attribute:: encode
+ decode
- as well as any other error handling name defined via :func:`register_error`.
+ The stateless encoding and decoding functions. These must be
+ functions or methods which have the same interface as
+ the :meth:`~Codec.encode` and :meth:`~Codec.decode` methods of Codec
+ instances (see :ref:`Codec Interface <codec-objects>`).
+ The functions or methods are expected to work in a stateless mode.
- In case a search function cannot find a given encoding, it should return
- ``None``.
+ .. attribute:: incrementalencoder
+ incrementaldecoder
- .. function:: lookup(encoding)
+ Incremental encoder and decoder classes or factory functions.
+ These have to provide the interface defined by the base classes
+ :class:`IncrementalEncoder` and :class:`IncrementalDecoder`,
+ respectively. Incremental codecs can maintain state.
- Looks up the codec info in the Python codec registry and returns a
- :class:`CodecInfo` object as defined above.
- Encodings are first looked up in the registry's cache. If not found, the list of
- registered search functions is scanned. If no :class:`CodecInfo` object is
- found, a :exc:`LookupError` is raised. Otherwise, the :class:`CodecInfo` object
- is stored in the cache and returned to the caller.
+ .. attribute:: streamwriter
+ streamreader
- To simplify access to the various codecs, the module provides these additional
- functions which use :func:`lookup` for the codec lookup:
+ Stream writer and reader classes or factory functions. These have to
+ provide the interface defined by the base classes
+ :class:`StreamWriter` and :class:`StreamReader`, respectively.
+ Stream codecs can maintain state.
+ To simplify access to the various codec components, the module provides
+ these additional functions which use :func:`lookup` for the codec lookup:
-
.. function:: getencoder(encoding)
Look up the codec for the given encoding and return its encoder function.
| Value | Meaning |
+=========================+===============================================+
| ``'strict'`` | Raise :exc:`UnicodeError` (or a subclass); |
- | | this is the default. |
+ | | this is the default. Implemented in |
+ | | :func:`strict_errors`. |
+-------------------------+-----------------------------------------------+
- | ``'ignore'`` | Ignore the character and continue with the |
- | | next. |
+ | ``'ignore'`` | Ignore the malformed data and continue |
+ | | without further notice. Implemented in |
+ | | :func:`ignore_errors`. |
+-------------------------+-----------------------------------------------+
+
+ The following error handlers are only applicable to
+ :term:`text encodings <text encoding>`:
+
+ +-------------------------+-----------------------------------------------+
+ | Value | Meaning |
+ +=========================+===============================================+
| ``'replace'`` | Replace with a suitable replacement |
- | | character; Python will use the official |
- | | U+FFFD REPLACEMENT CHARACTER for the built-in |
- | | Unicode codecs on decoding and '?' on |
- | | encoding. |
+ | | marker; Python will use the official |
+ | | ``U+FFFD`` REPLACEMENT CHARACTER for the |
+ | | built-in codecs on decoding, and '?' on |
+ | | encoding. Implemented in |
+ | | :func:`replace_errors`. |
+-------------------------+-----------------------------------------------+
| ``'xmlcharrefreplace'`` | Replace with the appropriate XML character |
- | | reference (only for encoding). |
+ | | reference (only for encoding). Implemented |
+ | | in :func:`xmlcharrefreplace_errors`. |
+-------------------------+-----------------------------------------------+
| ``'backslashreplace'`` | Replace with backslashed escape sequences |
- | | (only for encoding). |
+ | | (only for encoding). Implemented in |
+ | | :func:`backslashreplace_errors`. |
+-------------------------+-----------------------------------------------+
- | ``'surrogateescape'`` | Replace byte with surrogate U+DCxx, as defined|
- | | in :pep:`383`. |
+| ``'namereplace'`` | Replace with ``\N{...}`` escape sequences |
+| | (only for encoding). |
++-------------------------+-----------------------------------------------+
+ | ``'surrogateescape'`` | On decoding, replace byte with individual |
+ | | surrogate code ranging from ``U+DC80`` to |
+ | | ``U+DCFF``. This code will then be turned |
+ | | back into the same byte when the |
+ | | ``'surrogateescape'`` error handler is used |
+ | | when encoding the data. (See :pep:`383` for |
+ | | more.) |
+-------------------------+-----------------------------------------------+
- In addition, the following error handlers are specific to Unicode encoding
- schemes:
+ In addition, the following error handler is specific to the given codecs:
+-------------------+------------------------+-------------------------------------------+
- | Value | Codec | Meaning |
+ | Value | Codecs | Meaning |
+===================+========================+===========================================+
|``'surrogatepass'``| utf-8, utf-16, utf-32, | Allow encoding and decoding of surrogate |
- | | utf-16-be, utf-16-le, | codes in all the Unicode encoding schemes.|
- | | utf-32-be, utf-32-le | |
+ | | utf-16-be, utf-16-le, | codes. These codecs normally treat the |
+ | | utf-32-be, utf-32-le | presence of surrogates as an error. |
+-------------------+------------------------+-------------------------------------------+
.. versionadded:: 3.1
.. versionchanged:: 3.4
The ``'surrogatepass'`` error handlers now works with utf-16\* and utf-32\* codecs.
- The set of allowed values can be extended via :meth:`register_error`.
+.. versionadded:: 3.5
+ The ``'namereplace'`` error handler.
+
+ The set of allowed values can be extended by registering a new named error
+ handler:
+
+ .. function:: register_error(name, error_handler)
+
+ Register the error handling function *error_handler* under the name *name*.
+ The *error_handler* argument will be called during encoding and decoding
+ in case of an error, when *name* is specified as the errors parameter.
+
+ For encoding, *error_handler* will be called with a :exc:`UnicodeEncodeError`
+ instance, which contains information about the location of the error. The
+ error handler must either raise this or a different exception, or return a
+ tuple with a replacement for the unencodable part of the input and a position
+ where encoding should continue. The replacement may be either :class:`str` or
+ :class:`bytes`. If the replacement is bytes, the encoder will simply copy
+ them into the output buffer. If the replacement is a string, the encoder will
+ encode the replacement. Encoding continues on original input at the
+ specified position. Negative position values will be treated as being
+ relative to the end of the input string. If the resulting position is out of
+ bound an :exc:`IndexError` will be raised.
+
+ Decoding and translating works similarly, except :exc:`UnicodeDecodeError` or
+ :exc:`UnicodeTranslateError` will be passed to the handler and that the
+ replacement from the error handler will be put into the output directly.
+
+
+ Previously registered error handlers (including the standard error handlers)
+ can be looked up by name:
+
+ .. function:: lookup_error(name)
+
+ Return the error handler previously registered under the name *name*.
+
+ Raises a :exc:`LookupError` in case the handler cannot be found.
+
+ The following standard error handlers are also made available as module level
+ functions:
+
+ .. function:: strict_errors(exception)
+
+ Implements the ``'strict'`` error handling: each encoding or
+ decoding error raises a :exc:`UnicodeError`.
+
+
+ .. function:: replace_errors(exception)
+
+ Implements the ``'replace'`` error handling (for :term:`text encodings
+ <text encoding>` only): substitutes ``'?'`` for encoding errors
+ (to be encoded by the codec), and ``'\ufffd'`` (the Unicode replacement
+ character, ``'�'``) for decoding errors.
+
+
+ .. function:: ignore_errors(exception)
+
+ Implements the ``'ignore'`` error handling: malformed data is ignored and
+ encoding or decoding is continued without further notice.
+
+
+ .. function:: xmlcharrefreplace_errors(exception)
+
+ Implements the ``'xmlcharrefreplace'`` error handling (for encoding with
+ :term:`text encodings <text encoding>` only): the
+ unencodable character is replaced by an appropriate XML character reference.
+
+
+ .. function:: backslashreplace_errors(exception)
+
+ Implements the ``'backslashreplace'`` error handling (for encoding with
+ :term:`text encodings <text encoding>` only): the
+ unencodable character is replaced by a backslashed escape sequence.
+
++.. function:: namereplace_errors(exception)
++
++ Implements the ``namereplace`` error handling (for encoding only): the
++ unencodable character is replaced by a ``\N{...}`` escape sequence.
++
++ .. versionadded:: 3.5
+
.. _codec-objects:
IDLE
----
-- Issue #21139: Change default paragraph width to 72, the PEP 8 recommendation.
+- Issue #20577: Configuration of the max line length for the FormatParagraph
+ extension has been moved from the General tab of the Idle preferences dialog
+ to the FormatParagraph tab of the Config Extensions dialog.
+ Patch by Tal Einat.
-- Issue #21284: Paragraph reformat test passes after user changes reformat width.
+- Issue #16893: Update Idle doc chapter to match current Idle and add new
+ information.
-- Issue #17654: Ensure IDLE menus are customized properly on OS X for
- non-framework builds and for all variants of Tk.
+- Issue #3068: Add Idle extension configuration dialog to Options menu.
+ Changes are written to HOME/.idlerc/config-extensions.cfg.
+ Original patch by Tal Einat.
-Build
------
+- Issue #16233: A module browser (File : Class Browser, Alt+C) requires a
+ editor window with a filename. When Class Browser is requested otherwise,
+ from a shell, output window, or 'Untitled' editor, Idle no longer displays
+ an error box. It now pops up an Open Module box (Alt+M). If a valid name
+ is entered and a module is opened, a corresponding browser is also opened.
-- The Windows build now includes OpenSSL 1.0.1g
+- Issue #4832: Save As to type Python files automatically adds .py to the
+ name you enter (even if your system does not display it). Some systems
+ automatically add .txt when type is Text files.
-- Issue #21285: Refactor and fix curses configure check to always search
- in a ncursesw directory.
+- Issue #21986: Code objects are not normally pickled by the pickle module.
+ To match this, they are no longer pickled when running under Idle.
-- Issue #15234: For BerkelyDB and Sqlite, only add the found library and
- include directories if they aren't already being searched. This avoids
- an explicit runtime library dependency.
+- Issue #17390: Adjust Editor window title; remove 'Python',
+ move version to end.
-- Issue #20644: OS X installer build support for documentation build changes
- in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin.
+- Issue #14105: Idle debugger breakpoints no longer disappear
+ when inseting or deleting lines.
-C API
------
-- Issue #20942: PyImport_ImportFrozenModuleObject() no longer sets __file__ to
- match what importlib does; this affects _frozen_importlib as well as any
- module loaded using imp.init_frozen().
+- Issue #17172: Turtledemo can now be run from Idle.
+ Currently, the entry is on the Help menu, but it may move to Run.
+ Patch by Ramchandra Apt and Lita Cho.
-Documentation
--------------
+- Issue #21765: Add support for non-ascii identifiers to HyperParser.
-- Issue #17386: Expanded functionality of the ``Doc/make.bat`` script to make
- it much more comparable to ``Doc/Makefile``.
+- Issue #21940: Add unittest for WidgetRedirector. Initial patch by Saimadhav
+ Heblikar.
-- Issue #21043: Remove the recommendation for specific CA organizations and to
- mention the ability to load the OS certificates.
+- Issue #18592: Add unittest for SearchDialogBase. Patch by Phil Webster.
-- Issue #20765: Add missing documentation for PurePath.with_name() and
- PurePath.with_suffix().
+- Issue #21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar.
+
+- Issue #21686: add unittest for HyperParser. Original patch by Saimadhav
+ Heblikar.
+
+- Issue #12387: Add missing upper(lower)case versions of default Windows key
+ bindings for Idle so Caps Lock does not disable them. Patch by Roger Serwy.
+
+- Issue #21695: Closing a Find-in-files output window while the search is
+ still in progress no longer closes Idle.
+
+- Issue #18910: Add unittest for textView. Patch by Phil Webster.
+
+- Issue #18292: Add unittest for AutoExpand. Patch by Saihadhav Heblikar.
+
+- Issue #18409: Add unittest for AutoComplete. Patch by Phil Webster.
+
+- Issue #21477: htest.py - Improve framework, complete set of tests.
+ Patches by Saimadhav Heblikar
+
+- Issue #18104: Add idlelib/idle_test/htest.py with a few sample tests to begin
+ consolidating and improving human-validated tests of Idle. Change other files
+ as needed to work with htest. Running the module as __main__ runs all tests.
+
+- Issue #21139: Change default paragraph width to 72, the PEP 8 recommendation.
+
+- Issue #21284: Paragraph reformat test passes after user changes reformat width.
+
+- Issue #17654: Ensure IDLE menus are customized properly on OS X for
+ non-framework builds and for all variants of Tk.
+
+Build
+-----
+
+- Issue #15506: Use standard PKG_PROG_PKG_CONFIG autoconf macro in the configure
+ script.
+
+- Issue #22935: Allow the ssl module to be compiled if openssl doesn't support
+ SSL 3.
+
+- Issue #22592: Drop support of the Borland C compiler to build Python. The
+ distutils module still supports it to build extensions.
+
+- Issue #22591: Drop support of MS-DOS, especially of the DJGPP compiler
+ (MS-DOS port of GCC).
+
+- Issue #16537: Check whether self.extensions is empty in setup.py. Patch by
+ Jonathan Hosmer.
+
+- Issue #22359: Remove incorrect uses of recursive make. Patch by Jonas
+ Wagner.
+
+- Issue #21958: Define HAVE_ROUND when building with Visual Studio 2013 and
+ above. Patch by Zachary Turner.
+
+- Issue #18093: the programs that embed the CPython runtime are now in a
+ separate "Programs" directory, rather than being kept in the Modules
+ directory.
+
+- Issue #15759: "make suspicious", "make linkcheck" and "make doctest" in Doc/
+ now display special message when and only when there are failures.
+
+- Issue #21141: The Windows build process no longer attempts to find Perl,
+ instead relying on OpenSSL source being configured and ready to build. The
+ ``PCbuild\build_ssl.py`` script has been re-written and re-named to
+ ``PCbuild\prepare_ssl.py``, and takes care of configuring OpenSSL source
+ for both 32 and 64 bit platforms. OpenSSL sources obtained from
+ svn.python.org will always be pre-configured and ready to build.
+
+- Issue #21037: Add a build option to enable AddressSanitizer support.
+
+- Issue #19962: The Windows build process now creates "python.bat" in the
+ root of the source tree, which passes all arguments through to the most
+ recently built interpreter.
+
+- Issue #21285: Refactor and fix curses configure check to always search
+ in a ncursesw directory.
+
+- Issue #15234: For BerkelyDB and Sqlite, only add the found library and
+ include directories if they aren't already being searched. This avoids
+ an explicit runtime library dependency.
+
+- Issue #17861: Tools/scripts/generate_opcode_h.py automatically regenerates
+ Include/opcode.h from Lib/opcode.py if the later gets any change.
+
+- Issue #20644: OS X installer build support for documentation build changes
+ in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin.
+
+- Issue #20022: Eliminate use of deprecated bundlebuilder in OS X builds.
+
+- Issue #15968: Incorporated Tcl, Tk, and Tix builds into the Windows build
+ solution.
+
+- Issue #17095: Fix Modules/Setup *shared* support.
+
+- Issue #21811: Anticipated fixes to support OS X versions > 10.9.
+
+- Issue #21166: Prevent possible segfaults and other random failures of
+ python --generate-posix-vars in pybuilddir.txt build target.
+
+- Issue #18096: Fix library order returned by python-config.
+
+- Issue #17219: Add library build dir for Python extension cross-builds.
+
+- Issue #22919: Windows build updated to support VC 14.0 (Visual Studio 2015),
+ which will be used for the official release.
+
+- Issue #21236: Build _msi.pyd with cabinet.lib instead of fci.lib
+
+- Issue #17128: Use private version of OpenSSL for 2.7.9 OS X 10.5+ installer.
+
+C API
+-----
+
+- Issue #22453: Removed non-documented macro PyObject_REPR().
+
+- Issue #18395: Rename ``_Py_char2wchar()`` to :c:func:`Py_DecodeLocale`,
+ rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document
+ these functions.
+
+- Issue #21233: Add new C functions: PyMem_RawCalloc(), PyMem_Calloc(),
+ PyObject_Calloc(), _PyObject_GC_Calloc(). bytes(int) is now using
+ ``calloc()`` instead of ``malloc()`` for large objects which is faster and
+ use less memory.
+
+- Issue #20942: PyImport_ImportFrozenModuleObject() no longer sets __file__ to
+ match what importlib does; this affects _frozen_importlib as well as any
+ module loaded using imp.init_frozen().
+
+Documentation
+-------------
+
++- Issue #19548: Update the codecs module documentation to better cover the
++ distinction between text encodings and other codecs, together with other
++ clarifications. Patch by Martin Panter.
++
+- Issue #22394: Doc/Makefile now supports ``make venv PYTHON=../python`` to
+ create a venv for generating the documentation, e.g.,
+ ``make html PYTHON=venv/bin/python3``.
+
+- Issue #21514: The documentation of the json module now refers to new JSON RFC
+ 7159 instead of obsoleted RFC 4627.
+
+- Issue #21777: The binary sequence methods on bytes and bytearray are now
+ documented explicitly, rather than assuming users will be able to derive
+ the expected behaviour from the behaviour of the corresponding str methods.
+
+- Issue #6916: undocument deprecated asynchat.fifo class.
+
+- Issue #17386: Expanded functionality of the ``Doc/make.bat`` script to make
+ it much more comparable to ``Doc/Makefile``.
+
+- Issue #21312: Update the thread_foobar.h template file to include newer
+ threading APIs. Patch by Jack McCracken.
+
+- Issue #21043: Remove the recommendation for specific CA organizations and to
+ mention the ability to load the OS certificates.
+
+- Issue #20765: Add missing documentation for PurePath.with_name() and
+ PurePath.with_suffix().
- Issue #19407: New package installation and distribution guides based on
the Python Packaging Authority tools. Existing guides have been retained
Tests
-----
++- Issue #19548: Added some additional checks to test_codecs to ensure that
++ statements in the updated documentation remain accurate. Patch by Martin
++ Panter.
++
+- Issue #22838: All test_re tests now work with unittest test discovery.
+
+- Issue #22173: Update lib2to3 tests to use unittest test discovery.
+
+- Issue #16000: Convert test_curses to use unittest.
+
+- Issue #21456: Skip two tests in test_urllib2net.py if _ssl module not
+ present. Patch by Remi Pointel.
+
+- Issue #20746: Fix test_pdb to run in refleak mode (-R). Patch by Xavier
+ de Gaye.
+
+- Issue #22060: test_ctypes has been somewhat cleaned up and simplified; it
+ now uses unittest test discovery to find its tests.
+
+- Issue #22104: regrtest.py no longer holds a reference to the suite of tests
+ loaded from test modules that don't define test_main().
+
+- Issue #22111: Assorted cleanups in test_imaplib. Patch by Milan Oberkirch.
+
+- Issue #22002: Added ``load_package_tests`` function to test.support and used
+ it to implement/augment test discovery in test_asyncio, test_email,
+ test_importlib, test_json, and test_tools.
+
+- Issue #21976: Fix test_ssl to accept LibreSSL version strings. Thanks
+ to William Orr.
+
+- Issue #21918: Converted test_tools from a module to a package containing
+ separate test files for each tested script.
+
+- Issue #9554: Use modern unittest features in test_argparse. Initial patch by
+ Denver Coneybeare and Radu Voicilas.
+
+- Issue #20155: Changed HTTP method names in failing tests in test_httpservers
+ so that packet filtering software (specifically Windows Base Filtering Engine)
+ does not interfere with the transaction semantics expected by the tests.
+
+- Issue #19493: Refactored the ctypes test package to skip tests explicitly
+ rather than silently.
+
+- Issue #18492: All resources are now allowed when tests are not run by
+ regrtest.py.
+
+- Issue #21634: Fix pystone micro-benchmark: use floor division instead of true
+ division to benchmark integers instead of floating point numbers. Set pystone
+ version to 1.2. Patch written by Lennart Regebro.
+
+- Issue #21605: Added tests for Tkinter images.
+
+- Issue #21493: Added test for ntpath.expanduser(). Original patch by
+ Claudiu Popa.
+
+- Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok.
+
+- Issue #21522: Added Tkinter tests for Listbox.itemconfigure(),
+ PanedWindow.paneconfigure(), and Menu.entryconfigure().
+
+- Issue #17756: Fix test_code test when run from the installed location.
+
+- Issue #17752: Fix distutils tests when run from the installed location.
+
- Issue #18604: Consolidated checks for GUI availability. All platforms now
at least check whether Tk can be instantiated when the GUI resource is
requested.