diff options
-rw-r--r-- | Doc/conf.py | 2 | ||||
-rw-r--r-- | Doc/copyright.rst | 2 | ||||
-rw-r--r-- | Doc/library/itertools.rst | 40 | ||||
-rw-r--r-- | Doc/library/logging.rst | 43 | ||||
-rw-r--r-- | Doc/license.rst | 2 | ||||
-rw-r--r-- | Doc/tools/sphinxext/patchlevel.py | 3 | ||||
-rw-r--r-- | Lib/bsddb/test/test_associate.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_basics.py | 5 | ||||
-rw-r--r-- | Lib/bsddb/test/test_compare.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_cursor_pget_bug.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_dbobj.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_dbshelve.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_dbtables.py | 5 | ||||
-rw-r--r-- | Lib/bsddb/test/test_env_close.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_join.py | 5 | ||||
-rw-r--r-- | Lib/bsddb/test/test_lock.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_misc.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_pickle.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_recno.py | 6 | ||||
-rw-r--r-- | Lib/bsddb/test/test_sequence.py | 5 | ||||
-rw-r--r-- | Lib/bsddb/test/test_thread.py | 6 | ||||
-rw-r--r-- | Modules/itertoolsmodule.c | 17 | ||||
-rw-r--r-- | README | 3 |
23 files changed, 135 insertions, 63 deletions
diff --git a/Doc/conf.py b/Doc/conf.py index b7903be..71bc6f7 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -87,7 +87,7 @@ html_additional_pages = { } # Output file base name for HTML help builder. -htmlhelp_basename = 'pydoc' +htmlhelp_basename = 'python' + release.replace('.', '') # Options for LaTeX output diff --git a/Doc/copyright.rst b/Doc/copyright.rst index 9a472af..376b1c4 100644 --- a/Doc/copyright.rst +++ b/Doc/copyright.rst @@ -4,7 +4,7 @@ Copyright Python and this documentation is: -Copyright © 2001-2007 Python Software Foundation. All rights reserved. +Copyright © 2001-2008 Python Software Foundation. All rights reserved. Copyright © 2000 BeOpen.com. All rights reserved. diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 098972d..9da51aa 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -102,26 +102,24 @@ loops that truncate the stream. Each result tuple is ordered to match the input order. So, every combination is a subsequence of the input *iterable*. - Example: ``combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)`` - Equivalent to:: def combinations(iterable, r): + 'combinations(range(4), 3) --> (0,1,2) (0,1,3) (0,2,3) (1,2,3)' pool = tuple(iterable) n = len(pool) - assert 0 <= r <= n - vec = range(r) - yield tuple(pool[i] for i in vec) + indices = range(r) + yield tuple(pool[i] for i in indices) while 1: for i in reversed(range(r)): - if vec[i] != i + n - r: + if indices[i] != i + n - r: break else: return - vec[i] += 1 + indices[i] += 1 for j in range(i+1, r): - vec[j] = vec[j-1] + 1 - yield tuple(pool[i] for i in vec) + indices[j] = indices[j-1] + 1 + yield tuple(pool[i] for i in indices) .. versionadded:: 2.6 @@ -356,7 +354,29 @@ loops that truncate the stream. value. So if the input elements are unique, there will be no repeat values in each permutation. - Example: ``permutations(range(3),2) --> (1,2) (1,3) (2,1) (2,3) (3,1) (3,2)`` + Equivalent to:: + + def permutations(iterable, r=None): + 'permutations(range(3), 2) --> (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)' + pool = tuple(iterable) + n = len(pool) + r = n if r is None else r + indices = range(n) + cycles = range(n-r+1, n+1)[::-1] + yield tuple(pool[i] for i in indices[:r]) + while n: + for i in reversed(range(r)): + cycles[i] -= 1 + if cycles[i] == 0: + indices[i:] = indices[i+1:] + indices[i:i+1] + cycles[i] = n - i + else: + j = cycles[i] + indices[i], indices[-j] = indices[-j], indices[i] + yield tuple(pool[i] for i in indices[:r]) + break + else: + return .. versionadded:: 2.6 diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index 7cdbbd2..a7693fb 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -1630,27 +1630,28 @@ timed intervals. You can use the *when* to specify the type of *interval*. The list of possible values is, note that they are not case sensitive: - +----------+-----------------------+ - | Value | Type of interval | - +==========+=======================+ - | S | Seconds | - +----------+-----------------------+ - | M | Minutes | - +----------+-----------------------+ - | H | Hours | - +----------+-----------------------+ - | D | Days | - +----------+-----------------------+ - | W | Week day (0=Monday) | - +----------+-----------------------+ - | midnight | Roll over at midnight | - +----------+-----------------------+ - - If *backupCount* is non-zero, the system will save old log files by appending - extensions to the filename. The extensions are date-and-time based, using the - strftime format ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on - the rollover interval. At most *backupCount* files will be kept, and if more - would be created when rollover occurs, the oldest one is deleted. + +----------------+-----------------------+ + | Value | Type of interval | + +================+=======================+ + | ``'S'`` | Seconds | + +----------------+-----------------------+ + | ``'M'`` | Minutes | + +----------------+-----------------------+ + | ``'H'`` | Hours | + +----------------+-----------------------+ + | ``'D'`` | Days | + +----------------+-----------------------+ + | ``'W'`` | Week day (0=Monday) | + +----------------+-----------------------+ + | ``'midnight'`` | Roll over at midnight | + +----------------+-----------------------+ + + The system will save old log files by appending extensions to the filename. + The extensions are date-and-time based, using the strftime format + ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the rollover + interval. If *backupCount* is nonzero, at most *backupCount* files will be + kept, and if more would be created when rollover occurs, the oldest one is + deleted. .. method:: TimedRotatingFileHandler.doRollover() diff --git a/Doc/license.rst b/Doc/license.rst index 127fc0d..6ffa65f 100644 --- a/Doc/license.rst +++ b/Doc/license.rst @@ -120,7 +120,7 @@ Terms and conditions for accessing or otherwise using Python analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python |release| alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of - copyright, i.e., "Copyright © 2001-2007 Python Software Foundation; All Rights + copyright, i.e., "Copyright © 2001-2008 Python Software Foundation; All Rights Reserved" are retained in Python |release| alone or in any derivative version prepared by Licensee. diff --git a/Doc/tools/sphinxext/patchlevel.py b/Doc/tools/sphinxext/patchlevel.py index 971ea61..cb9e35c 100644 --- a/Doc/tools/sphinxext/patchlevel.py +++ b/Doc/tools/sphinxext/patchlevel.py @@ -66,3 +66,6 @@ def get_version_info(): print >>sys.stderr, 'Can\'t get version info from Include/patchlevel.h, ' \ 'using version of this interpreter (%s).' % release return version, release + +if __name__ == '__main__': + print get_header_version_info('.')[1] diff --git a/Lib/bsddb/test/test_associate.py b/Lib/bsddb/test/test_associate.py index 1a32460..1c80a88 100644 --- a/Lib/bsddb/test/test_associate.py +++ b/Lib/bsddb/test/test_associate.py @@ -24,6 +24,11 @@ except ImportError: # For Python 2.3 from bsddb import db, dbshelve +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- @@ -107,7 +112,6 @@ class AssociateErrorTestCase(unittest.TestCase): def tearDown(self): self.env.close() self.env = None - from test import test_support test_support.rmtree(self.homeDir) def test00_associateDBError(self): diff --git a/Lib/bsddb/test/test_basics.py b/Lib/bsddb/test/test_basics.py index 77ef361..00eb9bd 100644 --- a/Lib/bsddb/test/test_basics.py +++ b/Lib/bsddb/test/test_basics.py @@ -9,7 +9,6 @@ import errno import string import tempfile from pprint import pprint -from test import test_support import unittest import time @@ -21,6 +20,10 @@ except ImportError: from bsddb import db from bsddb.test.test_all import verbose +try: + from bsddb3 import test_support +except ImportError: + from test import test_support DASH = b'-' letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' diff --git a/Lib/bsddb/test/test_compare.py b/Lib/bsddb/test/test_compare.py index 3e9ecce..2c9706a 100644 --- a/Lib/bsddb/test/test_compare.py +++ b/Lib/bsddb/test/test_compare.py @@ -16,6 +16,11 @@ except ImportError: # For Python 2.3 from bsddb import db, dbshelve +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + lexical_cmp = cmp def lowercase_cmp(left, right): @@ -84,7 +89,6 @@ class AbstractBtreeKeyCompareTestCase (unittest.TestCase): if self.env is not None: self.env.close () self.env = None - from test import test_support test_support.rmtree(self.homeDir) def addDataToDB (self, data): diff --git a/Lib/bsddb/test/test_cursor_pget_bug.py b/Lib/bsddb/test/test_cursor_pget_bug.py index 6682180..887a69e 100644 --- a/Lib/bsddb/test/test_cursor_pget_bug.py +++ b/Lib/bsddb/test/test_cursor_pget_bug.py @@ -6,6 +6,11 @@ import tempfile from bsddb import db +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- @@ -39,7 +44,6 @@ class pget_bugTestCase(unittest.TestCase): del self.secondary_db del self.primary_db del self.env - from test import test_support test_support.rmtree(self.homeDir) def test_pget(self): diff --git a/Lib/bsddb/test/test_dbobj.py b/Lib/bsddb/test/test_dbobj.py index 2d0f916..f67af40 100644 --- a/Lib/bsddb/test/test_dbobj.py +++ b/Lib/bsddb/test/test_dbobj.py @@ -11,6 +11,11 @@ except ImportError: # For Python 2.3 from bsddb import db, dbobj +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- @@ -29,7 +34,6 @@ class dbobjTestCase(unittest.TestCase): del self.db if hasattr(self, 'env'): del self.env - from test import test_support test_support.rmtree(self.homeDir) def test01_both(self): diff --git a/Lib/bsddb/test/test_dbshelve.py b/Lib/bsddb/test/test_dbshelve.py index c66c7c1..99d0c49 100644 --- a/Lib/bsddb/test/test_dbshelve.py +++ b/Lib/bsddb/test/test_dbshelve.py @@ -9,6 +9,11 @@ import unittest from bsddb import db, dbshelve +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + from bsddb.test.test_all import verbose @@ -279,7 +284,6 @@ class BasicEnvShelveTestCase(DBShelveTestCase): def tearDown(self): - from test import test_support test_support.rmtree(self.homeDir) self.do_close() diff --git a/Lib/bsddb/test/test_dbtables.py b/Lib/bsddb/test/test_dbtables.py index 6c168bc..8964de8 100644 --- a/Lib/bsddb/test/test_dbtables.py +++ b/Lib/bsddb/test/test_dbtables.py @@ -34,6 +34,10 @@ except ImportError: # For Python 2.3 from bsddb import db, dbtables +try: + from bsddb3 import test_support +except ImportError: + from test import test_support #---------------------------------------------------------------------- @@ -52,7 +56,6 @@ class TableDBTestCase(unittest.TestCase): def tearDown(self): self.tdb.close() - from test import test_support test_support.rmtree(self.testHomeDir) def test01(self): diff --git a/Lib/bsddb/test/test_env_close.py b/Lib/bsddb/test/test_env_close.py index fa3adad..9f7c853 100644 --- a/Lib/bsddb/test/test_env_close.py +++ b/Lib/bsddb/test/test_env_close.py @@ -15,6 +15,11 @@ except ImportError: # For Python 2.3 from bsddb import db +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + from bsddb.test.test_all import verbose # We're going to get warnings in this module about trying to close the db when @@ -41,7 +46,6 @@ class DBEnvClosedEarlyCrash(unittest.TestCase): tempfile.tempdir = None def tearDown(self): - from test import test_support test_support.rmtree(self.homeDir) def test01_close_dbenv_before_db(self): diff --git a/Lib/bsddb/test/test_join.py b/Lib/bsddb/test/test_join.py index 07e7e01..311835a 100644 --- a/Lib/bsddb/test/test_join.py +++ b/Lib/bsddb/test/test_join.py @@ -18,6 +18,10 @@ from bsddb.test.test_all import verbose from bsddb import db, dbshelve, StringKeys +try: + from bsddb3 import test_support +except ImportError: + from test import test_support #---------------------------------------------------------------------- @@ -57,7 +61,6 @@ class JoinTestCase(unittest.TestCase): def tearDown(self): self.env.close() - from test import test_support test_support.rmtree(self.homeDir) def test01_join(self): diff --git a/Lib/bsddb/test/test_lock.py b/Lib/bsddb/test/test_lock.py index ca521de..973bc42 100644 --- a/Lib/bsddb/test/test_lock.py +++ b/Lib/bsddb/test/test_lock.py @@ -23,6 +23,11 @@ except ImportError: # For Python 2.3 from bsddb import db +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- @@ -37,7 +42,6 @@ class LockingTestCase(unittest.TestCase): def tearDown(self): self.env.close() - from test import test_support test_support.rmtree(self.homeDir) diff --git a/Lib/bsddb/test/test_misc.py b/Lib/bsddb/test/test_misc.py index 5b9ab0a..0d81288 100644 --- a/Lib/bsddb/test/test_misc.py +++ b/Lib/bsddb/test/test_misc.py @@ -14,6 +14,11 @@ except ImportError: # For the bundled bsddb from bsddb import db, dbshelve, hashopen +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- class MiscTestCase(unittest.TestCase): @@ -27,7 +32,6 @@ class MiscTestCase(unittest.TestCase): pass def tearDown(self): - from test import test_support test_support.unlink(self.filename) test_support.rmtree(self.homeDir) diff --git a/Lib/bsddb/test/test_pickle.py b/Lib/bsddb/test/test_pickle.py index 01a5c45..f4c34ab 100644 --- a/Lib/bsddb/test/test_pickle.py +++ b/Lib/bsddb/test/test_pickle.py @@ -13,6 +13,11 @@ except ImportError as e: # For Python 2.3 from bsddb import db +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- @@ -31,7 +36,6 @@ class pickleTestCase(unittest.TestCase): del self.db if hasattr(self, 'env'): del self.env - from test import test_support test_support.rmtree(self.homeDir) def _base_test_pickle_DBError(self, pickle): diff --git a/Lib/bsddb/test/test_recno.py b/Lib/bsddb/test/test_recno.py index dc15ad1..6855d18 100644 --- a/Lib/bsddb/test/test_recno.py +++ b/Lib/bsddb/test/test_recno.py @@ -18,6 +18,11 @@ except ImportError: # For Python 2.3 from bsddb import db +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -29,7 +34,6 @@ class SimpleRecnoTestCase(unittest.TestCase): self.homeDir = None def tearDown(self): - from test import test_support test_support.unlink(self.filename) if self.homeDir: test_support.rmtree(self.homeDir) diff --git a/Lib/bsddb/test/test_sequence.py b/Lib/bsddb/test/test_sequence.py index fa80e7c..90be5f6 100644 --- a/Lib/bsddb/test/test_sequence.py +++ b/Lib/bsddb/test/test_sequence.py @@ -11,6 +11,10 @@ except ImportError: from bsddb import db from bsddb.test.test_all import verbose +try: + from bsddb3 import test_support +except ImportError: + from test import test_support class DBSequenceTest(unittest.TestCase): @@ -41,7 +45,6 @@ class DBSequenceTest(unittest.TestCase): self.dbenv.close() del self.dbenv - from test import test_support test_support.rmtree(self.homeDir) def test_get(self): diff --git a/Lib/bsddb/test/test_thread.py b/Lib/bsddb/test/test_thread.py index 7397a50..359c10d 100644 --- a/Lib/bsddb/test/test_thread.py +++ b/Lib/bsddb/test/test_thread.py @@ -33,6 +33,11 @@ except ImportError: # For Python 2.3 from bsddb import db, dbutils +try: + from bsddb3 import test_support +except ImportError: + from test import test_support + #---------------------------------------------------------------------- @@ -63,7 +68,6 @@ class BaseThreadedTestCase(unittest.TestCase): self.d.open(self.filename, self.dbtype, self.dbopenflags|db.DB_CREATE) def tearDown(self): - from test import test_support test_support.rmtree(self.homeDir) self.d.close() self.env.close() diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 12e862d..994b452 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1740,7 +1740,6 @@ static PyTypeObject chain_type = { typedef struct { PyObject_HEAD PyObject *pools; /* tuple of pool tuples */ - Py_ssize_t *maxvec; /* size of each pool */ Py_ssize_t *indices; /* one index per pool */ PyObject *result; /* most recently returned result tuple */ int stopped; /* set to 1 when the product iterator is exhausted */ @@ -1754,7 +1753,6 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds) productobject *lz; Py_ssize_t nargs, npools, repeat=1; PyObject *pools = NULL; - Py_ssize_t *maxvec = NULL; Py_ssize_t *indices = NULL; Py_ssize_t i; @@ -1779,9 +1777,8 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds) nargs = (repeat == 0) ? 0 : PyTuple_GET_SIZE(args); npools = nargs * repeat; - maxvec = PyMem_Malloc(npools * sizeof(Py_ssize_t)); indices = PyMem_Malloc(npools * sizeof(Py_ssize_t)); - if (maxvec == NULL || indices == NULL) { + if (indices == NULL) { PyErr_NoMemory(); goto error; } @@ -1795,16 +1792,13 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds) PyObject *pool = PySequence_Tuple(item); if (pool == NULL) goto error; - PyTuple_SET_ITEM(pools, i, pool); - maxvec[i] = PyTuple_GET_SIZE(pool); indices[i] = 0; } for ( ; i < npools; ++i) { PyObject *pool = PyTuple_GET_ITEM(pools, i - nargs); Py_INCREF(pool); PyTuple_SET_ITEM(pools, i, pool); - maxvec[i] = maxvec[i - nargs]; indices[i] = 0; } @@ -1814,7 +1808,6 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds) goto error; lz->pools = pools; - lz->maxvec = maxvec; lz->indices = indices; lz->result = NULL; lz->stopped = 0; @@ -1822,8 +1815,6 @@ product_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return (PyObject *)lz; error: - if (maxvec != NULL) - PyMem_Free(maxvec); if (indices != NULL) PyMem_Free(indices); Py_XDECREF(pools); @@ -1836,7 +1827,6 @@ product_dealloc(productobject *lz) PyObject_GC_UnTrack(lz); Py_XDECREF(lz->pools); Py_XDECREF(lz->result); - PyMem_Free(lz->maxvec); PyMem_Free(lz->indices); Py_TYPE(lz)->tp_free(lz); } @@ -1883,7 +1873,6 @@ product_next(productobject *lz) } } else { Py_ssize_t *indices = lz->indices; - Py_ssize_t *maxvec = lz->maxvec; /* Copy the previous result tuple or re-use it if available */ if (Py_REFCNT(result) > 1) { @@ -1900,14 +1889,14 @@ product_next(productobject *lz) Py_DECREF(old_result); } /* Now, we've got the only copy so we can update it in-place */ - assert (Py_REFCNT(result) == 1); + assert (npools==0 || Py_REFCNT(result) == 1); /* Update the pool indices right-to-left. Only advance to the next pool when the previous one rolls-over */ for (i=npools-1 ; i >= 0 ; i--) { pool = PyTuple_GET_ITEM(pools, i); indices[i]++; - if (indices[i] == maxvec[i]) { + if (indices[i] == PyTuple_GET_SIZE(pool)) { /* Roll-over and advance to next pool */ indices[i] = 0; elem = PyTuple_GET_ITEM(pool, 0); @@ -2,6 +2,9 @@ This is Python version 3.0 alpha 3 ================================== For notes specific to this release, see RELNOTES in this directory. +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +Python Software Foundation. +All rights reserved. Python 3000 (a.k.a. "Py3k", and released as Python 3.0) is a new version of the language, which is incompatible with the 2.x line of |