def test_basic_arithmetic(self): assert exprify('x + y', self.dtypes).isidentical(self.x + self.y) other = isnan(sin(x) + y) assert exprify('isnan(sin(x) + y)', self.dtypes).isidentical(other) # parsed as a Num in Python 2 and a UnaryOp in Python 3 assert exprify('-1', {}) == -1 # parsed as UnaryOp(op=USub(), operand=1) assert exprify('-x', self.dtypes).isidentical(-self.x) assert exprify('-x + y', self.dtypes).isidentical(-self.x + self.y) other = self.x * self.y + self.z assert exprify('x * y + z', self.dtypes).isidentical(other) assert exprify('x ** y', self.dtypes).isidentical(self.x ** self.y) other = self.x / self.y / self.z + 1 assert exprify('x / y / z + 1', self.dtypes).isidentical(other) other = self.x / self.y % self.z + 2 ** self.y assert exprify('x / y % z + 2 ** y', self.dtypes).isidentical(other) assert exprify('x // y', self.dtypes).isidentical(self.x // self.y) assert exprify('1 // y // x', self.dtypes).isidentical( 1 // self.y // self.x)
def test_numbers(): x = ScalarSymbol('x', 'real') y = ScalarSymbol('x', 'int') for expr in [x + 1, x - 1, x * 1, x + y, x - y, x / y, x * y + x + y, x**y, x**2, 2**x, x % 5, -x, sin(x), cos(x ** 2), exp(log(y))]: assert expr.dshape == dshape('real') assert eval(str(expr)) == expr assert (-y).dshape == dshape('int')