def _number(expr, assumptions): # helper method try: i = int(round(expr)) if not (expr - i).equals(0): raise TypeError return True except TypeError: return False
def test_round(): from sympy.abc import x assert round(Float('0.1249999'), 2) == 0.12 d20 = 12345678901234567890 ans = round(S(d20), 2) assert ans.is_Float and ans == d20 ans = round(S(d20), -2) assert ans.is_Float and ans == 12345678901234567900 assert round(S('1/7'), 4) == 0.1429 assert round(S('.[12345]'), 4) == 0.1235 assert round(S('.1349'), 2) == 0.13 n = S(12345) ans = round(n) assert ans.is_Float assert ans == n ans = round(n, 1) assert ans.is_Float assert ans == n ans = round(n, 4) assert ans.is_Float assert ans == n assert round(n, -1) == 12350 r = round(n, -4) assert r == 10000 # in fact, it should equal many values since __eq__ # compares at equal precision assert all(r == i for i in range(9984, 10049)) assert round(n, -5) == 0 assert round(pi + sqrt(2), 2) == 4.56 assert round(10*(pi + sqrt(2)), -1) == 50 raises(TypeError, 'round(x + 2, 2)') assert round(S(2.3), 1) == 2.3 e = round(12.345, 2) assert e == _pyround(12.345, 2) assert type(e) is float assert round(Float(.3, 3) + 2*pi) == 7 assert round(Float(.3, 3) + 2*pi*100) == 629 assert round(Float(.03, 3) + 2*pi/100, 5) == 0.09283 assert round(Float(.03, 3) + 2*pi/100, 4) == 0.0928 assert round(S.Zero) == 0 a = (Add(1, Float('1.'+'9'*27, ''), evaluate=0)) assert round(a, 10) == Float('3.0000000000','') assert round(a, 25) == Float('3.0000000000000000000000000','') assert round(a, 26) == Float('3.00000000000000000000000000','') assert round(a, 27) == Float('2.999999999999999999999999999','') assert round(a, 30) == Float('2.999999999999999999999999999','') raises(TypeError, 'round(x)') raises(TypeError, 'round(1 + 3*I)') # exact magnitude of 10 assert str(round(S(1))) == '1.' assert str(round(S(100))) == '100.'
def test_round(): from sympy.abc import x assert round(Float('0.1249999'), 2) == 0.12 d20 = 12345678901234567890 ans = round(S(d20), 2) assert ans.is_Float and ans == d20 ans = round(S(d20), -2) assert ans.is_Float and ans == 12345678901234567900 assert round(S('1/7'), 4) == 0.1429 assert round(S('.[12345]'), 4) == 0.1235 assert round(S('.1349'), 2) == 0.13 n = S(12345) ans = round(n) assert ans.is_Float assert ans == n ans = round(n, 1) assert ans.is_Float assert ans == n ans = round(n, 4) assert ans.is_Float assert ans == n assert round(n, -1) == 12350 r = round(n, -4) assert r == 10000 # in fact, it should equal many values since __eq__ # compares at equal precision assert all(r == i for i in range(9984, 10049)) assert round(n, -5) == 0 assert round(pi + sqrt(2), 2) == 4.56 assert round(10*(pi + sqrt(2)), -1) == 50 assert round(x + 2, 2) == x + 2 assert round(S(2.3), 1) == 2.3 e = round(12.345, 2) assert e == _pyround(12.345, 2) assert type(e) is float assert round(Float(.3, 3) + 2*pi) == 7 assert round(Float(.3, 3) + 2*pi*100) == 629 assert round(Float(.03, 3) + 2*pi/100, 5) == 0.09283 assert round(Float(.03, 3) + 2*pi/100, 4) == 0.0928