2015-03-02 07:47:44 -05:00
|
|
|
# test basic complex number functionality
|
|
|
|
|
|
|
|
# constructor
|
|
|
|
print(complex(1))
|
|
|
|
print(complex(1.2))
|
|
|
|
print(complex(1.2j))
|
|
|
|
print(complex("1"))
|
|
|
|
print(complex("1.2"))
|
|
|
|
print(complex("1.2j"))
|
|
|
|
print(complex(1, 2))
|
|
|
|
print(complex(1j, 2j))
|
|
|
|
|
|
|
|
# unary ops
|
|
|
|
print(bool(1j))
|
|
|
|
print(+(1j))
|
2015-03-14 18:56:02 -04:00
|
|
|
print(-(1 + 2j))
|
2015-03-02 07:47:44 -05:00
|
|
|
|
|
|
|
# binary ops
|
2015-03-25 19:10:09 -04:00
|
|
|
print(1j + False)
|
|
|
|
print(1j + True)
|
2015-03-02 07:47:44 -05:00
|
|
|
print(1j + 2)
|
|
|
|
print(1j + 2j)
|
|
|
|
print(1j - 2)
|
|
|
|
print(1j - 2j)
|
|
|
|
print(1j * 2)
|
|
|
|
print(1j * 2j)
|
|
|
|
print(1j / 2)
|
2015-04-04 18:16:22 -04:00
|
|
|
print((1j / 2j).real)
|
2015-03-14 18:56:02 -04:00
|
|
|
print(1j / (1 + 2j))
|
2015-04-04 18:16:22 -04:00
|
|
|
ans = 0j ** 0; print("%.5g %.5g" % (ans.real, ans.imag))
|
2017-02-02 08:04:13 -05:00
|
|
|
ans = 0j ** 1; print("%.5g %.5g" % (ans.real, ans.imag))
|
2015-04-04 18:16:22 -04:00
|
|
|
ans = 0j ** 0j; print("%.5g %.5g" % (ans.real, ans.imag))
|
2015-03-14 18:56:02 -04:00
|
|
|
ans = 1j ** 2.5; print("%.5g %.5g" % (ans.real, ans.imag))
|
|
|
|
ans = 1j ** 2.5j; print("%.5g %.5g" % (ans.real, ans.imag))
|
2015-03-02 12:21:10 -05:00
|
|
|
|
2015-04-04 18:16:22 -04:00
|
|
|
# comparison
|
|
|
|
print(1j == 1)
|
|
|
|
print(1j == 1j)
|
|
|
|
|
2017-09-04 00:16:27 -04:00
|
|
|
# comparison of nan is special
|
|
|
|
nan = float('nan') * 1j
|
|
|
|
print(nan == 1j)
|
|
|
|
print(nan == nan)
|
|
|
|
|
2015-03-02 12:21:10 -05:00
|
|
|
# builtin abs
|
|
|
|
print(abs(1j))
|
2015-03-14 18:56:02 -04:00
|
|
|
print("%.5g" % abs(1j + 2))
|
2015-03-25 19:10:09 -04:00
|
|
|
|
2017-04-03 22:14:34 -04:00
|
|
|
# builtin hash
|
|
|
|
print(hash(1 + 0j))
|
|
|
|
print(type(hash(1j)))
|
|
|
|
|
2015-04-04 17:05:30 -04:00
|
|
|
# float on lhs should delegate to complex
|
|
|
|
print(1.2 + 3j)
|
|
|
|
|
2017-09-25 22:57:51 -04:00
|
|
|
# negative base and fractional power should create a complex
|
|
|
|
ans = (-1) ** 2.3; print("%.5g %.5g" % (ans.real, ans.imag))
|
|
|
|
ans = (-1.2) ** -3.4; print("%.5g %.5g" % (ans.real, ans.imag))
|
|
|
|
|
2015-05-13 15:35:58 -04:00
|
|
|
# check printing of inf/nan
|
|
|
|
print(float('nan') * 1j)
|
2017-10-04 08:15:55 -04:00
|
|
|
print(float('-nan') * 1j)
|
2015-05-13 15:35:58 -04:00
|
|
|
print(float('inf') * (1 + 1j))
|
|
|
|
print(float('-inf') * (1 + 1j))
|
|
|
|
|
2017-01-19 07:37:21 -05:00
|
|
|
# can't assign to attributes
|
|
|
|
try:
|
|
|
|
(1j).imag = 0
|
|
|
|
except AttributeError:
|
|
|
|
print('AttributeError')
|
|
|
|
|
2015-03-25 19:10:09 -04:00
|
|
|
# can't convert rhs to complex
|
|
|
|
try:
|
|
|
|
1j + []
|
|
|
|
except TypeError:
|
|
|
|
print("TypeError")
|
2015-04-04 18:16:22 -04:00
|
|
|
|
|
|
|
# unsupported unary op
|
|
|
|
try:
|
|
|
|
~(1j)
|
|
|
|
except TypeError:
|
|
|
|
print("TypeError")
|
|
|
|
|
|
|
|
# unsupported binary op
|
|
|
|
try:
|
|
|
|
1j // 2
|
|
|
|
except TypeError:
|
|
|
|
print("TypeError")
|
|
|
|
|
|
|
|
# unsupported binary op
|
|
|
|
try:
|
|
|
|
1j < 2j
|
|
|
|
except TypeError:
|
|
|
|
print("TypeError")
|
|
|
|
|
2016-12-20 22:47:02 -05:00
|
|
|
#small int on LHS, complex on RHS, unsupported op
|
|
|
|
try:
|
|
|
|
print(1 | 1j)
|
|
|
|
except TypeError:
|
|
|
|
print('TypeError')
|
|
|
|
|
2015-04-04 18:16:22 -04:00
|
|
|
# zero division
|
|
|
|
try:
|
|
|
|
1j / 0
|
|
|
|
except ZeroDivisionError:
|
|
|
|
print("ZeroDivisionError")
|
|
|
|
|
|
|
|
# zero division via power
|
2017-02-02 08:04:13 -05:00
|
|
|
try:
|
|
|
|
0j ** -1
|
|
|
|
except ZeroDivisionError:
|
|
|
|
print("ZeroDivisionError")
|
2015-04-04 18:16:22 -04:00
|
|
|
try:
|
|
|
|
0j ** 1j
|
|
|
|
except ZeroDivisionError:
|
|
|
|
print("ZeroDivisionError")
|