Checkpoint.  218 tests are okay; 53 are failing.  Done so far:
- all classes are new-style (but ripping out classobject.[ch] isn't done)
- int/int -> float
- all exceptions must derive from BaseException
- absolute import
- 'as' and 'with' are keywords
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 9f66df6..33c37d2 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -7,18 +7,6 @@
 #        with someone who can; ask around on python-dev for help.  Fred
 #        Drake <fdrake@acm.org> will probably be listening there.
 
-# Commands for Kees Blom's railroad program
-#diagram:token NAME
-#diagram:token NUMBER
-#diagram:token STRING
-#diagram:token NEWLINE
-#diagram:token ENDMARKER
-#diagram:token INDENT
-#diagram:output\input python.bla
-#diagram:token DEDENT
-#diagram:output\textwidth 20.04cm\oddsidemargin  0.0cm\evensidemargin 0.0cm
-#diagram:rules
-
 # Start symbols for the grammar:
 #	single_input is a single interactive statement;
 #	file_input is a module or sequence of commands read from an input file;
@@ -61,8 +49,8 @@
 import_name: 'import' dotted_as_names
 import_from: ('from' ('.'* dotted_name | '.')
               'import' ('*' | '(' import_as_names ')' | import_as_names))
-import_as_name: NAME [('as' | NAME) NAME]
-dotted_as_name: dotted_name [('as' | NAME) NAME]
+import_as_name: NAME ['as' NAME]
+dotted_as_name: dotted_name ['as' NAME]
 import_as_names: import_as_name (',' import_as_name)* [',']
 dotted_as_names: dotted_as_name (',' dotted_as_name)*
 dotted_name: NAME ('.' NAME)*
@@ -80,7 +68,7 @@
 	    ['finally' ':' suite] |
 	   'finally' ':' suite))
 with_stmt: 'with' test [ with_var ] ':' suite
-with_var: ('as' | NAME) expr
+with_var: 'as' expr
 # NB compile.c makes sure that the default except clause is last
 except_clause: 'except' [test [',' test]]
 suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
diff --git a/Include/code.h b/Include/code.h
index 9e6cb56..a4509e3 100644
--- a/Include/code.h
+++ b/Include/code.h
@@ -41,17 +41,17 @@
 #define CO_NOFREE       0x0040
 
 #if 0
-/* This is no longer used.  Stopped defining in 2.5, do not re-use. */
+/* These are no longer used. */
 #define CO_GENERATOR_ALLOWED    0x1000
-#endif
 #define CO_FUTURE_DIVISION    	0x2000
 #define CO_FUTURE_ABSIMPORT	0x4000 /* absolute import by default */
 #define CO_FUTURE_WITH_STATEMENT  0x8000
+#endif
 
 /* This should be defined if a future statement modifies the syntax.
    For example, when a keyword is added.
 */
-#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
+/* #define PY_PARSER_REQUIRES_FUTURE_KEYWORD */
 
 #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
 
diff --git a/Include/parsetok.h b/Include/parsetok.h
index 0f87e81..2b4ce1e 100644
--- a/Include/parsetok.h
+++ b/Include/parsetok.h
@@ -23,7 +23,9 @@
 
 #define PyPARSE_DONT_IMPLY_DEDENT	0x0002
 
+#if 0
 #define PyPARSE_WITH_IS_KEYWORD		0x0003
+#endif
 
 PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int,
                                               perrdetail *);
diff --git a/Include/patchlevel.h b/Include/patchlevel.h
index 2904fb6..56cf762 100644
--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
@@ -1,9 +1,5 @@
 
-/* Newfangled version identification scheme.
-
-   This scheme was added in Python 1.5.2b2; before that time, only PATCHLEVEL
-   was available.  To test for presence of the scheme, test for
-   defined(PY_MAJOR_VERSION).
+/* Python version identification scheme.
 
    When the major or minor version changes, the VERSION variable in
    configure.in must also be changed.
@@ -19,14 +15,14 @@
 					/* Higher for patch releases */
 
 /* Version parsed out into numeric values */
-#define PY_MAJOR_VERSION	2
-#define PY_MINOR_VERSION	5
+#define PY_MAJOR_VERSION	0
+#define PY_MINOR_VERSION	0
 #define PY_MICRO_VERSION	0
 #define PY_RELEASE_LEVEL	PY_RELEASE_LEVEL_ALPHA
 #define PY_RELEASE_SERIAL	0
 
 /* Version as a string */
-#define PY_VERSION		"2.5a0"
+#define PY_VERSION		"3.0x"
 
 /* Subversion Revision number of this file (not of the repository) */
 #define PY_PATCHLEVEL_REVISION  "$Revision$"
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index 1fe2e45..0e7718c 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -28,25 +28,18 @@
 
 /* */
 
-#define PyExceptionClass_Check(x)					\
-	(PyClass_Check((x))						\
-	 || (PyType_Check((x)) && PyType_IsSubtype(			\
-		     (PyTypeObject*)(x), (PyTypeObject*)PyExc_BaseException)))
+#define PyExceptionClass_Check(x) \
+	    (PyType_Check((x)) && PyType_IsSubtype(			\
+		     (PyTypeObject*)(x), (PyTypeObject*)PyExc_BaseException))
 
 
-#define PyExceptionInstance_Check(x)			\
-	(PyInstance_Check((x)) ||			\
-	 (PyType_IsSubtype((x)->ob_type, (PyTypeObject*)PyExc_BaseException)))
+#define PyExceptionInstance_Check(x) \
+	 (PyType_IsSubtype((x)->ob_type, (PyTypeObject*)PyExc_BaseException))
 
-#define PyExceptionClass_Name(x)				   \
-	(PyClass_Check((x))					   \
-	 ? PyString_AS_STRING(((PyClassObject*)(x))->cl_name)	   \
-	 : (char *)(((PyTypeObject*)(x))->tp_name))
+#define PyExceptionClass_Name(x) \
+	 ((char *)(((PyTypeObject*)(x))->tp_name))
 
-#define PyExceptionInstance_Class(x)					\
-	((PyInstance_Check((x))						\
-	  ? (PyObject*)((PyInstanceObject*)(x))->in_class		\
-	  : (PyObject*)((x)->ob_type)))
+#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type))
 
 	
 /* Predefined exceptions */
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 1ecb3d7..52623ba 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -7,9 +7,8 @@
 extern "C" {
 #endif
 
-#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSIMPORT | \
-                   CO_FUTURE_WITH_STATEMENT)
-#define PyCF_MASK_OBSOLETE (CO_NESTED)
+#define PyCF_MASK 0
+#define PyCF_MASK_OBSOLETE 0
 #define PyCF_SOURCE_IS_UTF8  0x0100
 #define PyCF_DONT_IMPLY_DEDENT 0x0200
 #define PyCF_ONLY_AST 0x0400
diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index f499013..169520d 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -4,17 +4,12 @@
 C, not for instances of user-defined classes.
 """
 
-from types import ClassType as _ClassType
-
 __all__ = ["pickle", "constructor",
            "add_extension", "remove_extension", "clear_extension_cache"]
 
 dispatch_table = {}
 
 def pickle(ob_type, pickle_function, constructor_ob=None):
-    if type(ob_type) is _ClassType:
-        raise TypeError("copy_reg is not intended for use with classes")
-
     if not callable(pickle_function):
         raise TypeError("reduction functions must be callable")
     dispatch_table[ob_type] = pickle_function
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 9bdbb16..dc603be 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -16,7 +16,7 @@
 import string
 import sys
 
-from errors import DistutilsPlatformError
+from .errors import DistutilsPlatformError
 
 # These are needed in a couple of spots, so just compute them once.
 PREFIX = os.path.normpath(sys.prefix)
diff --git a/Lib/encodings/__init__.py b/Lib/encodings/__init__.py
index 01463bc..ddaacb9 100644
--- a/Lib/encodings/__init__.py
+++ b/Lib/encodings/__init__.py
@@ -27,7 +27,8 @@
 
 """#"
 
-import codecs, types, aliases
+import codecs, types
+from . import aliases
 
 _cache = {}
 _unknown = '--unknown--'
diff --git a/Lib/test/test_opcodes.py b/Lib/test/test_opcodes.py
index c192963..742267f 100644
--- a/Lib/test/test_opcodes.py
+++ b/Lib/test/test_opcodes.py
@@ -25,9 +25,9 @@
 
 print '2.2 raise class exceptions'
 
-class AClass: pass
+class AClass(Exception): pass
 class BClass(AClass): pass
-class CClass: pass
+class CClass(Exception): pass
 class DClass(AClass):
     def __init__(self, ignore):
         pass
@@ -58,8 +58,8 @@
     if v != b: raise TestFailed, "v!=b AClass"
 
 # not enough arguments
-try:  raise BClass, a
-except TypeError: pass
+##try:  raise BClass, a
+##except TypeError: pass
 
 try:  raise DClass, a
 except DClass, v:
diff --git a/Misc/NEWS b/Misc/NEWS
index 1c142fb..111112b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -4,6245 +4,58 @@
 
 (editors: check NEWS.help for information about editing NEWS using ReST.)
 
-What's New in Python 2.5 alpha 1?
-=================================
+What's New in Python 3000?
+==========================
 
-*Release date: XX-XXX-2006*
+*Release date: XX-XXX-200X*
 
-Core and builtins
+TO DO
+-----
+
+- Make strings all Unicode.  (First have to introduce the bytes type.)
+
+- Get rid of classic class implementation.
+
+- Get rid of various compatibility-related flags (e.g. division flags).
+
+Core and Builtins
 -----------------
 
-- Patch #1434038: property() now uses the getter's docstring if there is
-  no "doc" argument given. This makes it possible to legitimately use
-  property() as a decorator to produce a read-only property.
+- Classic classes are a thing of the past.  All classes are new style.
 
-- PEP 357, patch 1436368: add an __index__ method to int/long and a matching
-  nb_index slot to the PyNumberMethods struct.  The slot is consulted instead
-  of requiring an int or long in slicing and a few other contexts, enabling
-  other objects (e.g. Numeric Python's integers) to be used as slice indices.
+- Exceptions *must* derive from BaseException.
 
-- Fixed various bugs reported by Coverity's Prevent tool.
+- Integer division always returns a float.  The -Q option is no more.
 
-- PEP 352, patch #1104669: Make exceptions new-style objects.  Introduced the
-  new exception base class, BaseException, which has a new message attribute.
-  KeyboardInterrupt and SystemExit to directly inherit from BaseException now.
-  Raising a string exception now raises a DeprecationWarning.
+- 'as' and 'with' are keywords.
 
-- Patch #1438387, PEP 328: relative and absolute imports. Imports can now be
-  explicitly relative, using 'from .module import name' to mean 'from the same
-  package as this module is in. Imports without dots still default to the
-  old relative-then-absolute, unless 'from __future__ import
-  absolute_import' is used.
-
-- Properly check if 'warnings' raises an exception (usually when a filter set
-  to "error" is triggered) when raising a warning for raising string
-  exceptions.
-
-- CO_GENERATOR_ALLOWED is no longer defined, this behavior is the default.
-  The name was removed from Include/code.h.
-
-- PEP 308: conditional expressions were added (x if cond else y).
-
-- Patch 1433928:
-  - The copy module now "copies" function objects (as atomic objects).
-  - dict.__getitem__ now looks for a __missing__ hook before raising
-    KeyError.
-
-- PEP 343: with statement implemented. Needs ``from __future__ import
-  with_statement``. Use of 'with' as a variable will generate a warning.
-  Use of 'as' as a variable will also generate a warning (unless it's
-  part of an import statement).
-  The following objects have __context__ methods:
-  - The built-in file type.
-  - The thread.LockType type.
-  - The following types defined by the threading module:
-    Lock, RLock, Condition, Semaphore, BoundedSemaphore.
-  - The decimal.Context class.
-
-- Fix the encodings package codec search function to only search
-  inside its own package. Fixes problem reported in patch #1433198.
-
-  Note: Codec packages should implement and register their own
-  codec search function. PEP 100 has the details.
-
-- PEP 353: Using ssize_t as the index type.
-
-- Patch #1400181, fix unicode string formatting to not use the locale.
-  This is how string objects work.  u'%f' could use , instead of .
-  for the decimal point.  Now both strings and unicode always use periods.
-
-- Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8.
-  configure would break checking curses.h.
-
-- Bug #959576: The pwd module is now builtin. This allows Python to be
-  built on UNIX platforms without $HOME set.
-
-- Bug #1072182, fix some potential problems if characters are signed.
-
-- Bug #889500, fix line number on SyntaxWarning for global declarations.
-
-- Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter.
-
-- Support for converting hex strings to floats no longer works.
-  This was not portable.  float('0x3') now raises a ValueError.
-
-- Patch #1382163: Expose Subversion revision number to Python.  New C API
-  function Py_GetBuildNumber().  New attribute sys.subversion.  Build number
-  is now displayed in interactive prompt banner.
-
-- Implementation of PEP 341 - Unification of try/except and try/finally.
-  "except" clauses can now be written together with a "finally" clause in
-  one try statement instead of two nested ones.  Patch #1355913.
-
-- Bug #1379994: Builtin unicode_escape and raw_unicode_escape codec
-  now encodes backslash correctly.
-
-- Patch #1350409: Work around signal handling bug in Visual Studio 2005.
-
-- Bug #1281408: Py_BuildValue now works correct even with unsigned longs
-  and long longs.
-
-- SF Bug #1350188, "setdlopenflags" leads to crash upon "import"
-  It was possible dlerror() returns a NULL pointer, use a default error
-  message in this case.
-
-- Replaced most Unicode charmap codecs with new ones using the
-  new Unicode translate string feature in the builtin charmap
-  codec; the codecs were created from the mapping tables available
-  at ftp.unicode.org and contain a few updates (e.g. the Mac OS
-  encodings now include a mapping for the Apple logo)
-
-- Added a few more codecs for Mac OS encodings
-
-- Speed up some Unicode operations.
-
-- A new AST parser implementation was completed. The abstract
-  syntax tree is available for read-only (non-compile) access
-  to Python code; an _ast module was added.
-
-- SF bug #1167751: fix incorrect code being for generator expressions.
-  The following code now raises a SyntaxError:  foo(a = i for i in range(10))
-
-- SF Bug #976608: fix SystemError when mtime of an imported file is -1.
-
-- SF Bug #887946: fix segfault when redirecting stdin from a directory.
-  Provide a warning when a directory is passed on the command line.
-
-- Fix segfault with invalid coding.
-
-- SF bug #772896: unknown encoding results in MemoryError.
-
-- All iterators now have a Boolean value of true.  Formerly, some iterators
-  supported a __len__() method which evaluated to False when the iterator
-  was empty.
-
-- On 64-bit platforms, when __len__() returns a value that cannot be
-  represented as a C int, raise OverflowError.
-
-- test__locale is skipped on OS X < 10.4 (only partial locale support is
-  present).
-
-- SF bug #893549: parsing keyword arguments was broken with a few format
-  codes.
-
-- Changes donated by Elemental Security to make it work on AIX 5.3
-  with IBM's 64-bit compiler (SF patch #1284289).  This also closes SF
-  bug #105470: test_pwd fails on 64bit system (Opteron).
-
-- Changes donated by Elemental Security to make it work on HP-UX 11 on
-  Itanium2 with HP's 64-bit compiler (SF patch #1225212).
-
-- Disallow keyword arguments for type constructors that don't use them
-  (fixes bug #1119418).
-
-- Forward UnicodeDecodeError into SyntaxError for source encoding errors.
-
-- SF bug #900092: When tracing (e.g. for hotshot), restore 'return' events for
-  exceptions that cause a function to exit.
-
-- The implementation of set() and frozenset() was revised to use its
-  own internal data structure.  Memory consumption is reduced by 1/3
-  and there are modest speed-ups as well.  The API is unchanged.
-
-- SF bug #1238681:  freed pointer is used in longobject.c:long_pow().
-
-- SF bug #1229429: PyObject_CallMethod failed to decrement some
-  reference counts in some error exit cases.
-
-- SF bug #1185883:  Python's small-object memory allocator took over
-  a block managed by the platform C library whenever a realloc specified
-  a small new size.  However, there's no portable way to know then how
-  much of the address space following the pointer is valid, so no
-  portable way to copy data from the C-managed block into Python's
-  small-object space without risking a memory fault.  Python's small-object
-  realloc now leaves such blocks under the control of the platform C
-  realloc.
-
-- SF bug #1232517: An overflow error was not detected properly when
-  attempting to convert a large float to an int in os.utime().
-
-- SF bug #1224347: hex longs now print with lowercase letters just
-  like their int counterparts.
-
-- SF bug #1163563: the original fix for bug #1010677 ("thread Module
-  Breaks PyGILState_Ensure()") broke badly in the case of multiple
-  interpreter states; back out that fix and do a better job (see
-  http://mail.python.org/pipermail/python-dev/2005-June/054258.html
-  for a longer write-up of the problem).
-
-- SF patch #1180995: marshal now uses a binary format by default when
-  serializing floats.
-
-- SF patch #1181301: on platforms that appear to use IEEE 754 floats,
-  the routines that promise to produce IEEE 754 binary representations
-  of floats now simply copy bytes around.
-
-- bug #967182: disallow opening files with 'wU' or 'aU' as specified by PEP
-  278.
-
-- patch #1109424: int, long, float, complex, and unicode now check for the
-  proper magic slot for type conversions when subclassed.  Previously the
-  magic slot was ignored during conversion.  Semantics now match the way
-  subclasses of str always behaved.  int/long/float, conversion of an instance
-  to the base class has been moved to the proper nb_* magic slot and out of
-  PyNumber_*().
-  Thanks Walter Dörwald.
-
-- Descriptors defined in C with a PyGetSetDef structure, where the setter is
-  NULL, now raise an AttributeError when attempting to set or delete the
-  attribute.  Previously a TypeError was raised, but this was inconsistent
-  with the equivalent pure-Python implementation.
-
-- It is now safe to call PyGILState_Release() before
-  PyEval_InitThreads() (note that if there is reason to believe there
-  are multiple threads around you still must call PyEval_InitThreads()
-  before using the Python API; this fix is for extension modules that
-  have no way of knowing if Python is multi-threaded yet).
-
-- Typing Ctrl-C whilst raw_input() was waiting in a build with threads
-  disabled caused a crash.
-
-- Bug #1165306: instancemethod_new allowed the creation of a method
-  with im_class == im_self == NULL, which caused a crash when called.
-
-- Move exception finalisation later in the shutdown process - this
-  fixes the crash seen in bug #1165761
-
-- Added two new builtins, any() and all().
-
-- Defining a class with empty parentheses is now allowed
-  (e.g., ``class C(): pass`` is no longer a syntax error).
-  Patch #1176012 added support to the 'parser' module and 'compiler' package
-  (thanks to logistix for that added support).
-
-- Patch #1115086: Support PY_LONGLONG in structmember.
-
-- Bug #1155938: new style classes did not check that __init__() was
-  returning None.
-
-- Patch #802188: Report characters after line continuation character
-  ('\') with a specific error message.
-
-- Bug #723201: Raise a TypeError for passing bad objects to 'L' format.
-
-- Bug #1124295: the __name__ attribute of file objects was
-  inadvertently made inaccessible in restricted mode.
-
-- Bug #1074011: closing sys.std{out,err} now causes a flush() and
-  an ferror() call.
-
-- min() and max() now support key= arguments with the same meaning as in
-  list.sort().
-
-- The peephole optimizer now performs simple constant folding in expressions:
-      (2+3) --> (5).
-
-- set and frozenset objects can now be marshalled.  SF #1098985.
-
-- Bug #1077106: Poor argument checking could cause memory corruption
-  in calls to os.read().
-
-- The parser did not complain about future statements in illegal
-  positions.  It once again reports a syntax error if a future
-  statement occurs after anything other than a doc string.
-
-- Change the %s format specifier for str objects so that it returns a
-  unicode instance if the argument is not an instance of basestring and
-  calling __str__ on the argument returns a unicode instance.
-
-- Patch #1413181:  changed ``PyThreadState_Delete()`` to forget about the
-  current thread state when the auto-GIL-state machinery knows about
-  it (since the thread state is being deleted, continuing to remember it
-  can't help, but can hurt if another thread happens to get created with
-  the same thread id).
+- Absolute import is the default behavior for 'import foo' etc.
 
 Extension Modules
 -----------------
 
-- Bug #1448490: Fixed a bug that ISO-2022 codecs could not handle
-  SS2 (single-shift 2) escape sequences correctly.
-
-- The unicodedata module was updated to the 4.1 version of the Unicode
-  database. The 3.2 version is still available as unicodedata.db_3_2_0
-  for applications that require this specific version (such as IDNA).
-
-- The timing module is no longer built by default.  It was deprecated
-  in PEP 4 in Python 2.0 or earlier.
-
-- Patch 1433928: Added a new type, defaultdict, to the collections module.
-  This uses the new __missing__ hook behavior added to dict (see above).
-
-- Bug #854823: socketmodule now builds on Sun platforms even when
-  INET_ADDRSTRLEN is not defined.
-
-- Patch #1393157: os.startfile() now has an optional argument to specify
-  a "command verb" to invoke on the file.
-
-- Bug #876637, prevent stack corruption when socket descriptor
-  is larger than FD_SETSIZE.
-
-- Patch #1407135, bug #1424041: harmonize mmap behavior of anonymous memory.
-  mmap.mmap(-1, size) now returns anonymous memory in both Unix and Windows.
-  mmap.mmap(0, size) should not be used on Windows for anonymous memory.
-
-- Patch #1422385: The nis module now supports access to domains other
-  than the system default domain.
-
-- Use Win32 API to implement os.stat/fstat. As a result, subsecond timestamps
-  are reported, the limit on path name lengths is removed, and stat reports
-  WindowsError now (instead of OSError).
-
-- Add bsddb.db.DBEnv.set_tx_timestamp allowing time based database recovery.
-
-- Bug #1413192, fix seg fault in bsddb if a transaction was deleted
-  before the env.
-
-- Patch #1103116: Basic AF_NETLINK support.
-
-- Bug #1402308, (possible) segfault when using mmap.mmap(-1, ...)
-
-- Bug #1400822, _curses over{lay,write} doesn't work when passing 6 ints.
-  Also fix ungetmouse() which did not accept arguments properly.
-  The code now conforms to the documented signature.
-
-- Bug #1400115, Fix segfault when calling curses.panel.userptr()
-  without prior setting of the userptr.
-
-- Fix 64-bit problems in bsddb.
-
-- Patch #1365916: fix some unsafe 64-bit mmap methods.
-
-- Bug #1290333: Added a workaround for cjkcodecs' _codecs_cn build
-  problem on AIX.
-
-- Bug #869197: os.setgroups rejects long integer arguments
-
-- Bug #1346533, select.poll() doesn't raise an error if timeout > sys.maxint
-
-- Bug #1344508, Fix UNIX mmap leaking file descriptors
-
-- Patch #1338314, Bug #1336623: fix tarfile so it can extract
-  REGTYPE directories from tarfiles written by old programs.
-
-- Patch #1407992, fixes broken bsddb module db associate when using
-  BerkeleyDB 3.3, 4.0 or 4.1.
-
-- Get bsddb module to build with BerkeleyDB version 4.4
-
-- Get bsddb module to build with BerkeleyDB version 3.2
-
-- Patch #1309009, Fix segfault in pyexpat when the XML document is in latin_1,
-  but Python incorrectly assumes it is in UTF-8 format
-
-- Fix parse errors in the readline module when compiling without threads.
-
-- Patch #1288833: Removed thread lock from socket.getaddrinfo on
-  FreeBSD 5.3 and later versions which got thread-safe getaddrinfo(3).
-
-- Patches #1298449 and #1298499: Add some missing checks for error
-  returns in cStringIO.c.
-
-- Patch #1297028: fix segfault if call type on MultibyteCodec,
-  MultibyteStreamReader, or MultibyteStreamWriter
-
-- Fix memory leak in posix.access().
-
-- Patch #1213831: Fix typo in unicodedata._getcode.
-
-- Bug #1007046: os.startfile() did not accept unicode strings encoded in
-  the file system encoding.
-
-- Patch #756021: Special-case socket.inet_aton('255.255.255.255') for
-  platforms that don't have inet_aton().
-
-- Bug #1215928: Fix bz2.BZ2File.seek() for 64-bit file offsets.
-
-- Bug #1191043: Fix bz2.BZ2File.(x)readlines for files containing one
-  line without newlines.
-
-- Bug #728515: mmap.resize() now resizes the file on Unix as it did
-  on Windows.
-
-- Patch #1180695: Add nanosecond stat resolution, and st_gen,
-  st_birthtime for FreeBSD.
-
-- Patch #1231069: The fcntl.ioctl function now uses the 'I' code for
-  the request code argument, which results in more C-like behaviour
-  for large or negative values.
-
-- Bug #1234979: For the argument of thread.Lock.acquire, the Windows
-  implementation treated all integer values except 1 as false.
-
-- Bug #1194181: bz2.BZ2File didn't handle mode 'U' correctly.
-
-- Patch #1212117: os.stat().st_flags is now accessible as a attribute
-  if available on the platform.
-
-- Patch #1103951: Expose O_SHLOCK and O_EXLOCK in the posix module if
-  available on the platform.
-
-- Bug #1166660: The readline module could segfault if hook functions
-  were set in a different thread than that which called readline.
-
-- collections.deque objects now support a remove() method.
-
-- operator.itemgetter() and operator.attrgetter() now support retrieving
-  multiple fields.  This provides direct support for sorting on multiple
-  keys (primary, secondary, etc).
-
-- os.access now supports Unicode path names on non-Win32 systems.
-
-- Patches #925152, #1118602: Avoid reading after the end of the buffer
-  in pyexpat.GetInputContext.
-
-- Patches #749830, #1144555: allow UNIX mmap size to default to current
-  file size.
-
-- Added functional.partial().  See PEP309.
-
-- Patch #1093585: raise a ValueError for negative history items in readline.
-  {remove_history,replace_history}
-
-- The spwd module has been added, allowing access to the shadow password
-  database.
-
-- stat_float_times is now True.
-
-- array.array objects are now picklable.
-
-- the cPickle module no longer accepts the deprecated None option in the
-  args tuple returned by __reduce__().
-
-- itertools.islice() now accepts None for the start and step arguments.
-  This allows islice() to work more readily with slices:
-      islice(s.start, s.stop, s.step)
-
-- datetime.datetime() now has a strptime class method which can be used to
-  create datetime object using a string and format.
-
 Library
 -------
 
-- A regrtest option -w was added to re-run failed tests in verbose mode.
-
-- Patch #1446372: quit and exit can now be called from the interactive
-  interpreter to exit.
-
-- The function get_count() has been added to the gc module, and gc.collect()
-  grew an optional 'generation' argument.
-
-- A library msilib to generate Windows Installer files, and a distutils
-  command bdist_msi have been added.
-
-- PEP 343: new module contextlib.py defines decorator @contextmanager
-  and helpful context managers nested() and closing().
-
-- The compiler package now supports future imports after the module docstring.
-
-- Bug #1413790: zipfile now sanitizes absolute archive names that are
-  not allowed by the specs.
-
-- Patch #1215184: FileInput now can be given an opening hook which can
-  be used to control how files are opened.
-
-- Patch #1212287: fileinput.input() now has a mode parameter for
-  specifying the file mode input files should be opened with.
-
-- Patch #1215184: fileinput now has a fileno() function for getting the
-  current file number.
-
-- Patch #1349274: gettext.install() now optionally installs additional
-  translation functions other than _() in the builtin namespace.
-
-- Patch #1337756: fileinput now accepts Unicode filenames.
-
-- Patch #1373643: The chunk module can now read chunks larger than
-  two gigabytes.
-
-- Patch #1417555: SimpleHTTPServer now returns Last-Modified headers.
-
-- Bug #1430298: It is now possible to send a mail with an empty
-  return address using smtplib.
-
-- Bug #1432260: The names of lambda functions are now properly displayed
-  in pydoc.
-
-- Patch #1412872: zipfile now sets the creator system to 3 (Unix)
-  unless the system is Win32.
-
-- Patch #1349118: urllib now supports user:pass@ style proxy
-  specifications, raises IOErrors when proxies for unsupported protocols
-  are defined, and uses the https proxy on https redirections.
-
-- Bug #902075: urllib2 now supports 'host:port' style proxy specifications.
-
-- Bug #1407902: Add support for sftp:// URIs to urlparse.
-
-- Bug #1371247: Update Windows locale identifiers in locale.py.
-
-- Bug #1394565: SimpleHTTPServer now doesn't choke on query parameters
-  any more.
-
-- Bug #1403410: The warnings module now doesn't get confused
-  when it can't find out the module name it generates a warning for.
-
-- Patch #1177307: Added a new codec utf_8_sig for UTF-8 with a BOM signature.
-
-- Patch #1157027: cookielib mishandles RFC 2109 cookies in Netscape mode
-
-- Patch #1117398: cookielib.LWPCookieJar and .MozillaCookieJar now raise
-  LoadError as documented, instead of IOError.  For compatibility,
-  LoadError subclasses IOError.
-
-- Added the hashlib module.  It provides secure hash functions for MD5 and
-  SHA1, 224, 256, 384, and 512.  Note that recent developments make the
-  historic MD5 and SHA1 unsuitable for cryptographic-strength applications.
-  In <http://mail.python.org/pipermail/python-dev/2005-December/058850.html>
-  Ronald L. Rivest offered this advice for Python:
-
-      "The consensus of researchers in this area (at least as
-      expressed at the NIST Hash Function Workshop 10/31/05),
-      is that SHA-256 is a good choice for the time being, but
-      that research should continue, and other alternatives may
-      arise from this research.  The larger SHA's also seem OK."
-
-- Added a subset of Fredrik Lundh's ElementTree package.  Available
-  modules are xml.etree.ElementTree, xml.etree.ElementPath, and
-  xml.etree.ElementInclude, from ElementTree 1.2.6.
-
-- Patch #1162825: Support non-ASCII characters in IDLE window titles.
-
-- Bug #1365984: urllib now opens "data:" URLs again.
-
-- Patch #1314396: prevent deadlock for threading.Thread.join() when an exception
-  is raised within the method itself on a previous call (e.g., passing in an
-  illegal argument)
-
-- Bug #1340337: change time.strptime() to always return ValueError when there
-  is an error in the format string.
-
-- Patch #754022: Greatly enhanced webbrowser.py (by Oleg Broytmann).
-
-- Bug #729103: pydoc.py: Fix docother() method to accept additional
-  "parent" argument.
-
-- Patch #1300515: xdrlib.py: Fix pack_fstring() to really use null bytes
-  for padding.
-
-- Bug #1296004: httplib.py: Limit maximal amount of data read from the
-  socket to avoid a MemoryError on Windows.
-
-- Patch #1166948: locale.py: Prefer LC_ALL, LC_CTYPE and LANG over LANGUAGE
-  to get the correct encoding.
-
-- Patch #1166938: locale.py: Parse LANGUAGE as a colon separated list of
-  languages.
-
-- Patch #1268314: Cache lines in StreamReader.readlines for performance.
-
-- Bug #1290505: Fix clearing the regex cache for time.strptime().
-
-- Bug #1167128: Fix size of a symlink in a tarfile to be 0.
-
-- Patch #810023: Fix off-by-one bug in urllib.urlretrieve reporthook
-  functionality.
-
-- Bug #1163178: Make IDNA return an empty string when the input is empty.
-
-- Patch #848017: Make Cookie more RFC-compliant. Use CRLF as default output
-  separator and do not output trailing semicola.
-
-- Patch #1062060: urllib.urlretrieve() now raises a new exception, named
-  ContentTooShortException, when the actually downloaded size does not
-  match the Content-Length header.
-
-- Bug #1121494: distutils.dir_utils.mkpath now accepts Unicode strings.
-
-- Bug #1178484: Return complete lines from codec stream readers
-  even if there is an exception in later lines, resulting in
-  correct line numbers for decoding errors in source code.
-
-- Bug #1192315: Disallow negative arguments to clear() in pdb.
-
-- Patch #827386: Support absolute source paths in msvccompiler.py.
-
-- Patch #1105730: Apply the new implementation of commonprefix in posixpath
-  to ntpath, macpath, os2emxpath and riscospath.
-
-- Fix a problem in Tkinter introduced by SF patch #869468: delete bogus
-  __hasattr__ and __delattr__ methods on class Tk that were breaking
-  Tkdnd.
-
-- Bug #1015140: disambiguated the term "article id" in nntplib docs and
-  docstrings to either "article number" or "message id".
-
-- Bug #1238170: threading.Thread.__init__ no longer has "kwargs={}" as a
-  parameter, but uses the usual "kwargs=None".
-
-- textwrap now processes text chunks at O(n) speed instead of O(n**2).
-  Patch #1209527 (Contributed by Connelly).
-
-- urllib2 has now an attribute 'httpresponses' mapping from HTTP status code
-  to W3C name (404 -> 'Not Found'). RFE #1216944.
-
-- Bug #1177468: Don't cache the /dev/urandom file descriptor for os.urandom,
-  as this can cause problems with apps closing all file descriptors.
-
-- Bug #839151: Fix an attempt to access sys.argv in the warnings module
-  it can be missing in embedded interpreters
-
-- Bug #1155638: Fix a bug which affected HTTP 0.9 responses in httplib.
-
-- Bug #1100201: Cross-site scripting was possible on BaseHTTPServer via
-  error messages.
-
-- Bug #1108948: Cookie.py produced invalid JavaScript code.
-
-- The tokenize module now detects and reports indentation errors.
-  Bug #1224621.
-
-- The tokenize module has a new untokenize() function to support a full
-  roundtrip from lexed tokens back to Python sourcecode.  In addition,
-  the generate_tokens() function now accepts a callable argument that
-  terminates by raising StopIteration.
-
-- Bug #1196315: fix weakref.WeakValueDictionary constructor.
-
-- Bug #1213894: os.path.realpath didn't resolve symlinks that were the first
-  component of the path.
-
-- Patch #1120353: The xmlrpclib module provides better, more transparent,
-  support for datetime.{datetime,date,time} objects.  With use_datetime set
-  to True, applications shouldn't have to fiddle with the DateTime wrapper
-  class at all.
-
-- distutils.commands.upload was added to support uploading distribution
-  files to PyPI.
-
-- distutils.commands.register now encodes the data as UTF-8 before posting
-  them to PyPI.
-
-- decimal operator and comparison methods now return NotImplemented
-  instead of raising a TypeError when interacting with other types.  This
-  allows other classes to implement __radd__ style methods and have them
-  work as expected.
-
-- Bug #1163325:  Decimal infinities failed to hash.  Attempting to
-  hash a NaN raised an InvalidOperation instead of a TypeError.
-
-- Patch #918101: Add tarfile open mode r|* for auto-detection of the
-  stream compression; add, for symmetry reasons, r:* as a synonym of r.
-
-- Patch #1043890: Add extractall method to tarfile.
-
-- Patch #1075887: Don't require MSVC in distutils if there is nothing
-  to build.
-
-- Patch #1103407: Properly deal with tarfile iterators when untarring
-  symbolic links on Windows.
-
-- Patch #645894: Use getrusage for computing the time consumption in
-  profile.py if available.
-
-- Patch #1046831: Use get_python_version where appropriate in sysconfig.py.
-
-- Patch #1117454: Remove code to special-case cookies without values
-  in LWPCookieJar.
-
-- Patch #1117339: Add cookielib special name tests.
-
-- Patch #1112812: Make bsddb/__init__.py more friendly for modulefinder.
-
-- Patch #1110248: SYNC_FLUSH the zlib buffer for GZipFile.flush.
-
-- Patch #1107973: Allow to iterate over the lines of a tarfile.ExFileObject.
-
-- Patch #1104111: Alter setup.py --help and --help-commands.
-
-- Patch #1121234: Properly cleanup _exit and tkerror commands.
-
-- Patch #1049151: xdrlib now unpacks booleans as True or False.
-
-- Fixed bug in a NameError bug in cookielib.  Patch #1116583.
-
-- Applied a security fix to SimpleXMLRPCserver (PSF-2005-001).  This
-  disables recursive traversal through instance attributes, which can
-  be exploited in various ways.
-
-- Bug #1222790: in SimpleXMLRPCServer, set the reuse-address and close-on-exec
-  flags on the HTTP listening socket.
-
-- Bug #792570: SimpleXMLRPCServer had problems if the request grew too large.
-  Fixed by reading the HTTP body in chunks instead of one big socket.read().
-
-- Patches #893642, #1039083: add allow_none, encoding arguments to constructors of
-  SimpleXMLRPCServer and CGIXMLRPCRequestHandler.
-
-- Bug #1110478: Revert os.environ.update to do putenv again.
-
-- Bug #1103844: fix distutils.install.dump_dirs() with negated options.
-
-- os.{SEEK_SET, SEEK_CUR, SEEK_END} have been added for convenience.
-
-- Enhancements to the csv module:
-
-  + Dialects are now validated by the underlying C code, better
-    reflecting its capabilities, and improving its compliance with
-    PEP 305.
-  + Dialect parameter parsing has been re-implemented to improve error
-    reporting.
-  + quotechar=None and quoting=QUOTE_NONE now work the way PEP 305
-    dictates.
-  + the parser now removes the escapechar prefix from escaped characters.
-  + when quoting=QUOTE_NONNUMERIC, the writer now tests for numeric
-    types, rather than any object than can be represented as a numeric.
-  + when quoting=QUOTE_NONNUMERIC, the reader now casts unquoted fields
-    to floats.
-  + reader now allows \r characters to be quoted (previously it only allowed
-    \n to be quoted).
-  + writer doublequote handling improved.
-  + Dialect classes passed to the module are no longer instantiated by
-    the module before being parsed (the former validation scheme required
-    this, but the mechanism was unreliable).
-  + The dialect registry now contains instances of the internal
-    C-coded dialect type, rather than references to python objects.
-  + the internal c-coded dialect type is now immutable.
-  + register_dialect now accepts the same keyword dialect specifications
-    as the reader and writer, allowing the user to register dialects
-    without first creating a dialect class.
-  + a configurable limit to the size of parsed fields has been added -
-    previously, an unmatched quote character could result in the entire
-    file being read into the field buffer before an error was reported.
-  + A new module method csv.field_size_limit() has been added that sets
-    the parser field size limit (returning the former limit). The initial
-    limit is 128kB.
-  + A line_num attribute has been added to the reader object, which tracks
-    the number of lines read from the source iterator. This is not
-    the same as the number of records returned, as records can span
-    multiple lines.
-  + reader and writer objects were not being registered with the cyclic-GC.
-    This has been fixed.
-
-- _DummyThread objects in the threading module now delete self.__block that is
-  inherited from _Thread since it uses up a lock allocated by 'thread'.  The
-  lock primitives tend to be limited in number and thus should not be wasted on
-  a _DummyThread object.  Fixes bug #1089632.
-
-- The imghdr module now detects Exif files.
-
-- StringIO.truncate() now correctly adjusts the size attribute.
-  (Bug #951915).
-
-- locale.py now uses an updated locale alias table (built using
-  Tools/i18n/makelocalealias.py, a tool to parse the X11 locale
-  alias file); the encoding lookup was enhanced to use Python's
-  encoding alias table.
-
-- moved deprecated modules to Lib/lib-old:  whrandom, tzparse, statcache.
-
-- the pickle module no longer accepts the deprecated None option in the
-  args tuple returned by __reduce__().
-
-- optparse now optionally imports gettext.  This allows its use in setup.py.
-
-- the pickle module no longer uses the deprecated bin parameter.
-
-- the shelve module no longer uses the deprecated binary parameter.
-
-- the pstats module no longer uses the deprecated ignore() method.
-
-- the filecmp module no longer uses the deprecated use_statcache argument.
-
-- unittest.TestCase.run() and unittest.TestSuite.run() can now be successfully
-  extended or overridden by subclasses.  Formerly, the subclassed method would
-  be ignored by the rest of the module.  (Bug #1078905).
-
-- heapq.nsmallest() and heapq.nlargest() now support key= arguments with
-  the same meaning as in list.sort().
-
-- Bug #1076985: ``codecs.StreamReader.readline()`` now calls ``read()`` only
-  once when a size argument is given. This prevents a buffer overflow in the
-  tokenizer with very long source lines.
-
-- Bug #1083110: ``zlib.decompress.flush()`` would segfault if called
-  immediately after creating the object, without any intervening
-  ``.decompress()`` calls.
-
-- The reconvert.quote function can now emit triple-quoted strings.  The
-  reconvert module now has some simple documentation.
-
-- ``UserString.MutableString`` now supports negative indices in
-  ``__setitem__`` and ``__delitem__``
-
-- Bug #1149508: ``textwrap`` now handles hyphenated numbers (eg. "2004-03-05")
-  correctly.
-
-- Partial fixes for SF bugs #1163244 and #1175396: If a chunk read by
-  ``codecs.StreamReader.readline()`` has a trailing "\r", read one more
-  character even if the user has passed a size parameter to get a proper
-  line ending. Remove the special handling of a "\r\n" that has been split
-  between two lines.
-
-- Bug #1251300: On UCS-4 builds the "unicode-internal" codec will now complain
-  about illegal code points. The codec now supports PEP 293 style error
-  handlers.
-
-- Bug #1235646: ``codecs.StreamRecoder.next()`` now reencodes the data it reads
-  from the input stream, so that the output is a byte string in the correct
-  encoding instead of a unicode string.
-
-- Bug #1202493: Fixing SRE parser to handle '{}' as perl does, rather than
-  considering it exactly like a '*'.
-
-- Bug #1245379: Add "unicode-1-1-utf-7" as an alias for "utf-7" to
-  ``encodings.aliases``.
-
-- ` uu.encode()`` and ``uu.decode()`` now support unicode filenames.
-
-- Patch #1413711: Certain patterns of differences were making difflib
-  touch the recursion limit.
-
 Build
 -----
 
-- Patch #1432345: Make python compile on DragonFly.
-
-- Build support for Win64-AMD64 was added.
-
-- Patch #1428494: Prefer linking against ncursesw over ncurses library.
-
-- Patch #881820: look for openpty and forkpty also in libbsd.
-
-- The sources of zlib are now part of the Python distribution (zlib 1.2.3).
-  The zlib module is now builtin on Windows.
-
-- Use -xcode=pic32 for CCSHARED on Solaris with SunPro.
-
-- Bug #1189330: configure did not correctly determine the necessary
-  value of LINKCC if python was built with GCC 4.0.
-
-- Upgrade Windows build to zlib 1.2.3 which eliminates a potential security
-  vulnerability in zlib 1.2.1 and 1.2.2.
-
-- EXTRA_CFLAGS has been introduced as an environment variable to hold compiler
-  flags that change binary compatibility.  Changes were also made to
-  distutils.sysconfig to also use the environment variable when used during
-  compilation of the interpreter and of C extensions through distutils.
-
-- SF patch 1171735: Darwin 8's headers are anal about POSIX compliance,
-  and linking has changed (prebinding is now deprecated, and libcc_dynamic
-  no longer exists). This configure patch makes things right.
-
-- Bug #1158607: Build with --disable-unicode again.
-
-- spwdmodule.c is built only if either HAVE_GETSPNAM or HAVE_HAVE_GETSPENT is
-  defined.  Discovered as a result of not being able to build on OS X.
-
-- setup.py now uses the directories specified in LDFLAGS using the -L option
-  and in CPPFLAGS using the -I option for adding library and include
-  directories, respectively, for compiling extension modules against.  This has
-  led to the core being compiled using the values in CPPFLAGS.  It also removes
-  the need for the special-casing of both DarwinPorts and Fink for darwin since
-  the proper directories can be specified in LDFLAGS (``-L/sw/lib`` for Fink,
-  ``-L/opt/local/lib`` for DarwinPorts) and CPPFLAGS (``-I/sw/include`` for
-  Fink, ``-I/opt/local/include`` for DarwinPorts).
-
-- Test in configure.in that checks for tzset no longer dependent on tm->tm_zone
-  to exist in the struct (not required by either ISO C nor the UNIX 2 spec).
-  Tests for sanity in tzname when HAVE_TZNAME defined were also defined.
-  Closes bug #1096244.  Thanks Gregory Bond.
-
 C API
 -----
 
-- Added a C API for set and frozenset objects.
-
-- Removed PyRange_New().
-
-- Patch #1313939: PyUnicode_DecodeCharmap() accepts a unicode string as the
-  mapping argument now. This string is used as a mapping table. Byte values
-  greater than the length of the string and 0xFFFE are treated as undefined
-  mappings.
-
-
 Tests
 -----
 
-- In test_os, st_?time is now truncated before comparing it with ST_?TIME.
-
-- Patch #1276356: New resource "urlfetch" is implemented.  This enables
-  even impatient people to run tests that require remote files.
-
-
 Documentation
 -------------
 
-- Bug #1402224: Add warning to dl docs about crashes.
-
-- Bug #1396471: Document that Windows' ftell() can return invalid
-  values for text files with UNIX-style line endings.
-
-- Bug #1274828: Document os.path.splitunc().
-
-- Bug #1190204: Clarify which directories are searched by site.py.
-
-- Bug #1193849: Clarify os.path.expanduser() documentation.
-
-- Bug #1243192: re.UNICODE and re.LOCALE affect \d, \D, \s and \S.
-
-- Bug #755617: Document the effects of os.chown() on Windows.
-
-- Patch #1180012: The documentation for modulefinder is now in the library reference.
-
-- Patch #1213031: Document that os.chown() accepts argument values of -1.
-
-- Bug #1190563: Document os.waitpid() return value with WNOHANG flag.
-
-- Bug #1175022: Correct the example code for property().
-
-- Document the IterableUserDict class in the UserDict module.
-  Closes bug #1166582.
-
-- Remove all latent references for "Macintosh" that referred to semantics for
-  Mac OS 9 and change to reflect the state for OS X.
-  Closes patch #1095802.  Thanks Jack Jansen.
-
 Mac
 ---
 
-
 New platforms
 -------------
 
-- FreeBSD 7 support is added.
-
-
 Tools/Demos
 -----------
 
-- Created Misc/Vim/vim_syntax.py to auto-generate a python.vim file in that
-  directory for syntax highlighting in Vim.  Vim directory was added and placed
-  vimrc to it (was previous up a level).
-
-- Added two new files to Tools/scripts: pysource.py, which recursively
-  finds Python source files, and findnocoding.py, which finds Python
-  source files that need an encoding declaration.
-  Patch #784089, credits to Oleg Broytmann.
-
-- Bug #1072853: pindent.py used an uninitialized variable.
-
-- Patch #1177597: Correct Complex.__init__.
-
-- Fixed a display glitch in Pynche, which could cause the right arrow to
-  wiggle over by a pixel.
-
-What's New in Python 2.4 final?
-===============================
-
-*Release date: 30-NOV-2004*
-
-Core and builtins
------------------
-
-- Bug 875692: Improve signal handling, especially when using threads, by
-  forcing an early re-execution of PyEval_EvalFrame() "periodic" code when
-  things_to_do is not cleared by Py_MakePendingCalls().
-
-
-What's New in Python 2.4 (release candidate 1)
-==============================================
-
-*Release date: 18-NOV-2004*
-
-Core and builtins
------------------
-
-- Bug 1061968:  Fixes in 2.4a3 to address thread bug 1010677 reintroduced
-  the years-old thread shutdown race bug 225673.  Numeric history lesson
-  aside, all bugs in all three reports are fixed now.
-
-
-Library
--------
-
-- Bug 1052242: If exceptions are raised by an atexit handler function an
-  attempt is made to execute the remaining handlers.  The last exception
-  raised is re-raised.
-
-- ``doctest``'s new support for adding ``pdb.set_trace()`` calls to
-  doctests was broken in a dramatic but shallow way.  Fixed.
-
-- Bug 1065388:  ``calendar``'s ``day_name``, ``day_abbr``, ``month_name``,
-  and ``month_abbr`` attributes emulate sequences of locale-correct
-  spellings of month and day names.  Because the locale can change at
-  any time, the correct spelling is recomputed whenever one of these is
-  indexed.  In the worst case, the index may be a slice object, so these
-  recomputed every day or month name each time they were indexed.  This is
-  much slower than necessary in the usual case, when the index is just an
-  integer.  In that case, only the single spelling needed is recomputed
-  now; and, when the index is a slice object, only the spellings needed
-  by the slice are recomputed now.
-
-- Patch 1061679: Added ``__all__`` to pickletools.py.
-
-Build
------
-
-- Bug 1034277 / Patch 1035255: Remove compilation of core against CoreServices
-  and CoreFoundation on OS X.  Involved removing PyMac_GetAppletScriptFile()
-  which has no known users.  Thanks Bob Ippolito.
-
-C API
------
-
-- The PyRange_New() function is deprecated.
-
-
-What's New in Python 2.4 beta 2?
-================================
-
-*Release date: 03-NOV-2004*
-
-License
--------
-
-The Python Software Foundation changed the license under which Python
-is released, to remove Python version numbers.  There were no other
-changes to the license.  So, for example, wherever the license for
-Python 2.3 said "Python 2.3", the new license says "Python".  The
-intent is to make it possible to refer to the PSF license in a more
-durable way.  For example, some people say they're confused by that
-the Open Source Initiative's entry for the Python Software Foundation
-License::
-
-      http://www.opensource.org/licenses/PythonSoftFoundation.php
-
-says "Python 2.1.1" all over it, wondering whether it applies only
-to Python 2.1.1.
-
-The official name of the new license is the Python Software Foundation
-License Version 2.
-
-Core and builtins
------------------
-
-- Bug #1055820 Cyclic garbage collection was not protecting against that
-  calling a live weakref to a piece of cyclic trash could resurrect an
-  insane mutation of the trash if any Python code ran during gc (via
-  running a dead object's __del__ method, running another callback on a
-  weakref to a dead object, or via any Python code run in any other thread
-  that managed to obtain the GIL while a __del__ or callback was running
-  in the thread doing gc).  The most likely symptom was "impossible"
-  ``AttributeError`` exceptions, appearing seemingly at random, on weakly
-  referenced objects.  The cure was to clear all weakrefs to unreachable
-  objects before allowing any callbacks to run.
-
-- Bug #1054139 _PyString_Resize() now invalidates its cached hash value.
-
-Extension Modules
------------------
-
-- Bug #1048870:  the compiler now generates distinct code objects for
-  functions with identical bodies.  This was producing confusing
-  traceback messages which pointed to the function where the code
-  object was first defined rather than the function being executed.
-
-Library
--------
-
-- Patch #1056967 changes the semantics of Template.safe_substitute() so that
-  no ValueError is raised on an 'invalid' match group.  Now the delimiter is
-  returned.
-
-- Bug #1052503 pdb.runcall() was not passing along keyword arguments.
-
-- Bug #902037: XML.sax.saxutils.prepare_input_source() now combines relative
-  paths with a base path before checking os.path.isfile().
-
-- The whichdb module can now be run from the command line.
-
-- Bug #1045381: time.strptime() can now infer the date using %U or %W (week of
-  the year) when the day of the week and year are also specified.
-
-- Bug #1048816: fix bug in Ctrl-K at start of line in curses.textpad.Textbox
-
-- Bug #1017553: fix bug in tarfile.filemode()
-
-- Patch #737473: fix bug that old source code is shown in tracebacks even if
-  the source code is updated and reloaded.
-
-Build
------
-
-- Patch #1044395: --enable-shared is allowed in FreeBSD also.
-
-What's New in Python 2.4 beta 1?
-================================
-
-*Release date: 15-OCT-2004*
-
-Core and builtins
------------------
-
-- Patch #975056: Restartable signals were not correctly disabled on
-  BSD systems. Consistently use PyOS_setsig() instead of signal().
-
-- The internal portable implementation of thread-local storage (TLS), used
-  by the ``PyGILState_Ensure()``/``PyGILState_Release()`` API, was not
-  thread-correct.  This could lead to a variety of problems, up to and
-  including segfaults.  See bug 1041645 for an example.
-
-- Added a command line option, -m module, which searches sys.path for the
-  module and then runs it.  (Contributed by Nick Coghlan.)
-
-- The bytecode optimizer now folds tuples of constants into a single
-  constant.
-
-- SF bug #513866:  Float/long comparison anomaly.  Prior to 2.4b1, when
-  an integer was compared to a float, the integer was coerced to a float.
-  That could yield spurious overflow errors (if the integer was very
-  large), and to anomalies such as
-  ``long(1e200)+1 == 1e200 == long(1e200)-1``.  Coercion to float is no
-  longer performed, and cases like ``long(1e200)-1 < 1e200``,
-  ``long(1e200)+1 > 1e200`` and ``(1 << 20000) > 1e200`` are computed
-  correctly now.
-
-Extension modules
------------------
-
-- ``collections.deque`` objects didn't play quite right with garbage
-  collection, which could lead to a segfault in a release build, or
-  an assert failure in a debug build.  Also, added overflow checks,
-  better detection of mutation during iteration, and shielded deque
-  comparisons from unusual subclass overrides of the __iter__() method.
-
-Library
--------
-
-- Patch 1046644: distutils build_ext grew two new options - --swig for
-  specifying the swig executable to use, and --swig-opts to specify
-  options to pass to swig. --swig-opts="-c++" is the new way to spell
-  --swig-cpp.
-
-- Patch 983206: distutils now obeys environment variable LDSHARED, if
-  it is set.
-
-- Added Peter Astrand's subprocess.py module.  See PEP 324 for details.
-
-- time.strptime() now properly escapes timezones and all other locale-specific
-  strings for regex-specific symbols.  Was breaking under Japanese Windows when
-  the timezone was specified as "Tokyo (standard time)".
-  Closes bug #1039270.
-
-- Updates for the email package:
-
-  + email.Utils.formatdate() grew a 'usegmt' argument for HTTP support.
-  + All deprecated APIs that in email 2.x issued warnings have been removed:
-    _encoder argument to the MIMEText constructor, Message.add_payload(),
-    Utils.dump_address_pair(), Utils.decode(), Utils.encode()
-  + New deprecations: Generator.__call__(), Message.get_type(),
-    Message.get_main_type(), Message.get_subtype(), the 'strict' argument to
-    the Parser constructor.  These will be removed in email 3.1.
-  + Support for Python earlier than 2.3 has been removed (see PEP 291).
-  + All defect classes have been renamed to end in 'Defect'.
-  + Some FeedParser fixes; also a MultipartInvariantViolationDefect will be
-    added to messages that claim to be multipart but really aren't.
-  + Updates to documentation.
-
-- re's findall() and finditer() functions now take an optional flags argument
-  just like the compile(), search(), and match() functions.  Also, documented
-  the previously existing start and stop parameters for the findall() and
-  finditer() methods of regular expression objects.
-
-- rfc822 Messages now support iterating over the headers.
-
-- The (undocumented) tarfile.Tarfile.membernames has been removed;
-  applications should use the getmember function.
-
-- httplib now offers symbolic constants for the HTTP status codes.
-
-- SF bug #1028306:  Trying to compare a ``datetime.date`` to a
-  ``datetime.datetime`` mistakenly compared only the year, month and day.
-  Now it acts like a mixed-type comparison:  ``False`` for ``==``,
-  ``True`` for ``!=``, and raises ``TypeError`` for other comparison
-  operators.  Because datetime is a subclass of date, comparing only the
-  base class (date) members can still be done, if that's desired, by
-  forcing using of the approprate date method; e.g.,
-  ``a_date.__eq__(a_datetime)`` is true if and only if the year, month
-  and day members of ``a_date`` and ``a_datetime`` are equal.
-
-- bdist_rpm now supports command line options --force-arch,
-  {pre,post}-install,  {pre,post}-uninstall, and
-  {prep,build,install,clean,verify}-script.
-
-- SF patch #998993: The UTF-8 and the UTF-16 stateful decoders now support
-  decoding incomplete input (when the input stream is temporarily exhausted).
-  ``codecs.StreamReader`` now implements buffering, which enables proper
-  readline support for the UTF-16 decoders. ``codecs.StreamReader.read()``
-  has a new argument ``chars`` which specifies the number of characters to
-  return. ``codecs.StreamReader.readline()`` and
-  ``codecs.StreamReader.readlines()`` have a new argument ``keepends``.
-  Trailing "\n"s will be stripped from the lines if ``keepends`` is false.
-
-- The documentation for doctest is greatly expanded, and now covers all
-  the new public features (of which there are many).
-
-- ``doctest.master`` was put back in, and ``doctest.testmod()`` once again
-  updates it.  This isn't good, because every ``testmod()`` call
-  contributes to bloating the "hidden" state of ``doctest.master``, but
-  some old code apparently relies on it.  For now, all we can do is
-  encourage people to stitch doctests together via doctest's unittest
-  integration features instead.
-
-- httplib now handles ipv6 address/port pairs.
-
-- SF bug #1017864: ConfigParser now correctly handles default keys,
-  processing them with ``ConfigParser.optionxform`` when supplied,
-  consistent with the handling of config file entries and runtime-set
-  options.
-
-- SF bug #997050: Document, test, & check for non-string values in
-  ConfigParser.  Moved the new string-only restriction added in
-  rev. 1.65 to the SafeConfigParser class, leaving existing
-  ConfigParser & RawConfigParser behavior alone, and documented the
-  conditions under which non-string values work.
-
-Build
------
-
-- Building on darwin now includes /opt/local/include and /opt/local/lib for
-  building extension modules.  This is so as to include software installed as
-  a DarwinPorts port <http://darwinports.opendarwin.org/>
-
-- pyport.h now defines a Py_IS_NAN macro.  It works as-is when the
-  platform C computes true for ``x != x`` if and only if X is a NaN.
-  Other platforms can override the default definition with a platform-
-  specific spelling in that platform's pyconfig.h.  You can also override
-  pyport.h's default Py_IS_INFINITY definition now.
-
-C API
------
-
-- SF patch 1044089:  New function ``PyEval_ThreadsInitialized()`` returns
-  non-zero if PyEval_InitThreads() has been called.
-
-- The undocumented and unused extern int ``_PyThread_Started`` was removed.
-
-- The C API calls ``PyInterpreterState_New()`` and ``PyThreadState_New()``
-  are two of the very few advertised as being safe to call without holding
-  the GIL.  However, this wasn't true in a debug build, as bug 1041645
-  demonstrated.  In a debug build, Python redirects the ``PyMem`` family
-  of calls to Python's small-object allocator, to get the benefit of
-  its extra debugging capabilities.  But Python's small-object allocator
-  isn't threadsafe, relying on the GIL to avoid the expense of doing its
-  own locking.  ``PyInterpreterState_New()`` and ``PyThreadState_New()``
-  call the platform ``malloc()`` directly now, regardless of build type.
-
-- PyLong_AsUnsignedLong[Mask] now support int objects as well.
-
-- SF patch #998993: ``PyUnicode_DecodeUTF8Stateful`` and
-  ``PyUnicode_DecodeUTF16Stateful`` have been added, which implement stateful
-  decoding.
-
-Tests
------
-
-- test__locale ported to unittest
-
-Mac
----
-
-- ``plistlib`` now supports non-dict root objects.  There is also a new
-  interface for reading and writing plist files: ``readPlist(pathOrFile)``
-  and ``writePlist(rootObject, pathOrFile)``
-
-Tools/Demos
------------
-
-- The text file comparison scripts ``ndiff.py`` and ``diff.py`` now
-  read the input files in universal-newline mode.  This spares them
-  from consuming a great deal of time to deduce the useless result that,
-  e.g., a file with Windows line ends and a file with Linux line ends
-  have no lines in common.
-
-
-What's New in Python 2.4 alpha 3?
-=================================
-
-*Release date: 02-SEP-2004*
-
-Core and builtins
------------------
-
-- SF patch #1007189: ``from ... import ...`` statements now allow the name
-  list to be surrounded by parentheses.
-
-- Some speedups for long arithmetic, thanks to Trevor Perrin.  Gradeschool
-  multiplication was sped a little by optimizing the C code.  Gradeschool
-  squaring was sped by about a factor of 2, by exploiting that about half
-  the digit products are duplicates in a square.  Because exponentiation
-  uses squaring often, this also speeds long power.  For example, the time
-  to compute 17**1000000 dropped from about 14 seconds to 9 on my box due
-  to this much.  The cutoff for Karatsuba multiplication was raised,
-  since gradeschool multiplication got quicker, and the cutoff was
-  aggressively small regardless.  The exponentiation algorithm was switched
-  from right-to-left to left-to-right, which is more efficient for small
-  bases.  In addition, if the exponent is large, the algorithm now does
-  5 bits (instead of 1 bit) at a time.  That cut the time to compute
-  17**1000000 on my box in half again, down to about 4.5 seconds.
-
-- OverflowWarning is no longer generated.  PEP 237 scheduled this to
-  occur in Python 2.3, but since OverflowWarning was disabled by default,
-  nobody realized it was still being generated.  On the chance that user
-  code is still using them, the Python builtin OverflowWarning, and
-  corresponding C API PyExc_OverflowWarning, will exist until Python 2.5.
-
-- Py_InitializeEx has been added.
-
-- Fix the order of application of decorators.  The proper order is bottom-up;
-  the first decorator listed is the last one called.
-
-- SF patch #1005778.  Fix a seg fault if the list size changed while
-  calling list.index().  This could happen if a rich comparison function
-  modified the list.
-
-- The ``func_name`` (a.k.a. ``__name__``) attribute of user-defined
-  functions is now writable.
-
-- code_new (a.k.a new.code()) now checks its arguments sufficiently
-  carefully that passing them on to PyCode_New() won't trigger calls
-  to Py_FatalError() or PyErr_BadInternalCall().  It is still the case
-  that the returned code object might be entirely insane.
-
-- Subclasses of string can no longer be interned.  The semantics of
-  interning were not clear here -- a subclass could be mutable, for
-  example -- and had bugs.  Explicitly interning a subclass of string
-  via intern() will raise a TypeError.  Internal operations that attempt
-  to intern a string subclass will have no effect.
-
-- Bug 1003935:  xrange() could report bogus OverflowErrors.  Documented
-  what xrange() intends, and repaired tests accordingly.
-
-Extension modules
------------------
-
-- difflib now supports HTML side-by-side diff.
-
-- os.urandom has been added for systems that support sources of random
-  data.
-
-- Patch 1012740:  truncate() on a writeable cStringIO now resets the
-  position to the end of the stream.  This is consistent with the original
-  StringIO module and avoids inadvertently resurrecting data that was
-  supposed to have been truncated away.
-
-- Added socket.socketpair().
-
-- Added CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber
-  members to xml.parsers.expat.XMLParser object.
-
-- The mpz, rotor, and xreadlines modules, all deprecated in earlier
-  versions of Python, have now been removed.
-
-Library
--------
-
-- Patch #934356: if a module defines __all__, believe that rather than using
-  heuristics for filtering out imported names.
-
-- Patch #941486: added os.path.lexists(), which returns True for broken
-  symlinks, unlike os.path.exists().
-
-- the random module now uses os.urandom() for seeding if it is available.
-  Added a new generator based on os.urandom().
-
-- difflib and diff.py can now generate HTML.
-
-- bdist_rpm now includes version and release in the BuildRoot, and
-  replaces - by ``_`` in version and release.
-
-- distutils build/build_scripts now has an -e option to specify the
-  path to the Python interpreter for installed scripts.
-
-- PEP 292 classes Template and SafeTemplate are added to the string module.
-
-- tarfile now generates GNU tar files by default.
-
-- HTTPResponse has now a getheaders method.
-
-- Patch #1006219: let inspect.getsource handle '@' decorators. Thanks Simon
-  Percivall.
-
-- logging.handlers.SMTPHandler.date_time has been removed;
-  the class now uses email.Utils.formatdate to generate the time stamp.
-
-- A new function tkFont.nametofont was added to return an existing
-  font. The Font class constructor now has an additional exists argument
-  which, if True, requests to return/configure an existing font, rather
-  than creating a new one.
-
-- Updated the decimal package's min() and max() methods to match the
-  latest revision of the General Decimal Arithmetic Specification.
-  Quiet NaNs are ignored and equal values are sorted based on sign
-  and exponent.
-
-- The decimal package's Context.copy() method now returns deep copies.
-
-- Deprecated sys.exitfunc in favor of the atexit module.  The sys.exitfunc
-  attribute will be kept around for backwards compatibility and atexit
-  will just become the one preferred way to do it.
-
-- patch #675551: Add get_history_item and replace_history_item functions
-  to the readline module.
-
-- bug #989672: pdb.doc and the help messages for the help_d and help_u methods
-  of the pdb.Pdb class gives have been corrected. d(own) goes to a newer
-  frame, u(p) to an older frame, not the other way around.
-
-- bug #990669: os.path.realpath() will resolve symlinks before normalizing the
-  path, as normalizing the path may alter the meaning of the path if it
-  contains symlinks.
-
-- bug #851123: shutil.copyfile will raise an exception when trying to copy a
-  file onto a link to itself. Thanks Gregory Ball.
-
-- bug #570300: Fix inspect to resolve file locations using os.path.realpath()
-  so as to properly list all functions in a module when the module itself is
-  reached through a symlink.  Thanks Johannes Gijsbers.
-
-- doctest refactoring continued.  See the docs for details.  As part of
-  this effort, some old and little- (never?) used features are now
-  deprecated:  the Tester class, the module is_private() function, and the
-  isprivate argument to testmod().  The Tester class supplied a feeble
-  "by hand" way to combine multiple doctests, if you knew exactly what
-  you were doing.  The newer doctest features for unittest integration
-  already did a better job of that, are stronger now than ever, and the
-  new DocTestRunner class is a saner foundation if you want to do it by
-  hand.  The "private name" filtering gimmick was a mistake from the
-  start, and testmod() changed long ago to ignore it by default.  If
-  you want to filter out tests, the new DocTestFinder class can be used
-  to return a list of all doctests, and you can filter that list by
-  any computable criteria before passing it to a DocTestRunner instance.
-
-- Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)).
-
-Tools/Demos
------------
-
-- IDLE's shortcut keys for windows are now case insensitive so that
-  Control-V works the same as Control-v.
-
-- pygettext.py: Generate POT-Creation-Date header in ISO format.
-
-Build
------
-
-- Backward incompatibility:  longintrepr.h now triggers a compile-time
-  error if SHIFT (the number of bits in a Python long "digit") isn't
-  divisible by 5.  This new requirement allows simple code for the new
-  5-bits-at-a-time long_pow() implementation.  If necessary, the
-  restriction could be removed (by complicating long_pow(), or by
-  falling back to the 1-bit-at-a-time algorithm), but there are no
-  plans to do so.
-
-- bug #991962: When building with --disable-toolbox-glue on Darwin no
-  attempt to build Mac-specific modules occurs.
-
-- The --with-tsc flag to configure to enable VM profiling with the
-  processor's timestamp counter now works on PPC platforms.
-
-- patch #1006629: Define _XOPEN_SOURCE to 500 on Solaris 8/9 to match
-  GCC's definition and avoid redefinition warnings.
-
-- Detect pthreads support (provided by gnu pth pthread emulation) on
-  GNU/k*BSD systems.
-
-- bug #1005737, #1007249: Fixed several build problems and warnings
-  found on old/legacy C compilers of HP-UX, IRIX and Tru64.
-
-C API
------
-
-..
-
-Documentation
--------------
-
-- patch #1005936, bug #1009373: fix index entries which contain
-  an underscore when viewed with Acrobat.
-
-- bug #990669: os.path.normpath may alter the meaning of a path if
-  it contains symbolic links. This has been documented in a comment
-  since 1992, but is now in the library reference as well.
-
-New platforms
--------------
-
-- FreeBSD 6 is now supported.
-
-Tests
------
-
-..
-
-Windows
--------
-
-- Boosted the stack reservation for python.exe and pythonw.exe from
-  the default 1MB to 2MB.  Stack frames under VC 7.1 for 2.4 are enough
-  bigger than under VC 6.0 for 2.3.4 that deeply recursive progams
-  within the default sys.getrecursionlimit() default value of 1000 were
-  able to suffer undetected C stack overflows.  The standard test program
-  test_compiler was one such program.  If a Python process on Windows
-  "just vanishes" without a trace, and without an error message of any
-  kind, but with an exit code of 128, undetected stack overflow may be
-  the problem.
-
-Mac
----
-
-..
-
-
-What's New in Python 2.4 alpha 2?
-=================================
-
-*Release date: 05-AUG-2004*
-
-Core and builtins
------------------
-
-- Patch #980695:  Implements efficient string concatenation for statements
-  of the form s=s+t and s+=t.  This will vary across implementations.
-  Accordingly, the str.join() method is strongly preferred for performance
-  sensitive code.
-
-- PEP-0318, Function Decorators have been added to the language. These are
-  implemented using the Java-style @decorator syntax, like so::
-
-     @staticmethod
-     def foo(bar):
-
-  (The PEP needs to be updated to reflect the current state)
-
-- When importing a module M raises an exception, Python no longer leaves M
-  in sys.modules.  Before 2.4a2 it did, and a subsequent import of M would
-  succeed, picking up a module object from sys.modules reflecting as much
-  of the initialization of M as completed before the exception was raised.
-  Subsequent imports got no indication that M was in a partially-
-  initialized state, and the importers could get into arbitrarily bad
-  trouble as a result (the M they got was in an unintended state,
-  arbitrarily far removed from M's author's intent).  Now subsequent
-  imports of M will continue raising exceptions (but if, for example, the
-  source code for M is edited between import attempts, then perhaps later
-  attempts will succeed, or raise a different exception).
-
-  This can break existing code, but in such cases the code was probably
-  working before by accident.  In the Python source, the only case of
-  breakage discovered was in a test accidentally relying on a damaged
-  module remaining in sys.modules.  Cases are also known where tests
-  deliberately provoking import errors remove damaged modules from
-  sys.modules themselves, and such tests will break now if they do an
-  unconditional del sys.modules[M].
-
-- u'%s' % obj will now try obj.__unicode__() first and fallback to
-  obj.__str__() if no __unicode__ method can be found.
-
-- Patch #550732: Add PyArg_VaParseTupleAndKeywords().  Analogous to
-  PyArg_VaParse().  Both are now documented.  Thanks Greg Chapman.
-
-- Allow string and unicode return types from .encode()/.decode()
-  methods on string and unicode objects.  Added unicode.decode()
-  which was missing for no apparent reason.
-
-- An attempt to fix the mess that is Python's behaviour with
-  signal handlers and threads, complicated by readline's behaviour.
-  It's quite possible that there are still bugs here.
-
-- Added C macros Py_CLEAR and Py_VISIT to ease the implementation of
-  types that support garbage collection.
-
-- Compiler now treats None as a constant.
-
-- The type of values returned by __int__, __float__, __long__,
-  __oct__, and __hex__ are now checked.  Returning an invalid type
-  will cause a TypeError to be raised.  This matches the behavior of
-  Jython.
-
-- Implemented bind_textdomain_codeset() in locale module.
-
-- Added a workaround for proper string operations in BSDs.  str.split
-  and str.is* methods can now work correctly with UTF-8 locales.
-
-- Bug #989185: unicode.iswide() and unicode.width() is dropped and
-  the East Asian Width support is moved to unicodedata extension
-  module.
-
-- Patch #941229: The source code encoding in interactive mode
-  now refers sys.stdin.encoding not just ISO-8859-1 anymore.  This
-  allows for non-latin-1 users to write unicode strings directly.
-
-Extension modules
------------------
-
-- cpickle now supports the same keyword arguments as pickle.
-
-Library
--------
-
-- Added new codecs and aliases for ISO_8859-11, ISO_8859-16 and
-  TIS-620
-
-- Thanks to Edward Loper, doctest has been massively refactored, and
-  many new features were added.  Full docs will appear later.  For now
-  the doctest module comments and new test cases give good coverage.
-  The refactoring provides many hook points for customizing behavior
-  (such as how to report errors, and how to compare expected to actual
-  output).  New features include a <BLANKLINE> marker for expected
-  output containing blank lines, options to produce unified or context
-  diffs when actual output doesn't match expectations, an option to
-  normalize whitespace before comparing, and an option to use an
-  ellipsis to signify "don't care" regions of output.
-
-- Tkinter now supports the wish -sync and -use options.
-
-- The following methods in time support passing of None: ctime(), gmtime(),
-  and localtime().  If None is provided, the current time is used (the
-  same as when the argument is omitted).
-  [SF bug 658254, patch 663482]
-
-- nntplib does now allow to ignore a .netrc file.
-
-- urllib2 now recognizes Basic authentication even if other authentication
-  schemes are offered.
-
-- Bug #1001053.  wave.open() now accepts unicode filenames.
-
-- gzip.GzipFile has a new fileno() method, to retrieve the handle of the
-  underlying file object (provided it has a fileno() method).  This is
-  needed if you want to use os.fsync() on a GzipFile.
-
-- imaplib has two new methods: deleteacl and myrights.
-
-- nntplib has two new methods: description and descriptions. They
-  use a more RFC-compliant way of getting a newsgroup description.
-
-- Bug #993394.  Fix a possible red herring of KeyError in 'threading' being
-  raised during interpreter shutdown from a registered function with atexit
-  when dummy_threading is being used.
-
-- Bug #857297/Patch #916874.  Fix an error when extracting a hard link
-  from a tarfile.
-
-- Patch #846659.  Fix an error in tarfile.py when using
-  GNU longname/longlink creation.
-
-- The obsolete FCNTL.py has been deleted.  The builtin fcntl module
-  has been available (on platforms that support fcntl) since Python
-  1.5a3, and all FCNTL.py did is export fcntl's names, after generating
-  a deprecation warning telling you to use fcntl directly.
-
-- Several new unicode codecs are added: big5hkscs, euc_jis_2004,
-  iso2022_jp_2004, shift_jis_2004.
-
-- Bug #788520.  Queue.{get, get_nowait, put, put_nowait} have new
-  implementations, exploiting Conditions (which didn't exist at the time
-  Queue was introduced).  A minor semantic change is that the Full and
-  Empty exceptions raised by non-blocking calls now occur only if the
-  queue truly was full or empty at the instant the queue was checked (of
-  course the Queue may no longer be full or empty by the time a calling
-  thread sees those exceptions, though).  Before, the exceptions could
-  also be raised if it was "merely inconvenient" for the implementation
-  to determine the true state of the Queue (because the Queue was locked
-  by some other method in progress).
-
-- Bugs #979794 and #980117: difflib.get_grouped_opcodes() now handles the
-  case of comparing two empty lists.  This affected both context_diff() and
-  unified_diff(),
-
-- Bug #980938: smtplib now prints debug output to sys.stderr.
-
-- Bug #930024: posixpath.realpath() now handles infinite loops in symlinks by
-  returning the last point in the path that was not part of any loop.  Thanks
-  AM Kuchling.
-
-- Bug #980327: ntpath not handles compressing erroneous slashes between the
-  drive letter and the rest of the path.  Also clearly handles UNC addresses now
-  as well.  Thanks Paul Moore.
-
-- bug #679953: zipfile.py should now work for files over 2 GB.  The packed data
-  for file sizes (compressed and uncompressed) was being stored as signed
-  instead of unsigned.
-
-- decimal.py now only uses signals in the IBM spec.  The other conditions are
-  no longer part of the public API.
-
-- codecs module now has two new generic APIs: encode() and decode()
-  which don't restrict the return types (unlike the unicode and
-  string methods of the same name).
-
-- Non-blocking SSL sockets work again; they were broken in Python 2.3.
-  SF patch 945642.
-
-- doctest unittest integration improvements:
-
-  o Improved the unitest test output for doctest-based unit tests
-
-  o Can now pass setUp and tearDown functions when creating
-    DocTestSuites.
-
-- The threading module has a new class, local, for creating objects
-  that provide thread-local data.
-
-- Bug #990307: when keep_empty_values is True, cgi.parse_qsl()
-  no longer returns spurious empty fields.
-
-- Implemented bind_textdomain_codeset() in gettext module.
-
-- Introduced in gettext module the l*gettext() family of functions,
-  which return translation strings encoded in the preferred encoding,
-  as informed by locale module's getpreferredencoding().
-
-- optparse module (and tests) upgraded to Optik 1.5a1.  Changes:
-
-  - Add expansion of default values in help text: the string
-    "%default" in an option's help string is expanded to str() of
-    that option's default value, or "none" if no default value.
-
-  - Bug #955889: option default values that happen to be strings are
-    now processed in the same way as values from the command line; this
-    allows generation of nicer help when using custom types.  Can
-    be disabled with parser.set_process_default_values(False).
-
-  - Bug #960515: don't crash when generating help for callback
-    options that specify 'type', but not 'dest' or 'metavar'.
-
-  - Feature #815264: change the default help format for short options
-    that take an argument from e.g. "-oARG" to "-o ARG"; add
-    set_short_opt_delimiter() and set_long_opt_delimiter() methods to
-    HelpFormatter to allow (slight) customization of the formatting.
-
-  - Patch #736940: internationalize Optik: all built-in user-
-    targeted literal strings are passed through gettext.gettext().  (If
-    you want translations (.po files), they're not included with Python
-    -- you'll find them in the Optik source distribution from
-    http://optik.sourceforge.net/ .)
-
-  - Bug #878453: respect $COLUMNS environment variable for
-    wrapping help output.
-
-  - Feature #988122: expand "%prog" in the 'description' passed
-    to OptionParser, just like in the 'usage' and 'version' strings.
-    (This is *not* done in the 'description' passed to OptionGroup.)
-
-C API
------
-
-- PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx():  if an
-  error occurs while loading the module, these now delete the module's
-  entry from sys.modules.  All ways of loading modules eventually call
-  one of these, so this is an error-case change in semantics for all
-  ways of loading modules.  In rare cases, a module loader may wish
-  to keep a module object in sys.modules despite that the module's
-  code cannot be executed.  In such cases, the module loader must
-  arrange to reinsert the name and module object in sys.modules.
-  PyImport_ReloadModule() has been changed to reinsert the original
-  module object into sys.modules if the module reload fails, so that
-  its visible semantics have not changed.
-
-- A large pile of datetime field-extraction macros is now documented,
-  thanks to Anthony Tuininga (patch #986010).
-
-Documentation
--------------
-
-- Improved the tutorial on creating types in C.
-
-  - point out the importance of reassigning data members before
-    assigning their values
-
-  - correct my misconception about return values from visitprocs. Sigh.
-
-  - mention the labor saving Py_VISIT and Py_CLEAR macros.
-
-- Major rewrite of the math module docs, to address common confusions.
-
-Tests
------
-
-- The test data files for the decimal test suite are now installed on
-  platforms that use the Makefile.
-
-- SF patch 995225:  The test file testtar.tar accidentally contained
-  CVS keywords (like $Id$), which could cause spurious failures in
-  test_tarfile.py depending on how the test file was checked out.
-
-
-What's New in Python 2.4 alpha 1?
-=================================
-
-*Release date: 08-JUL-2004*
-
-Core and builtins
------------------
-
-- weakref.ref is now the type object also known as
-  weakref.ReferenceType; it can be subclassed like any other new-style
-  class.  There's less per-entry overhead in WeakValueDictionary
-  objects now (one object instead of three).
-
-- Bug #951851: Python crashed when reading import table of certain
-  Windows DLLs.
-
-- Bug #215126.  The locals argument to eval(), execfile(), and exec now
-  accept any mapping type.
-
-- marshal now shares interned strings. This change introduces
-  a new .pyc magic.
-
-- Bug #966623. classes created with type() in an exec(, {}) don't
-  have a __module__, but code in typeobject assumed it would always
-  be there.
-
-- Python no longer relies on the LC_NUMERIC locale setting to be
-  the "C" locale; as a result, it no longer tries to prevent changing
-  the LC_NUMERIC category.
-
-- Bug #952807:  Unpickling pickled instances of subclasses of
-  datetime.date, datetime.datetime and datetime.time could yield insane
-  objects.  Thanks to Jiwon Seo for a fix.
-
-- Bug #845802: Python crashes when __init__.py is a directory.
-
-- Unicode objects received two new methods: iswide() and width().
-  These query East Asian width information, as specified in Unicode
-  TR11.
-
-- Improved the tuple hashing algorithm to give fewer collisions in
-  common cases.  Fixes bug  #942952.
-
-- Implemented generator expressions (PEP 289).  Coded by Jiwon Seo.
-
-- Enabled the profiling of C extension functions (and builtins) - check
-  new documentation and modified profile and bdb modules for more details
-
-- Set file.name to the object passed to open (instead of a new string)
-
-- Moved tracebackobject into traceback.h and renamed to PyTracebackObject
-
-- Optimized the byte coding for multiple assignments like "a,b=b,a" and
-  "a,b,c=1,2,3".  Improves their speed by 25% to 30%.
-
-- Limit the nested depth of a tuple for the second argument to isinstance()
-  and issubclass() to the recursion limit of the interpreter.
-  Fixes bug  #858016 .
-
-- Optimized dict iterators, creating separate types for each
-  and having them reveal their length.  Also optimized the
-  methods:  keys(), values(), and items().
-
-- Implemented a newcode opcode, LIST_APPEND, that simplifies
-  the generated bytecode for list comprehensions and further
-  improves their performance (about 35%).
-
-- Implemented rich comparisons for floats, which seems to make
-  comparisons involving NaNs somewhat less surprising when the
-  underlying C compiler actually implements C99 semantics.
-
-- Optimized list.extend() to save memory and no longer create
-  intermediate sequences.  Also, extend() now pre-allocates the
-  needed memory whenever the length of the iterable is known in
-  advance -- this halves the time to extend the list.
-
-- Optimized list resize operations to make fewer calls to the system
-  realloc().  Significantly speeds up list appends, list pops,
-  list comprehensions, and the list constructor (when the input iterable
-  length is not known).
-
-- Changed the internal list over-allocation scheme.  For larger lists,
-  overallocation ranged between 3% and 25%.  Now, it is a constant 12%.
-  For smaller lists (n<8), overallocation was upto eight elements.  Now,
-  the overallocation is no more than three elements -- this improves space
-  utilization for applications that have large numbers of small lists.
-
-- Most list bodies now get re-used rather than freed.  Speeds up list
-  instantiation and deletion by saving calls to malloc() and free().
-
-- The dict.update() method now accepts all the same argument forms
-  as the dict() constructor.  This now includes item lists and/or
-  keyword arguments.
-
-- Support for arbitrary objects supporting the read-only buffer
-  interface as the co_code field of code objects (something that was
-  only possible to create from C code) has been removed.
-
-- Made omitted callback and None equivalent for weakref.ref() and
-  weakref.proxy(); the None case wasn't handled correctly in all
-  cases.
-
-- Fixed problem where PyWeakref_NewRef() and PyWeakref_NewProxy()
-  assumed that initial existing entries in an object's weakref list
-  would not be removed while allocating a new weakref object.  Since
-  GC could be invoked at that time, however, that assumption was
-  invalid.  In a truly obscure case of GC being triggered during
-  creation for a new weakref object for an referent which already
-  has a weakref without a callback which is only referenced from
-  cyclic trash, a memory error can occur.  This consistently created a
-  segfault in a debug build, but provided less predictable behavior in
-  a release build.
-
-- input() builtin function now respects compiler flags such as
-  __future__ statements.  SF patch 876178.
-
-- Removed PendingDeprecationWarning from apply().  apply() remains
-  deprecated, but the nuisance warning will not be issued.
-
-- At Python shutdown time (Py_Finalize()), 2.3 called cyclic garbage
-  collection twice, both before and after tearing down modules.  The
-  call after tearing down modules has been disabled, because too much
-  of Python has been torn down then for __del__ methods and weakref
-  callbacks to execute sanely.  The most common symptom was a sequence
-  of uninformative messages on stderr when Python shut down, produced
-  by threads trying to raise exceptions, but unable to report the nature
-  of their problems because too much of the sys module had already been
-  destroyed.
-
-- Removed FutureWarnings related to hex/oct literals and conversions
-  and left shifts.  (Thanks to Kalle Svensson for SF patch 849227.)
-  This addresses most of the remaining semantic changes promised by
-  PEP 237, except for repr() of a long, which still shows the trailing
-  'L'.  The PEP appears to promise warnings for operations that
-  changed semantics compared to Python 2.3, but this is not
-  implemented; we've suffered through enough warnings related to
-  hex/oct literals and I think it's best to be silent now.
-
-- For str and unicode objects, the ljust(), center(), and rjust()
-  methods now accept an optional argument specifying a fill
-  character other than a space.
-
-- When method objects have an attribute that can be satisfied either
-  by the function object or by the method object, the function
-  object's attribute usually wins.  Christian Tismer pointed out that
-  that this is really a mistake, because this only happens for special
-  methods (like __reduce__) where the method object's version is
-  really more appropriate than the function's attribute.  So from now
-  on, all method attributes will have precedence over function
-  attributes with the same name.
-
-- Critical bugfix, for SF bug 839548:  if a weakref with a callback,
-  its callback, and its weakly referenced object, all became part of
-  cyclic garbage during a single run of garbage collection, the order
-  in which they were torn down was unpredictable.  It was possible for
-  the callback to see partially-torn-down objects, leading to immediate
-  segfaults, or, if the callback resurrected garbage objects, to
-  resurrect insane objects that caused segfaults (or other surprises)
-  later.  In one sense this wasn't surprising, because Python's cyclic gc
-  had no knowledge of Python's weakref objects.  It does now.  When
-  weakrefs with callbacks become part of cyclic garbage now, those
-  weakrefs are cleared first.  The callbacks don't trigger then,
-  preventing the problems.  If you need callbacks to trigger, then just
-  as when cyclic gc is not involved, you need to write your code so
-  that weakref objects outlive the objects they weakly reference.
-
-- Critical bugfix, for SF bug 840829:  if cyclic garbage collection
-  happened to occur during a weakref callback for a new-style class
-  instance, subtle memory corruption was the result (in a release build;
-  in a debug build, a segfault occurred reliably very soon after).
-  This has been repaired.
-
-- Compiler flags set in PYTHONSTARTUP are now active in __main__.
-
-- Added two builtin types, set() and frozenset().
-
-- Added a reversed() builtin function that returns a reverse iterator
-  over a sequence.
-
-- Added a sorted() builtin function that returns a new sorted list
-  from any iterable.
-
-- CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr.
-
-- list.sort() now supports three keyword arguments:  cmp, key, and reverse.
-  The key argument can be a function of one argument that extracts a
-  comparison key from the original record:  mylist.sort(key=str.lower).
-  The reverse argument is a boolean value and if True will change the
-  sort order as if the comparison arguments were reversed.  In addition,
-  the documentation has been amended to provide a guarantee that all sorts
-  starting with Py2.3 are guaranteed to be stable (the relative order of
-  records with equal keys is unchanged).
-
-- Added test whether wchar_t is signed or not. A signed wchar_t is not
-  usable as internal unicode type base for Py_UNICODE since the
-  unicode implementation assumes an unsigned type.
-
-- Fixed a bug in the cache of length-one Unicode strings that could
-  lead to a seg fault.  The specific problem occurred when an earlier,
-  non-fatal error left an uninitialized Unicode object in the
-  freelist.
-
-- The % formatting operator now supports '%F' which is equivalent to
-  '%f'.  This has always been documented but never implemented.
-
-- complex(obj) could leak a little memory if obj wasn't a string or
-  number.
-
-- zip() with no arguments now returns an empty list instead of raising
-  a TypeError exception.
-
-- obj.__contains__() now returns True/False instead of 1/0.  SF patch
-  820195.
-
-- Python no longer tries to be smart about recursive comparisons.
-  When comparing containers with cyclic references to themselves it
-  will now just hit the recursion limit.  See SF patch 825639.
-
-- str and unicode builtin types now have an rsplit() method that is
-  same as split() except that it scans the string from the end
-  working towards the beginning.  See SF feature request 801847.
-
-- Fixed a bug in object.__reduce_ex__ when using protocol 2.  Failure
-  to clear the error when attempts to get the __getstate__ attribute
-  fail caused intermittent errors and odd behavior.
-
-- buffer objects based on other objects no longer cache a pointer to
-  the data and the data length.  Instead, the appropriate tp_as_buffer
-  method is called as necessary.
-
-- fixed: if a file is opened with an explicit buffer size >= 1, repeated
-  close() calls would attempt to free() the buffer already free()ed on
-  the first call.
-
-
-Extension modules
------------------
-
-- Added socket.getservbyport(), and make the second argument in
-  getservbyname() and getservbyport() optional.
-
-- time module code that deals with input POSIX timestamps will now raise
-  ValueError if more than a second is lost in precision when the
-  timestamp is cast to the platform C time_t type.  There's no chance
-  that the platform will do anything sensible with the result in such
-  cases.  This includes ctime(), localtime() and gmtime().  Assorted
-  fromtimestamp() and utcfromtimestamp() methods in the datetime module
-  were also protected.  Closes bugs #919012 and 975996.
-
-- fcntl.ioctl now warns if the mutate flag is not specified.
-
-- nt now properly allows to refer to UNC roots, e.g. in nt.stat().
-
-- the weakref module now supports additional objects:  array.array,
-  sre.pattern_objects, file objects, and sockets.
-
-- operator.isMappingType() and operator.isSequenceType() now give
-  fewer false positives.
-
-- socket.sslerror is now a subclass of socket.error .  Also added
-  socket.error to the socket module's C API.
-
-- Bug #920575: A problem where the _locale module segfaults on
-  nl_langinfo(ERA) caused by GNU libc's illegal NULL return is fixed.
-
-- array objects now support the copy module.  Also, their resizing
-  scheme has been updated to match that used for list objects.  This improves
-  the performance (speed and memory usage) of append() operations.
-  Also, array.array() and array.extend() now accept any iterable argument
-  for repeated appends without needing to create another temporary array.
-
-- cStringIO.writelines() now accepts any iterable argument and writes
-  the lines one at a time rather than joining them and writing once.
-  Made a parallel change to StringIO.writelines().  Saves memory and
-  makes suitable for use with generator expressions.
-
-- time.strftime() now checks that the values in its time tuple argument
-  are within the proper boundaries to prevent possible crashes from the
-  platform's C library implementation of strftime().  Can possibly
-  break code that uses values outside the range that didn't cause
-  problems previously (such as sitting day of year to 0).  Fixes bug
-  #897625.
-
-- The socket module now supports Bluetooth sockets, if the
-  system has <bluetooth/bluetooth.h>
-
-- Added a collections module containing a new datatype, deque(),
-  offering high-performance, thread-safe, memory friendly appends
-  and pops on either side of the deque.
-
-- Several modules now take advantage of collections.deque() for
-  improved performance:  Queue, mutex, shlex, threading, and pydoc.
-
-- The operator module has two new functions, attrgetter() and
-  itemgetter() which are useful for creating fast data extractor
-  functions for map(), list.sort(), itertools.groupby(), and
-  other functions that expect a function argument.
-
-- socket.SHUT_{RD,WR,RDWR} was added.
-
-- os.getsid was added.
-
-- The pwd module incorrectly advertised its struct type as
-  struct_pwent; this has been renamed to struct_passwd.  (The old name
-  is still supported for backwards compatibility.)
-
-- The xml.parsers.expat module now provides Expat 1.95.7.
-
-- socket.IPPROTO_IPV6 was added.
-
-- readline.clear_history was added.
-
-- select.select() now accepts sequences for its first three arguments.
-
-- cStringIO now supports the f.closed attribute.
-
-- The signal module now exposes SIGRTMIN and SIGRTMAX (if available).
-
-- curses module now supports use_default_colors().  [patch #739124]
-
-- Bug #811028: ncurses.h breakage on FreeBSD/MacOS X
-
-- Bug #814613: INET_ADDRSTRLEN fix needed for all compilers on SGI
-
-- Implemented non-recursive SRE matching scheme (#757624).
-
-- Implemented (?(id/name)yes|no) support in SRE (#572936).
-
-- random.seed() with no arguments or None uses time.time() as a default
-  seed.  Modified to match Py2.2 behavior and use fractional seconds so
-  that successive runs are more likely to produce different sequences.
-
-- random.Random has a new method, getrandbits(k), which returns an int
-  with k random bits.  This method is now an optional part of the API
-  for user defined generators.  Any generator that defines genrandbits()
-  can now use randrange() for ranges with a length >= 2**53.  Formerly,
-  randrange would return only even numbers for ranges that large (see
-  SF bug #812202).  Generators that do not define genrandbits() now
-  issue a warning when randrange() is called with a range that large.
-
-- itertools has a new function, groupby() for aggregating iterables
-  into groups sharing the same key (as determined by a key function).
-  It offers some of functionality of SQL's groupby keyword and of
-  the Unix uniq filter.
-
-- itertools now has a new tee() function which produces two independent
-  iterators from a single iterable.
-
-- itertools.izip() with no arguments now returns an empty iterator instead
-  of raising a TypeError exception.
-
-- Fixed #853061: allow BZ2Compressor.compress() to receive an empty string
-  as parameter.
-
-Library
--------
-
-- Added a new module: cProfile, a C profiler with the same interface as the
-  profile module.  cProfile avoids some of the drawbacks of the hotshot
-  profiler and provides a bit more information than the other two profilers.
-  Based on "lsprof" (patch #1212837).
-
-- Bug #1266283: The new function "lexists" is now in os.path.__all__.
-
-- Bug #981530: Fix UnboundLocalError in shutil.rmtree().  This affects
-  the documented behavior: the function passed to the onerror()
-  handler can now also be os.listdir.
-
-- Bug #754449: threading.Thread objects no longer mask exceptions raised during
-  interpreter shutdown with another exception from attempting to handle the
-  original exception.
-
-- Added decimal.py per PEP 327.
-
-- Bug #981299: rsync is now a recognized protocol in urlparse that uses a
-  "netloc" portion of a URL.
-
-- Bug #919012: shutil.move() will not try to move a directory into itself.
-  Thanks Johannes Gijsbers.
-
-- Bug #934282: pydoc.stripid() is now case-insensitive.  Thanks Robin Becker.
-
-- Bug #823209:  cmath.log() now takes an optional base argument so that its
-  API matches math.log().
-
-- Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions
-  that generate a -debuginfo.rpm
-
-- os.path.devnull has been added for all supported platforms.
-
-- Fixed #877165: distutils now picks the right C++ compiler command
-  on cygwin and mingw32.
-
-- urllib.urlopen().readline() now handles HTTP/0.9 correctly.
-
-- refactored site.py into functions.  Also wrote regression tests for the
-  module.
-
-- The distutils install command now supports the --home option and
-  installation scheme for all platforms.
-
-- asyncore.loop now has a repeat count parameter that defaults to
-  looping forever.
-
-- The distutils sdist command now ignores all .svn directories, in
-  addition to CVS and RCS directories.  .svn directories hold
-  administrative files for the Subversion source control system.
-
-- Added a new module: cookielib.  Automatic cookie handling for HTTP
-  clients.  Also, support for cookielib has been added to urllib2, so
-  urllib2.urlopen() can transparently handle cookies.
-
-- stringprep.py now uses built-in set() instead of sets.Set().
-
-- Bug #876278: Unbounded recursion in modulefinder
-
-- Bug #780300: Swap public and system ID in LexicalHandler.startDTD.
-  Applications relying on the wrong order need to be corrected.
-
-- Bug #926075: Fixed a bug that returns a wrong pattern object
-  for a string or unicode object in sre.compile() when a different
-  type pattern with the same value exists.
-
-- Added countcallers arg to trace.Trace class (--trackcalls command line arg
-  when run from the command prompt).
-
-- Fixed a caching bug in platform.platform() where the argument of 'terse' was
-  not taken into consideration when caching value.
-
-- Added two new command-line arguments for profile (output file and
-  default sort).
-
-- Added global runctx function to profile module
-
-- Add hlist missing entryconfigure and entrycget methods.
-
-- The ptcp154 codec was added for Kazakh character set support.
-
-- Support non-anonymous ftp URLs in urllib2.
-
-- The encodings package will now apply codec name aliases
-  first before starting to try the import of the codec module.
-  This simplifies overriding built-in codecs with external
-  packages, e.g. the included CJK codecs with the JapaneseCodecs
-  package, by adjusting the aliases dictionary in encodings.aliases
-  accordingly.
-
-- base64 now supports RFC 3548 Base16, Base32, and Base64 encoding and
-  decoding standards.
-
-- urllib2 now supports processors.  A processor is a handler that
-  implements an xxx_request or xxx_response method.  These methods are
-  called for all requests.
-
-- distutils compilers now compile source files in the same order as
-  they are passed to the compiler.
-
-- pprint.pprint() and pprint.pformat() now have additional parameters
-  indent, width and depth.
-
-- Patch #750542: pprint now will pretty print subclasses of list, tuple
-  and dict too, as long as they don't overwrite __repr__().
-
-- Bug #848614: distutils' msvccompiler fails to find the MSVC6
-  compiler because of incomplete registry entries.
-
-- httplib.HTTP.putrequest now offers to omit the implicit Accept-Encoding.
-
-- Patch #841977: modulefinder didn't find extension modules in packages
-
-- imaplib.IMAP4.thread was added.
-
-- Plugged a minor hole in tempfile.mktemp() due to the use of
-  os.path.exists(), switched to using os.lstat() directly if possible.
-
-- bisect.py and heapq.py now have underlying C implementations
-  for better performance.
-
-- heapq.py has two new functions, nsmallest() and nlargest().
-
-- traceback.format_exc has been added (similar to print_exc but it returns
-  a string).
-
-- xmlrpclib.MultiCall has been added.
-
-- poplib.POP3_SSL has been added.
-
-- tmpfile.mkstemp now returns an absolute path even if dir is relative.
-
-- urlparse is RFC 2396 compliant.
-
-- The fieldnames argument to the csv module's DictReader constructor is now
-  optional.  If omitted, the first row of the file will be used as the
-  list of fieldnames.
-
-- encodings.bz2_codec was added for access to bz2 compression
-  using "a long string".encode('bz2')
-
-- Various improvements to unittest.py, realigned with PyUnit CVS.
-
-- dircache now passes exceptions to the caller, instead of returning
-  empty lists.
-
-- The bsddb module and dbhash module now support the iterator and
-  mapping protocols which make them more substitutable for dictionaries
-  and shelves.
-
-- The csv module's DictReader and DictWriter classes now accept keyword
-  arguments.  This was an omission in the initial implementation.
-
-- The email package handles some RFC 2231 parameters with missing
-  CHARSET fields better.  It also includes a patch to parameter
-  parsing when semicolons appear inside quotes.
-
-- sets.py now runs under Py2.2.  In addition, the argument restrictions
-  for most set methods (but not the operators) have been relaxed to
-  allow any iterable.
-
-- _strptime.py now has a behind-the-scenes caching mechanism for the most
-  recent TimeRE instance used along with the last five unique directive
-  patterns.  The overall module was also made more thread-safe.
-
-- random.cunifvariate() and random.stdgamma() were deprecated in Py2.3
-  and removed in Py2.4.
-
-- Bug #823328: urllib2.py's HTTP Digest Auth support works again.
-
-- Patch #873597: CJK codecs are imported into rank of default codecs.
-
-Tools/Demos
------------
-
-- A hotshotmain script was added to the Tools/scripts directory that
-  makes it easy to run a script under control of the hotshot profiler.
-
-- The db2pickle and pickle2db scripts can now dump/load gdbm files.
-
-- The file order on the command line of the pickle2db script was reversed.
-  It is now [ picklefile ] dbfile.  This provides better symmetry with
-  db2pickle.  The file arguments to both scripts are now source followed by
-  destination in situations where both files are given.
-
-- The pydoc script will display a link to the module documentation for
-  modules determined to be part of the core distribution.  The documentation
-  base directory defaults to http://www.python.org/doc/current/lib/ but can
-  be changed by setting the PYTHONDOCS environment variable.
-
-- texcheck.py now detects double word errors.
-
-- md5sum.py mistakenly opened input files in text mode by default, a
-  silent and dangerous change from previous releases.  It once again
-  opens input files in binary mode by default.  The -t and -b flags
-  remain for compatibility with the 2.3 release, but -b is the default
-  now.
-
-- py-electric-colon now works when pending-delete/delete-selection mode is
-  in effect
-
-- py-help-at-point is no longer bound to the F1 key - it's still bound to
-  C-c C-h
-
-- Pynche was fixed to not crash when there is no ~/.pynche file and no
-  -d option was given.
-
-Build
------
-
-- Bug #978645: Modules/getpath.c now builds properly in --disable-framework
-  build under OS X.
-
-- Profiling using gprof is now available if Python is configured with
-  --enable-profiling.
-
-- Profiling the VM using the Pentium TSC is now possible if Python
-  is configured --with-tsc.
-
-- In order to find libraries, setup.py now also looks in /lib64, for use
-  on AMD64.
-
-- Bug #934635: Fixed a bug where the configure script couldn't detect
-  getaddrinfo() properly if the KAME stack had SCTP support.
-
-- Support for missing ANSI C header files (limits.h, stddef.h, etc) was
-  removed.
-
-- Systems requiring the D4, D6 or D7 variants of pthreads are no longer
-  supported (see PEP 11).
-
-- Universal newline support can no longer be disabled (see PEP 11).
-
-- Support for DGUX, SunOS 4, IRIX 4 and Minix was removed (see PEP 11).
-
-- Support for systems requiring --with-dl-dld or --with-sgi-dl was removed
-  (see PEP 11).
-
-- Tests for sizeof(char) were removed since ANSI C mandates that
-  sizeof(char) must be 1.
-
-C API
------
-
-- Thanks to Anthony Tuininga, the datetime module now supplies a C API
-  containing type-check macros and constructors.  See new docs in the
-  Python/C API Reference Manual for details.
-
-- Private function _PyTime_DoubleToTimet added, to convert a Python
-  timestamp (C double) to platform time_t with some out-of-bounds
-  checking.  Declared in new header file timefuncs.h.  It would be
-  good to expose some other internal timemodule.c functions there.
-
-- New public functions PyEval_EvaluateFrame and PyGen_New to expose
-  generator objects.
-
-- New public functions Py_IncRef() and Py_DecRef(), exposing the
-  functionality of the Py_XINCREF() and Py_XDECREF macros. Useful for
-  runtime dynamic embedding of Python.  See patch #938302, by Bob
-  Ippolito.
-
-- Added a new macro, PySequence_Fast_ITEMS, which retrieves a fast sequence's
-  underlying array of PyObject pointers.  Useful for high speed looping.
-
-- Created a new method flag, METH_COEXIST, which causes a method to be loaded
-  even if already defined by a slot wrapper.  This allows a __contains__
-  method, for example, to co-exist with a defined sq_contains slot.  This
-  is helpful because the PyCFunction can take advantage of optimized calls
-  whenever METH_O or METH_NOARGS flags are defined.
-
-- Added a new function, PyDict_Contains(d, k) which is like
-  PySequence_Contains() but is specific to dictionaries and executes
-  about 10% faster.
-
-- Added three new macros: Py_RETURN_NONE, Py_RETURN_TRUE, and Py_RETURN_FALSE.
-  Each return the singleton they mention after Py_INCREF()ing them.
-
-- Added a new function, PyTuple_Pack(n, ...) for constructing tuples from a
-  variable length argument list of Python objects without having to invoke
-  the more complex machinery of Py_BuildValue().  PyTuple_Pack(3, a, b, c)
-  is equivalent to Py_BuildValue("(OOO)", a, b, c).
-
-Windows
--------
-
-- The _winreg module could segfault when reading very large registry
-  values, due to unchecked alloca() calls (SF bug 851056).  The fix is
-  uses either PyMem_Malloc(n) or PyString_FromStringAndSize(NULL, n),
-  as appropriate, followed by a size check.
-
-- file.truncate() could misbehave if the file was open for update
-  (modes r+, rb+, w+, wb+), and the most recent file operation before
-  the truncate() call was an input operation.  SF bug 801631.
-
-
-What's New in Python 2.3 final?
-===============================
-
-*Release date: 29-Jul-2003*
-
-IDLE
-----
-
-- Bug 778400:  IDLE hangs when selecting "Edit with IDLE" from explorer.
-  This was unique to Windows, and was fixed by adding an -n switch to
-  the command the Windows installer creates to execute "Edit with IDLE"
-  context-menu actions.
-
-- IDLE displays a new message upon startup:  some "personal firewall"
-  kinds of programs (for example, ZoneAlarm) open a dialog of their
-  own when any program opens a socket.  IDLE does use sockets, talking
-  on the computer's internal loopback interface.  This connection is not
-  visible on any external interface and no data is sent to or received
-  from the Internet.  So, if you get such a dialog when opening IDLE,
-  asking whether to let pythonw.exe talk to address 127.0.0.1, say yes,
-  and rest assured no communication external to your machine is taking
-  place.  If you don't allow it, IDLE won't be able to start.
-
-
-What's New in Python 2.3 release candidate 2?
-=============================================
-
-*Release date: 24-Jul-2003*
-
-Core and builtins
------------------
-
-- It is now possible to import from zipfiles containing additional
-  data bytes before the zip compatible archive.  Zipfiles containing a
-  comment at the end are still unsupported.
-
-Extension modules
------------------
-
-- A longstanding bug in the parser module's initialization could cause
-  fatal internal refcount confusion when the module got initialized more
-  than once.  This has been fixed.
-
-- Fixed memory leak in pyexpat; using the parser's ParseFile() method
-  with open files that aren't instances of the standard file type
-  caused an instance of the bound .read() method to be leaked on every
-  call.
-
-- Fixed some leaks in the locale module.
-
-Library
--------
-
-- Lib/encodings/rot_13.py when used as a script, now more properly
-  uses the first Python interpreter on your path.
-
-- Removed caching of TimeRE (and thus LocaleTime) in _strptime.py to
-  fix a locale related bug in the test suite.  Although another patch
-  was needed to actually fix the problem, the cache code was not
-  restored.
-
-IDLE
-----
-
-- Calltips patches.
-
-Build
------
-
-- For MacOSX, added -mno-fused-madd to BASECFLAGS to fix test_coercion
-  on Panther (OSX 10.3).
-
-C API
------
-
-Windows
--------
-
-- The tempfile module could do insane imports on Windows if PYTHONCASEOK
-  was set, making temp file creation impossible.  Repaired.
-
-- Add a patch to workaround pthread_sigmask() bugs in Cygwin.
-
-Mac
----
-
-- Various fixes to pimp.
-
-- Scripts runs with pythonw no longer had full window manager access.
-
-- Don't force boot-disk-only install, for reasons unknown it causes
-  more problems than it solves.
-
-
-What's New in Python 2.3 release candidate 1?
-=============================================
-
-*Release date: 18-Jul-2003*
-
-Core and builtins
------------------
-
-- The new function sys.getcheckinterval() returns the last value set
-  by sys.setcheckinterval().
-
-- Several bugs in the symbol table phase of the compiler have been
-  fixed.  Errors could be lost and compilation could fail without
-  reporting an error.  SF patch 763201.
-
-- The interpreter is now more robust about importing the warnings
-  module.  In an executable generated by freeze or similar programs,
-  earlier versions of 2.3 would fail if the warnings module could
-  not be found on the file system.  Fixes SF bug 771097.
-
-- A warning about assignments to module attributes that shadow
-  builtins, present in earlier releases of 2.3, has been removed.
-
-- It is not possible to create subclasses of builtin types like str
-  and tuple that define an itemsize.  Earlier releases of Python 2.3
-  allowed this by mistake, leading to crashes and other problems.
-
-- The thread_id is now initialized to 0 in a non-thread build.  SF bug
-  770247.
-
-- SF bug 762891: "del p[key]" on proxy object no longer raises SystemError.
-
-Extension modules
------------------
-
-- weakref.proxy() can now handle "del obj[i]" for proxy objects
-  defining __delitem__.  Formerly, it generated a SystemError.
-
-- SSL no longer crashes the interpreter when the remote side disconnects.
-
-- On Unix the mmap module can again be used to map device files.
-
-- time.strptime now exclusively uses the Python implementation
-  contained within the _strptime module.
-
-- The print slot of weakref proxy objects was removed, because it was
-  not consistent with the object's repr slot.
-
-- The mmap module only checks file size for regular files, not
-  character or block devices.  SF patch 708374.
-
-- The cPickle Pickler garbage collection support was fixed to traverse
-  the find_class attribute, if present.
-
-- There are several fixes for the bsddb3 wrapper module.
-
-  bsddb3 no longer crashes if an environment is closed before a cursor
-  (SF bug 763298).
-
-  The DB and DBEnv set_get_returns_none function was extended to take
-  a level instead of a boolean flag.  The new level 2 means that in
-  addition, cursor.set()/.get() methods return None instead of raising
-  an exception.
-
-  A typo was fixed in DBCursor.join_item(), preventing a crash.
-
-Library
--------
-
-- distutils now supports MSVC 7.1
-
-- doctest now examines all docstrings by default.  Previously, it would
-  skip over functions with private names (as indicated by the underscore
-  naming convention).  The old default created too much of a risk that
-  user tests were being skipped inadvertently.  Note, this change could
-  break code in the unlikely case that someone had intentionally put
-  failing tests in the docstrings of private functions.  The breakage
-  is easily fixable by specifying the old behavior when calling testmod()
-  or Tester().
-
-- There were several fixes to the way dumbdbms are closed.  It's vital
-  that a dumbdbm database be closed properly, else the on-disk data
-  and directory files can be left in mutually inconsistent states.
-  dumbdbm.py's _Database.__del__() method attempted to close the
-  database properly, but a shutdown race in _Database._commit() could
-  prevent this from working, so that a program trusting __del__() to
-  get the on-disk files in synch could be badly surprised.  The race
-  has been repaired.  A sync() method was also added so that shelve
-  can guarantee data is written to disk.
-
-  The close() method can now be called more than once without complaint.
-
-- The classes in threading.py are now new-style classes.  That they
-  weren't before was an oversight.
-
-- The urllib2 digest authentication handlers now define the correct
-  auth_header.  The earlier versions would fail at runtime.
-
-- SF bug 763023: fix uncaught ZeroDivisionError in difflib ratio methods
-  when there are no lines.
-
-- SF bug 763637: fix exception in Tkinter with after_cancel
-  which could occur with Tk 8.4
-
-- SF bug 770601: CGIHTTPServer.py now passes the entire environment
-  to child processes.
-
-- SF bug 765238: add filter to fnmatch's __all__.
-
-- SF bug 748201: make time.strptime() error messages more helpful.
-
-- SF patch 764470: Do not dump the args attribute of a Fault object in
-  xmlrpclib.
-
-- SF patch 549151: urllib and urllib2 now redirect POSTs on 301
-  responses.
-
-- SF patch 766650: The whichdb module was fixed to recognize dbm files
-  generated by gdbm on OS/2 EMX.
-
-- SF bugs 763047 and 763052: fixes bug of timezone value being left as
-  -1 when ``time.tzname[0] == time.tzname[1] and not time.daylight``
-  is true when it should only when time.daylight is true.
-
-- SF bug 764548: re now allows subclasses of str and unicode to be
-  used as patterns.
-
-- SF bug 763637: In Tkinter, change after_cancel() to handle tuples
-  of varying sizes.  Tk 8.4 returns a different number of values
-  than Tk 8.3.
-
-- SF bug 763023: difflib.ratio() did not catch zero division.
-
-- The Queue module now has an __all__ attribute.
-
-Tools/Demos
------------
-
-- See Lib/idlelib/NEWS.txt for IDLE news.
-
-- SF bug 753592: webchecker/wsgui now handles user supplied directories.
-
-- The trace.py script has been removed.  It is now in the standard library.
-
-Build
------
-
-- Python now compiles with -fno-strict-aliasing if possible (SF bug 766696).
-
-- The socket module compiles on IRIX 6.5.10.
-
-- An irix64 system is treated the same way as an irix6 system (SF
-  patch 764560).
-
-- Several definitions were missing on FreeBSD 5.x unless the
-  __BSD_VISIBLE symbol was defined.  configure now defines it as
-  needed.
-
-C API
------
-
-- Unicode objects now support mbcs as a built-in encoding, so the C
-  API can use it without deferring to the encodings package.
-
-Windows
--------
-
-- The Windows implementation of PyThread_start_new_thread() never
-  checked error returns from Windows functions correctly.  As a result,
-  it could claim to start a new thread even when the Microsoft
-  _beginthread() function failed (due to "too many threads" -- this is
-  on the order of thousands when it happens).  In these cases, the
-  Python exception ::
-
-      thread.error: can't start new thread
-
-  is raised now.
-
-- SF bug 766669: Prevent a GPF on interpreter exit when sockets are in
-  use.  The interpreter now calls WSACleanup() from Py_Finalize()
-  instead of from DLL teardown.
-
-Mac
----
-
-- Bundlebuilder now inherits default values in the right way.  It was
-  previously possible for app bundles to get a type of "BNDL" instead
-  of "APPL."  Other improvements include, a --build-id option to
-  specify the CFBundleIdentifier and using the --python option to set
-  the executable in the bundle.
-
-- Fixed two bugs in MacOSX framework handling.
-
-- pythonw did not allow user interaction in 2.3rc1, this has been fixed.
-
-- Python is now compiled with -mno-fused-madd, making all tests pass
-  on Panther.
-
-What's New in Python 2.3 beta 2?
-================================
-
-*Release date: 29-Jun-2003*
-
-Core and builtins
------------------
-
-- A program can now set the environment variable PYTHONINSPECT to some
-  string value in Python, and cause the interpreter to enter the
-  interactive prompt at program exit, as if Python had been invoked
-  with the -i option.
-
-- list.index() now accepts optional start and stop arguments.  Similar
-  changes were made to UserList.index(). SF feature request 754014.
-
-- SF patch 751998 fixes an unwanted side effect of the previous fix
-  for SF bug 742860 (the next item).
-
-- SF bug 742860: "WeakKeyDictionary __delitem__ uses iterkeys".  This
-  wasn't threadsafe, was very inefficient (expected time O(len(dict))
-  instead of O(1)), and could raise a spurious RuntimeError if another
-  thread mutated the dict during __delitem__, or if a comparison function
-  mutated it.  It also neglected to raise KeyError when the key wasn't
-  present; didn't raise TypeError when the key wasn't of a weakly
-  referencable type; and broke various more-or-less obscure dict
-  invariants by using a sequence of equality comparisons over the whole
-  set of dict keys instead of computing the key's hash code to narrow
-  the search to those keys with the same hash code.  All of these are
-  considered to be bugs.  A new implementation of __delitem__ repairs all
-  that, but note that fixing these bugs may change visible behavior in
-  code relying (whether intentionally or accidentally) on old behavior.
-
-- SF bug 734869: Fixed a compiler bug that caused a fatal error when
-  compiling a list comprehension that contained another list comprehension
-  embedded in a lambda expression.
-
-- SF bug 705231:  builtin pow() no longer lets the platform C pow()
-  raise -1.0 to integer powers, because (at least) glibc gets it wrong
-  in some cases.  The result should be -1.0 if the power is odd and 1.0
-  if the power is even, and any float with a sufficiently large exponent
-  is (mathematically) an exact even integer.
-
-- SF bug 759227: A new-style class that implements __nonzero__() must
-  return a bool or int (but not an int subclass) from that method.  This
-  matches the restriction on classic classes.
-
-- The encoding attribute has been added for file objects, and set to
-  the terminal encoding on Unix and Windows.
-
-- The softspace attribute of file objects became read-only by oversight.
-  It's writable again.
-
-- Reverted a 2.3 beta 1 change to iterators for subclasses of list and
-  tuple.  By default, the iterators now access data elements directly
-  instead of going through __getitem__.  If __getitem__ access is
-  preferred, then __iter__ can be overridden.
-
-- SF bug 735247: The staticmethod and super types participate in
-  garbage collection. Before this change, it was possible for leaks to
-  occur in functions with non-global free variables that used these types.
-
-Extension modules
------------------
-
-- the socket module has a new exception, socket.timeout, to allow
-  timeouts to be handled separately from other socket errors.
-
-- SF bug 751276: cPickle has fixed to propagate exceptions raised in
-  user code.  In earlier versions, cPickle caught and ignored any
-  exception when it performed operations that it expected to raise
-  specific exceptions like AttributeError.
-
-- cPickle Pickler and Unpickler objects now participate in garbage
-  collection.
-
-- mimetools.choose_boundary() could return duplicate strings at times,
-  especially likely on Windows.  The strings returned are now guaranteed
-  unique within a single program run.
-
-- thread.interrupt_main() raises KeyboardInterrupt in the main thread.
-  dummy_thread has also been modified to try to simulate the behavior.
-
-- array.array.insert() now treats negative indices as being relative
-  to the end of the array, just like list.insert() does. (SF bug #739313)
-
-- The datetime module classes datetime, time, and timedelta are now
-  properly subclassable.
-
-- _tkinter.{get|set}busywaitinterval was added.
-
-- itertools.islice() now accepts stop=None as documented.
-  Fixes SF bug #730685.
-
-- the bsddb185 module is built in one restricted instance -
-  /usr/include/db.h exists and defines HASHVERSION to be 2.  This is true
-  for many BSD-derived systems.
-
-
-Library
--------
-
-- Some happy doctest extensions from Jim Fulton have been added to
-  doctest.py.  These are already being used in Zope3.  The two
-  primary ones:
-
-  doctest.debug(module, name) extracts the doctests from the named object
-  in the given module, puts them in a temp file, and starts pdb running
-  on that file.  This is great when a doctest fails.
-
-  doctest.DocTestSuite(module=None) returns a synthesized unittest
-  TestSuite instance, to be run by the unittest framework, which
-  runs all the doctests in the module.  This allows writing tests in
-  doctest style (which can be clearer and shorter than writing tests
-  in unittest style), without losing unittest's powerful testing
-  framework features (which doctest lacks).
-
-- For compatibility with doctests created before 2.3, if an expected
-  output block consists solely of "1" and the actual output block
-  consists solely of "True", it's accepted as a match; similarly
-  for "0" and "False".  This is quite un-doctest-like, but is practical.
-  The behavior can be disabled by passing the new doctest module
-  constant DONT_ACCEPT_TRUE_FOR_1 to the new optionflags optional
-  argument.
-
-- ZipFile.testzip() now only traps BadZipfile exceptions.  Previously,
-  a bare except caught to much and reported all errors as a problem
-  in the archive.
-
-- The logging module now has a new function, makeLogRecord() making
-  LogHandler easier to interact with DatagramHandler and SocketHandler.
-
-- The cgitb module has been extended to support plain text display (SF patch
-  569574).
-
-- A brand new version of IDLE (from the IDLEfork project at
-  SourceForge) is now included as Lib/idlelib.  The old Tools/idle is
-  no more.
-
-- Added a new module: trace (documentation missing).  This module used
-  to be distributed in Tools/scripts.  It uses sys.settrace() to trace
-  code execution -- either function calls or individual lines.  It can
-  generate tracing output during execution or a post-mortem report of
-  code coverage.
-
-- The threading module has new functions settrace() and setprofile()
-  that cooperate with the functions of the same name in the sys
-  module.  A function registered with the threading module will
-  be used for all threads it creates.  The new trace module uses this
-  to provide tracing for code running in threads.
-
-- copy.py: applied SF patch 707900, fixing bug 702858, by Steven
-  Taschuk.  Copying a new-style class that had a reference to itself
-  didn't work.  (The same thing worked fine for old-style classes.)
-  Builtin functions are now treated as atomic, fixing bug #746304.
-
-- difflib.py has two new functions:  context_diff() and unified_diff().
-
-- More fixes to urllib (SF 549151): (a) When redirecting, always use
-  GET.  This is common practice and more-or-less sanctioned by the
-  HTTP standard. (b) Add a handler for 307 redirection, which becomes
-  an error for POST, but a regular redirect for GET and HEAD
-
-- Added optional 'onerror' argument to os.walk(), to control error
-  handling.
-
-- inspect.is{method|data}descriptor was added, to allow pydoc display
-  __doc__ of data descriptors.
-
-- Fixed socket speed loss caused by use of the _socketobject wrapper class
-  in socket.py.
-
-- timeit.py now checks the current directory for imports.
-
-- urllib2.py now knows how to order proxy classes, so the user doesn't
-  have to insert it in front of other classes, nor do dirty tricks like
-  inserting a "dummy" HTTPHandler after a ProxyHandler when building an
-  opener with proxy support.
-
-- Iterators have been added for dbm keys.
-
-- random.Random objects can now be pickled.
-
-Tools/Demos
------------
-
-- pydoc now offers help on keywords and topics.
-
-- Tools/idle is gone; long live Lib/idlelib.
-
-- diff.py prints file diffs in context, unified, or ndiff formats,
-  providing a command line interface to difflib.py.
-
-- texcheck.py is a new script for making a rough validation of Python LaTeX
-  files.
-
-Build
------
-
-- Setting DESTDIR during 'make install' now allows specifying a
-  different root directory.
-
-C API
------
-
-- PyType_Ready():  If a type declares that it participates in gc
-  (Py_TPFLAGS_HAVE_GC), and its base class does not, and its base class's
-  tp_free slot is the default _PyObject_Del, and type does not define
-  a tp_free slot itself, _PyObject_GC_Del is assigned to type->tp_free.
-  Previously _PyObject_Del was inherited, which could at best lead to a
-  segfault.  In addition, if even after this magic the type's tp_free
-  slot is _PyObject_Del or NULL, and the type is a base type
-  (Py_TPFLAGS_BASETYPE), TypeError is raised:  since the type is a base
-  type, its dealloc function must call type->tp_free, and since the type
-  is gc'able, tp_free must not be NULL or _PyObject_Del.
-
-- PyThreadState_SetAsyncExc(): A new API (deliberately accessible only
-  from C) to interrupt a thread by sending it an exception.  It is
-  intentional that you have to write your own C extension to call it
-  from Python.
-
-
-New platforms
--------------
-
-None this time.
-
-Tests
------
-
-- test_imp rewritten so that it doesn't raise RuntimeError if run as a
-  side effect of being imported ("import test.autotest").
-
-Windows
--------
-
-- The Windows installer ships with Tcl/Tk 8.4.3 (upgraded from 8.4.1).
-
-- The installer always suggested that Python be installed on the C:
-  drive, due to a hardcoded "C:" generated by the Wise installation
-  wizard.  People with machines where C: is not the system drive
-  usually want Python installed on whichever drive is their system drive
-  instead.  We removed the hardcoded "C:", and two testers on machines
-  where C: is not the system drive report that the installer now
-  suggests their system drive.  Note that you can always select the
-  directory you want in the "Select Destination Directory" dialog --
-  that's what it's for.
-
-Mac
----
-
-- There's a new module called "autoGIL", which offers a mechanism to
-  automatically release the Global Interpreter Lock when an event loop
-  goes to sleep, allowing other threads to run. It's currently only
-  supported on OSX, in the Mach-O version.
-- The OSA modules now allow direct access to properties of the
-  toplevel application class (in AppleScript terminology).
-- The Package Manager can now update itself.
-
-SourceForge Bugs and Patches Applied
-------------------------------------
-
-430160, 471893, 501716, 542562, 549151, 569574, 595837, 596434,
-598163, 604210, 604716, 610332, 612627, 614770, 620190, 621891,
-622042, 639139, 640236, 644345, 649742, 649742, 658233, 660022,
-661318, 661676, 662807, 662923, 666219, 672855, 678325, 682347,
-683486, 684981, 685773, 686254, 692776, 692959, 693094, 696777,
-697989, 700827, 703666, 708495, 708604, 708901, 710733, 711902,
-713722, 715782, 718286, 719359, 719367, 723136, 723831, 723962,
-724588, 724767, 724767, 725942, 726150, 726446, 726869, 727051,
-727719, 727719, 727805, 728277, 728563, 728656, 729096, 729103,
-729293, 729297, 729300, 729317, 729395, 729622, 729817, 730170,
-730296, 730594, 730685, 730826, 730963, 731209, 731403, 731504,
-731514, 731626, 731635, 731643, 731644, 731644, 731689, 732124,
-732143, 732234, 732284, 732284, 732479, 732761, 732783, 732951,
-733667, 733781, 734118, 734231, 734869, 735051, 735293, 735527,
-735613, 735694, 736962, 736962, 737970, 738066, 739313, 740055,
-740234, 740301, 741806, 742126, 742741, 742860, 742860, 742911,
-744041, 744104, 744238, 744687, 744877, 745055, 745478, 745525,
-745620, 746012, 746304, 746366, 746801, 746953, 747348, 747667,
-747954, 748846, 748849, 748973, 748975, 749191, 749210, 749759,
-749831, 749911, 750008, 750092, 750542, 750595, 751038, 751107,
-751276, 751451, 751916, 751941, 751956, 751998, 752671, 753451,
-753602, 753617, 753845, 753925, 754014, 754340, 754447, 755031,
-755087, 755147, 755245, 755683, 755987, 756032, 756996, 757058,
-757229, 757818, 757821, 757822, 758112, 758910, 759227, 759889,
-760257, 760703, 760792, 761104, 761337, 761519, 761830, 762455
-
-
-What's New in Python 2.3 beta 1?
-================================
-
-*Release date: 25-Apr-2003*
-
-Core and builtins
------------------
-
-- New format codes B, H, I, k and K have been implemented for
-  PyArg_ParseTuple and PyBuild_Value.
-
-- New builtin function sum(seq, start=0) returns the sum of all the
-  items in iterable object seq, plus start (items are normally numbers,
-  and cannot be strings).
-
-- bool() called without arguments now returns False rather than
-  raising an exception.  This is consistent with calling the
-  constructors for the other builtin types -- called without argument
-  they all return the false value of that type.  (SF patch #724135)
-
-- In support of PEP 269 (making the pgen parser generator accessible
-  from Python), some changes to the pgen code structure were made; a
-  few files that used to be linked only with pgen are now linked with
-  Python itself.
-
-- The repr() of a weakref object now shows the __name__ attribute of
-  the referenced object, if it has one.
-
-- super() no longer ignores data descriptors, except __class__.  See
-  the thread started at
-  http://mail.python.org/pipermail/python-dev/2003-April/034338.html
-
-- list.insert(i, x) now interprets negative i as it would be
-  interpreted by slicing, so negative values count from the end of the
-  list.  This was the only place where such an interpretation was not
-  placed on a list index.
-
-- range() now works even if the arguments are longs with magnitude
-  larger than sys.maxint, as long as the total length of the sequence
-  fits.  E.g., range(2**100, 2**101, 2**100) is the following list:
-  [1267650600228229401496703205376L].  (SF patch #707427.)
-
-- Some horridly obscure problems were fixed involving interaction
-  between garbage collection and old-style classes with "ambitious"
-  getattr hooks.  If an old-style instance didn't have a __del__ method,
-  but did have a __getattr__ hook, and the instance became reachable
-  only from an unreachable cycle, and the hook resurrected or deleted
-  unreachable objects when asked to resolve "__del__", anything up to
-  a segfault could happen.  That's been repaired.
-
-- dict.pop now takes an optional argument specifying a default
-  value to return if the key is not in the dict.  If a default is not
-  given and the key is not found, a KeyError will still be raised.
-  Parallel changes were made to UserDict.UserDict and UserDict.DictMixin.
-  [SF patch #693753] (contributed by Michael Stone.)
-
-- sys.getfilesystemencoding() was added to expose
-  Py_FileSystemDefaultEncoding.
-
-- New function sys.exc_clear() clears the current exception.  This is
-  rarely needed, but can sometimes be useful to release objects
-  referenced by the traceback held in sys.exc_info()[2].  (SF patch
-  #693195.)
-
-- On 64-bit systems, a dictionary could contain duplicate long/int keys
-  if the key value was larger than 2**32.  See SF bug #689659.
-
-- Fixed SF bug #663074. The codec system was using global static
-  variables to store internal data. As a result, any attempts to use the
-  unicode system with multiple active interpreters, or successive
-  interpreter executions, would fail.
-
-- "%c" % u"a" now returns a unicode string instead of raising a
-  TypeError. u"%c" % 0xffffffff now raises a OverflowError instead
-  of a ValueError to be consistent with "%c" % 256. See SF patch #710127.
-
-Extension modules
------------------
-
-- The socket module now provides the functions inet_pton and inet_ntop
-  for converting between string and packed representation of IP
-  addresses.  There is also a new module variable, has_ipv6, which is
-  True iff the current Python has IPv6 support.  See SF patch #658327.
-
-- Tkinter wrappers around Tcl variables now pass objects directly
-  to Tcl, instead of first converting them to strings.
-
-- The .*? pattern in the re module is now special-cased to avoid the
-  recursion limit.  (SF patch #720991 -- many thanks to Gary Herron
-  and Greg Chapman.)
-
-- New function sys.call_tracing() allows pdb to debug code
-  recursively.
-
-- New function gc.get_referents(obj) returns a list of objects
-  directly referenced by obj.  In effect, it exposes what the object's
-  tp_traverse slot does, and can be helpful when debugging memory
-  leaks.
-
-- The iconv module has been removed from this release.
-
-- The platform-independent routines for packing floats in IEEE formats
-  (struct.pack's <f, >f, <d, and >d codes; pickle and cPickle's protocol 1
-  pickling of floats) ignored that rounding can cause a carry to
-  propagate.  The worst consequence was that, in rare cases, <f and >f
-  could produce strings that, when unpacked again, were a factor of 2
-  away from the original float.  This has been fixed.  See SF bug
-  #705836.
-
-- New function time.tzset() provides access to the C library tzset()
-  function, if supported.  (SF patch #675422.)
-
-- Using createfilehandler, deletefilehandler, createtimerhandler functions
-  on Tkinter.tkinter (_tkinter module) no longer crashes the interpreter.
-  See SF bug #692416.
-
-- Modified the fcntl.ioctl() function to allow modification of a passed
-  mutable buffer (for details see the reference documentation).
-
-- Made user requested changes to the itertools module.
-  Subsumed the times() function into repeat().
-  Added chain() and cycle().
-
-- The rotor module is now deprecated; the encryption algorithm it uses
-  is not believed to be secure, and including crypto code with Python
-  has implications for exporting and importing it in various countries.
-
-- The socket module now always uses the _socketobject wrapper class, even on
-  platforms which have dup(2).  The makefile() method is built directly
-  on top of the socket without duplicating the file descriptor, allowing
-  timeouts to work properly.
-
-Library
--------
-
-- New generator function os.walk() is an easy-to-use alternative to
-  os.path.walk().  See os module docs for details.  os.path.walk()
-  isn't deprecated at this time, but may become deprecated in a
-  future release.
-
-- Added new module "platform" which provides a wide range of tools
-  for querying platform dependent features.
-
-- netrc now allows ASCII punctuation characters in passwords.
-
-- shelve now supports the optional writeback argument, and exposes
-  pickle protocol versions.
-
-- Several methods of nntplib.NNTP have grown an optional file argument
-  which specifies a file where to divert the command's output
-  (already supported by the body() method).  (SF patch #720468)
-
-- The self-documenting XML server library DocXMLRPCServer was added.
-
-- Support for internationalized domain names has been added through
-  the 'idna' and 'punycode' encodings, the 'stringprep' module, the
-  'mkstringprep' tool, and enhancements to the socket and httplib
-  modules.
-
-- htmlentitydefs has two new dictionaries: name2codepoint maps
-  HTML entity names to Unicode codepoints (as integers).
-  codepoint2name is the reverse mapping. See SF patch #722017.
-
-- pdb has a new command, "debug", which lets you step through
-  arbitrary code from the debugger's (pdb) prompt.
-
-- unittest.failUnlessEqual and its equivalent unittest.assertEqual now
-  return 'not a == b' rather than 'a != b'.  This gives the desired
-  result for classes that define __eq__ without defining __ne__.
-
-- sgmllib now supports SGML marked sections, in particular the
-  MS Office extensions.
-
-- The urllib module now offers support for the iterator protocol.
-  SF patch 698520 contributed by Brett Cannon.
-
-- New module timeit provides a simple framework for timing the
-  execution speed of expressions and statements.
-
-- sets.Set objects now support mixed-type __eq__ and __ne__, instead
-  of raising TypeError.  If x is a Set object and y is a non-Set object,
-  x == y is False, and x != y is True.  This is akin to the change made
-  for mixed-type comparisons of datetime objects in 2.3a2; more info
-  about the rationale is in the NEWS entry for that.  See also SF bug
-  report <http://www.python.org/sf/693121>.
-
-- On Unix platforms, if os.listdir() is called with a Unicode argument,
-  it now returns Unicode strings.  (This behavior was added earlier
-  to the Windows NT/2k/XP version of os.listdir().)
-
-- Distutils: both 'py_modules' and 'packages' keywords can now be specified
-  in core.setup().  Previously you could supply one or the other, but
-  not both of them.  (SF patch #695090 from Bernhard Herzog)
-
-- New csv package makes it easy to read/write CSV files.
-
-- Module shlex has been extended to allow posix-like shell parsings,
-  including a split() function for easy spliting of quoted strings and
-  commands. An iterator interface was also implemented.
-
-Tools/Demos
------------
-
-- New script combinerefs.py helps analyze new PYTHONDUMPREFS output.
-  See the module docstring for details.
-
-Build
------
-
-- Fix problem building on OSF1 because the compiler only accepted
-  preprocessor directives that start in column 1.  (SF bug #691793.)
-
-C API
------
-
-- Added PyGC_Collect(), equivalent to calling gc.collect().
-
-- PyThreadState_GetDict() was changed not to raise an exception or
-  issue a fatal error when no current thread state is available.  This
-  makes it possible to print dictionaries when no thread is active.
-
-- LONG_LONG was renamed to PY_LONG_LONG.  Extensions that use this and
-  need compatibility with previous versions can use this:
-
-    #ifndef  PY_LONG_LONG
-    #define  PY_LONG_LONG  LONG_LONG
-    #endif
-
-- Added PyObject_SelfIter() to fill the tp_iter slot for the
-  typical case where the method returns its self argument.
-
-- The extended type structure used for heap types (new-style
-  classes defined by Python code using a class statement) is now
-  exported from object.h as PyHeapTypeObject.  (SF patch #696193.)
-
-New platforms
--------------
-
-None this time.
-
-Tests
------
-
-- test_timeout now requires -u network to be passed to regrtest to run.
-  See SF bug #692988.
-
-Windows
--------
-
-- os.fsync() now exists on Windows, and calls the Microsoft _commit()
-  function.
-
-- New function winsound.MessageBeep() wraps the Win32 API
-  MessageBeep().
-
-Mac
----
-
-- os.listdir() now returns Unicode strings on MacOS X when called with
-  a Unicode argument. See the general news item under "Library".
-
-- A new method MacOS.WMAvailable() returns true if it is safe to access
-  the window manager, false otherwise.
-
-- EasyDialogs dialogs are now movable-modal, and if the application is
-  currently in the background they will ask to be moved to the foreground
-  before displaying.
-
-- OSA Scripting support has improved a lot, and gensuitemodule.py can now
-  be used by mere mortals. The documentation is now also more or less
-  complete.
-
-- The IDE (in a framework build) now includes introductory documentation
-  in Apple Help Viewer format.
-
-
-What's New in Python 2.3 alpha 2?
-=================================
-
-*Release date: 19-Feb-2003*
-
-Core and builtins
------------------
-
-- Negative positions returned from PEP 293 error callbacks are now
-  treated as being relative to the end of the input string. Positions
-  that are out of bounds raise an IndexError.
-
-- sys.path[0] (the directory from which the script is loaded) is now
-  turned into an absolute pathname, unless it is the empty string.
-  (SF patch #664376.)
-
-- Finally fixed the bug in compile() and exec where a string ending
-  with an indented code block but no newline would raise SyntaxError.
-  This would have been a four-line change in parsetok.c...  Except
-  codeop.py depends on this behavior, so a compilation flag had to be
-  invented that causes the tokenizer to revert to the old behavior;
-  this required extra changes to 2 .h files, 2 .c files, and 2 .py
-  files.  (Fixes SF bug #501622.)
-
-- If a new-style class defines neither __new__ nor __init__, its
-  constructor would ignore all arguments.  This is changed now: the
-  constructor refuses arguments in this case.  This might break code
-  that worked under Python 2.2.  The simplest fix is to add a no-op
-  __init__: ``def __init__(self, *args, **kw): pass``.
-
-- Through a bytecode optimizer bug (and I bet you didn't even know
-  Python *had* a bytecode optimizer :-), "unsigned" hex/oct constants
-  with a leading minus sign would come out with the wrong sign.
-  ("Unsigned" hex/oct constants are those with a face value in the
-  range sys.maxint+1 through sys.maxint*2+1, inclusive; these have
-  always been interpreted as negative numbers through sign folding.)
-  E.g. 0xffffffff is -1, and -(0xffffffff) is 1, but -0xffffffff would
-  come out as -4294967295.  This was the case in Python 2.2 through
-  2.2.2 and 2.3a1, and in Python 2.4 it will once again have that
-  value, but according to PEP 237 it really needs to be 1 now.  This
-  will be backported to Python 2.2.3 a well.  (SF #660455)
-
-- int(s, base) sometimes sign-folds hex and oct constants; it only
-  does this when base is 0 and s.strip() starts with a '0'.  When the
-  sign is actually folded, as in int("0xffffffff", 0) on a 32-bit
-  machine, which returns -1, a FutureWarning is now issued; in Python
-  2.4, this will return 4294967295L, as do int("+0xffffffff", 0) and
-  int("0xffffffff", 16) right now.  (PEP 347)
-
-- super(X, x): x may now be a proxy for an X instance, i.e.
-  issubclass(x.__class__, X) but not issubclass(type(x), X).
-
-- isinstance(x, X): if X is a new-style class, this is now equivalent
-  to issubclass(type(x), X) or issubclass(x.__class__, X).  Previously
-  only type(x) was tested.  (For classic classes this was already the
-  case.)
-
-- compile(), eval() and the exec statement now fully support source code
-  passed as unicode strings.
-
-- int subclasses can be initialized with longs if the value fits in an int.
-  See SF bug #683467.
-
-- long(string, base) takes time linear in len(string) when base is a power
-  of 2 now.  It used to take time quadratic in len(string).
-
-- filter returns now Unicode results for Unicode arguments.
-
-- raw_input can now return Unicode objects.
-
-- List objects' sort() method now accepts None as the comparison function.
-  Passing None is semantically identical to calling sort() with no
-  arguments.
-
-- Fixed crash when printing a subclass of str and __str__ returned self.
-  See SF bug #667147.
-
-- Fixed an invalid RuntimeWarning and an undetected error when trying
-  to convert a long integer into a float which couldn't fit.
-  See SF bug #676155.
-
-- Function objects now have a __module__ attribute that is bound to
-  the name of the module in which the function was defined.  This
-  applies for C functions and methods as well as functions and methods
-  defined in Python.  This attribute is used by pickle.whichmodule(),
-  which changes the behavior of whichmodule slightly.  In Python 2.2
-  whichmodule() returns "__main__" for functions that are not defined
-  at the top-level of a module (examples: methods, nested functions).
-  Now whichmodule() will return the proper module name.
-
-Extension modules
------------------
-
-- operator.isNumberType() now checks that the object has a nb_int or
-  nb_float slot, rather than simply checking whether it has a non-NULL
-  tp_as_number pointer.
-
-- The imp module now has ways to acquire and release the "import
-  lock": imp.acquire_lock() and imp.release_lock().  Note: this is a
-  reentrant lock, so releasing the lock only truly releases it when
-  this is the last release_lock() call.  You can check with
-  imp.lock_held().  (SF bug #580952 and patch #683257.)
-
-- Change to cPickle to match pickle.py (see below and PEP 307).
-
-- Fix some bugs in the parser module.  SF bug #678518.
-
-- Thanks to Scott David Daniels, a subtle bug in how the zlib
-  extension implemented flush() was fixed.  Scott also rewrote the
-  zlib test suite using the unittest module.  (SF bug #640230 and
-  patch #678531.)
-
-- Added an itertools module containing high speed, memory efficient
-  looping constructs inspired by tools from Haskell and SML.
-
-- The SSL module now handles sockets with a timeout set correctly (SF
-  patch #675750, fixing SF bug #675552).
-
-- os/posixmodule has grown the sysexits.h constants (EX_OK and friends).
-
-- Fixed broken threadstate swap in readline that could cause fatal
-  errors when a readline hook was being invoked while a background
-  thread was active.  (SF bugs #660476 and #513033.)
-
-- fcntl now exposes the strops.h I_* constants.
-
-- Fix a crash on Solaris that occurred when calling close() on
-  an mmap'ed file which was already closed.  (SF patch #665913)
-
-- Fixed several serious bugs in the zipimport implementation.
-
-- datetime changes:
-
-  The date class is now properly subclassable.  (SF bug #720908)
-
-  The datetime and datetimetz classes have been collapsed into a single
-  datetime class, and likewise the time and timetz classes into a single
-  time class.  Previously, a datetimetz object with tzinfo=None acted
-  exactly like a datetime object, and similarly for timetz.  This wasn't
-  enough of a difference to justify distinct classes, and life is simpler
-  now.
-
-  today() and now() now round system timestamps to the closest
-  microsecond <http://www.python.org/sf/661086>.  This repairs an
-  irritation most likely seen on Windows systems.
-
-  In dt.astimezone(tz), if tz.utcoffset(dt) returns a duration,
-  ValueError is raised if tz.dst(dt) returns None (2.3a1 treated it
-  as 0 instead, but a tzinfo subclass wishing to participate in
-  time zone conversion has to take a stand on whether it supports
-  DST; if you don't care about DST, then code dst() to return 0 minutes,
-  meaning that DST is never in effect).
-
-  The tzinfo methods utcoffset() and dst() must return a timedelta object
-  (or None) now.  In 2.3a1 they could also return an int or long, but that
-  was an unhelpfully redundant leftover from an earlier version wherein
-  they couldn't return a timedelta.  TOOWTDI.
-
-  The example tzinfo class for local time had a bug.  It was replaced
-  by a later example coded by Guido.
-
-  datetime.astimezone(tz) no longer raises an exception when the
-  input datetime has no UTC equivalent in tz.  For typical "hybrid" time
-  zones (a single tzinfo subclass modeling both standard and daylight
-  time), this case can arise one hour per year, at the hour daylight time
-  ends.  See new docs for details.  In short, the new behavior mimics
-  the local wall clock's behavior of repeating an hour in local time.
-
-  dt.astimezone() can no longer be used to convert between naive and aware
-  datetime objects.  If you merely want to attach, or remove, a tzinfo
-  object, without any conversion of date and time members, use
-  dt.replace(tzinfo=whatever) instead, where "whatever" is None or a
-  tzinfo subclass instance.
-
-  A new method tzinfo.fromutc(dt) can be overridden in tzinfo subclasses
-  to give complete control over how a UTC time is to be converted to
-  a local time.  The default astimezone() implementation calls fromutc()
-  as its last step, so a tzinfo subclass can affect that too by overriding
-  fromutc().  It's expected that the default fromutc() implementation will
-  be suitable as-is for "almost all" time zone subclasses, but the
-  creativity of political time zone fiddling appears unbounded -- fromutc()
-  allows the highly motivated to emulate any scheme expressible in Python.
-
-  datetime.now():  The optional tzinfo argument was undocumented (that's
-  repaired), and its name was changed to tz ("tzinfo" is overloaded enough
-  already).  With a tz argument, now(tz) used to return the local date
-  and time, and attach tz to it, without any conversion of date and time
-  members.  This was less than useful.  Now now(tz) returns the current
-  date and time as local time in tz's time zone, akin to ::
-
-      tz.fromutc(datetime.utcnow().replace(tzinfo=utc))
-
-  where "utc" is an instance of a tzinfo subclass modeling UTC.  Without
-  a tz argument, now() continues to return the current local date and time,
-  as a naive datetime object.
-
-  datetime.fromtimestamp():  Like datetime.now() above, this had less than
-  useful behavior when the optional tinzo argument was specified.  See
-  also SF bug report <http://www.python.org/sf/660872>.
-
-  date and datetime comparison:  In order to prevent comparison from
-  falling back to the default compare-object-addresses strategy, these
-  raised TypeError whenever they didn't understand the other object type.
-  They still do, except when the other object has a "timetuple" attribute,
-  in which case they return NotImplemented now.  This gives other
-  datetime objects (e.g., mxDateTime) a chance to intercept the
-  comparison.
-
-  date, time, datetime and timedelta comparison:  When the exception
-  for mixed-type comparisons in the last paragraph doesn't apply, if
-  the comparison is == then False is returned, and if the comparison is
-  != then True is returned.  Because dict lookup and the "in" operator
-  only invoke __eq__, this allows, for example, ::
-
-      if some_datetime in some_sequence:
-
-  and ::
-
-      some_dict[some_timedelta] = whatever
-
-  to work as expected, without raising TypeError just because the
-  sequence is heterogeneous, or the dict has mixed-type keys.  [This
-  seems like a good idea to implement for all mixed-type comparisons
-  that don't want to allow falling back to address comparison.]
-
-  The constructors building a datetime from a timestamp could raise
-  ValueError if the platform C localtime()/gmtime() inserted "leap
-  seconds".  Leap seconds are ignored now.  On such platforms, it's
-  possible to have timestamps that differ by a second, yet where
-  datetimes constructed from them are equal.
-
-  The pickle format of date, time and datetime objects has changed
-  completely.  The undocumented pickler and unpickler functions no
-  longer exist.  The undocumented __setstate__() and __getstate__()
-  methods no longer exist either.
-
-Library
--------
-
-- The logging module was updated slightly; the WARN level was renamed
-  to WARNING, and the matching function/method warn() to warning().
-
-- The pickle and cPickle modules were updated with a new pickling
-  protocol (documented by pickletools.py, see below) and several
-  extensions to the pickle customization API (__reduce__, __setstate__
-  etc.).  The copy module now uses more of the pickle customization
-  API to copy objects that don't implement __copy__ or __deepcopy__.
-  See PEP 307 for details.
-
-- The distutils "register" command now uses http://www.python.org/pypi
-  as the default repository.  (See PEP 301.)
-
-- the platform dependent path related variables sep, altsep, extsep,
-  pathsep, curdir, pardir and defpath are now defined in the platform
-  dependent path modules (e.g. ntpath.py) rather than os.py, so these
-  variables are now available via os.path.  They continue to be
-  available from the os module.
-  (see <http://www.python.org/sf/680789>).
-
-- array.array was added to the types repr.py knows about (see
-  <http://www.python.org/sf/680789>).
-
-- The new pickletools.py contains lots of documentation about pickle
-  internals, and supplies some helpers for working with pickles, such as
-  a symbolic pickle disassembler.
-
-- Xmlrpclib.py now supports the builtin boolean type.
-
-- py_compile has a new 'doraise' flag and a new PyCompileError
-  exception.
-
-- SimpleXMLRPCServer now supports CGI through the CGIXMLRPCRequestHandler
-  class.
-
-- The sets module now raises TypeError in __cmp__, to clarify that
-  sets are not intended to be three-way-compared; the comparison
-  operators are overloaded as subset/superset tests.
-
-- Bastion.py and rexec.py are disabled.  These modules are not safe in
-  Python 2.2. or 2.3.
-
-- realpath is now exported when doing ``from poxixpath import *``.
-  It is also exported for ntpath, macpath, and os2emxpath.
-  See SF bug #659228.
-
-- New module tarfile from Lars Gustäbel provides a comprehensive interface
-  to tar archive files with transparent gzip and bzip2 compression.
-  See SF patch #651082.
-
-- urlparse can now parse imap:// URLs.  See SF feature request #618024.
-
-- Tkinter.Canvas.scan_dragto() provides an optional parameter to support
-  the gain value which is passed to Tk.  SF bug# 602259.
-
-- Fix logging.handlers.SysLogHandler protocol when using UNIX domain sockets.
-  See SF patch #642974.
-
-- The dospath module was deleted.  Use the ntpath module when manipulating
-  DOS paths from other platforms.
-
-Tools/Demos
------------
-
-- Two new scripts (db2pickle.py and pickle2db.py) were added to the
-  Tools/scripts directory to facilitate conversion from the old bsddb module
-  to the new one.  While the user-visible API of the new module is
-  compatible with the old one, it's likely that the version of the
-  underlying database library has changed.  To convert from the old library,
-  run the db2pickle.py script using the old version of Python to convert it
-  to a pickle file.  After upgrading Python, run the pickle2db.py script
-  using the new version of Python to reconstitute your database.  For
-  example:
-
-    % python2.2 db2pickle.py -h some.db > some.pickle
-    % python2.3 pickle2db.py -h some.db.new < some.pickle
-
-  Run the scripts without any args to get a usage message.
-
-
-Build
------
-
-- The audio driver tests (test_ossaudiodev.py and
-  test_linuxaudiodev.py) are no longer run by default.  This is
-  because they don't always work, depending on your hardware and
-  software.  To run these tests, you must use an invocation like ::
-
-    ./python Lib/test/regrtest.py -u audio test_ossaudiodev
-
-- On systems which build using the configure script, compiler flags which
-  used to be lumped together using the OPT flag have been split into two
-  groups, OPT and BASECFLAGS.  OPT is meant to carry just optimization- and
-  debug-related flags like "-g" and "-O3".  BASECFLAGS is meant to carry
-  compiler flags that are required to get a clean compile.  On some
-  platforms (many Linux flavors in particular) BASECFLAGS will be empty by
-  default.  On others, such as Mac OS X and SCO, it will contain required
-  flags.  This change allows people building Python to override OPT without
-  fear of clobbering compiler flags which are required to get a clean build.
-
-- On Darwin/Mac OS X platforms, /sw/lib and /sw/include are added to the
-  relevant search lists in setup.py.  This allows users building Python to
-  take advantage of the many packages available from the fink project
-  <http://fink.sf.net/>.
-
-- A new Makefile target, scriptsinstall, installs a number of useful scripts
-  from the Tools/scripts directory.
-
-C API
------
-
-- PyEval_GetFrame() is now declared to return a ``PyFrameObject *``
-  instead of a plain ``PyObject *``.  (SF patch #686601.)
-
-- PyNumber_Check() now checks that the object has a nb_int or nb_float
-  slot, rather than simply checking whether it has a non-NULL
-  tp_as_number pointer.
-
-- A C type that inherits from a base type that defines tp_as_buffer
-  will now inherit the tp_as_buffer pointer if it doesn't define one.
-  (SF #681367)
-
-- The PyArg_Parse functions now issue a DeprecationWarning if a float
-  argument is provided when an integer is specified (this affects the 'b',
-  'B', 'h', 'H', 'i', and 'l' codes).  Future versions of Python will
-  raise a TypeError.
-
-Tests
------
-
-- Several tests weren't being run from regrtest.py (test_timeout.py,
-  test_tarfile.py, test_netrc.py, test_multifile.py,
-  test_importhooks.py and test_imp.py).  Now they are.  (Note to
-  developers: please read Lib/test/README when creating a new test, to
-  make sure to do it right!  All tests need to use either unittest or
-  pydoc.)
-
-- Added test_posix.py, a test suite for the posix module.
-
-- Added test_hexoct.py, a test suite for hex/oct constant folding.
-
-Windows
--------
-
-- The timeout code for socket connect() didn't work right; this has
-  now been fixed.  test_timeout.py should pass (at least most of the
-  time).
-
-- distutils' msvccompiler class now passes the preprocessor options to
-  the resource compiler.  See SF patch #669198.
-
-- The bsddb module now ships with Sleepycat's 4.1.25.NC, the latest
-  release without strong cryptography.
-
-- sys.path[0], if it contains a directory name, is now always an
-  absolute pathname. (SF patch #664376.)
-
-- The new logging package is now installed by the Windows installer.  It
-  wasn't in 2.3a1 due to oversight.
-
-Mac
----
-
-- There are new dialogs EasyDialogs.AskFileForOpen, AskFileForSave
-  and AskFolder. The old macfs.StandardGetFile and friends are deprecated.
-
-- Most of the standard library now uses pathnames or FSRefs in preference
-  of FSSpecs, and use the underlying Carbon.File and Carbon.Folder modules
-  in stead of macfs. macfs will probably be deprecated in the future.
-
-- Type Carbon.File.FSCatalogInfo and supporting methods have been implemented.
-  This also makes macfs.FSSpec.SetDates() work again.
-
-- There is a new module pimp, the package install manager for Python, and
-  accompanying applet PackageManager. These allow you to easily download
-  and install pretested extension packages either in source or binary
-  form. Only in MacPython-OSX.
-
-- Applets are now built with bundlebuilder in MacPython-OSX, which should make
-  them more robust and also provides a path towards BuildApplication. The
-  downside of this change is that applets can no longer be run from the
-  Terminal window, this will hopefully be fixed in the 2.3b1.
-
-
-What's New in Python 2.3 alpha 1?
-=================================
-
-*Release date: 31-Dec-2002*
-
-Type/class unification and new-style classes
---------------------------------------------
-
-- One can now assign to __bases__ and __name__ of new-style classes.
-
-- dict() now accepts keyword arguments so that dict(one=1, two=2)
-  is the equivalent of {"one": 1, "two": 2}.  Accordingly,
-  the existing (but undocumented) 'items' keyword argument has
-  been eliminated.  This means that dict(items=someMapping) now has
-  a different meaning than before.
-
-- int() now returns a long object if the argument is outside the
-  integer range, so int("4" * 1000), int(1e200) and int(1L<<1000) will
-  all return long objects instead of raising an OverflowError.
-
-- Assignment to __class__ is disallowed if either the old or the new
-  class is a statically allocated type object (such as defined by an
-  extension module).  This prevents anomalies like 2.__class__ = bool.
-
-- New-style object creation and deallocation have been sped up
-  significantly; they are now faster than classic instance creation
-  and deallocation.
-
-- The __slots__ variable can now mention "private" names, and the
-  right thing will happen (e.g. __slots__ = ["__foo"]).
-
-- The built-ins slice() and buffer() are now callable types.  The
-  types classobj (formerly class), code, function, instance, and
-  instancemethod (formerly instance-method), which have no built-in
-  names but are accessible through the types module, are now also
-  callable.  The type dict-proxy is renamed to dictproxy.
-
-- Cycles going through the __class__ link of a new-style instance are
-  now detected by the garbage collector.
-
-- Classes using __slots__ are now properly garbage collected.
-  [SF bug 519621]
-
-- Tightened the __slots__ rules: a slot name must be a valid Python
-  identifier.
-
-- The constructor for the module type now requires a name argument and
-  takes an optional docstring argument.  Previously, this constructor
-  ignored its arguments.  As a consequence, deriving a class from a
-  module (not from the module type) is now illegal; previously this
-  created an unnamed module, just like invoking the module type did.
-  [SF bug 563060]
-
-- A new type object, 'basestring', is added.  This is a common base type
-  for 'str' and 'unicode', and can be used instead of
-  types.StringTypes, e.g. to test whether something is "a string":
-  isinstance(x, basestring) is True for Unicode and 8-bit strings.  This
-  is an abstract base class and cannot be instantiated directly.
-
-- Changed new-style class instantiation so that when C's __new__
-  method returns something that's not a C instance, its __init__ is
-  not called.  [SF bug #537450]
-
-- Fixed super() to work correctly with class methods.  [SF bug #535444]
-
-- If you try to pickle an instance of a class that has __slots__ but
-  doesn't define or override __getstate__, a TypeError is now raised.
-  This is done by adding a bozo __getstate__ to the class that always
-  raises TypeError.  (Before, this would appear to be pickled, but the
-  state of the slots would be lost.)
-
-Core and builtins
------------------
-
-- Import from zipfiles is now supported.  The name of a zipfile placed
-  on sys.path causes the import statement to look for importable Python
-  modules (with .py, pyc and .pyo extensions) and packages inside the
-  zipfile.  The zipfile import follows the specification (though not
-  the sample implementation) of PEP 273.  The semantics of __path__ are
-  compatible with those that have been implemented in Jython since
-  Jython 2.1.
-
-- PEP 302 has been accepted.  Although it was initially developed to
-  support zipimport, it offers a new, general import hook mechanism.
-  Several new variables have been added to the sys module:
-  sys.meta_path, sys.path_hooks, and sys.path_importer_cache; these
-  make extending the import statement much more convenient than
-  overriding the __import__ built-in function.  For a description of
-  these, see PEP 302.
-
-- A frame object's f_lineno attribute can now be written to from a
-  trace function to change which line will execute next.  A command to
-  exploit this from pdb has been added.  [SF patch #643835]
-
-- The _codecs support module for codecs.py was turned into a builtin
-  module to assure that at least the builtin codecs are available
-  to the Python parser for source code decoding according to PEP 263.
-
-- issubclass now supports a tuple as the second argument, just like
-  isinstance does. ``issubclass(X, (A, B))`` is equivalent to
-  ``issubclass(X, A) or issubclass(X, B)``.
-
-- Thanks to Armin Rigo, the last known way to provoke a system crash
-  by cleverly arranging for a comparison function to mutate a list
-  during a list.sort() operation has been fixed.  The effect of
-  attempting to mutate a list, or even to inspect its contents or
-  length, while a sort is in progress, is not defined by the language.
-  The C implementation of Python 2.3 attempts to detect mutations,
-  and raise ValueError if one occurs, but there's no guarantee that
-  all mutations will be caught, or that any will be caught across
-  releases or implementations.
-
-- Unicode file name processing for Windows (PEP 277) is implemented.
-  All platforms now have an os.path.supports_unicode_filenames attribute,
-  which is set to True on Windows NT/2000/XP, and False elsewhere.
-
-- Codec error handling callbacks (PEP 293) are implemented.
-  Error handling in unicode.encode or str.decode can now be customized.
-
-- A subtle change to the semantics of the built-in function intern():
-  interned strings are no longer immortal.  You must keep a reference
-  to the return value intern() around to get the benefit.
-
-- Use of 'None' as a variable, argument or attribute name now
-  issues a SyntaxWarning.  In the future, None may become a keyword.
-
-- SET_LINENO is gone.  co_lnotab is now consulted to determine when to
-  call the trace function.  C code that accessed f_lineno should call
-  PyCode_Addr2Line instead (f_lineno is still there, but only kept up
-  to date when there is a trace function set).
-
-- There's a new warning category, FutureWarning.  This is used to warn
-  about a number of situations where the value or sign of an integer
-  result will change in Python 2.4 as a result of PEP 237 (integer
-  unification).  The warnings implement stage B0 mentioned in that
-  PEP.  The warnings are about the following situations:
-
-    - Octal and hex literals without 'L' prefix in the inclusive range
-      [0x80000000..0xffffffff]; these are currently negative ints, but
-      in Python 2.4 they will be positive longs with the same bit
-      pattern.
-
-    - Left shifts on integer values that cause the outcome to lose
-      bits or have a different sign than the left operand.  To be
-      precise: x<<n where this currently doesn't yield the same value
-      as long(x)<<n; in Python 2.4, the outcome will be long(x)<<n.
-
-    - Conversions from ints to string that show negative values as
-      unsigned ints in the inclusive range [0x80000000..0xffffffff];
-      this affects the functions hex() and oct(), and the string
-      formatting codes %u, %o, %x, and %X.  In Python 2.4, these will
-      show signed values (e.g. hex(-1) currently returns "0xffffffff";
-      in Python 2.4 it will return "-0x1").
-
-- The bits manipulated under the cover by sys.setcheckinterval() have
-  been changed.  Both the check interval and the ticker used to be
-  per-thread values.  They are now just a pair of global variables.
-  In addition, the default check interval was boosted from 10 to 100
-  bytecode instructions.  This may have some effect on systems that
-  relied on the old default value.  In particular, in multi-threaded
-  applications which try to be highly responsive, response time will
-  increase by some (perhaps imperceptible) amount.
-
-- When multiplying very large integers, a version of the so-called
-  Karatsuba algorithm is now used.  This is most effective if the
-  inputs have roughly the same size.  If they both have about N digits,
-  Karatsuba multiplication has O(N**1.58) runtime (the exponent is
-  log_base_2(3)) instead of the previous O(N**2).  Measured results may
-  be better or worse than that, depending on platform quirks.  Besides
-  the O() improvement in raw instruction count, the Karatsuba algorithm
-  appears to have much better cache behavior on extremely large integers
-  (starting in the ballpark of a million bits).  Note that this is a
-  simple implementation, and there's no intent here to compete with,
-  e.g., GMP.  It gives a very nice speedup when it applies, but a package
-  devoted to fast large-integer arithmetic should run circles around it.
-
-- u'%c' will now raise a ValueError in case the argument is an
-  integer outside the valid range of Unicode code point ordinals.
-
-- The tempfile module has been overhauled for enhanced security.  The
-  mktemp() function is now deprecated; new, safe replacements are
-  mkstemp() (for files) and mkdtemp() (for directories), and the
-  higher-level functions NamedTemporaryFile() and TemporaryFile().
-  Use of some global variables in this module is also deprecated; the
-  new functions have keyword arguments to provide the same
-  functionality.  All Lib, Tools and Demo modules that used the unsafe
-  interfaces have been updated to use the safe replacements.  Thanks
-  to Zack Weinberg!
-
-- When x is an object whose class implements __mul__ and __rmul__,
-  1.0*x would correctly invoke __rmul__, but 1*x would erroneously
-  invoke __mul__.  This was due to the sequence-repeat code in the int
-  type.  This has been fixed now.
-
-- Previously, "str1 in str2" required str1 to be a string of length 1.
-  This restriction has been relaxed to allow str1 to be a string of
-  any length.  Thus "'el' in 'hello world'" returns True now.
-
-- File objects are now their own iterators.  For a file f, iter(f) now
-  returns f (unless f is closed), and f.next() is similar to
-  f.readline() when EOF is not reached; however, f.next() uses a
-  readahead buffer that messes up the file position, so mixing
-  f.next() and f.readline() (or other methods) doesn't work right.
-  Calling f.seek() drops the readahead buffer, but other operations
-  don't.  It so happens that this gives a nice additional speed boost
-  to "for line in file:"; the xreadlines method and corresponding
-  module are now obsolete.  Thanks to Oren Tirosh!
-
-- Encoding declarations (PEP 263, phase 1) have been implemented.  A
-  comment of the form "# -*- coding: <encodingname> -*-" in the first
-  or second line of a Python source file indicates the encoding.
-
-- list.sort() has a new implementation.  While cross-platform results
-  may vary, and in data-dependent ways, this is much faster on many
-  kinds of partially ordered lists than the previous implementation,
-  and reported to be just as fast on randomly ordered lists on
-  several major platforms.  This sort is also stable (if A==B and A
-  precedes B in the list at the start, A precedes B after the sort too),
-  although the language definition does not guarantee stability.  A
-  potential drawback is that list.sort() may require temp space of
-  len(list)*2 bytes (``*4`` on a 64-bit machine).  It's therefore possible
-  for list.sort() to raise MemoryError now, even if a comparison function
-  does not.  See <http://www.python.org/sf/587076> for full details.
-
-- All standard iterators now ensure that, once StopIteration has been
-  raised, all future calls to next() on the same iterator will also
-  raise StopIteration.  There used to be various counterexamples to
-  this behavior, which could caused confusion or subtle program
-  breakage, without any benefits.  (Note that this is still an
-  iterator's responsibility; the iterator framework does not enforce
-  this.)
-
-- Ctrl+C handling on Windows has been made more consistent with
-  other platforms.  KeyboardInterrupt can now reliably be caught,
-  and Ctrl+C at an interactive prompt no longer terminates the
-  process under NT/2k/XP (it never did under Win9x).  Ctrl+C will
-  interrupt time.sleep() in the main thread, and any child processes
-  created via the popen family (on win2k; we can't make win9x work
-  reliably) are also interrupted (as generally happens on for Linux/Unix.)
-  [SF bugs 231273, 439992 and 581232]
-
-- sys.getwindowsversion() has been added on Windows.  This
-  returns a tuple with information about the version of Windows
-  currently running.
-
-- Slices and repetitions of buffer objects now consistently return
-  a string.  Formerly, strings would be returned most of the time,
-  but a buffer object would be returned when the repetition count
-  was one or when the slice range was all inclusive.
-
-- Unicode objects in sys.path are no longer ignored but treated
-  as directory names.
-
-- Fixed string.startswith and string.endswith builtin methods
-  so they accept negative indices.  [SF bug 493951]
-
-- Fixed a bug with a continue inside a try block and a yield in the
-  finally clause.  [SF bug 567538]
-
-- Most builtin sequences now support "extended slices", i.e. slices
-  with a third "stride" parameter.  For example, "hello world"[::-1]
-  gives "dlrow olleh".
-
-- A new warning PendingDeprecationWarning was added to provide
-  direction on features which are in the process of being deprecated.
-  The warning will not be printed by default.  To see the pending
-  deprecations, use -Walways::PendingDeprecationWarning::
-  as a command line option or warnings.filterwarnings() in code.
-
-- Deprecated features of xrange objects have been removed as
-  promised.  The start, stop, and step attributes and the tolist()
-  method no longer exist.  xrange repetition and slicing have been
-  removed.
-
-- New builtin function enumerate(x), from PEP 279.  Example:
-  enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c").
-  The argument can be an arbitrary iterable object.
-
-- The assert statement no longer tests __debug__ at runtime.  This means
-  that assert statements cannot be disabled by assigning a false value
-  to __debug__.
-
-- A method zfill() was added to str and unicode, that fills a numeric
-  string to the left with zeros.  For example,
-  "+123".zfill(6) -> "+00123".
-
-- Complex numbers supported divmod() and the // and % operators, but
-  these make no sense.  Since this was documented, they're being
-  deprecated now.
-
-- String and unicode methods lstrip(), rstrip() and strip() now take
-  an optional argument that specifies the characters to strip.  For
-  example, "Foo!!!?!?!?".rstrip("?!") -> "Foo".
-
-- There's a new dictionary constructor (a class method of the dict
-  class), dict.fromkeys(iterable, value=None).  It constructs a
-  dictionary with keys taken from the iterable and all values set to a
-  single value.  It can be used for building sets and for removing
-  duplicates from sequences.
-
-- Added a new dict method pop(key).  This removes and returns the
-  value corresponding to key.  [SF patch #539949]
-
-- A new built-in type, bool, has been added, as well as built-in
-  names for its two values, True and False.  Comparisons and sundry
-  other operations that return a truth value have been changed to
-  return a bool instead.  Read PEP 285 for an explanation of why this
-  is backward compatible.
-
-- Fixed two bugs reported as SF #535905: under certain conditions,
-  deallocating a deeply nested structure could cause a segfault in the
-  garbage collector, due to interaction with the "trashcan" code;
-  access to the current frame during destruction of a local variable
-  could access a pointer to freed memory.
-
-- The optional object allocator ("pymalloc") has been enabled by
-  default.  The recommended practice for memory allocation and
-  deallocation has been streamlined.  A header file is included,
-  Misc/pymemcompat.h, which can be bundled with 3rd party extensions
-  and lets them use the same API with Python versions from 1.5.2
-  onwards.
-
-- PyErr_Display will provide file and line information for all exceptions
-  that have an attribute print_file_and_line, not just SyntaxErrors.
-
-- The UTF-8 codec will now encode and decode Unicode surrogates
-  correctly and without raising exceptions for unpaired ones.
-
-- Universal newlines (PEP 278) is implemented.  Briefly, using 'U'
-  instead of 'r' when opening a text file for reading changes the line
-  ending convention so that any of '\r', '\r\n', and '\n' is
-  recognized (even mixed in one file); all three are converted to
-  '\n', the standard Python line end character.
-
-- file.xreadlines() now raises a ValueError if the file is closed:
-  Previously, an xreadlines object was returned which would raise
-  a ValueError when the xreadlines.next() method was called.
-
-- sys.exit() inadvertently allowed more than one argument.
-  An exception will now be raised if more than one argument is used.
-
-- Changed evaluation order of dictionary literals to conform to the
-  general left to right evaluation order rule. Now {f1(): f2()} will
-  evaluate f1 first.
-
-- Fixed bug #521782: when a file was in non-blocking mode, file.read()
-  could silently lose data or wrongly throw an unknown error.
-
-- The sq_repeat, sq_inplace_repeat, sq_concat and sq_inplace_concat
-  slots are now always tried after trying the corresponding nb_* slots.
-  This fixes a number of minor bugs (see bug #624807).
-
-- Fix problem with dynamic loading on 64-bit AIX (see bug #639945).
-
-Extension modules
------------------
-
-- Added three operators to the operator module:
-    operator.pow(a,b) which is equivalent to:  a**b.
-    operator.is_(a,b) which is equivalent to:  a is b.
-    operator.is_not(a,b) which is equivalent to:  a is not b.
-
-- posix.openpty now works on all systems that have /dev/ptmx.
-
-- A module zipimport exists to support importing code from zip
-  archives.
-
-- The new datetime module supplies classes for manipulating dates and
-  times.  The basic design came from the Zope "fishbowl process", and
-  favors practical commercial applications over calendar esoterica.  See
-
-      http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage
-
-- _tkinter now returns Tcl objects, instead of strings. Objects which
-  have Python equivalents are converted to Python objects, other objects
-  are wrapped. This can be configured through the wantobjects method,
-  or Tkinter.wantobjects.
-
-- The PyBSDDB wrapper around the Sleepycat Berkeley DB library has
-  been added as the package bsddb.  The traditional bsddb module is
-  still available in source code, but not built automatically anymore,
-  and is now named bsddb185.  This supports Berkeley DB versions from
-  3.0 to 4.1.  For help converting your databases from the old module (which
-  probably used an obsolete version of Berkeley DB) to the new module, see
-  the db2pickle.py and pickle2db.py scripts described in the Tools/Demos
-  section above.
-
-- unicodedata was updated to Unicode 3.2. It supports normalization
-  and names for Hangul syllables and CJK unified ideographs.
-
-- resource.getrlimit() now returns longs instead of ints.
-
-- readline now dynamically adjusts its input/output stream if
-  sys.stdin/stdout changes.
-
-- The _tkinter module (and hence Tkinter) has dropped support for
-  Tcl/Tk 8.0 and 8.1.  Only Tcl/Tk versions 8.2, 8.3 and 8.4 are
-  supported.
-
-- cPickle.BadPickleGet is now a class.
-
-- The time stamps in os.stat_result are floating point numbers
-  after stat_float_times has been called.
-
-- If the size passed to mmap.mmap() is larger than the length of the
-  file on non-Windows platforms, a ValueError is raised. [SF bug 585792]
-
-- The xreadlines module is slated for obsolescence.
-
-- The strptime function in the time module is now always available (a
-  Python implementation is used when the C library doesn't define it).
-
-- The 'new' module is no longer an extension, but a Python module that
-  only exists for backwards compatibility.  Its contents are no longer
-  functions but callable type objects.
-
-- The bsddb.*open functions can now take 'None' as a filename.
-  This will create a temporary in-memory bsddb that won't be
-  written to disk.
-
-- posix.getloadavg, posix.lchown, posix.killpg, posix.mknod, and
-  posix.getpgid have been added where available.
-
-- The locale module now exposes the C library's gettext interface. It
-  also has a new function getpreferredencoding.
-
-- A security hole ("double free") was found in zlib-1.1.3, a popular
-  third party compression library used by some Python modules.  The
-  hole was quickly plugged in zlib-1.1.4, and the Windows build of
-  Python now ships with zlib-1.1.4.
-
-- pwd, grp, and resource return enhanced tuples now, with symbolic
-  field names.
-
-- array.array is now a type object. A new format character
-  'u' indicates Py_UNICODE arrays. For those, .tounicode and
-  .fromunicode methods are available. Arrays now support __iadd__
-  and __imul__.
-
-- dl now builds on every system that has dlfcn.h.  Failure in case
-  of sizeof(int)!=sizeof(long)!=sizeof(void*) is delayed until dl.open
-  is called.
-
-- The sys module acquired a new attribute, api_version, which evaluates
-  to the value of the PYTHON_API_VERSION macro with which the
-  interpreter was compiled.
-
-- Fixed bug #470582: sre module would return a tuple (None, 'a', 'ab')
-  when applying the regular expression '^((a)c)?(ab)$' on 'ab'. It now
-  returns (None, None, 'ab'), as expected. Also fixed handling of
-  lastindex/lastgroup match attributes in similar cases. For example,
-  when running the expression r'(a)(b)?b' over 'ab', lastindex must be
-  1, not 2.
-
-- Fixed bug #581080: sre scanner was not checking the buffer limit
-  before increasing the current pointer. This was creating an infinite
-  loop in the search function, once the pointer exceeded the buffer
-  limit.
-
-- The os.fdopen function now enforces a file mode starting with the
-  letter 'r', 'w' or 'a', otherwise a ValueError is raised. This fixes
-  bug #623464.
-
-- The linuxaudiodev module is now deprecated; it is being replaced by
-  ossaudiodev.  The interface has been extended to cover a lot more of
-  OSS (see www.opensound.com), including most DSP ioctls and the
-  OSS mixer API.  Documentation forthcoming in 2.3a2.
-
-Library
--------
-
-- imaplib.py now supports SSL (Tino Lange and Piers Lauder).
-
-- Freeze's modulefinder.py has been moved to the standard library;
-  slightly improved so it will issue less false missing submodule
-  reports (see sf path #643711 for details).  Documentation will follow
-  with Python 2.3a2.
-
-- os.path exposes getctime.
-
-- unittest.py now has two additional methods called assertAlmostEqual()
-  and failIfAlmostEqual().  They implement an approximate comparison
-  by rounding the difference between the two arguments and comparing
-  the result to zero.  Approximate comparison is essential for
-  unit tests of floating point results.
-
-- calendar.py now depends on the new datetime module rather than
-  the time module.  As a result, the range of allowable dates
-  has been increased.
-
-- pdb has a new 'j(ump)' command to select the next line to be
-  executed.
-
-- The distutils created windows installers now can run a
-  postinstallation script.
-
-- doctest.testmod can now be called without argument, which means to
-  test the current module.
-
-- When canceling a server that implemented threading with a keyboard
-  interrupt, the server would shut down but not terminate (waiting on
-  client threads). A new member variable, daemon_threads, was added to
-  the ThreadingMixIn class in SocketServer.py to make it explicit that
-  this behavior needs to be controlled.
-
-- A new module, optparse, provides a fancy alternative to getopt for
-  command line parsing.  It is a slightly modified version of Greg
-  Ward's Optik package.
-
-- UserDict.py now defines a DictMixin class which defines all dictionary
-  methods for classes that already have a minimum mapping interface.
-  This greatly simplifies writing classes that need to be substitutable
-  for dictionaries (such as the shelve module).
-
-- shelve.py now subclasses from UserDict.DictMixin.  Now shelve supports
-  all dictionary methods.  This eases the transition to persistent
-  storage for scripts originally written with dictionaries in mind.
-
-- shelve.open and the various classes in shelve.py now accept an optional
-  binary flag, which defaults to False.  If True, the values stored in the
-  shelf are binary pickles.
-
-- A new package, logging, implements the logging API defined by PEP
-  282.  The code is written by Vinay Sajip.
-
-- StreamReader, StreamReaderWriter and StreamRecoder in the codecs
-  modules are iterators now.
-
-- gzip.py now handles files exceeding 2GB.  Files over 4GB also work
-  now (provided the OS supports it, and Python is configured with large
-  file support), but in that case the underlying gzip file format can
-  record only the least-significant 32 bits of the file size, so that
-  some tools working with gzipped files may report an incorrect file
-  size.
-
-- xml.sax.saxutils.unescape has been added, to replace entity references
-  with their entity value.
-
-- Queue.Queue.{put,get} now support an optional timeout argument.
-
-- Various features of Tk 8.4 are exposed in Tkinter.py. The multiple
-  option of tkFileDialog is exposed as function askopenfile{,name}s.
-
-- Various configure methods of Tkinter have been stream-lined, so that
-  tag_configure, image_configure, window_configure now return a
-  dictionary when invoked with no argument.
-
-- Importing the readline module now no longer has the side effect of
-  calling setlocale(LC_CTYPE, "").  The initial "C" locale, or
-  whatever locale is explicitly set by the user, is preserved.  If you
-  want repr() of 8-bit strings in your preferred encoding to preserve
-  all printable characters of that encoding, you have to add the
-  following code to your $PYTHONSTARTUP file or to your application's
-  main():
-
-    import locale
-    locale.setlocale(locale.LC_CTYPE, "")
-
-- shutil.move was added. shutil.copytree now reports errors as an
-  exception at the end, instead of printing error messages.
-
-- Encoding name normalization was generalized to not only
-  replace hyphens with underscores, but also all other non-alphanumeric
-  characters (with the exception of the dot which is used for Python
-  package names during lookup). The aliases.py mapping was updated
-  to the new standard.
-
-- mimetypes has two new functions: guess_all_extensions() which
-  returns a list of all known extensions for a mime type, and
-  add_type() which adds one mapping between a mime type and
-  an extension to the database.
-
-- New module: sets, defines the class Set that implements a mutable
-  set type using the keys of a dict to represent the set.  There's
-  also a class ImmutableSet which is useful when you need sets of sets
-  or when you need to use sets as dict keys, and a class BaseSet which
-  is the base class of the two.
-
-- Added random.sample(population,k) for random sampling without replacement.
-  Returns a k length list of unique elements chosen from the population.
-
-- random.randrange(-sys.maxint-1, sys.maxint) no longer raises
-  OverflowError.  That is, it now accepts any combination of 'start'
-  and 'stop' arguments so long as each is in the range of Python's
-  bounded integers.
-
-- Thanks to Raymond Hettinger, random.random() now uses a new core
-  generator.  The Mersenne Twister algorithm is implemented in C,
-  threadsafe, faster than the previous generator, has an astronomically
-  large period (2**19937-1), creates random floats to full 53-bit
-  precision, and may be the most widely tested random number generator
-  in existence.
-
-  The random.jumpahead(n) method has different semantics for the new
-  generator.  Instead of jumping n steps ahead, it uses n and the
-  existing state to create a new state.  This means that jumpahead()
-  continues to support multi-threaded code needing generators of
-  non-overlapping sequences.  However, it will break code which relies
-  on jumpahead moving a specific number of steps forward.
-
-  The attributes random.whseed and random.__whseed have no meaning for
-  the new generator.  Code using these attributes should switch to a
-  new class, random.WichmannHill which is provided for backward
-  compatibility and to make an alternate generator available.
-
-- New "algorithms" module: heapq, implements a heap queue.  Thanks to
-  Kevin O'Connor for the code and François Pinard for an entertaining
-  write-up explaining the theory and practical uses of heaps.
-
-- New encoding for the Palm OS character set: palmos.
-
-- binascii.crc32() and the zipfile module had problems on some 64-bit
-  platforms.  These have been fixed.  On a platform with 8-byte C longs,
-  crc32() now returns a signed-extended 4-byte result, so that its value
-  as a Python int is equal to the value computed a 32-bit platform.
-
-- xml.dom.minidom.toxml and toprettyxml now take an optional encoding
-  argument.
-
-- Some fixes in the copy module: when an object is copied through its
-  __reduce__ method, there was no check for a __setstate__ method on
-  the result [SF patch 565085]; deepcopy should treat instances of
-  custom metaclasses the same way it treats instances of type 'type'
-  [SF patch 560794].
-
-- Sockets now support timeout mode.  After s.settimeout(T), where T is
-  a float expressing seconds, subsequent operations raise an exception
-  if they cannot be completed within T seconds.  To disable timeout
-  mode, use s.settimeout(None).  There's also a module function,
-  socket.setdefaulttimeout(T), which sets the default for all sockets
-  created henceforth.
-
-- getopt.gnu_getopt was added.  This supports GNU-style option
-  processing, where options can be mixed with non-option arguments.
-
-- Stop using strings for exceptions.  String objects used for
-  exceptions are now classes deriving from Exception.  The objects
-  changed were: Tkinter.TclError, bdb.BdbQuit, macpath.norm_error,
-  tabnanny.NannyNag, and xdrlib.Error.
-
-- Constants BOM_UTF8, BOM_UTF16, BOM_UTF16_LE, BOM_UTF16_BE,
-  BOM_UTF32, BOM_UTF32_LE and BOM_UTF32_BE that represent the Byte
-  Order Mark in UTF-8, UTF-16 and UTF-32 encodings for little and
-  big endian systems were added to the codecs module. The old names
-  BOM32_* and BOM64_* were off by a factor of 2.
-
-- Added conversion functions math.degrees() and math.radians().
-
-- math.log() now takes an optional argument:  math.log(x[, base]).
-
-- ftplib.retrlines() now tests for callback is None rather than testing
-  for False.  Was causing an error when given a callback object which
-  was callable but also returned len() as zero.  The change may
-  create new breakage if the caller relied on the undocumented behavior
-  and called with callback set to [] or some other False value not
-  identical to None.
-
-- random.gauss() uses a piece of hidden state used by nothing else,
-  and the .seed() and .whseed() methods failed to reset it.  In other
-  words, setting the seed didn't completely determine the sequence of
-  results produced by random.gauss().  It does now.  Programs repeatedly
-  mixing calls to a seed method with calls to gauss() may see different
-  results now.
-
-- The pickle.Pickler class grew a clear_memo() method to mimic that
-  provided by cPickle.Pickler.
-
-- difflib's SequenceMatcher class now does a dynamic analysis of
-  which elements are so frequent as to constitute noise.  For
-  comparing files as sequences of lines, this generally works better
-  than the IS_LINE_JUNK function, and function ndiff's linejunk
-  argument defaults to None now as a result.  A happy benefit is
-  that SequenceMatcher may run much faster now when applied
-  to large files with many duplicate lines (for example, C program
-  text with lots of repeated "}" and "return NULL;" lines).
-
-- New Text.dump() method in Tkinter module.
-
-- New distutils commands for building packagers were added to
-  support pkgtool on Solaris and swinstall on HP-UX.
-
-- distutils now has a new abstract binary packager base class
-  command/bdist_packager, which simplifies writing packagers.
-  This will hopefully provide the missing bits to encourage
-  people to submit more packagers, e.g. for Debian, FreeBSD
-  and other systems.
-
-- The UTF-16, -LE and -BE stream readers now raise a
-  NotImplementedError for all calls to .readline(). Previously, they
-  used to just produce garbage or fail with an encoding error --
-  UTF-16 is a 2-byte encoding and the C lib's line reading APIs don't
-  work well with these.
-
-- compileall now supports quiet operation.
-
-- The BaseHTTPServer now implements optional HTTP/1.1 persistent
-  connections.
-
-- socket module: the SSL support was broken out of the main
-  _socket module C helper and placed into a new _ssl helper
-  which now gets imported by socket.py if available and working.
-
-- encodings package: added aliases for all supported IANA character
-  sets
-
-- ftplib: to safeguard the user's privacy, anonymous login will use
-  "anonymous@" as default password, rather than the real user and host
-  name.
-
-- webbrowser: tightened up the command passed to os.system() so that
-  arbitrary shell code can't be executed because a bogus URL was
-  passed in.
-
-- gettext.translation has an optional fallback argument, and
-  gettext.find an optional all argument. Translations will now fallback
-  on a per-message basis. The module supports plural forms, by means
-  of gettext.[d]ngettext and Translation.[u]ngettext.
-
-- distutils bdist commands now offer a --skip-build option.
-
-- warnings.warn now accepts a Warning instance as first argument.
-
-- The xml.sax.expatreader.ExpatParser class will no longer create
-  circular references by using itself as the locator that gets passed
-  to the content handler implementation.  [SF bug #535474]
-
-- The email.Parser.Parser class now properly parses strings regardless
-  of their line endings, which can be any of \r, \n, or \r\n (CR, LF,
-  or CRLF).  Also, the Header class's constructor default arguments
-  has changed slightly so that an explicit maxlinelen value is always
-  honored, and so unicode conversion error handling can be specified.
-
-- distutils' build_ext command now links C++ extensions with the C++
-  compiler available in the Makefile or CXX environment variable, if
-  running under \*nix.
-
-- New module bz2: provides a comprehensive interface for the bz2 compression
-  library.  It implements a complete file interface, one-shot (de)compression
-  functions, and types for sequential (de)compression.
-
-- New pdb command 'pp' which is like 'p' except that it pretty-prints
-  the value of its expression argument.
-
-- Now bdist_rpm distutils command understands a verify_script option in
-  the config file, including the contents of the referred filename in
-  the "%verifyscript" section of the rpm spec file.
-
-- Fixed bug #495695: webbrowser module would run graphic browsers in a
-  unix environment even if DISPLAY was not set. Also, support for
-  skipstone browser was included.
-
-- Fixed bug #636769: rexec would run unallowed code if subclasses of
-  strings were used as parameters for certain functions.
-
-Tools/Demos
------------
-
-- pygettext.py now supports globbing on Windows, and accepts module
-  names in addition to accepting file names.
-
-- The SGI demos (Demo/sgi) have been removed.  Nobody thought they
-  were interesting any more.  (The SGI library modules and extensions
-  are still there; it is believed that at least some of these are
-  still used and useful.)
-
-- IDLE supports the new encoding declarations (PEP 263); it can also
-  deal with legacy 8-bit files if they use the locale's encoding. It
-  allows non-ASCII strings in the interactive shell and executes them
-  in the locale's encoding.
-
-- freeze.py now produces binaries which can import shared modules,
-  unlike before when this failed due to missing symbol exports in
-  the generated binary.
-
-Build
------
-
-- On Unix, IDLE is now installed automatically.
-
-- The fpectl module is not built by default; it's dangerous or useless
-  except in the hands of experts.
-
-- The public Python C API will generally be declared using PyAPI_FUNC
-  and PyAPI_DATA macros, while Python extension module init functions
-  will be declared with PyMODINIT_FUNC.  DL_EXPORT/DL_IMPORT macros
-  are deprecated.
-
-- A bug was fixed that could cause COUNT_ALLOCS builds to segfault, or
-  get into infinite loops, when a new-style class got garbage-collected.
-  Unfortunately, to avoid this, the way COUNT_ALLOCS works requires
-  that new-style classes be immortal in COUNT_ALLOCS builds.  Note that
-  COUNT_ALLOCS is not enabled by default, in either release or debug
-  builds, and that new-style classes are immortal only in COUNT_ALLOCS
-  builds.
-
-- Compiling out the cyclic garbage collector is no longer an option.
-  The old symbol WITH_CYCLE_GC is now ignored, and Python.h arranges
-  that it's always defined (for the benefit of any extension modules
-  that may be conditionalizing on it).  A bonus is that any extension
-  type participating in cyclic gc can choose to participate in the
-  Py_TRASHCAN mechanism now too; in the absence of cyclic gc, this used
-  to require editing the core to teach the trashcan mechanism about the
-  new type.
-
-- According to Annex F of the current C standard,
-
-    The Standard C macro HUGE_VAL and its float and long double analogs,
-    HUGE_VALF and HUGE_VALL, expand to expressions whose values are
-    positive infinities.
-
-  Python only uses the double HUGE_VAL, and only to #define its own symbol
-  Py_HUGE_VAL.  Some platforms have incorrect definitions for HUGE_VAL.
-  pyport.h used to try to worm around that, but the workarounds triggered
-  other bugs on other platforms, so we gave up.  If your platform defines
-  HUGE_VAL incorrectly, you'll need to #define Py_HUGE_VAL to something
-  that works on your platform.  The only instance of this I'm sure about
-  is on an unknown subset of Cray systems, described here:
-
-  http://www.cray.com/swpubs/manuals/SN-2194_2.0/html-SN-2194_2.0/x3138.htm
-
-  Presumably 2.3a1 breaks such systems.  If anyone uses such a system, help!
-
-- The configure option --without-doc-strings can be used to remove the
-  doc strings from the builtin functions and modules; this reduces the
-  size of the executable.
-
-- The universal newlines option (PEP 278) is on by default.  On Unix
-  it can be disabled by passing --without-universal-newlines to the
-  configure script.  On other platforms, remove
-  WITH_UNIVERSAL_NEWLINES from pyconfig.h.
-
-- On Unix, a shared libpython2.3.so can be created with --enable-shared.
-
-- All uses of the CACHE_HASH, INTERN_STRINGS, and DONT_SHARE_SHORT_STRINGS
-  preprocessor symbols were eliminated.  The internal decisions they
-  controlled stopped being experimental long ago.
-
-- The tools used to build the documentation now work under Cygwin as
-  well as Unix.
-
-- The bsddb and dbm module builds have been changed to try and avoid version
-  skew problems and disable linkage with Berkeley DB 1.85 unless the
-  installer knows what s/he's doing.  See the section on building these
-  modules in the README file for details.
-
-C API
------
-
-- PyNumber_Check() now returns true for string and unicode objects.
-  This is a result of these types having a partially defined
-  tp_as_number slot.  (This is not a feature, but an indication that
-  PyNumber_Check() is not very useful to determine numeric behavior.
-  It may be deprecated.)
-
-- The string object's layout has changed: the pointer member
-  ob_sinterned has been replaced by an int member ob_sstate.  On some
-  platforms (e.g. most 64-bit systems) this may change the offset of
-  the ob_sval member, so as a precaution the API_VERSION has been
-  incremented.  The apparently unused feature of "indirect interned
-  strings", supported by the ob_sinterned member, is gone.  Interned
-  strings are now usually mortal; there is a new API,
-  PyString_InternImmortal() that creates immortal interned strings.
-  (The ob_sstate member can only take three values; however, while
-  making it a char saves a few bytes per string object on average, in
-  it also slowed things down a bit because ob_sval was no longer
-  aligned.)
-
-- The Py_InitModule*() functions now accept NULL for the 'methods'
-  argument.  Modules without global functions are becoming more common
-  now that factories can be types rather than functions.
-
-- New C API PyUnicode_FromOrdinal() which exposes unichr() at C
-  level.
-
-- New functions PyErr_SetExcFromWindowsErr() and
-  PyErr_SetExcFromWindowsErrWithFilename(). Similar to
-  PyErr_SetFromWindowsErrWithFilename() and
-  PyErr_SetFromWindowsErr(), but they allow to specify
-  the exception type to raise. Available on Windows.
-
-- Py_FatalError() is now declared as taking a const char* argument.  It
-  was previously declared without const.  This should not affect working
-  code.
-
-- Added new macro PySequence_ITEM(o, i) that directly calls
-  sq_item without rechecking that o is a sequence and without
-  adjusting for negative indices.
-
-- PyRange_New() now raises ValueError if the fourth argument is not 1.
-  This is part of the removal of deprecated features of the xrange
-  object.
-
-- PyNumber_Coerce() and PyNumber_CoerceEx() now also invoke the type's
-  coercion if both arguments have the same type but this type has the
-  CHECKTYPES flag set.  This is to better support proxies.
-
-- The type of tp_free has been changed from "``void (*)(PyObject *)``" to
-  "``void (*)(void *)``".
-
-- PyObject_Del, PyObject_GC_Del are now functions instead of macros.
-
-- A type can now inherit its metatype from its base type.  Previously,
-  when PyType_Ready() was called, if ob_type was found to be NULL, it
-  was always set to &PyType_Type; now it is set to base->ob_type,
-  where base is tp_base, defaulting to &PyObject_Type.
-
-- PyType_Ready() accidentally did not inherit tp_is_gc; now it does.
-
-- The PyCore_* family of APIs have been removed.
-
-- The "u#" parser marker will now pass through Unicode objects as-is
-  without going through the buffer API.
-
-- The enumerators of cmp_op have been renamed to use the prefix ``PyCmp_``.
-
-- An old #define of ANY as void has been removed from pyport.h.  This
-  hasn't been used since Python's pre-ANSI days, and the #define has
-  been marked as obsolete since then.  SF bug 495548 says it created
-  conflicts with other packages, so keeping it around wasn't harmless.
-
-- Because Python's magic number scheme broke on January 1st, we decided
-  to stop Python development.  Thanks for all the fish!
-
-- Some of us don't like fish, so we changed Python's magic number
-  scheme to a new one. See Python/import.c for details.
-
-New platforms
--------------
-
-- OpenVMS is now supported.
-
-- AtheOS is now supported.
-
-- the EMX runtime environment on OS/2 is now supported.
-
-- GNU/Hurd is now supported.
-
-Tests
------
-
-- The regrtest.py script's -u option now provides a way to say "allow
-  all resources except this one."  For example, to allow everything
-  except bsddb, give the option '-uall,-bsddb'.
-
-Windows
--------
-
-- The Windows distribution now ships with version 4.0.14 of the
-  Sleepycat Berkeley database library.  This should be a huge
-  improvement over the previous Berkeley DB 1.85, which had many
-  bugs.
-  XXX What are the licensing issues here?
-  XXX If a user has a database created with a previous version of
-  XXX     Python, what must they do to convert it?
-  XXX I'm still not sure how to link this thing (see PCbuild/readme.txt).
-  XXX The version # is likely to change before 2.3a1.
-
-- The Windows distribution now ships with a Secure Sockets Library (SLL)
-   module (_ssl.pyd)
-
-- The Windows distribution now ships with Tcl/Tk version 8.4.1 (it
-  previously shipped with Tcl/Tk 8.3.2).
-
-- When Python is built under a Microsoft compiler, sys.version now
-  includes the compiler version number (_MSC_VER).  For example, under
-  MSVC 6, sys.version contains the substring "MSC v.1200 ".  1200 is
-  the value of _MSC_VER under MSVC 6.
-
-- Sometimes the uninstall executable (UNWISE.EXE) vanishes.  One cause
-  of that has been fixed in the installer (disabled Wise's "delete in-
-  use files" uninstall option).
-
-- Fixed a bug in urllib's proxy handling in Windows.  [SF bug #503031]
-
-- The installer now installs Start menu shortcuts under (the local
-  equivalent of) "All Users" when doing an Admin install.
-
-- file.truncate([newsize]) now works on Windows for all newsize values.
-  It used to fail if newsize didn't fit in 32 bits, reflecting a
-  limitation of MS _chsize (which is no longer used).
-
-- os.waitpid() is now implemented for Windows, and can be used to block
-  until a specified process exits.  This is similar to, but not exactly
-  the same as, os.waitpid() on POSIX systems.  If you're waiting for
-  a specific process whose pid was obtained from one of the spawn()
-  functions, the same Python os.waitpid() code works across platforms.
-  See the docs for details.  The docs were changed to clarify that
-  spawn functions return, and waitpid requires, a process handle on
-  Windows (not the same thing as a Windows process id).
-
-- New tempfile.TemporaryFile implementation for Windows:  this doesn't
-  need a TemporaryFileWrapper wrapper anymore, and should be immune
-  to a nasty problem:  before 2.3, if you got a temp file on Windows, it
-  got wrapped in an object whose close() method first closed the
-  underlying file, then deleted the file.  This usually worked fine.
-  However, the spawn family of functions on Windows create (at a low C
-  level) the same set of open files in the spawned process Q as were
-  open in the spawning process P.  If a temp file f was among them, then
-  doing f.close() in P first closed P's C-level file handle on f, but Q's
-  C-level file handle on f remained open, so the attempt in P to delete f
-  blew up with a "Permission denied" error (Windows doesn't allow
-  deleting open files).  This was surprising, subtle, and difficult to
-  work around.
-
-- The os module now exports all the symbolic constants usable with the
-  low-level os.open() on Windows:  the new constants in 2.3 are
-  O_NOINHERIT, O_SHORT_LIVED, O_TEMPORARY, O_RANDOM and O_SEQUENTIAL.
-  The others were also available in 2.2:  O_APPEND, O_BINARY, O_CREAT,
-  O_EXCL, O_RDONLY, O_RDWR, O_TEXT, O_TRUNC and O_WRONLY.  Contrary
-  to Microsoft docs, O_SHORT_LIVED does not seem to imply O_TEMPORARY
-  (so specify both if you want both; note that neither is useful unless
-  specified with O_CREAT too).
-
-Mac
-----
-
-- Mac/Relnotes is gone, the release notes are now here.
-
-- Python (the OSX-only, unix-based version, not the OS9-compatible CFM
-  version) now fully supports unicode strings as arguments to various file
-  system calls, eg. open(), file(), os.stat() and os.listdir().
-
-- The current naming convention for Python on the Macintosh is that MacPython
-  refers to the unix-based OSX-only version, and MacPython-OS9 refers to the
-  CFM-based version that runs on both OS9 and OSX.
-
-- All MacPython-OS9 functionality is now available in an OSX unix build,
-  including the Carbon modules, the IDE, OSA support, etc. A lot of this
-  will only work correctly in a framework build, though, because you cannot
-  talk to the window manager unless your application is run from a .app
-  bundle. There is a command line tool "pythonw" that runs your script
-  with an interpreter living in such a .app bundle, this interpreter should
-  be used to run any Python script using the window manager (including
-  Tkinter or wxPython scripts).
-
-- Most of Mac/Lib has moved to Lib/plat-mac, which is again used both in
-  MacPython-OSX and MacPython-OS9. The only modules remaining in Mac/Lib
-  are specifically for MacPython-OS9 (CFM support, preference resources, etc).
-
-- A new utility PythonLauncher will start a Python interpreter when a .py or
-  .pyw script is double-clicked in the Finder. By default .py scripts are
-  run with a normal Python interpreter in a Terminal window and .pyw
-  files are run with a window-aware pythonw interpreter without a Terminal
-  window, but all this can be customized.
-
-- MacPython-OS9 is now Carbon-only, so it runs on Mac OS 9 or Mac OS X and
-  possibly on Mac OS 8.6 with the right CarbonLib installed, but not on earlier
-  releases.
-
-- Many tools such as BuildApplet.py and gensuitemodule.py now support a command
-  line interface too.
-
-- All the Carbon classes are now PEP253 compliant, meaning that you can
-  subclass them from Python. Most of the attributes have gone, you should
-  now use the accessor function call API, which is also what Apple's
-  documentation uses. Some attributes such as grafport.visRgn are still
-  available for convenience.
-
-- New Carbon modules File (implementing the APIs in Files.h and Aliases.h)
-  and Folder (APIs from Folders.h). The old macfs builtin module is
-  gone, and replaced by a Python wrapper around the new modules.
-
-- Pathname handling should now be fully consistent: MacPython-OSX always uses
-  unix pathnames and MacPython-OS9 always uses colon-separated Mac pathnames
-  (also when running on Mac OS X).
-
-- New Carbon modules Help and AH give access to the Carbon Help Manager.
-  There are hooks in the IDE to allow accessing the Python documentation
-  (and Apple's Carbon and Cocoa documentation) through the Help Viewer.
-  See Mac/OSX/README for converting the Python documentation to a
-  Help Viewer compatible form and installing it.
-
-- OSA support has been redesigned and the generated Python classes now
-  mirror the inheritance defined by the underlying OSA classes.
-
-- MacPython no longer maps both \r and \n to \n on input for any text file.
-  This feature has been replaced by universal newline support (PEP278).
-
-- The default encoding for Python sourcefiles in MacPython-OS9 is no longer
-  mac-roman (or whatever your local Mac encoding was) but "ascii", like on
-  other platforms. If you really need sourcefiles with Mac characters in them
-  you can change this in site.py.
-
-
-What's New in Python 2.2 final?
-===============================
-
-*Release date: 21-Dec-2001*
-
-Type/class unification and new-style classes
---------------------------------------------
-
-- pickle.py, cPickle: allow pickling instances of new-style classes
-  with a custom metaclass.
-
-Core and builtins
------------------
-
-- weakref proxy object: when comparing, unwrap both arguments if both
-  are proxies.
-
-Extension modules
------------------
-
-- binascii.b2a_base64(): fix a potential buffer overrun when encoding
-  very short strings.
-
-- cPickle: the obscure "fast" mode was suspected of causing stack
-  overflows on the Mac.  Hopefully fixed this by setting the recursion
-  limit much smaller.  If the limit is too low (it only affects
-  performance), you can change it by defining PY_CPICKLE_FAST_LIMIT
-  when compiling cPickle.c (or in pyconfig.h).
-
-Library
--------
-
-- dumbdbm.py: fixed a dumb old bug (the file didn't get synched at
-  close or delete time).
-
-- rfc822.py: fixed a bug where the address '<>' was converted to None
-  instead of an empty string (also fixes the email.Utils module).
-
-- xmlrpclib.py: version 1.0.0; uses precision for doubles.
-
-- test suite: the pickle and cPickle tests were not executing any code
-  when run from the standard regression test.
-
-Tools/Demos
------------
-
-Build
------
-
-C API
------
-
-New platforms
--------------
-
-Tests
------
-
-Windows
--------
-
-- distutils package: fixed broken Windows installers (bdist_wininst).
-
-- tempfile.py: prevent mysterious warnings when TemporaryFileWrapper
-  instances are deleted at process exit time.
-
-- socket.py: prevent mysterious warnings when socket instances are
-  deleted at process exit time.
-
-- posixmodule.c: fix a Windows crash with stat() of a filename ending
-  in backslash.
-
-Mac
-----
-
-- The Carbon toolbox modules have been upgraded to Universal Headers
-  3.4, and experimental CoreGraphics and CarbonEvents modules have
-  been added.  All only for framework-enabled MacOSX.
-
-
-What's New in Python 2.2c1?
-===========================
-
-*Release date: 14-Dec-2001*
-
-Type/class unification and new-style classes
---------------------------------------------
-
-- Guido's tutorial introduction to the new type/class features has
-  been extensively updated.  See
-
-      http://www.python.org/2.2/descrintro.html
-
-  That remains the primary documentation in this area.
-
-- Fixed a leak: instance variables declared with __slots__ were never
-  deleted!
-
-- The "delete attribute" method of descriptor objects is called
-  __delete__, not __del__.  In previous releases, it was mistakenly
-  called __del__, which created an unfortunate overloading condition
-  with finalizers.  (The "get attribute" and "set attribute" methods
-  are still called __get__ and __set__, respectively.)
-
-- Some subtle issues with the super built-in were fixed:
-
-  (a) When super itself is subclassed, its __get__ method would still
-      return an instance of the base class (i.e., of super).
-
-  (b) super(C, C()).__class__ would return C rather than super.  This
-      is confusing.  To fix this, I decided to change the semantics of
-      super so that it only applies to code attributes, not to data
-      attributes.  After all, overriding data attributes is not
-      supported anyway.
-
-  (c) The __get__ method didn't check whether the argument was an
-      instance of the type used in creation of the super instance.
-
-- Previously, hash() of an instance of a subclass of a mutable type
-  (list or dictionary) would return some value, rather than raising
-  TypeError.  This has been fixed.  Also, directly calling
-  dict.__hash__ and list.__hash__ now raises the same TypeError
-  (previously, these were the same as object.__hash__).
-
-- New-style objects now support deleting their __dict__.  This is for
-  all intents and purposes equivalent to assigning a brand new empty
-  dictionary, but saves space if the object is not used further.
-
-Core and builtins
------------------
-
-- -Qnew now works as documented in PEP 238:  when -Qnew is passed on
-  the command line, all occurrences of "/" use true division instead
-  of classic division.  See the PEP for details.  Note that "all"
-  means all instances in library and 3rd-party modules, as well as in
-  your own code.  As the PEP says, -Qnew is intended for use only in
-  educational environments with control over the libraries in use.
-  Note that test_coercion.py in the standard Python test suite fails
-  under -Qnew; this is expected, and won't be repaired until true
-  division becomes the default (in the meantime, test_coercion is
-  testing the current rules).
-
-- complex() now only allows the first argument to be a string
-  argument, and raises TypeError if either the second arg is a string
-  or if the second arg is specified when the first is a string.
-
-Extension modules
------------------
-
-- gc.get_referents was renamed to gc.get_referrers.
-
-Library
--------
-
-- Functions in the os.spawn() family now release the global interpreter
-  lock around calling the platform spawn.  They should always have done
-  this, but did not before 2.2c1.  Multithreaded programs calling
-  an os.spawn function with P_WAIT will no longer block all Python threads
-  until the spawned program completes.  It's possible that some programs
-  relies on blocking, although more likely by accident than by design.
-
-- webbrowser defaults to netscape.exe on OS/2 now.
-
-- Tix.ResizeHandle exposes detach_widget, hide, and show.
-
-- The charset alias windows_1252 has been added.
-
-- types.StringTypes is a tuple containing the defined string types;
-  usually this will be (str, unicode), but if Python was compiled
-  without Unicode support it will be just (str,).
-
-- The pulldom and minidom modules were synchronized to PyXML.
-
-Tools/Demos
------------
-
-- A new script called Tools/scripts/google.py was added, which fires
-  off a search on Google.
-
-Build
------
-
-- Note that release builds of Python should arrange to define the
-  preprocessor symbol NDEBUG on the command line (or equivalent).
-  In the 2.2 pre-release series we tried to define this by magic in
-  Python.h instead, but it proved to cause problems for extension
-  authors.  The Unix, Windows and Mac builds now all define NDEBUG in
-  release builds via cmdline (or equivalent) instead.  Ports to
-  other platforms should do likewise.
-
-- It is no longer necessary to use --with-suffix when building on a
-  case-insensitive file system (such as Mac OS X HFS+). In the build
-  directory an extension is used, but not in the installed python.
-
-C API
------
-
-- New function PyDict_MergeFromSeq2() exposes the builtin dict
-  constructor's logic for updating a dictionary from an iterable object
-  producing key-value pairs.
-
-- PyArg_ParseTupleAndKeywords() requires that the number of entries in
-  the keyword list equal the number of argument specifiers.  This
-  wasn't checked correctly, and PyArg_ParseTupleAndKeywords could even
-  dump core in some bad cases.  This has been repaired.  As a result,
-  PyArg_ParseTupleAndKeywords may raise RuntimeError in bad cases that
-  previously went unchallenged.
-
-New platforms
--------------
-
-Tests
------
-
-Windows
--------
-
-Mac
-----
-
-- In unix-Python on Mac OS X (and darwin) sys.platform is now "darwin",
-  without any trailing digits.
-
-- Changed logic for finding python home in Mac OS X framework Pythons.
-  Now sys.executable points to the executable again, in stead of to
-  the shared library. The latter is used only for locating the python
-  home.
-
-
-What's New in Python 2.2b2?
-===========================
-
-*Release date: 16-Nov-2001*
-
-Type/class unification and new-style classes
---------------------------------------------
-
-- Multiple inheritance mixing new-style and classic classes in the
-  list of base classes is now allowed, so this works now:
-
-      class Classic: pass
-      class Mixed(Classic, object): pass
-
-  The MRO (method resolution order) for each base class is respected
-  according to its kind, but the MRO for the derived class is computed
-  using new-style MRO rules if any base class is a new-style class.
-  This needs to be documented.
-
-- The new builtin dictionary() constructor, and dictionary type, have
-  been renamed to dict.  This reflects a decade of common usage.
-
-- dict() now accepts an iterable object producing 2-sequences.  For
-  example, dict(d.items()) == d for any dictionary d.  The argument,
-  and the elements of the argument, can be any iterable objects.
-
-- New-style classes can now have a __del__ method, which is called
-  when the instance is deleted (just like for classic classes).
-
-- Assignment to object.__dict__ is now possible, for objects that are
-  instances of new-style classes that have a __dict__ (unless the base
-  class forbids it).
-
-- Methods of built-in types now properly check for keyword arguments
-  (formerly these were silently ignored).  The only built-in methods
-  that take keyword arguments are __call__, __init__ and __new__.
-
-- The socket function has been converted to a type; see below.
-
-Core and builtins
------------------
-
-- Assignment to __debug__ raises SyntaxError at compile-time.  This
-  was promised when 2.1c1 was released as "What's New in Python 2.1c1"
-  (see below) says.
-
-- Clarified the error messages for unsupported operands to an operator
-  (like 1 + '').
-
-Extension modules
------------------
-
-- mmap has a new keyword argument, "access", allowing a uniform way for
-  both Windows and Unix users to create read-only, write-through and
-  copy-on-write memory mappings.  This was previously possible only on
-  Unix.  A new keyword argument was required to support this in a
-  uniform way because the mmap() signatures had diverged across
-  platforms.  Thanks to Jay T Miller for repairing this!
-
-- By default, the gc.garbage list now contains only those instances in
-  unreachable cycles that have __del__ methods; in 2.1 it contained all
-  instances in unreachable cycles.  "Instances" here has been generalized
-  to include instances of both new-style and old-style classes.
-
-- The socket module defines a new method for socket objects,
-  sendall().  This is like send() but may make multiple calls to
-  send() until all data has been sent.  Also, the socket function has
-  been converted to a subclassable type, like list and tuple (etc.)
-  before it; socket and SocketType are now the same thing.
-
-- Various bugfixes to the curses module.  There is now a test suite
-  for the curses module (you have to run it manually).
-
-- binascii.b2a_base64 no longer places an arbitrary restriction of 57
-  bytes on its input.
-
-Library
--------
-
-- tkFileDialog exposes a Directory class and askdirectory
-  convenience function.
-
-- Symbolic group names in regular expressions must be unique.  For
-  example, the regexp r'(?P<abc>)(?P<abc>)' is not allowed, because a
-  single name can't mean both "group 1" and "group 2" simultaneously.
-  Python 2.2 detects this error at regexp compilation time;
-  previously, the error went undetected, and results were
-  unpredictable.  Also in sre, the pattern.split(), pattern.sub(), and
-  pattern.subn() methods have been rewritten in C.  Also, an
-  experimental function/method finditer() has been added, which works
-  like findall() but returns an iterator.
-
-- Tix exposes more commands through the classes DirSelectBox,
-  DirSelectDialog, ListNoteBook, Meter, CheckList, and the
-  methods tix_addbitmapdir, tix_cget, tix_configure, tix_filedialog,
-  tix_getbitmap, tix_getimage, tix_option_get, and tix_resetoptions.
-
-- Traceback objects are now scanned by cyclic garbage collection, so
-  cycles created by casual use of sys.exc_info() no longer cause
-  permanent memory leaks (provided garbage collection is enabled).
-
-- os.extsep -- a new variable needed by the RISCOS support.  It is the
-  separator used by extensions, and is '.' on all platforms except
-  RISCOS, where it is '/'.  There is no need to use this variable
-  unless you have a masochistic desire to port your code to RISCOS.
-
-- mimetypes.py has optional support for non-standard, but commonly
-  found types.  guess_type() and guess_extension() now accept an
-  optional 'strict' flag, defaulting to true, which controls whether
-  recognize non-standard types or not.  A few non-standard types we
-  know about have been added.  Also, when run as a script, there are
-  new -l and -e options.
-
-- statcache is now deprecated.
-
-- email.Utils.formatdate() now produces the preferred RFC 2822 style
-  dates with numeric timezones (it used to produce obsolete dates
-  hard coded to "GMT" timezone).  An optional 'localtime' flag is
-  added to produce dates in the local timezone, with daylight savings
-  time properly taken into account.
-
-- In pickle and cPickle, instead of masking errors in load() by
-  transforming them into SystemError, we let the original exception
-  propagate out.  Also, implement support for __safe_for_unpickling__
-  in pickle, as it already was supported in cPickle.
-
-Tools/Demos
------------
-
-Build
------
-
-- The dbm module is built using libdb1 if available.  The bsddb module
-  is built with libdb3 if available.
-
-- Misc/Makefile.pre.in has been removed by BDFL pronouncement.
-
-C API
------
-
-- New function PySequence_Fast_GET_SIZE() returns the size of a non-
-  NULL result from PySequence_Fast(), more quickly than calling
-  PySequence_Size().
-
-- New argument unpacking function PyArg_UnpackTuple() added.
-
-- New functions PyObject_CallFunctionObjArgs() and
-  PyObject_CallMethodObjArgs() have been added to make it more
-  convenient and efficient to call functions and methods from C.
-
-- PyArg_ParseTupleAndKeywords() no longer masks errors, so it's
-  possible that this will propagate errors it didn't before.
-
-- New function PyObject_CheckReadBuffer(), which returns true if its
-  argument supports the single-segment readable buffer interface.
-
-New platforms
--------------
-
-- We've finally confirmed that this release builds on HP-UX 11.00,
-  *with* threads, and passes the test suite.
-
-- Thanks to a series of patches from Michael Muller, Python may build
-  again under OS/2 Visual Age C++.
-
-- Updated RISCOS port by Dietmar Schwertberger.
-
-Tests
------
-
-- Added a test script for the curses module.  It isn't run automatically;
-  regrtest.py must be run with '-u curses' to enable it.
-
-Windows
--------
-
-Mac
-----
-
-- PythonScript has been moved to unsupported and is slated to be
-  removed completely in the next release.
-
-- It should now be possible to build applets that work on both OS9 and
-  OSX.
-
-- The core is now linked with CoreServices not Carbon; as a side
-  result, default 8bit encoding on OSX is now ASCII.
-
-- Python should now build on OSX 10.1.1
-
-
-What's New in Python 2.2b1?
-===========================
-
-*Release date: 19-Oct-2001*
-
-Type/class unification and new-style classes
---------------------------------------------
-
-- New-style classes are now always dynamic (except for built-in and
-  extension types).  There is no longer a performance penalty, and I
-  no longer see another reason to keep this baggage around.  One relic
-  remains: the __dict__ of a new-style class is a read-only proxy; you
-  must set the class's attribute to modify it.  As a consequence, the
-  __defined__ attribute of new-style types no longer exists, for lack
-  of need: there is once again only one __dict__ (although in the
-  future a __cache__ may be resurrected with a similar function, if I
-  can prove that it actually speeds things up).
-
-- C.__doc__ now works as expected for new-style classes (in 2.2a4 it
-  always returned None, even when there was a class docstring).
-
-- doctest now finds and runs docstrings attached to new-style classes,
-  class methods, static methods, and properties.
-
-Core and builtins
------------------
-
-- A very subtle syntactical pitfall in list comprehensions was fixed.
-  For example: [a+b for a in 'abc', for b in 'def'].  The comma in
-  this example is a mistake.  Previously, this would silently let 'a'
-  iterate over the singleton tuple ('abc',), yielding ['abcd', 'abce',
-  'abcf'] rather than the intended ['ad', 'ae', 'af', 'bd', 'be',
-  'bf', 'cd', 'ce', 'cf'].  Now, this is flagged as a syntax error.
-  Note that [a for a in <singleton>] is a convoluted way to say
-  [<singleton>] anyway, so it's not like any expressiveness is lost.
-
-- getattr(obj, name, default) now only catches AttributeError, as
-  documented, rather than returning the default value for all
-  exceptions (which could mask bugs in a __getattr__ hook, for
-  example).
-
-- Weak reference objects are now part of the core and offer a C API.
-  A bug which could allow a core dump when binary operations involved
-  proxy reference has been fixed.  weakref.ReferenceError is now a
-  built-in exception.
-
-- unicode(obj) now behaves more like str(obj), accepting arbitrary
-  objects, and calling a __unicode__ method if it exists.
-  unicode(obj, encoding) and unicode(obj, encoding, errors) still
-  require an 8-bit string or character buffer argument.
-
-- isinstance() now allows any object as the first argument and a
-  class, a type or something with a __bases__ tuple attribute for the
-  second argument.  The second argument may also be a tuple of a
-  class, type, or something with __bases__, in which case isinstance()
-  will return true if the first argument is an instance of any of the
-  things contained in the second argument tuple.  E.g.
-
-  isinstance(x, (A, B))
-
-  returns true if x is an instance of A or B.
-
-Extension modules
------------------
-
-- thread.start_new_thread() now returns the thread ID (previously None).
-
-- binascii has now two quopri support functions, a2b_qp and b2a_qp.
-
-- readline now supports setting the startup_hook and the
-  pre_event_hook, and adds the add_history() function.
-
-- os and posix supports chroot(), setgroups() and unsetenv() where
-  available.  The stat(), fstat(), statvfs() and fstatvfs() functions
-  now return "pseudo-sequences" -- the various fields can now be
-  accessed as attributes (e.g. os.stat("/").st_mtime) but for
-  backwards compatibility they also behave as a fixed-length sequence.
-  Some platform-specific fields (e.g. st_rdev) are only accessible as
-  attributes.
-
-- time: localtime(), gmtime() and strptime() now return a
-  pseudo-sequence similar to the os.stat() return value, with
-  attributes like tm_year etc.
-
-- Decompression objects in the zlib module now accept an optional
-  second parameter to decompress() that specifies the maximum amount
-  of memory to use for the uncompressed data.
-
-- optional SSL support in the socket module now exports OpenSSL
-  functions RAND_add(), RAND_egd(), and RAND_status().  These calls
-  are useful on platforms like Solaris where OpenSSL does not
-  automatically seed its PRNG.  Also, the keyfile and certfile
-  arguments to socket.ssl() are now optional.
-
-- posixmodule (and by extension, the os module on POSIX platforms) now
-  exports O_LARGEFILE, O_DIRECT, O_DIRECTORY, and O_NOFOLLOW.
-
-Library
--------
-
-- doctest now excludes functions and classes not defined by the module
-  being tested, thanks to Tim Hochberg.
-
-- HotShot, a new profiler implemented using a C-based callback, has
-  been added.  This substantially reduces the overhead of profiling,
-  but it is still quite preliminary.  Support modules and
-  documentation will be added in upcoming releases (before 2.2 final).
-
-- profile now produces correct output in situations where an exception
-  raised in Python is cleared by C code (e.g. hasattr()).  This used
-  to cause wrong output, including spurious claims of recursive
-  functions and attribution of time spent to the wrong function.
-
-  The code and documentation for the derived OldProfile and HotProfile
-  profiling classes was removed.  The code hasn't worked for years (if
-  you tried to use them, they raised exceptions).  OldProfile
-  intended to reproduce the behavior of the profiler Python used more
-  than 7 years ago, and isn't interesting anymore.  HotProfile intended
-  to provide a faster profiler (but producing less information), and
-  that's a worthy goal we intend to meet via a different approach (but
-  without losing information).
-
-- Profile.calibrate() has a new implementation that should deliver
-  a much better system-specific calibration constant.  The constant can
-  now be specified in an instance constructor, or as a Profile class or
-  instance variable, instead of by editing profile.py's source code.
-  Calibration must still be done manually (see the docs for the profile
-  module).
-
-  Note that Profile.calibrate() must be overridden by subclasses.
-  Improving the accuracy required exploiting detailed knowledge of
-  profiler internals; the earlier method abstracted away the details
-  and measured a simplified model instead, but consequently computed
-  a constant too small by a factor of 2 on some modern machines.
-
-- quopri's encode and decode methods take an optional header parameter,
-  which indicates whether output is intended for the header 'Q'
-  encoding.
-
-- The SocketServer.ThreadingMixIn class now closes the request after
-  finish_request() returns.  (Not when it errors out though.)
-
-- The nntplib module's NNTP.body() method has grown a 'file' argument
-  to allow saving the message body to a file.
-
-- The email package has added a class email.Parser.HeaderParser which
-  only parses headers and does not recurse into the message's body.
-  Also, the module/class MIMEAudio has been added for representing
-  audio data (contributed by Anthony Baxter).
-
-- ftplib should be able to handle files > 2GB.
-
-- ConfigParser.getboolean() now also interprets TRUE, FALSE, YES, NO,
-  ON, and OFF.
-
-- xml.dom.minidom NodeList objects now support the length attribute
-  and item() method as required by the DOM specifications.
-
-Tools/Demos
------------
-
-- Demo/dns was removed.  It no longer serves any purpose; a package
-  derived from it is now maintained by Anthony Baxter, see
-  http://PyDNS.SourceForge.net.
-
-- The freeze tool has been made more robust, and two new options have
-  been added: -X and -E.
-
-Build
------
-
-- configure will use CXX in LINKCC if CXX is used to build main() and
-  the system requires to link a C++ main using the C++ compiler.
-
-C API
------
-
-- The documentation for the tp_compare slot is updated to require that
-  the return value must be -1, 0, 1; an arbitrary number <0 or >0 is
-  not correct.  This is not yet enforced but will be enforced in
-  Python 2.3; even later, we may use -2 to indicate errors and +2 for
-  "NotImplemented".  Right now, -1 should be used for an error return.
-
-- PyLong_AsLongLong() now accepts int (as well as long) arguments.
-  Consequently, PyArg_ParseTuple's 'L' code also accepts int (as well
-  as long) arguments.
-
-- PyThread_start_new_thread() now returns a long int giving the thread
-  ID, if one can be calculated; it returns -1 for error, 0 if no
-  thread ID is calculated (this is an incompatible change, but only
-  the thread module used this API).  This code has only really been
-  tested on Linux and Windows; other platforms please beware (and
-  report any bugs or strange behavior).
-
-- PyUnicode_FromEncodedObject() no longer accepts Unicode objects as
-  input.
-
-New platforms
--------------
-
-Tests
------
-
-Windows
--------
-
-- Installer:  If you install IDLE, and don't disable file-extension
-  registration, a new "Edit with IDLE" context (right-click) menu entry
-  is created for .py and .pyw files.
-
-- The signal module now supports SIGBREAK on Windows, thanks to Steven
-  Scott.  Note that SIGBREAK is unique to Windows.  The default SIGBREAK
-  action remains to call Win32 ExitProcess().  This can be changed via
-  signal.signal().  For example::
-
-      # Make Ctrl+Break raise KeyboardInterrupt, like Python's default Ctrl+C
-      # (SIGINT) behavior.
-      import signal
-      signal.signal(signal.SIGBREAK, signal.default_int_handler)
-
-      try:
-          while 1:
-              pass
-      except KeyboardInterrupt:
-          # We get here on Ctrl+C or Ctrl+Break now; if we had not changed
-          # SIGBREAK, only on Ctrl+C (and Ctrl+Break would terminate the
-          # program without the possibility for any Python-level cleanup).
-          print "Clean exit"
-
-
-What's New in Python 2.2a4?
-===========================
-
-*Release date: 28-Sep-2001*
-
-Type/class unification and new-style classes
---------------------------------------------
-
-- pydoc and inspect are now aware of new-style classes;
-  e.g. help(list) at the interactive prompt now shows proper
-  documentation for all operations on list objects.
-
-- Applications using Jim Fulton's ExtensionClass module can now safely
-  be used with Python 2.2.  In particular, Zope 2.4.1 now works with
-  Python 2.2 (as well as with Python 2.1.1).  The Demo/metaclass
-  examples also work again.  It is hoped that Gtk and Boost also work
-  with 2.2a4 and beyond.  (If you can confirm this, please write
-  webmaster@python.org; if there are still problems, please open a bug
-  report on SourceForge.)
-
-- property() now takes 4 keyword arguments:  fget, fset, fdel and doc.
-  These map to read-only attributes 'fget', 'fset', 'fdel', and '__doc__'
-  in the constructed property object.  fget, fset and fdel weren't
-  discoverable from Python in 2.2a3.  __doc__ is new, and allows to
-  associate a docstring with a property.
-
-- Comparison overloading is now more completely implemented.  For
-  example, a str subclass instance can properly be compared to a str
-  instance, and it can properly overload comparison.  Ditto for most
-  other built-in object types.
-
-- The repr() of new-style classes has changed; instead of <type
-  'M.Foo'> a new-style class is now rendered as <class 'M.Foo'>,
-  *except* for built-in types, which are still rendered as <type
-  'Foo'> (to avoid upsetting existing code that might parse or
-  otherwise rely on repr() of certain type objects).
-
-- The repr() of new-style objects is now always <Foo object at XXX>;
-  previously, it was sometimes <Foo instance at XXX>.
-
-- For new-style classes, what was previously called __getattr__ is now
-  called __getattribute__.  This method, if defined, is called for
-  *every* attribute access.  A new __getattr__ hook more similar to the
-  one in classic classes is defined which is called only if regular
-  attribute access raises AttributeError; to catch *all* attribute
-  access, you can use __getattribute__ (for new-style classes).  If
-  both are defined, __getattribute__ is called first, and if it raises
-  AttributeError, __getattr__ is called.
-
-- The __class__ attribute of new-style objects can be assigned to.
-  The new class must have the same C-level object layout as the old
-  class.
-
-- The builtin file type can be subclassed now.  In the usual pattern,
-  "file" is the name of the builtin type, and file() is a new builtin
-  constructor, with the same signature as the builtin open() function.
-  file() is now the preferred way to open a file.
-
-- Previously, __new__ would only see sequential arguments passed to
-  the type in a constructor call; __init__ would see both sequential
-  and keyword arguments.  This made no sense whatsoever any more, so
-  now both __new__ and __init__ see all arguments.
-
-- Previously, hash() applied to an instance of a subclass of str or
-  unicode always returned 0.  This has been repaired.
-
-- Previously, an operation on an instance of a subclass of an
-  immutable type (int, long, float, complex, tuple, str, unicode),
-  where the subtype didn't override the operation (and so the
-  operation was handled by the builtin type), could return that
-  instance instead a value of the base type.  For example, if s was of
-  a str subclass type, s[:] returned s as-is.  Now it returns a str
-  with the same value as s.
-
-- Provisional support for pickling new-style objects has been added.
-
-Core
-----
-
-- file.writelines() now accepts any iterable object producing strings.
-
-- PyUnicode_FromEncodedObject() now works very much like
-  PyObject_Str(obj) in that it tries to use __str__/tp_str
-  on the object if the object is not a string or buffer. This
-  makes unicode() behave like str() when applied to non-string/buffer
-  objects.
-
-- PyFile_WriteObject now passes Unicode objects to the file's write
-  method. As a result, all file-like objects which may be the target
-  of a print statement must support Unicode objects, i.e. they must
-  at least convert them into ASCII strings.
-
-- Thread scheduling on Solaris should be improved; it is no longer
-  necessary to insert a small sleep at the start of a thread in order
-  to let other runnable threads be scheduled.
-
-Library
--------
-
-- StringIO.StringIO instances and cStringIO.StringIO instances support
-  read character buffer compatible objects for their .write() methods.
-  These objects are converted to strings and then handled as such
-  by the instances.
-
-- The "email" package has been added.  This is basically a port of the
-  mimelib package <http://sf.net/projects/mimelib> with API changes
-  and some implementations updated to use iterators and generators.
-
-- difflib.ndiff() and difflib.Differ.compare() are generators now.  This
-  restores the ability of Tools/scripts/ndiff.py to start producing output
-  before the entire comparison is complete.
-
-- StringIO.StringIO instances and cStringIO.StringIO instances support
-  iteration just like file objects (i.e. their .readline() method is
-  called for each iteration until it returns an empty string).
-
-- The codecs module has grown four new helper APIs to access
-  builtin codecs: getencoder(), getdecoder(), getreader(),
-  getwriter().
-
-- SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer)
-  simplifies writing XML RPC servers.
-
-- os.path.realpath(): a new function that returns the absolute pathname
-  after interpretation of symbolic links.  On non-Unix systems, this
-  is an alias for os.path.abspath().
-
-- operator.indexOf() (PySequence_Index() in the C API) now works with any
-  iterable object.
-
-- smtplib now supports various authentication and security features of
-  the SMTP protocol through the new login() and starttls() methods.
-
-- hmac: a new module implementing keyed hashing for message
-  authentication.
-
-- mimetypes now recognizes more extensions and file types.  At the
-  same time, some mappings not sanctioned by IANA were removed.
-
-- The "compiler" package has been brought up to date to the state of
-  Python 2.2 bytecode generation.  It has also been promoted from a
-  Tool to a standard library package.  (Tools/compiler still exists as
-  a sample driver.)
-
-Build
------
-
-- Large file support (LFS) is now automatic when the platform supports
-  it; no more manual configuration tweaks are needed.  On Linux, at
-  least, it's possible to have a system whose C library supports large
-  files but whose kernel doesn't; in this case, large file support is
-  still enabled but doesn't do you any good unless you upgrade your
-  kernel or share your Python executable with another system whose
-  kernel has large file support.
-
-- The configure script now supplies plausible defaults in a
-  cross-compilation environment.  This doesn't mean that the supplied
-  values are always correct, or that cross-compilation now works
-  flawlessly -- but it's a first step (and it shuts up most of
-  autoconf's warnings about AC_TRY_RUN).
-
-- The Unix build is now a bit less chatty, courtesy of the parser
-  generator.  The build is completely silent (except for errors) when
-  using "make -s", thanks to a -q option to setup.py.
-
-C API
------
-
-- The "structmember" API now supports some new flag bits to deny read
-  and/or write access to attributes in restricted execution mode.
-
-New platforms
--------------
-
-- Compaq's iPAQ handheld, running the "familiar" Linux distribution
-  (http://familiar.handhelds.org).
-
-Tests
------
-
-- The "classic" standard tests, which work by comparing stdout to
-  an expected-output file under Lib/test/output/, no longer stop at
-  the first mismatch.  Instead the test is run to completion, and a
-  variant of ndiff-style comparison is used to report all differences.
-  This is much easier to understand than the previous style of reporting.
-
-- The unittest-based standard tests now use regrtest's test_main()
-  convention, instead of running as a side-effect of merely being
-  imported.  This allows these tests to be run in more natural and
-  flexible ways as unittests, outside the regrtest framework.
-
-- regrtest.py is much better integrated with unittest and doctest now,
-  especially in regard to reporting errors.
-
-Windows
--------
-
-- Large file support now also works for files > 4GB, on filesystems
-  that support it (NTFS under Windows 2000).  See "What's New in
-  Python 2.2a3" for more detail.
-
-
-What's New in Python 2.2a3?
-===========================
-
-*Release Date: 07-Sep-2001*
-
-Core
-----
-
-- Conversion of long to float now raises OverflowError if the long is too
-  big to represent as a C double.
-
-- The 3-argument builtin pow() no longer allows a third non-None argument
-  if either of the first two arguments is a float, or if both are of
-  integer types and the second argument is negative (in which latter case
-  the arguments are converted to float, so this is really the same
-  restriction).
-
-- The builtin dir() now returns more information, and sometimes much
-  more, generally naming all attributes of an object, and all attributes
-  reachable from the object via its class, and from its class's base
-  classes, and so on from them too.  Example:  in 2.2a2, dir([]) returned
-  an empty list.  In 2.2a3,
-
-  >>> dir([])
-  ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
-   '__eq__', '__ge__', '__getattr__', '__getitem__', '__getslice__',
-   '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__',
-   '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__repr__',
-   '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__',
-   'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
-   'reverse', 'sort']
-
-  dir(module) continues to return only the module's attributes, though.
-
-- Overflowing operations on plain ints now return a long int rather
-  than raising OverflowError.  This is a partial implementation of PEP
-  237.  You can use -Wdefault::OverflowWarning to enable a warning for
-  this situation, and -Werror::OverflowWarning to revert to the old
-  OverflowError exception.
-
-- A new command line option, -Q<arg>, is added to control run-time
-  warnings for the use of classic division.  (See PEP 238.)  Possible
-  values are -Qold, -Qwarn, -Qwarnall, and -Qnew.  The default is
-  -Qold, meaning the / operator has its classic meaning and no
-  warnings are issued.  Using -Qwarn issues a run-time warning about
-  all uses of classic division for int and long arguments; -Qwarnall
-  also warns about classic division for float and complex arguments
-  (for use with fixdiv.py).
-  [Note:  the remainder of this item (preserved below) became
-  obsolete in 2.2c1 -- -Qnew has global effect in 2.2] ::
-
-    Using -Qnew is questionable; it turns on new division by default, but
-    only in the __main__ module.  You can usefully combine -Qwarn or
-    -Qwarnall and -Qnew: this gives the __main__ module new division, and
-    warns about classic division everywhere else.
-
-- Many built-in types can now be subclassed.  This applies to int,
-  long, float, str, unicode, and tuple.  (The types complex, list and
-  dictionary can also be subclassed; this was introduced earlier.)
-  Note that restrictions apply when subclassing immutable built-in
-  types: you can only affect the value of the instance by overloading
-  __new__.  You can add mutable attributes, and the subclass instances
-  will have a __dict__ attribute, but you cannot change the "value"
-  (as implemented by the base class) of an immutable subclass instance
-  once it is created.
-
-- The dictionary constructor now takes an optional argument, a
-  mapping-like object, and initializes the dictionary from its
-  (key, value) pairs.
-
-- A new built-in type, super, has been added.  This facilitates making
-  "cooperative super calls" in a multiple inheritance setting.  For an
-  explanation, see http://www.python.org/2.2/descrintro.html#cooperation
-
-- A new built-in type, property, has been added.  This enables the
-  creation of "properties".  These are attributes implemented by
-  getter and setter functions (or only one of these for read-only or
-  write-only attributes), without the need to override __getattr__.
-  See http://www.python.org/2.2/descrintro.html#property
-
-- The syntax of floating-point and imaginary literals has been
-  liberalized, to allow leading zeroes.  Examples of literals now
-  legal that were SyntaxErrors before:
-
-      00.0    0e3   0100j   07.5   00000000000000000008.
-
-- An old tokenizer bug allowed floating point literals with an incomplete
-  exponent, such as 1e and 3.1e-.  Such literals now raise SyntaxError.
-
-Library
--------
-
-- telnetlib includes symbolic names for the options, and support for
-  setting an option negotiation callback. It also supports processing
-  of suboptions.
-
-- The new C standard no longer requires that math libraries set errno to
-  ERANGE on overflow.  For platform libraries that exploit this new
-  freedom, Python's overflow-checking was wholly broken.  A new overflow-
-  checking scheme attempts to repair that, but may not be reliable on all
-  platforms (C doesn't seem to provide anything both useful and portable
-  in this area anymore).
-
-- Asynchronous timeout actions are available through the new class
-  threading.Timer.
-
-- math.log and math.log10 now return sensible results for even huge
-  long arguments.  For example, math.log10(10 ** 10000) ~= 10000.0.
-
-- A new function, imp.lock_held(), returns 1 when the import lock is
-  currently held.  See the docs for the imp module.
-
-- pickle, cPickle and marshal on 32-bit platforms can now correctly read
-  dumps containing ints written on platforms where Python ints are 8 bytes.
-  When read on a box where Python ints are 4 bytes, such values are
-  converted to Python longs.
-
-- In restricted execution mode (using the rexec module), unmarshalling
-  code objects is no longer allowed.  This plugs a security hole.
-
-- unittest.TestResult instances no longer store references to tracebacks
-  generated by test failures. This prevents unexpected dangling references
-  to objects that should be garbage collected between tests.
-
-Tools
------
-
-- Tools/scripts/fixdiv.py has been added which can be used to fix
-  division operators as per PEP 238.
-
-Build
------
-
-- If you are an adventurous person using Mac OS X you may want to look at
-  Mac/OSX. There is a Makefile there that will build Python as a real Mac
-  application, which can be used for experimenting with Carbon or Cocoa.
-  Discussion of this on pythonmac-sig, please.
-
-C API
------
-
-- New function PyObject_Dir(obj), like Python __builtin__.dir(obj).
-
-- Note that PyLong_AsDouble can fail!  This has always been true, but no
-  callers checked for it.  It's more likely to fail now, because overflow
-  errors are properly detected now.  The proper way to check::
-
-      double x = PyLong_AsDouble(some_long_object);
-      if (x == -1.0 && PyErr_Occurred()) {
-              /* The conversion failed. */
-      }
-
-- The GC API has been changed.  Extensions that use the old API will still
-  compile but will not participate in GC.  To upgrade an extension
-  module:
-
-    - rename Py_TPFLAGS_GC to PyTPFLAGS_HAVE_GC
-
-    - use PyObject_GC_New or PyObject_GC_NewVar to allocate objects and
-      PyObject_GC_Del to deallocate them
-
-    - rename PyObject_GC_Init to PyObject_GC_Track and PyObject_GC_Fini
-      to PyObject_GC_UnTrack
-
-    - remove PyGC_HEAD_SIZE from object size calculations
-
-    - remove calls to PyObject_AS_GC and PyObject_FROM_GC
-
-- Two new functions: PyString_FromFormat() and PyString_FromFormatV().
-  These can be used safely to construct string objects from a
-  sprintf-style format string (similar to the format string supported
-  by PyErr_Format()).
-
-New platforms
--------------
-
-- Stephen Hansen contributed patches sufficient to get a clean compile
-  under Borland C (Windows), but he reports problems running it and ran
-  out of time to complete the port.  Volunteers?  Expect a MemoryError
-  when importing the types module; this is probably shallow, and
-  causing later failures too.
-
-Tests
------
-
-Windows
--------
-
-- Large file support is now enabled on Win32 platforms as well as on
-  Win64.  This means that, for example, you can use f.tell() and f.seek()
-  to manipulate files larger than 2 gigabytes (provided you have enough
-  disk space, and are using a Windows filesystem that supports large
-  partitions).  Windows filesystem limits:  FAT has a 2GB (gigabyte)
-  filesize limit, and large file support makes no difference there.
-  FAT32's limit is 4GB, and files >= 2GB are easier to use from Python now.
-  NTFS has no practical limit on file size, and files of any size can be
-  used from Python now.
-
-- The w9xpopen hack is now used on Windows NT and 2000 too when COMPSPEC
-  points to command.com (patch from Brian Quinlan).
-
-
-What's New in Python 2.2a2?
-===========================
-
-*Release Date: 22-Aug-2001*
-
-Build
------
-
-- Tim Peters developed a brand new Windows installer using Wise 8.1,
-  generously donated to us by Wise Solutions.
-
-- configure supports a new option --enable-unicode, with the values
-  ucs2 and ucs4 (new in 2.2a1). With --disable-unicode, the Unicode
-  type and supporting code is completely removed from the interpreter.
-
-- A new configure option --enable-framework builds a Mac OS X framework,
-  which "make frameworkinstall" will install. This provides a starting
-  point for more mac-like functionality, join pythonmac-sig@python.org
-  if you are interested in helping.
-
-- The NeXT platform is no longer supported.
-
-- The 'new' module is now statically linked.
-
-Tools
------
-
-- The new Tools/scripts/cleanfuture.py can be used to automatically
-  edit out obsolete future statements from Python source code.  See
-  the module docstring for details.
-
-Tests
------
-
-- regrtest.py now knows which tests are expected to be skipped on some
-  platforms, allowing to give clearer test result output.  regrtest
-  also has optional --use/-u switch to run normally disabled tests
-  which require network access or consume significant disk resources.
-
-- Several new tests in the standard test suite, with special thanks to
-  Nick Mathewson.
-
-Core
-----
-
-- The floor division operator // has been added as outlined in PEP
-  238.  The / operator still provides classic division (and will until
-  Python 3.0) unless "from __future__ import division" is included, in
-  which case the / operator will provide true division.  The operator
-  module provides truediv() and floordiv() functions.  Augmented
-  assignment variants are included, as are the equivalent overloadable
-  methods and C API methods.  See the PEP for a full discussion:
-  <http://python.sf.net/peps/pep-0238.html>
-
-- Future statements are now effective in simulated interactive shells
-  (like IDLE).  This should "just work" by magic, but read Michael
-  Hudson's "Future statements in simulated shells" PEP 264 for full
-  details:  <http://python.sf.net/peps/pep-0264.html>.
-
-- The type/class unification (PEP 252-253) was integrated into the
-  trunk and is not so tentative any more (the exact specification of
-  some features is still tentative).  A lot of work has done on fixing
-  bugs and adding robustness and features (performance still has to
-  come a long way).
-
-- Warnings about a mismatch in the Python API during extension import
-  now use the Python warning framework (which makes it possible to
-  write filters for these warnings).
-
-- A function's __dict__ (aka func_dict) will now always be a
-  dictionary.  It used to be possible to delete it or set it to None,
-  but now both actions raise TypeErrors.  It is still legal to set it
-  to a dictionary object.  Getting func.__dict__ before any attributes
-  have been assigned now returns an empty dictionary instead of None.
-
-- A new command line option, -E, was added which disables the use of
-  all environment variables, or at least those that are specifically
-  significant to Python.  Usually those have a name starting with
-  "PYTHON".  This was used to fix a problem where the tests fail if
-  the user happens to have PYTHONHOME or PYTHONPATH pointing to an
-  older distribution.
-
-Library
--------
-
-- New class Differ and new functions ndiff() and restore() in difflib.py.
-  These package the algorithms used by the popular Tools/scripts/ndiff.py,
-  for programmatic reuse.
-
-- New function xml.sax.saxutils.quoteattr():  Quote an XML attribute
-  value using the minimal quoting required for the value; more
-  reliable than using xml.sax.saxutils.escape() for attribute values.
-
-- Readline completion support for cmd.Cmd was added.
-
-- Calling os.tempnam() or os.tmpnam() generate RuntimeWarnings.
-
-- Added function threading.BoundedSemaphore()
-
-- Added Ka-Ping Yee's cgitb.py module.
-
-- The 'new' module now exposes the CO_xxx flags.
-
-- The gc module offers the get_referents function.
-
-New platforms
--------------
-
-C API
------
-
-- Two new APIs PyOS_snprintf() and PyOS_vsnprintf() were added
-  which provide a cross-platform implementations for the
-  relatively new snprintf()/vsnprintf() C lib APIs. In contrast to
-  the standard sprintf() and vsprintf() C lib APIs, these versions
-  apply bounds checking on the used buffer which enhances protection
-  against buffer overruns.
-
-- Unicode APIs now use name mangling to assure that mixing interpreters
-  and extensions using different Unicode widths is rendered next to
-  impossible. Trying to import an incompatible Unicode-aware extension
-  will result in an ImportError.  Unicode extensions writers must make
-  sure to check the Unicode width compatibility in their extensions by
-  using at least one of the mangled Unicode APIs in the extension.
-
-- Two new flags METH_NOARGS and METH_O are available in method definition
-  tables to simplify implementation of methods with no arguments and a
-  single untyped argument. Calling such methods is more efficient than
-  calling corresponding METH_VARARGS methods. METH_OLDARGS is now
-  deprecated.
-
-Windows
--------
-
-- "import module" now compiles module.pyw if it exists and nothing else
-  relevant is found.
-
-
-What's New in Python 2.2a1?
-===========================
-
-*Release date: 18-Jul-2001*
-
-Core
-----
-
-- TENTATIVELY, a large amount of code implementing much of what's
-  described in PEP 252 (Making Types Look More Like Classes) and PEP
-  253 (Subtyping Built-in Types) was added.  This will be released
-  with Python 2.2a1.  Documentation will be provided separately
-  through http://www.python.org/2.2/.  The purpose of releasing this
-  with Python 2.2a1 is to test backwards compatibility.  It is
-  possible, though not likely, that a decision is made not to release
-  this code as part of 2.2 final, if any serious backwards
-  incompatibilities are found during alpha testing that cannot be
-  repaired.
-
-- Generators were added; this is a new way to create an iterator (see
-  below) using what looks like a simple function containing one or
-  more 'yield' statements.  See PEP 255.  Since this adds a new
-  keyword to the language, this feature must be enabled by including a
-  future statement: "from __future__ import generators" (see PEP 236).
-  Generators will become a standard feature in a future release
-  (probably 2.3).  Without this future statement, 'yield' remains an
-  ordinary identifier, but a warning is issued each time it is used.
-  (These warnings currently don't conform to the warnings framework of
-  PEP 230; we intend to fix this in 2.2a2.)
-
-- The UTF-16 codec was modified to be more RFC compliant. It will now
-  only remove BOM characters at the start of the string and then
-  only if running in native mode (UTF-16-LE and -BE won't remove a
-  leading BMO character).
-
-- Strings now have a new method .decode() to complement the already
-  existing .encode() method. These two methods provide direct access
-  to the corresponding decoders and encoders of the registered codecs.
-
-  To enhance the usability of the .encode() method, the special
-  casing of Unicode object return values was dropped (Unicode objects
-  were auto-magically converted to string using the default encoding).
-
-  Both methods will now return whatever the codec in charge of the
-  requested encoding returns as object, e.g. Unicode codecs will
-  return Unicode objects when decoding is requested ("äöü".decode("latin-1")
-  will return u"äöü"). This enables codec writer to create codecs
-  for various simple to use conversions.
-
-  New codecs were added to demonstrate these new features (the .encode()
-  and .decode() columns indicate the type of the returned objects):
-
-  +---------+-----------+-----------+-----------------------------+
-  |Name     | .encode() | .decode() | Description                 |
-  +=========+===========+===========+=============================+
-  |uu       | string    | string    | UU codec (e.g. for email)   |
-  +---------+-----------+-----------+-----------------------------+
-  |base64   | string    | string    | base64 codec                |
-  +---------+-----------+-----------+-----------------------------+
-  |quopri   | string    | string    | quoted-printable codec      |
-  +---------+-----------+-----------+-----------------------------+
-  |zlib     | string    | string    | zlib compression            |
-  +---------+-----------+-----------+-----------------------------+
-  |hex      | string    | string    | 2-byte hex codec            |
-  +---------+-----------+-----------+-----------------------------+
-  |rot-13   | string    | Unicode   | ROT-13 Unicode charmap codec|
-  +---------+-----------+-----------+-----------------------------+
-
-- Some operating systems now support the concept of a default Unicode
-  encoding for file system operations.  Notably, Windows supports 'mbcs'
-  as the default.  The Macintosh will also adopt this concept in the medium
-  term, although the default encoding for that platform will be other than
-  'mbcs'.
-
-  On operating system that support non-ASCII filenames, it is common for
-  functions that return filenames (such as os.listdir()) to return Python
-  string objects pre-encoded using the default file system encoding for
-  the platform.  As this encoding is likely to be different from Python's
-  default encoding, converting this name to a Unicode object before passing
-  it back to the Operating System would result in a Unicode error, as Python
-  would attempt to use its default encoding (generally ASCII) rather than
-  the default encoding for the file system.
-
-  In general, this change simply removes surprises when working with
-  Unicode and the file system, making these operations work as you expect,
-  increasing the transparency of Unicode objects in this context.
-  See [????] for more details, including examples.
-
-- Float (and complex) literals in source code were evaluated to full
-  precision only when running from a .py file; the same code loaded from a
-  .pyc (or .pyo) file could suffer numeric differences starting at about the
-  12th significant decimal digit.  For example, on a machine with IEEE-754
-  floating arithmetic,
-
-      x = 9007199254740992.0
-      print long(x)
-
-  printed 9007199254740992 if run directly from .py, but 9007199254740000
-  if from a compiled (.pyc or .pyo) file.  This was due to marshal using
-  str(float) instead of repr(float) when building code objects.  marshal
-  now uses repr(float) instead, which should reproduce floats to full
-  machine precision (assuming the platform C float<->string I/O conversion
-  functions are of good quality).
-
-  This may cause floating-point results to change in some cases, and
-  usually for the better, but may also cause numerically unstable
-  algorithms to break.
-
-- The implementation of dicts suffers fewer collisions, which has speed
-  benefits.  However, the order in which dict entries appear in dict.keys(),
-  dict.values() and dict.items() may differ from previous releases for a
-  given dict.  Nothing is defined about this order, so no program should
-  rely on it.  Nevertheless, it's easy to write test cases that rely on the
-  order by accident, typically because of printing the str() or repr() of a
-  dict to an "expected results" file.  See Lib/test/test_support.py's new
-  sortdict(dict) function for a simple way to display a dict in sorted
-  order.
-
-- Many other small changes to dicts were made, resulting in faster
-  operation along the most common code paths.
-
-- Dictionary objects now support the "in" operator: "x in dict" means
-  the same as dict.has_key(x).
-
-- The update() method of dictionaries now accepts generic mapping
-  objects.  Specifically the argument object must support the .keys()
-  and __getitem__() methods.  This allows you to say, for example,
-  {}.update(UserDict())
-
-- Iterators were added; this is a generalized way of providing values
-  to a for loop.  See PEP 234.  There's a new built-in function iter()
-  to return an iterator.  There's a new protocol to get the next value
-  from an iterator using the next() method (in Python) or the
-  tp_iternext slot (in C).  There's a new protocol to get iterators
-  using the __iter__() method (in Python) or the tp_iter slot (in C).
-  Iterating (i.e. a for loop) over a dictionary generates its keys.
-  Iterating over a file generates its lines.
-
-- The following functions were generalized to work nicely with iterator
-  arguments::
-
-    map(), filter(), reduce(), zip()
-    list(), tuple() (PySequence_Tuple() and PySequence_Fast() in C API)
-    max(), min()
-    join() method of strings
-    extend() method of lists
-    'x in y' and 'x not in y' (PySequence_Contains() in C API)
-    operator.countOf() (PySequence_Count() in C API)
-    right-hand side of assignment statements with multiple targets, such as ::
-        x, y, z = some_iterable_object_returning_exactly_3_values
-
-- Accessing module attributes is significantly faster (for example,
-  random.random or os.path or yourPythonModule.yourAttribute).
-
-- Comparing dictionary objects via == and != is faster, and now works even
-  if the keys and values don't support comparisons other than ==.
-
-- Comparing dictionaries in ways other than == and != is slower:  there were
-  insecurities in the dict comparison implementation that could cause Python
-  to crash if the element comparison routines for the dict keys and/or
-  values mutated the dicts.  Making the code bulletproof slowed it down.
-
-- Collisions in dicts are resolved via a new approach, which can help
-  dramatically in bad cases.  For example, looking up every key in a dict
-  d with d.keys() == [i << 16 for i in range(20000)] is approximately 500x
-  faster now.  Thanks to Christian Tismer for pointing out the cause and
-  the nature of an effective cure (last December! better late than never).
-
-- repr() is much faster for large containers (dict, list, tuple).
-
-
-Library
--------
-
-- The constants ascii_letters, ascii_lowercase. and ascii_uppercase
-  were added to the string module.  These a locale-independent
-  constants, unlike letters, lowercase, and uppercase.  These are now
-  use in appropriate locations in the standard library.
-
-- The flags used in dlopen calls can now be configured using
-  sys.setdlopenflags and queried using sys.getdlopenflags.
-
-- Fredrik Lundh's xmlrpclib is now a standard library module.  This
-  provides full client-side XML-RPC support.  In addition,
-  Demo/xmlrpc/ contains two server frameworks (one SocketServer-based,
-  one asyncore-based).  Thanks to Eric Raymond for the documentation.
-
-- The xrange() object is simplified: it no longer supports slicing,
-  repetition, comparisons, efficient 'in' checking, the tolist()
-  method, or the start, stop and step attributes.  See PEP 260.
-
-- A new function fnmatch.filter to filter lists of file names was added.
-
-- calendar.py uses month and day names based on the current locale.
-
-- strop is now *really* obsolete (this was announced before with 1.6),
-  and issues DeprecationWarning when used (except for the four items
-  that are still imported into string.py).
-
-- Cookie.py now sorts key+value pairs by key in output strings.
-
-- pprint.isrecursive(object) didn't correctly identify recursive objects.
-  Now it does.
-
-- pprint functions now much faster for large containers (tuple, list, dict).
-
-- New 'q' and 'Q' format codes in the struct module, corresponding to C
-  types "long long" and "unsigned long long" (on Windows, __int64).  In
-  native mode, these can be used only when the platform C compiler supports
-  these types (when HAVE_LONG_LONG is #define'd by the Python config
-  process), and then they inherit the sizes and alignments of the C types.
-  In standard mode, 'q' and 'Q' are supported on all platforms, and are
-  8-byte integral types.
-
-- The site module installs a new built-in function 'help' that invokes
-  pydoc.help.  It must be invoked as 'help()'; when invoked as 'help',
-  it displays a message reminding the user to use 'help()' or
-  'help(object)'.
-
-Tests
------
-
-- New test_mutants.py runs dict comparisons where the key and value
-  comparison operators mutate the dicts randomly during comparison.  This
-  rapidly causes Python to crash under earlier releases (not for the faint
-  of heart:  it can also cause Win9x to freeze or reboot!).
-
-- New test_pprint.py verifies that pprint.isrecursive() and
-  pprint.isreadable() return sensible results.  Also verifies that simple
-  cases produce correct output.
-
-C API
------
-
-- Removed the unused last_is_sticky argument from the internal
-  _PyTuple_Resize().  If this affects you, you were cheating.
-
-----
-
 **(For information about older versions, consult the HISTORY file.)**
diff --git a/Modules/main.c b/Modules/main.c
index 8e7c50b..c8298fb 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -2,7 +2,6 @@
 
 #include "Python.h"
 #include "osdefs.h"
-#include "code.h" /* For CO_FUTURE_DIVISION */
 #include "import.h"
 
 #ifdef __VMS
@@ -34,7 +33,7 @@
 static int  orig_argc;
 
 /* command line options */
-#define BASE_OPTS "c:dEhim:OQ:StuUvVW:xX"
+#define BASE_OPTS "c:dEhim:OStuvVW:xX"
 
 #ifndef RISCOS
 #define PROGRAM_OPTS BASE_OPTS
@@ -64,7 +63,6 @@
 -m mod : run library module as a script (terminates option list)\n\
 -O     : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\
 -OO    : remove doc-strings in addition to the -O optimizations\n\
--Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\
 -S     : don't imply 'import site' on initialization\n\
 -t     : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
 -u     : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\
@@ -220,33 +218,6 @@
 			Py_DebugFlag++;
 			break;
 
-		case 'Q':
-			if (strcmp(_PyOS_optarg, "old") == 0) {
-				Py_DivisionWarningFlag = 0;
-				break;
-			}
-			if (strcmp(_PyOS_optarg, "warn") == 0) {
-				Py_DivisionWarningFlag = 1;
-				break;
-			}
-			if (strcmp(_PyOS_optarg, "warnall") == 0) {
-				Py_DivisionWarningFlag = 2;
-				break;
-			}
-			if (strcmp(_PyOS_optarg, "new") == 0) {
-				/* This only affects __main__ */
-				cf.cf_flags |= CO_FUTURE_DIVISION;
-				/* And this tells the eval loop to treat
-				   BINARY_DIVIDE as BINARY_TRUE_DIVIDE */
-				_Py_QnewFlag = 1;
-				break;
-			}
-			fprintf(stderr,
-				"-Q option should be `-Qold', "
-				"`-Qwarn', `-Qwarnall', or `-Qnew' only\n");
-			return usage(2, argv[0]);
-			/* NOTREACHED */
-
 		case 'i':
 			inspect++;
 			saw_inspect_flag = 1;
@@ -288,12 +259,10 @@
 			skipfirstline = 1;
 			break;
 
-		case 'U':
-			Py_UnicodeFlag++;
-			break;
 		case 'h':
 			help++;
 			break;
+
 		case 'V':
 			version++;
 			break;
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 399656f..052e3ca 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2106,12 +2106,7 @@
 			return -1;
 	}
 
-	if (PyClass_Check(cls) && PyInstance_Check(inst)) {
-		PyObject *inclass =
-			(PyObject*)((PyInstanceObject*)inst)->in_class;
-		retval = PyClass_IsSubclass(inclass, cls);
-	}
-	else if (PyType_Check(cls)) {
+	if (PyType_Check(cls)) {
 		retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
 		if (retval == 0) {
 			PyObject *c = PyObject_GetAttr(inst, __class__);
@@ -2177,7 +2172,7 @@
 {
 	int retval;
 
-	if (!PyClass_Check(derived) || !PyClass_Check(cls)) {
+        {
 		if (!check_class(derived,
 				 "issubclass() arg 1 must be a class"))
 			return -1;
@@ -2212,11 +2207,6 @@
 
 		retval = abstract_issubclass(derived, cls);
 	}
-	else {
-		/* shortcut */
-	  	if (!(retval = (derived == cls)))
-			retval = PyClass_IsSubclass(derived, cls);
-	}
 
 	return retval;
 }
diff --git a/Parser/parser.c b/Parser/parser.c
index ada6be2..213410c 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -149,6 +149,7 @@
 			    strcmp(l->lb_str, s) != 0)
 				continue;
 #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
+                        /* Leaving this in as an example */
 			if (!(ps->p_flags & CO_FUTURE_WITH_STATEMENT)) {
 				if (s[0] == 'w' && strcmp(s, "with") == 0)
 					break; /* not a keyword yet */
@@ -177,6 +178,7 @@
 }
 
 #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
+/* Leaving this in as an example */
 static void
 future_hack(parser_state *ps)
 {
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index 77a2cac..07590c2 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -192,7 +192,8 @@
 			col_offset = -1;
 			
 		if ((err_ret->error =
-		     PyParser_AddToken(ps, (int)type, str, tok->lineno, col_offset,
+		     PyParser_AddToken(ps, (int)type, str, 
+                                       tok->lineno, col_offset,
 				       &(err_ret->expected))) != E_OK) {
 			if (err_ret->error != E_DONE)
 				PyObject_FREE(str);
diff --git a/Python/ceval.c b/Python/ceval.c
index de2b35b..c854fcf 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3025,15 +3025,7 @@
 		Py_DECREF(tmp);
 	}
 
-	if (PyString_CheckExact(type)) {
-		/* Raising builtin string is deprecated but still allowed --
-		 * do nothing.  Raising an instance of a new-style str
-		 * subclass is right out. */
-		if (PyErr_Warn(PyExc_DeprecationWarning,
-			   "raising a string exception is deprecated"))
-			goto raise_error;
-	}
-	else if (PyExceptionClass_Check(type))
+	if (PyExceptionClass_Check(type))
 		PyErr_NormalizeException(&type, &value, &tb);
 
 	else if (PyExceptionInstance_Check(type)) {
@@ -3054,10 +3046,8 @@
 	else {
 		/* Not something you can raise.  You get an exception
 		   anyway, just not what you specified :-) */
-		PyErr_Format(PyExc_TypeError,
-			     "exceptions must be classes, instances, or "
-			     "strings (deprecated), not %s",
-			     type->ob_type->tp_name);
+		PyErr_SetString(PyExc_TypeError,
+                                "exceptions must derive from BaseException");
 		goto raise_error;
 	}
 	PyErr_Restore(type, value, tb);
@@ -4148,7 +4138,7 @@
 		if (g != NULL && PyDict_Check(g))
 			metaclass = PyDict_GetItemString(g, "__metaclass__");
 		if (metaclass == NULL)
-			metaclass = (PyObject *) &PyClass_Type;
+			metaclass = (PyObject *) &PyType_Type;
 		Py_INCREF(metaclass);
 	}
 	result = PyObject_CallFunction(metaclass, "OOO", name, bases, methods);
diff --git a/Python/compile.c b/Python/compile.c
index baf3989..cfc6ef1 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2464,11 +2464,7 @@
 		int r;
 		PyObject *level;
 
-		if (c->c_flags && (c->c_flags->cf_flags & CO_FUTURE_ABSIMPORT))
-			level = PyInt_FromLong(0);
-		else
-			level = PyInt_FromLong(-1);
-
+                level = PyInt_FromLong(0);
 		if (level == NULL)
 			return 0;
 
@@ -2511,12 +2507,7 @@
 	if (!names)
 		return 0;
 
-	if (s->v.ImportFrom.level == 0 && c->c_flags &&
-	    !(c->c_flags->cf_flags & CO_FUTURE_ABSIMPORT))
-		level = PyInt_FromLong(-1);
-	else
-		level = PyInt_FromLong(s->v.ImportFrom.level);
-
+        level = PyInt_FromLong(s->v.ImportFrom.level);
 	if (!level) {
 		Py_DECREF(names);
 		return 0;
@@ -2746,10 +2737,7 @@
 	case Mult:
 		return BINARY_MULTIPLY;
 	case Div:
-		if (c->c_flags && c->c_flags->cf_flags & CO_FUTURE_DIVISION)
-			return BINARY_TRUE_DIVIDE;
-		else
-			return BINARY_DIVIDE;
+		return BINARY_TRUE_DIVIDE;
 	case Mod:
 		return BINARY_MODULO;
 	case Pow:
@@ -2809,10 +2797,7 @@
 	case Mult:
 		return INPLACE_MULTIPLY;
 	case Div:
-		if (c->c_flags && c->c_flags->cf_flags & CO_FUTURE_DIVISION)
-			return INPLACE_TRUE_DIVIDE;
-		else
-			return INPLACE_DIVIDE;
+		return INPLACE_TRUE_DIVIDE;
 	case Mod:
 		return INPLACE_MODULO;
 	case Pow:
diff --git a/Python/errors.c b/Python/errors.c
index 7fc4c97..a64900b 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -557,7 +557,8 @@
 	bases = PyTuple_Pack(1, base);
 	if (bases == NULL)
 		goto failure;
-	result = PyClass_New(bases, dict, classname);
+	result = PyObject_CallFunction((PyObject *) (base->ob_type),
+				       "OOO", classname, bases, dict);
   failure:
 	Py_XDECREF(bases);
 	Py_XDECREF(mydict);
diff --git a/Python/future.c b/Python/future.c
index 4a48ba5..1902f1d 100644
--- a/Python/future.c
+++ b/Python/future.c
@@ -28,11 +28,11 @@
 		} else if (strcmp(feature, FUTURE_GENERATORS) == 0) {
 			continue;
 		} else if (strcmp(feature, FUTURE_DIVISION) == 0) {
-			ff->ff_features |= CO_FUTURE_DIVISION;
+			continue;
 		} else if (strcmp(feature, FUTURE_ABSIMPORT) == 0) {
-			ff->ff_features |= CO_FUTURE_ABSIMPORT;
+			continue;
 		} else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) {
-			ff->ff_features |= CO_FUTURE_WITH_STATEMENT;
+			continue;
 		} else if (strcmp(feature, "braces") == 0) {
 			PyErr_SetString(PyExc_SyntaxError,
 					"not a chance");
diff --git a/Python/getargs.c b/Python/getargs.c
index 8ee7d2f..fac0b6f 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -486,15 +486,16 @@
 
 #define CONV_UNICODE "(unicode conversion error)"
 
-/* explicitly check for float arguments when integers are expected.  For now
- * signal a warning.  Returns true if an exception was raised. */
+/* Explicitly check for float arguments when integers are expected.
+   Return 1 for error, 0 if ok. */
 static int
 float_argument_error(PyObject *arg)
 {
-	if (PyFloat_Check(arg) &&
-	    PyErr_Warn(PyExc_DeprecationWarning,
-		       "integer argument expected, got float" ))
+	if (PyFloat_Check(arg)) {
+		PyErr_SetString(PyExc_TypeError,
+				"integer argument expected, got float" );
 		return 1;
+	}
 	else
 		return 0;
 }
diff --git a/Python/graminit.c b/Python/graminit.c
index 1853ca4..40f1770 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -556,9 +556,8 @@
 static arc arcs_27_0[1] = {
 	{19, 1},
 };
-static arc arcs_27_1[3] = {
+static arc arcs_27_1[2] = {
 	{78, 2},
-	{19, 2},
 	{0, 1},
 };
 static arc arcs_27_2[1] = {
@@ -569,16 +568,15 @@
 };
 static state states_27[4] = {
 	{1, arcs_27_0},
-	{3, arcs_27_1},
+	{2, arcs_27_1},
 	{1, arcs_27_2},
 	{1, arcs_27_3},
 };
 static arc arcs_28_0[1] = {
 	{12, 1},
 };
-static arc arcs_28_1[3] = {
+static arc arcs_28_1[2] = {
 	{78, 2},
-	{19, 2},
 	{0, 1},
 };
 static arc arcs_28_2[1] = {
@@ -589,7 +587,7 @@
 };
 static state states_28[4] = {
 	{1, arcs_28_0},
-	{3, arcs_28_1},
+	{2, arcs_28_1},
 	{1, arcs_28_2},
 	{1, arcs_28_3},
 };
@@ -917,9 +915,8 @@
 	{1, arcs_40_4},
 	{1, arcs_40_5},
 };
-static arc arcs_41_0[2] = {
+static arc arcs_41_0[1] = {
 	{78, 1},
-	{19, 1},
 };
 static arc arcs_41_1[1] = {
 	{82, 2},
@@ -928,7 +925,7 @@
 	{0, 2},
 };
 static state states_41[3] = {
-	{2, arcs_41_0},
+	{1, arcs_41_0},
 	{1, arcs_41_1},
 	{1, arcs_41_2},
 };
@@ -1870,7 +1867,7 @@
 	{296, "with_stmt", 0, 6, states_40,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
 	{297, "with_var", 0, 3, states_41,
-	 "\000\000\010\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
+	 "\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000\000"},
 	{298, "except_clause", 0, 5, states_42,
 	 "\000\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
 	{299, "suite", 0, 5, states_43,
diff --git a/Python/import.c b/Python/import.c
index 73051a2..b64594d 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -28,7 +28,7 @@
    a .pyc file in text mode the magic number will be wrong; also, the
    Apple MPW compiler swaps their values, botching string constants.
 
-   The magic numbers must be spaced apart atleast 2 values, as the
+   The magic numbers must be spaced apart at least 2 values, as the
    -U interpeter flag will cause MAGIC+1 being used. They have been
    odd numbers for some time now.
 
@@ -56,9 +56,10 @@
        Python 2.5a0: 62081 (ast-branch)
        Python 2.5a0: 62091 (with)
        Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
+       Python 3000:   3000
 .
 */
-#define MAGIC (62092 | ((long)'\r'<<16) | ((long)'\n'<<24))
+#define MAGIC (3000 | ((long)'\r'<<16) | ((long)'\n'<<24))
 
 /* Magic word as global; note that _PyImport_Init() can change the
    value of this global to accommodate for alterations of how the
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 7b1f264..d04d111 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -696,9 +696,7 @@
 /* compute parser flags based on compiler flags */
 #define PARSER_FLAGS(flags) \
 	((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
-		      PyPARSE_DONT_IMPLY_DEDENT : 0) \
-		    | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
-		       PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
+		      PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
 
 int
 PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
diff --git a/README b/README
index cce60fa..70cb26d 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
-This is Python version 2.5 alpha 0
-==================================
+This is Python 3000 -- unversioned (branched off 2.5 pre alpha 1)
+=================================================================
 
 Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation.
 All rights reserved.