From 26c25d9f64cce575820f1d1f13c757020829888d Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Tue, 25 Mar 2008 14:35:25 +0000 Subject: Decimal.sqrt(0) failed when the context was not explicitly supplied. --- Lib/decimal.py | 6 +++--- Lib/test/test_decimal.py | 6 ++++++ Misc/NEWS | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/decimal.py b/Lib/decimal.py index ebeb6d7..8b3e252 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -2316,6 +2316,9 @@ class Decimal(object): def sqrt(self, context=None): """Return the square root of self.""" + if context is None: + context = getcontext() + if self._is_special: ans = self._check_nans(context=context) if ans: @@ -2329,9 +2332,6 @@ class Decimal(object): ans = _dec_from_triple(self._sign, '0', self._exp // 2) return ans._fix(context) - if context is None: - context = getcontext() - if self._sign == 1: return context._raise_error(InvalidOperation, 'sqrt(-x), x > 0') diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 34fc34a..efaa174 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -1192,6 +1192,12 @@ class DecimalUsabilityTest(unittest.TestCase): d = d1.max(d2) self.assertTrue(type(d) is Decimal) + def test_implicit_context(self): + # Check results when context given implicitly. (Issue 2478) + c = getcontext() + self.assertEqual(str(Decimal(0).sqrt()), + str(c.sqrt(Decimal(0)))) + class DecimalPythonAPItests(unittest.TestCase): diff --git a/Misc/NEWS b/Misc/NEWS index 3e95a44..39b32cf 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -27,6 +27,8 @@ Core and builtins Library ------- +- Issue #2478: fix failure of decimal.Decimal(0).sqrt() + - Issue #2432: give DictReader the dialect and line_num attributes advertised in the docs. -- cgit v0.12