summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Doc/library/math.rst2
-rw-r--r--Lib/logging/config.py8
-rw-r--r--Lib/test/test_site.py6
-rw-r--r--Lib/test/test_slice.py14
-rw-r--r--Modules/_cursesmodule.c2
-rw-r--r--Modules/mathmodule.c7
-rw-r--r--Objects/sliceobject.c5
7 files changed, 30 insertions, 14 deletions
diff --git a/Doc/library/math.rst b/Doc/library/math.rst
index aba6b0e529..c8090b5afd 100644
--- a/Doc/library/math.rst
+++ b/Doc/library/math.rst
@@ -43,7 +43,7 @@ Number-theoretic and representation functions:
.. function:: factorial(x)
- Return *x* factorial. Raises :exc:`ValueError` if *x* is not intergral or
+ Return *x* factorial. Raises :exc:`ValueError` if *x* is not integral or
is negative.
.. function:: floor(x)
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 73f3eccc6e..645a7ba30f 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -49,7 +49,7 @@ else:
# _listener holds the server object doing the listening
_listener = None
-def fileConfig(fname, defaults=None):
+def fileConfig(fname, defaults=None, disable_existing_loggers=1):
"""
Read the logging configuration from a ConfigParser-format file.
@@ -79,7 +79,7 @@ def fileConfig(fname, defaults=None):
del logging._handlerList[:]
# Handlers add themselves to logging._handlers
handlers = _install_handlers(cp, formatters)
- _install_loggers(cp, handlers)
+ _install_loggers(cp, handlers, disable_existing_loggers)
finally:
logging._releaseLock()
@@ -167,7 +167,7 @@ def _install_handlers(cp, formatters):
return handlers
-def _install_loggers(cp, handlers):
+def _install_loggers(cp, handlers, disable_existing_loggers):
"""Create and install loggers"""
# configure the root first
@@ -252,7 +252,7 @@ def _install_loggers(cp, handlers):
logger.level = logging.NOTSET
logger.handlers = []
logger.propagate = 1
- else:
+ elif disable_existing_loggers:
logger.disabled = 1
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 3f93a38fa4..8a61e21128 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -101,17 +101,17 @@ class HelperFunctionsTests(unittest.TestCase):
self.assert_(usersite in sys.path)
rc = subprocess.call([sys.executable, '-c',
- 'import sys; sys.exit("%s" in sys.path)' % usersite])
+ 'import sys; sys.exit(%r in sys.path)' % usersite])
self.assertEqual(rc, 1)
rc = subprocess.call([sys.executable, '-s', '-c',
- 'import sys; sys.exit("%s" in sys.path)' % usersite])
+ 'import sys; sys.exit(%r in sys.path)' % usersite])
self.assertEqual(rc, 0)
env = os.environ.copy()
env["PYTHONNOUSERSITE"] = "1"
rc = subprocess.call([sys.executable, '-c',
- 'import sys; sys.exit("%s" in sys.path)' % usersite],
+ 'import sys; sys.exit(%r in sys.path)' % usersite],
env=env)
self.assertEqual(rc, 0)
diff --git a/Lib/test/test_slice.py b/Lib/test/test_slice.py
index e61974658c..640c8c0742 100644
--- a/Lib/test/test_slice.py
+++ b/Lib/test/test_slice.py
@@ -82,6 +82,20 @@ class SliceTest(unittest.TestCase):
self.assertEqual(slice(None, None, -1).indices(10), (9, -1, -1))
self.assertEqual(slice(None, None, -2).indices(10), (9, -1, -2))
self.assertEqual(slice(3, None, -2).indices(10), (3, -1, -2))
+ # issue 3004 tests
+ self.assertEqual(slice(None, -9).indices(10), (0, 1, 1))
+ self.assertEqual(slice(None, -10).indices(10), (0, 0, 1))
+ self.assertEqual(slice(None, -11).indices(10), (0, 0, 1))
+ self.assertEqual(slice(None, -10, -1).indices(10), (9, 0, -1))
+ self.assertEqual(slice(None, -11, -1).indices(10), (9, -1, -1))
+ self.assertEqual(slice(None, -12, -1).indices(10), (9, -1, -1))
+ self.assertEqual(slice(None, 9).indices(10), (0, 9, 1))
+ self.assertEqual(slice(None, 10).indices(10), (0, 10, 1))
+ self.assertEqual(slice(None, 11).indices(10), (0, 10, 1))
+ self.assertEqual(slice(None, 8, -1).indices(10), (9, 8, -1))
+ self.assertEqual(slice(None, 9, -1).indices(10), (9, 9, -1))
+ self.assertEqual(slice(None, 10, -1).indices(10), (9, 9, -1))
+
self.assertEqual(
slice(-100, 100 ).indices(10),
slice(None).indices(10)
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 45a0821654..210cb42a69 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -2380,6 +2380,7 @@ PyCurses_QiFlush(PyObject *self, PyObject *args)
/* Internal helper used for updating curses.LINES, curses.COLS, _curses.LINES
* and _curses.COLS */
+#if defined(HAVE_CURSES_RESIZETERM) || defined(HAVE_CURSES_RESIZE_TERM)
static int
update_lines_cols(void)
{
@@ -2424,6 +2425,7 @@ update_lines_cols(void)
Py_DECREF(m);
return 1;
}
+#endif
#ifdef HAVE_CURSES_RESIZETERM
static PyObject *
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index c57b77a8f6..a196834de4 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -382,11 +382,11 @@ FUNC1(tanh, tanh, 0,
sum([1e+308, 1e+308, 1e-308]) raises an OverflowError due to the
overflow of the first partial sum.
- Note 3: The itermediate values lo, yr, and hi are declared volatile so
- aggressive compilers won't algebraicly reduce lo to always be exactly 0.0.
+ Note 3: The intermediate values lo, yr, and hi are declared volatile so
+ aggressive compilers won't algebraically reduce lo to always be exactly 0.0.
Also, the volatile declaration forces the values to be stored in memory as
regular doubles instead of extended long precision (80-bit) values. This
- prevents double rounding because any addition or substraction of two doubles
+ prevents double rounding because any addition or subtraction of two doubles
can be resolved exactly into double-sized hi and lo values. As long as the
hi value gets forced into a double before yr and lo are computed, the extra
bits in downstream extended precision operations (x87 for example) will be
@@ -614,7 +614,6 @@ math_factorial(PyObject *self, PyObject *arg)
error:
Py_DECREF(result);
- Py_XDECREF(iobj);
return NULL;
}
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 69a035d1e5..fbf0955af4 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -169,8 +169,9 @@ PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
else {
if (!_PyEval_SliceIndex(r->stop, stop)) return -1;
if (*stop < 0) *stop += length;
- if (*stop < 0) *stop = -1;
- if (*stop > length) *stop = length;
+ if (*stop < 0) *stop = (*step < 0) ? -1 : 0;
+ if (*stop >= length)
+ *stop = (*step < 0) ? length - 1 : length;
}
if ((*step < 0 && *stop >= *start)