Commit c90483be authored by Christian Heimes's avatar Christian Heimes

Merged revisions...

Merged revisions 61143-61144,61146-61147,61150-61151,61157,61165-61168,61170-61173,61176-61177,61183 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r61143 | barry.warsaw | 2008-03-01 03:23:38 +0100 (Sat, 01 Mar 2008) | 2 lines

  Bump to version 2.6a1
........
  r61144 | barry.warsaw | 2008-03-01 03:26:42 +0100 (Sat, 01 Mar 2008) | 1 line

  bump idle version number
........
  r61146 | fred.drake | 2008-03-01 03:45:07 +0100 (Sat, 01 Mar 2008) | 2 lines

  fix typo
........
  r61147 | barry.warsaw | 2008-03-01 03:53:36 +0100 (Sat, 01 Mar 2008) | 1 line

  Add date to NEWS
........
  r61150 | barry.warsaw | 2008-03-01 04:00:52 +0100 (Sat, 01 Mar 2008) | 1 line

  Give IDLE a release date
........
  r61151 | barry.warsaw | 2008-03-01 04:15:20 +0100 (Sat, 01 Mar 2008) | 1 line

  More copyright year and version number bumps
........
  r61157 | barry.warsaw | 2008-03-01 18:11:41 +0100 (Sat, 01 Mar 2008) | 2 lines

  Set things up for 2.6a2.
........
  r61165 | georg.brandl | 2008-03-02 07:28:16 +0100 (Sun, 02 Mar 2008) | 2 lines

  It's 2.6 now.
........
  r61166 | georg.brandl | 2008-03-02 07:32:32 +0100 (Sun, 02 Mar 2008) | 2 lines

  Update year.
........
  r61167 | georg.brandl | 2008-03-02 07:44:08 +0100 (Sun, 02 Mar 2008) | 2 lines

  Make patchlevel print out the release if called as a script.
........
  r61168 | georg.brandl | 2008-03-02 07:45:40 +0100 (Sun, 02 Mar 2008) | 2 lines

  New default basename for HTML help files.
........
  r61170 | raymond.hettinger | 2008-03-02 11:59:31 +0100 (Sun, 02 Mar 2008) | 1 line

  Finish-up docs for combinations() and permutations() in itertools.
........
  r61171 | raymond.hettinger | 2008-03-02 12:17:51 +0100 (Sun, 02 Mar 2008) | 1 line

  Tighten example code.
........
  r61172 | raymond.hettinger | 2008-03-02 12:57:16 +0100 (Sun, 02 Mar 2008) | 1 line

  Simplify code for itertools.product().
........
  r61173 | raymond.hettinger | 2008-03-02 13:02:19 +0100 (Sun, 02 Mar 2008) | 1 line

  Handle 0-tuples which can be singletons.
........
  r61176 | georg.brandl | 2008-03-02 14:41:39 +0100 (Sun, 02 Mar 2008) | 2 lines

  Make clear that the constants are strings.
........
  r61177 | georg.brandl | 2008-03-02 15:15:04 +0100 (Sun, 02 Mar 2008) | 2 lines

  Fix factual error.
........
  r61183 | gregory.p.smith | 2008-03-02 21:00:53 +0100 (Sun, 02 Mar 2008) | 4 lines

  Modify import of test_support so that the code can also be used with a
  stand alone distribution of bsddb that includes its own small copy of
  test_support for the needed functionality on older pythons.
........
parent d77fc6d3
......@@ -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
......
......@@ -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.
......
......@@ -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
......
......@@ -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()
......
......@@ -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.
......
......@@ -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]
......@@ -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):
......
......@@ -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'
......
......@@ -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):
......
......@@ -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):
......
......@@ -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):
......
......@@ -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()
......
......@@ -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):
......
......@@ -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):
......
......@@ -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):
......
......@@ -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)
......
......@@ -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)
......
......@@ -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):
......
......@@ -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)
......
......@@ -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):
......
......@@ -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()
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment