From 0bd4e11887bb9ffbde38f94468cc5b317f96b815 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 12 Feb 2008 22:59:25 +0000 Subject: Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60735-60751 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r60735 | raymond.hettinger | 2008-02-11 23:53:01 +0100 (Mon, 11 Feb 2008) | 1 line Add notes on how decimal fits into the model. ........ r60737 | raymond.hettinger | 2008-02-12 00:34:56 +0100 (Tue, 12 Feb 2008) | 1 line Fix markup ........ r60738 | raymond.hettinger | 2008-02-12 00:38:00 +0100 (Tue, 12 Feb 2008) | 1 line Backport ABC docs ........ r60739 | raymond.hettinger | 2008-02-12 01:15:32 +0100 (Tue, 12 Feb 2008) | 1 line Restore fractions.rst to the document tree. ........ r60740 | raymond.hettinger | 2008-02-12 01:48:20 +0100 (Tue, 12 Feb 2008) | 1 line Fix typo in comments ........ r60741 | raymond.hettinger | 2008-02-12 02:18:03 +0100 (Tue, 12 Feb 2008) | 1 line Bring decimal a bit closer to the spec for Reals. ........ r60743 | martin.v.loewis | 2008-02-12 14:47:26 +0100 (Tue, 12 Feb 2008) | 2 lines Patch #1736: Fix file name handling of _msi.FCICreate. ........ r60745 | kurt.kaiser | 2008-02-12 16:45:50 +0100 (Tue, 12 Feb 2008) | 2 lines what??! Correct r60225. ........ r60747 | martin.v.loewis | 2008-02-12 19:47:34 +0100 (Tue, 12 Feb 2008) | 4 lines Patch #1966: Break infinite loop in httplib when the servers implements the chunked encoding incorrectly. Will backport to 2.5. ........ r60749 | raymond.hettinger | 2008-02-12 20:05:36 +0100 (Tue, 12 Feb 2008) | 1 line dict.copy() rises from the ashes. Revert r60687. ........ --- Doc/library/collections.rst | 11 +++++++++-- Doc/library/fractions.rst | 2 +- Lib/decimal.py | 14 ++++++++++++++ Lib/httplib.py | 4 ++++ Lib/idlelib/configHandler.py | 2 +- Lib/numbers.py | 26 ++++++++++++++++++++++++++ Modules/_collectionsmodule.c | 2 +- PC/_msi.c | 18 +++++++++--------- 8 files changed, 65 insertions(+), 14 deletions(-) diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index f70ccb6..e18dfcf 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -12,10 +12,18 @@ This module implements high-performance container datatypes. Currently, there are two datatypes, :class:`deque` and :class:`defaultdict`, and one datatype factory function, :func:`namedtuple`. +Besides the containers provided here, the optional :mod:`bsddb` +module offers the ability to create in-memory or file based ordered +dictionaries with string keys using the :meth:`bsddb.btopen` method. + +In addition to containers, the collections module provides some ABCs +(abstract base classes) that can be used to test whether a class +provides a particular interface, for example, is it hashable or +a mapping. + The specialized containers provided in this module provide alternatives to Python's general purpose built-in containers, :class:`dict`, :class:`list`, :class:`set`, and :class:`tuple`. - Besides the containers provided here, the optional :mod:`bsddb` module offers the ability to create in-memory or file based ordered dictionaries with string keys using the :meth:`bsddb.btopen` method. @@ -128,7 +136,6 @@ Notes on using :class:`Set` and :class:`MutableSet` as a mixin: (For more about ABCs, see the :mod:`abc` module and :pep:`3119`.) - .. _deque-objects: :class:`deque` objects diff --git a/Doc/library/fractions.rst b/Doc/library/fractions.rst index 5f30caf..1deea64 100644 --- a/Doc/library/fractions.rst +++ b/Doc/library/fractions.rst @@ -1,6 +1,6 @@ :mod:`fractions` --- Rational numbers -==================================== +===================================== .. module:: fractions :synopsis: Rational numbers. diff --git a/Lib/decimal.py b/Lib/decimal.py index 873f7c0..2745065 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -1518,6 +1518,20 @@ class Decimal(_numbers.Real, _numbers.Inexact): __trunc__ = __int__ + @property + def real(self): + return self + + @property + def imag(self): + return Decimal(0) + + def conjugate(self): + return self + + def __complex__(self): + return complex(float(self)) + def _fix_nan(self, context): """Decapitate the payload of a NaN to fit the context""" payload = self._int diff --git a/Lib/httplib.py b/Lib/httplib.py index 9321522..bb873e4 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -596,6 +596,10 @@ class HTTPResponse: ### note: we shouldn't have any trailers! while True: line = self.fp.readline() + if not line: + # a vanishingly small number of sites EOF without + # sending the trailer + break if line == b"\r\n": break diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py index 9c106eb..4906578 100644 --- a/Lib/idlelib/configHandler.py +++ b/Lib/idlelib/configHandler.py @@ -143,7 +143,7 @@ class IdleUserConfParser(IdleConfParser): try: cfgFile = open(fname, 'w') except IOError: - fname.unlink() + os.unlink(fname) cfgFile = open(fname, 'w') self.write(cfgFile) else: diff --git a/Lib/numbers.py b/Lib/numbers.py index b5150d2..a4b7a6d 100644 --- a/Lib/numbers.py +++ b/Lib/numbers.py @@ -46,6 +46,32 @@ Inexact.register(float) # Inexact.register(decimal.Decimal) +## Notes on Decimal and it how relates to the numeric tower +## -------------------------------------------------------- +## Decimal is Real except that it does not support rich comparisons. +## +## Decimal has some of the characteristics of Integrals. It provides +## logical operations but not as operators. The logical operations only apply +## to a subset of decimals (those that are non-negative, have a zero exponent, +## and have digits that are only 0 or 1). It does provide __long__() and +## a three argument form of __pow__ that includes exactness guarantees. +## It does not provide an __index__() method. +## +## Depending on context, decimal operations may be exact or inexact. +## +## When decimal is run in a context with small precision and automatic rounding, +## it is Inexact. See the "Floating point notes" section of the decimal docs +## for an example of losing the associative and distributive properties of +## addition. +## +## When decimal is used for high precision integer arithmetic, it is Exact. +## When the decimal used as fixed-point, it is Exact. +## When it is run with sufficient precision, it is Exact. +## When the decimal.Inexact trap is set, decimal operations are Exact. +## For an example, see the float_to_decimal() recipe in the "Decimal FAQ" +## section of the docs -- it shows an how traps are used in conjunction +## with variable precision to reliably achieve exact results. + class Complex(Number): """Complex defines the operations that work on the builtin complex type. diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 74b3ea2..db07537 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1127,7 +1127,7 @@ defdict_copy(defdictobject *dd) { /* This calls the object's class. That only works for subclasses whose class constructor has the same signature. Subclasses that - define a different constructor signature must override __copy__(). + define a different constructor signature must override copy(). */ return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd), dd->default_factory, dd, NULL); diff --git a/PC/_msi.c b/PC/_msi.c index 80c3cae..43fe32b 100644 --- a/PC/_msi.c +++ b/PC/_msi.c @@ -180,12 +180,12 @@ static FNFCIGETOPENINFO(cb_getopeninfo) static PyObject* fcicreate(PyObject* obj, PyObject* args) { - char *cabname; + char *cabname, *p; PyObject *files; CCAB ccab; HFCI hfci; ERF erf; - int i; + Py_ssize_t i; if (!PyArg_ParseTuple(args, "sO:FCICreate", &cabname, &files)) @@ -208,22 +208,22 @@ static PyObject* fcicreate(PyObject* obj, PyObject* args) ccab.setID = 0; ccab.szDisk[0] = '\0'; - for (i=0; cabname[i]; i++) - if (cabname[i] == '\\' || cabname[i] == '/') - break; + for (i = 0, p = cabname; *p; p = CharNext(p)) + if (*p == '\\' || *p == '/') + i = p - cabname + 1; - if (i > sizeof(ccab.szCabPath) || - strlen(cabname+i) > sizeof(ccab.szCab)) { + if (i >= sizeof(ccab.szCabPath) || + strlen(cabname+i) >= sizeof(ccab.szCab)) { PyErr_SetString(PyExc_ValueError, "path name too long"); return 0; } - if (cabname[i]) { + if (i > 0) { memcpy(ccab.szCabPath, cabname, i); ccab.szCabPath[i] = '\0'; strcpy(ccab.szCab, cabname+i); } else { - strcpy(ccab.szCabPath, "."); + strcpy(ccab.szCabPath, ".\\"); strcpy(ccab.szCab, cabname); } -- cgit v0.12