1edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepimport unittest 2edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom test import test_support 3edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 4edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom random import random 5edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepfrom math import atan2, isnan, copysign 6edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 7edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander StoepINF = float("inf") 8edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander StoepNAN = float("nan") 9edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep# These tests ensure that complex math does the right thing 10edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 11edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepclass ComplexTest(unittest.TestCase): 12edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 13edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def assertAlmostEqual(self, a, b): 14edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if isinstance(a, complex): 15edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if isinstance(b, complex): 16edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, a.real, b.real) 17edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, a.imag, b.imag) 18edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 19edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, a.real, b) 20edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, a.imag, 0.) 21edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 22edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if isinstance(b, complex): 23edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, a, b.real) 24edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, 0., b.imag) 25edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 26edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep unittest.TestCase.assertAlmostEqual(self, a, b) 27edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 28edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def assertCloseAbs(self, x, y, eps=1e-9): 29edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Return true iff floats x and y "are close\"""" 30edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # put the one with larger magnitude second 31edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if abs(x) > abs(y): 32edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x, y = y, x 33edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if y == 0: 34edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return abs(x) < eps 35edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if x == 0: 36edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return abs(y) < eps 37edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # check that relative difference < eps 38edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(abs((x-y)/y) < eps) 39edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 40edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def assertFloatsAreIdentical(self, x, y): 41edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """assert that floats x and y are identical, in the sense that: 42edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (1) both x and y are nans, or 43edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (2) both x and y are infinities, with the same sign, or 44edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (3) both x and y are zeros, with the same sign, or 45edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep (4) x and y are both finite and nonzero, and x == y 46edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 47edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """ 48edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep msg = 'floats {!r} and {!r} are not identical' 49edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 50edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if isnan(x) or isnan(y): 51edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if isnan(x) and isnan(y): 52edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 53edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep elif x == y: 54edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if x != 0.0: 55edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 56edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # both zero; check that signs match 57edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep elif copysign(1.0, x) == copysign(1.0, y): 58edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 59edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 60edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep msg += ': zeros have different signs' 61edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.fail(msg.format(x, y)) 62edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 63edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def assertClose(self, x, y, eps=1e-9): 64edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Return true iff complexes x and y "are close\"""" 65edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertCloseAbs(x.real, y.real, eps) 66edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertCloseAbs(x.imag, y.imag, eps) 67edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 68edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def check_div(self, x, y): 69edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Compute complex z=x*y, and check that z/x==y and z/y==x.""" 70edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = x * y 71edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if x != 0: 72edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep q = z / x 73edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(q, y) 74edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep q = z.__div__(x) 75edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(q, y) 76edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep q = z.__truediv__(x) 77edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(q, y) 78edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if y != 0: 79edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep q = z / y 80edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(q, x) 81edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep q = z.__div__(y) 82edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(q, x) 83edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep q = z.__truediv__(y) 84edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(q, x) 85edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 86edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_div(self): 87edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep simple_real = [float(i) for i in xrange(-5, 6)] 88edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep simple_complex = [complex(x, y) for x in simple_real for y in simple_real] 89edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in simple_complex: 90edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for y in simple_complex: 91edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.check_div(x, y) 92edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 93edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # A naive complex division algorithm (such as in 2.0) is very prone to 94edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # nonsense errors for these (overflows and underflows). 95edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.check_div(complex(1e200, 1e200), 1+0j) 96edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.check_div(complex(1e-200, 1e-200), 1+0j) 97edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 98edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Just for fun. 99edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for i in xrange(100): 100edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.check_div(complex(random(), random()), 101edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep complex(random(), random())) 102edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 103edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ZeroDivisionError, complex.__div__, 1+1j, 0+0j) 104edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # FIXME: The following currently crashes on Alpha 105edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # self.assertRaises(OverflowError, pow, 1e200+1j, 1e200+1j) 106edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 107edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_truediv(self): 108edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex.__truediv__(2+0j, 1+1j), 1-1j) 109edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ZeroDivisionError, complex.__truediv__, 1+1j, 0+0j) 110edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 111edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_floordiv(self): 112edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex.__floordiv__(3+0j, 1.5+0j), 2) 113edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ZeroDivisionError, complex.__floordiv__, 3+0j, 0+0j) 114edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 115edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_coerce(self): 116edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(OverflowError, complex.__coerce__, 1+1j, 1L<<10000) 117edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 118edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_no_implicit_coerce(self): 119edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Python 2.7 removed implicit coercion from the complex type 120edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class A(object): 121edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __coerce__(self, other): 122edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep raise RuntimeError 123edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep __hash__ = None 124edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __cmp__(self, other): 125edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return -1 126edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 127edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a = A() 128edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, lambda: a + 2.0j) 129edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(a < 2.0j) 130edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 131edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_richcompare(self): 132edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex.__eq__(1+1j, 1L<<10000), False) 133edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex.__lt__(1+1j, None), NotImplemented) 134edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(complex.__eq__(1+1j, 1+1j), True) 135edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(complex.__eq__(1+1j, 2+2j), False) 136edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(complex.__ne__(1+1j, 1+1j), False) 137edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(complex.__ne__(1+1j, 2+2j), True) 138edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex.__lt__, 1+1j, 2+2j) 139edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex.__le__, 1+1j, 2+2j) 140edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex.__gt__, 1+1j, 2+2j) 141edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex.__ge__, 1+1j, 2+2j) 142edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 143edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_richcompare_boundaries(self): 144edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def check(n, deltas, is_equal, imag = 0.0): 145edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for delta in deltas: 146edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep i = n + delta 147edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = complex(i, imag) 148edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(complex.__eq__(z, i), is_equal(delta)) 149edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertIs(complex.__ne__(z, i), not is_equal(delta)) 150edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # For IEEE-754 doubles the following should hold: 151edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # x in [2 ** (52 + i), 2 ** (53 + i + 1)] -> x mod 2 ** i == 0 152edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # where the interval is representable, of course. 153edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for i in range(1, 10): 154edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pow = 52 + i 155edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep mult = 2 ** i 156edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep check(2 ** pow, range(1, 101), lambda delta: delta % mult == 0) 157edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep check(2 ** pow, range(1, 101), lambda delta: False, float(i)) 158edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep check(2 ** 53, range(-100, 0), lambda delta: True) 159edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 160edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_mod(self): 161edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ZeroDivisionError, (1+1j).__mod__, 0+0j) 162edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 163edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a = 3.33+4.43j 164edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 165edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a % 0 166edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep except ZeroDivisionError: 167edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 168edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 169edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.fail("modulo parama can't be 0") 170edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 171edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_divmod(self): 172edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ZeroDivisionError, divmod, 1+1j, 0+0j) 173edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 174edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_pow(self): 175edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(pow(1+1j, 0+0j), 1.0) 176edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(pow(0+0j, 2+0j), 0.0) 177edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ZeroDivisionError, pow, 0+0j, 1j) 178edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(pow(1j, -1), 1/1j) 179edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(pow(1j, 200), 1) 180edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, pow, 1+1j, 1+1j, 1+1j) 181edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 182edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a = 3.33+4.43j 183edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(a ** 0j, 1) 184edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(a ** 0.+0.j, 1) 185edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 186edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(3j ** 0j, 1) 187edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(3j ** 0, 1) 188edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 189edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 190edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 0j ** a 191edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep except ZeroDivisionError: 192edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 193edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 194edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.fail("should fail 0.0 to negative or complex power") 195edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 196edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 197edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 0j ** (3-2j) 198edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep except ZeroDivisionError: 199edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 200edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep else: 201edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.fail("should fail 0.0 to negative or complex power") 202edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 203edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # The following is used to exercise certain code paths 204edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(a ** 105, a ** 105) 205edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(a ** -105, a ** -105) 206edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(a ** -30, a ** -30) 207edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 208edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(0.0j ** 0, 1) 209edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 210edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep b = 5.1+2.3j 211edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, pow, a, b, 0) 212edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 213edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_boolcontext(self): 214edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for i in xrange(100): 215edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(complex(random() + 1e-6, random() + 1e-6)) 216edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(not complex(0.0, 0.0)) 217edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 218edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_conjugate(self): 219edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertClose(complex(5.3, 9.8).conjugate(), 5.3-9.8j) 220edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 221edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_constructor(self): 222edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class OS: 223edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __init__(self, value): self.value = value 224edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __complex__(self): return self.value 225edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class NS(object): 226edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __init__(self, value): self.value = value 227edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __complex__(self): return self.value 228edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex(OS(1+10j)), 1+10j) 229edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex(NS(1+10j)), 1+10j) 230edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, OS(None)) 231edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, NS(None)) 232edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 233edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("1+10j"), 1+10j) 234edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(10), 10+0j) 235edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(10.0), 10+0j) 236edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(10L), 10+0j) 237edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(10+0j), 10+0j) 238edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1,10), 1+10j) 239edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1,10L), 1+10j) 240edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1,10.0), 1+10j) 241edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1L,10), 1+10j) 242edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1L,10L), 1+10j) 243edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1L,10.0), 1+10j) 244edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1.0,10), 1+10j) 245edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1.0,10L), 1+10j) 246edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(1.0,10.0), 1+10j) 247edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(3.14+0j), 3.14+0j) 248edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(3.14), 3.14+0j) 249edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(314), 314.0+0j) 250edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(314L), 314.0+0j) 251edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(3.14+0j, 0j), 3.14+0j) 252edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(3.14, 0.0), 3.14+0j) 253edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(314, 0), 314.0+0j) 254edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(314L, 0L), 314.0+0j) 255edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(0j, 3.14j), -3.14+0j) 256edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(0.0, 3.14j), -3.14+0j) 257edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(0j, 3.14), 3.14j) 258edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(0.0, 3.14), 3.14j) 259edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("1"), 1+0j) 260edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("1j"), 1j) 261edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(), 0) 262edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("-1"), -1) 263edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("+1"), +1) 264edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("(1+2j)"), 1+2j) 265edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("(1.3+2.2j)"), 1.3+2.2j) 266edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("3.14+1J"), 3.14+1j) 267edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(" ( +3.14-6J )"), 3.14-6j) 268edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(" ( +3.14-J )"), 3.14-1j) 269edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(" ( +3.14+j )"), 3.14+1j) 270edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("J"), 1j) 271edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("( j )"), 1j) 272edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("+J"), 1j) 273edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex("( -j)"), -1j) 274edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex('1e-500'), 0.0 + 0.0j) 275edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex('-1e-500j'), 0.0 - 0.0j) 276edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex('-1e-500+1e-500j'), -0.0 + 0.0j) 277edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 278edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class complex2(complex): pass 279edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(complex2(1+1j)), 1+1j) 280edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(real=17, imag=23), 17+23j) 281edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(real=17+23j), 17+23j) 282edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(real=17+23j, imag=23), 17+46j) 283edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(real=1+2j, imag=3+4j), -3+5j) 284edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 285edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # check that the sign of a zero in the real or imaginary part 286edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # is preserved when constructing from two floats. (These checks 287edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # are harmless on systems without support for signed zeros.) 288edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def split_zeros(x): 289edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Function that produces different results for 0. and -0.""" 290edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return atan2(x, -1.) 291edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 292edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(split_zeros(complex(1., 0.).imag), split_zeros(0.)) 293edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(split_zeros(complex(1., -0.).imag), split_zeros(-0.)) 294edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(split_zeros(complex(0., 1.).real), split_zeros(0.)) 295edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(split_zeros(complex(-0., 1.).real), split_zeros(-0.)) 296edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 297edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep c = 3.14 + 1j 298edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(complex(c) is c) 299edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep del c 300edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 301edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, "1", "1") 302edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, 1, "1") 303edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 304edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if test_support.have_unicode: 305edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex(unicode(" 3.14+J ")), 3.14+1j) 306edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 307edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # SF bug 543840: complex(string) accepts strings with \0 308edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # Fixed in 2.3. 309edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, '1+1j\0j') 310edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 311edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, int, 5+3j) 312edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, long, 5+3j) 313edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, float, 5+3j) 314edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "") 315edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, None) 316edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "\0") 317edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "3\09") 318edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, "1", "2") 319edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, "1", 42) 320edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, 1, "2") 321edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1+") 322edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1+1j+1j") 323edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "--") 324edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "(1+2j") 325edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1+2j)") 326edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1+(2j)") 327edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "(1+2j)123") 328edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if test_support.have_unicode: 329edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, unicode("x")) 330edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1j+2") 331edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1e1ej") 332edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1e++1ej") 333edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, ")1+2j(") 334edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # the following three are accepted by Python 2.6 335edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1..1j") 336edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1.11.1j") 337edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, complex, "1e1.1j") 338edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 339edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if test_support.have_unicode: 340edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # check that complex accepts long unicode strings 341edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(type(complex(unicode("1"*500))), complex) 342edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 343edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class EvilExc(Exception): 344edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep pass 345edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 346edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class evilcomplex: 347edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __complex__(self): 348edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep raise EvilExc 349edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 350edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(EvilExc, complex, evilcomplex()) 351edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 352edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class float2: 353edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __init__(self, value): 354edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.value = value 355edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __float__(self): 356edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return self.value 357edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 358edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(float2(42.)), 42) 359edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(real=float2(17.), imag=float2(23.)), 17+23j) 360edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, float2(None)) 361edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 362edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class complex0(complex): 363edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Test usage of __complex__() when inheriting from 'complex'""" 364edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __complex__(self): 365edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return 42j 366edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 367edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class complex1(complex): 368edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Test usage of __complex__() with a __new__() method""" 369edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __new__(self, value=0j): 370edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return complex.__new__(self, 2*value) 371edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __complex__(self): 372edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return self 373edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 374edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class complex2(complex): 375edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep """Make sure that __complex__() calls fail if anything other than a 376edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep complex is returned""" 377edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __complex__(self): 378edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return None 379edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 380edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(complex0(1j)), 42j) 381edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual(complex(complex1(1j)), 2j) 382edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(TypeError, complex, complex2(1j)) 383edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 384edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_subclass(self): 385edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep class xcomplex(complex): 386edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __add__(self,other): 387edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) + other) 388edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep __radd__ = __add__ 389edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 390edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __sub__(self,other): 391edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) + other) 392edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep __rsub__ = __sub__ 393edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 394edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __mul__(self,other): 395edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) * other) 396edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep __rmul__ = __mul__ 397edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 398edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __div__(self,other): 399edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) / other) 400edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 401edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __rdiv__(self,other): 402edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(other / complex(self)) 403edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 404edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep __truediv__ = __div__ 405edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep __rtruediv__ = __rdiv__ 406edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 407edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __floordiv__(self,other): 408edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) // other) 409edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 410edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __rfloordiv__(self,other): 411edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(other // complex(self)) 412edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 413edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __pow__(self,other): 414edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) ** other) 415edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 416edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __rpow__(self,other): 417edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(other ** complex(self) ) 418edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 419edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __mod__(self,other): 420edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(complex(self) % other) 421edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 422edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def __rmod__(self,other): 423edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep return xcomplex(other % complex(self)) 424edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 425edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep infix_binops = ('+', '-', '*', '**', '%', '//', '/') 426edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep xcomplex_values = (xcomplex(1), xcomplex(123.0), 427edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep xcomplex(-10+2j), xcomplex(3+187j), 428edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep xcomplex(3-78j)) 429edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep test_values = (1, 123.0, 10-19j, xcomplex(1+2j), 430edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep xcomplex(1+87j), xcomplex(10+90j)) 431edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 432edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for op in infix_binops: 433edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in xcomplex_values: 434edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for y in test_values: 435edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a = 'x %s y' % op 436edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep b = 'y %s x' % op 437edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertTrue(type(eval(a)) is type(eval(b)) is xcomplex) 438edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 439edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_hash(self): 440edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in xrange(-30, 30): 441edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(hash(x), hash(complex(x, 0))) 442edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep x /= 3.0 # now check against floating point 443edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(hash(x), hash(complex(x, 0.))) 444edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 445edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_abs(self): 446edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep nums = [complex(x/3., y/7.) for x in xrange(-9,9) for y in xrange(-9,9)] 447edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for num in nums: 448edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertAlmostEqual((num.real**2 + num.imag**2) ** 0.5, abs(num)) 449edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 450edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_repr(self): 451edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(1+6j), '(1+6j)') 452edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(1-6j), '(1-6j)') 453edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 454edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertNotEqual(repr(-(1+0j)), '(-1+-0j)') 455edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 456edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(1-6j,complex(repr(1-6j))) 457edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(1+6j,complex(repr(1+6j))) 458edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(-6j,complex(repr(-6j))) 459edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(6j,complex(repr(6j))) 460edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 461edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(1., INF)), "(1+infj)") 462edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(1., -INF)), "(1-infj)") 463edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(INF, 1)), "(inf+1j)") 464edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(-INF, INF)), "(-inf+infj)") 465edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(NAN, 1)), "(nan+1j)") 466edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(1, NAN)), "(1+nanj)") 467edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(NAN, NAN)), "(nan+nanj)") 468edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 469edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(0, INF)), "infj") 470edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(0, -INF)), "-infj") 471edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(repr(complex(0, NAN)), "nanj") 472edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 473edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_neg(self): 474edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(-(1+6j), -1-6j) 475edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 476edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_file(self): 477edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep a = 3.33+4.43j 478edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep b = 5.1+2.3j 479edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 480edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep fo = None 481edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep try: 482edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep fo = open(test_support.TESTFN, "wb") 483edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep print >>fo, a, b 484edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep fo.close() 485edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep fo = open(test_support.TESTFN, "rb") 486edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(fo.read(), "%s %s\n" % (a, b)) 487edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep finally: 488edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if (fo is not None) and (not fo.closed): 489edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep fo.close() 490edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep test_support.unlink(test_support.TESTFN) 491edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 492edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_getnewargs(self): 493edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((1+2j).__getnewargs__(), (1.0, 2.0)) 494edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((1-2j).__getnewargs__(), (1.0, -2.0)) 495edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((2j).__getnewargs__(), (0.0, 2.0)) 496edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual((-0j).__getnewargs__(), (0.0, -0.0)) 497edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex(0, INF).__getnewargs__(), (0.0, INF)) 498edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex(INF, 0).__getnewargs__(), (INF, 0.0)) 499edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 500edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep if float.__getformat__("double").startswith("IEEE"): 501edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_plus_minus_0j(self): 502edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # test that -0j and 0j literals are not identified 503edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z1, z2 = 0j, -0j 504edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(atan2(z1.imag, -1.), atan2(0., -1.)) 505edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(atan2(z2.imag, -1.), atan2(-0., -1.)) 506edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 507edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), 508edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep "test requires IEEE 754 doubles") 509edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_overflow(self): 510edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex("1e500"), complex(INF, 0.0)) 511edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex("-1e500j"), complex(0.0, -INF)) 512edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(complex("-1e500+1.8e308j"), complex(-INF, INF)) 513edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 514edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), 515edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep "test requires IEEE 754 doubles") 516edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_repr_roundtrip(self): 517edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep vals = [0.0, 1e-500, 1e-315, 1e-200, 0.0123, 3.1415, 1e50, INF, NAN] 518edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep vals += [-v for v in vals] 519edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 520edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # complex(repr(z)) should recover z exactly, even for complex 521edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # numbers involving an infinity, nan, or negative zero 522edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in vals: 523edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for y in vals: 524edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = complex(x, y) 525edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep roundtrip = complex(repr(z)) 526edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertFloatsAreIdentical(z.real, roundtrip.real) 527edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertFloatsAreIdentical(z.imag, roundtrip.imag) 528edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 529edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # if we predefine some constants, then eval(repr(z)) should 530edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # also work, except that it might change the sign of zeros 531edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep inf, nan = float('inf'), float('nan') 532edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep infj, nanj = complex(0.0, inf), complex(0.0, nan) 533edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for x in vals: 534edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for y in vals: 535edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = complex(x, y) 536edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep roundtrip = eval(repr(z)) 537edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # adding 0.0 has no effect beside changing -0.0 to 0.0 538edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertFloatsAreIdentical(0.0 + z.real, 539edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 0.0 + roundtrip.real) 540edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertFloatsAreIdentical(0.0 + z.imag, 541edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 0.0 + roundtrip.imag) 542edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 543edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep def test_format(self): 544edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # empty format string is same as str() 545edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1+3j, ''), str(1+3j)) 546edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3.5j, ''), str(1.5+3.5j)) 547edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3j, ''), str(3j)) 548edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3.2j, ''), str(3.2j)) 549edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3+0j, ''), str(3+0j)) 550edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3.2+0j, ''), str(3.2+0j)) 551edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 552edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # empty presentation type should still be analogous to str, 553edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # even when format string is nonempty (issue #5920). 554edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3.2+0j, '-'), str(3.2+0j)) 555edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3.2+0j, '<'), str(3.2+0j)) 556edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = 4/7. - 100j/7. 557edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, ''), str(z)) 558edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '-'), str(z)) 559edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '<'), str(z)) 560edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '10'), str(z)) 561edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = complex(0.0, 3.0) 562edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, ''), str(z)) 563edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '-'), str(z)) 564edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '<'), str(z)) 565edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '2'), str(z)) 566edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep z = complex(-0.0, 2.0) 567edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, ''), str(z)) 568edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '-'), str(z)) 569edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '<'), str(z)) 570edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(z, '3'), str(z)) 571edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 572edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1+3j, 'g'), '1+3j') 573edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(3j, 'g'), '0+3j') 574edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3.5j, 'g'), '1.5+3.5j') 575edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 576edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3.5j, '+g'), '+1.5+3.5j') 577edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5-3.5j, '+g'), '+1.5-3.5j') 578edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5-3.5j, '-g'), '1.5-3.5j') 579edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3.5j, ' g'), ' 1.5+3.5j') 580edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5-3.5j, ' g'), ' 1.5-3.5j') 581edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5+3.5j, ' g'), '-1.5+3.5j') 582edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5j, ' g'), '-1.5-3.5j') 583edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 584edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5e-20j, 'g'), '-1.5-3.5e-20j') 585edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5j, 'f'), '-1.500000-3.500000j') 586edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5j, 'F'), '-1.500000-3.500000j') 587edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5j, 'e'), '-1.500000e+00-3.500000e+00j') 588edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5j, '.2e'), '-1.50e+00-3.50e+00j') 589edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5-3.5j, '.2E'), '-1.50E+00-3.50E+00j') 590edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(-1.5e10-3.5e5j, '.2G'), '-1.5E+10-3.5E+05j') 591edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 592edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '<20g'), '1.5+3j ') 593edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '*<20g'), '1.5+3j**************') 594edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '>20g'), ' 1.5+3j') 595edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '^20g'), ' 1.5+3j ') 596edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '<20'), '(1.5+3j) ') 597edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '>20'), ' (1.5+3j)') 598edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '^20'), ' (1.5+3j) ') 599edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.123-3.123j, '^20.2'), ' (1.1-3.1j) ') 600edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 601edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '20.2f'), ' 1.50+3.00j') 602edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '>20.2f'), ' 1.50+3.00j') 603edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5+3j, '<20.2f'), '1.50+3.00j ') 604edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5e20+3j, '<20.2f'), '150000000000000000000.00+3.00j') 605edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5e20+3j, '>40.2f'), ' 150000000000000000000.00+3.00j') 606edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5e20+3j, '^40,.2f'), ' 150,000,000,000,000,000,000.00+3.00j ') 607edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5e21+3j, '^40,.2f'), ' 1,500,000,000,000,000,000,000.00+3.00j ') 608edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual(format(1.5e21+3000j, ',.2f'), '1,500,000,000,000,000,000,000.00+3,000.00j') 609edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 610edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # alternate is invalid 611edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, (1.5+0.5j).__format__, '#f') 612edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 613edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # zero padding is invalid 614edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, (1.5+0.5j).__format__, '010f') 615edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 616edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # '=' alignment is invalid 617edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, (1.5+3j).__format__, '=20') 618edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 619edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # integer presentation types are an error 620edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep for t in 'bcdoxX': 621edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertRaises(ValueError, (1.5+0.5j).__format__, t) 622edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 623edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # make sure everything works in ''.format() 624edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('*{0:.3f}*'.format(3.14159+2.71828j), '*3.142+2.718j*') 625edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 626edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep # issue 3382: 'f' and 'F' with inf's and nan's 627edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(INF+0j), 'inf+0.000000j') 628edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(INF+0j), 'INF+0.000000j') 629edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(-INF+0j), '-inf+0.000000j') 630edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(-INF+0j), '-INF+0.000000j') 631edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(complex(INF, INF)), 'inf+infj') 632edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(complex(INF, INF)), 'INF+INFj') 633edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(complex(INF, -INF)), 'inf-infj') 634edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(complex(INF, -INF)), 'INF-INFj') 635edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(complex(-INF, INF)), '-inf+infj') 636edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(complex(-INF, INF)), '-INF+INFj') 637edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(complex(-INF, -INF)), '-inf-infj') 638edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(complex(-INF, -INF)), '-INF-INFj') 639edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 640edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(complex(NAN, 0)), 'nan+0.000000j') 641edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(complex(NAN, 0)), 'NAN+0.000000j') 642edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:f}'.format(complex(NAN, NAN)), 'nan+nanj') 643edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep self.assertEqual('{0:F}'.format(complex(NAN, NAN)), 'NAN+NANj') 644edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 645edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepdef test_main(): 646edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep with test_support.check_warnings(("complex divmod.., // and % are " 647edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep "deprecated", DeprecationWarning)): 648edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep test_support.run_unittest(ComplexTest) 649edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep 650edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoepif __name__ == "__main__": 651edbb763a2b63074cd468a5d33a17908b2cc0654Jeff Vander Stoep test_main() 652