def test_pow(x, y): expr = expression.OpExpression(expression.OptionalArgOps.POW_2, 2, x, y, None) assert codegen.compile(expr)() == x**y expr = expression.OpExpression(expression.OptionalArgOps.POW_3, 3, x, y, 1024) assert codegen.compile(expr)() == pow(x, y, 1024)
def test_round(x, n): expr = expression.OpExpression(expression.OptionalArgOps.ROUND_1, 1, x, None, None) assert codegen.compile(expr)() == round(x) expr = expression.OpExpression(expression.OptionalArgOps.ROUND_2, 2, x, n, None) assert codegen.compile(expr)() == round(x, n)
def __round__(self, ndigits=None): if ndigits is None: return LambdaDSL( expression.OpExpression(expression.OptionalArgOps.ROUND_1, 1, get_expr(self), None, None)) return LambdaDSL( expression.OpExpression(expression.OptionalArgOps.ROUND_2, 2, get_expr(self), get_expr(ndigits), None))
def __pow__(self, other, modulo=None): if modulo is None: return LambdaDSL( expression.OpExpression(expression.OptionalArgOps.POW_2, 2, get_expr(self), get_expr(other), None)) return LambdaDSL( expression.OpExpression(expression.OptionalArgOps.POW_3, 3, get_expr(self), get_expr(other), get_expr(modulo)))
def test_exprs(op, x: int, y: int): expr = expression.OpExpression(op, op.value.num_args, x, y, None) elambda = interpret.to_lambda(expr) hypothesis.assume(not capture_exception(elambda)) clambda = codegen.compile(expr) hypothesis.note(clambda.code) assert elambda() == clambda()
def __ceil__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.CEIL, 1, get_expr(self), None, None))
def __floor__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.FLOOR, 1, get_expr(self), None, None))
def __truediv__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.TRUEDIV, 2, get_expr(self), get_expr(arg0), None))
def __sub__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.SUB, 2, get_expr(self), get_expr(arg0), None))
def logical_or(expr1, expr2, *exprs): if not exprs: return LambdaDSL( expression.OpExpression(expression.SpecialOps.LOGICAL_OR, 2, get_expr(expr1), get_expr(expr2), None)) return logical_or(expr1, logical_or(expr2, *exprs))
def __pos__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.POSITIVE, 1, get_expr(self), None, None))
def __ne__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ComparisonOps.NE, 2, get_expr(self), get_expr(arg0), None))
def __rxor__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.RXOR, 2, get_expr(self), get_expr(arg0), None))
def __rrshift__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.RRSHIFT, 2, get_expr(self), get_expr(arg0), None))
def __rdivmod__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.RDIVMOD, 2, get_expr(self), get_expr(arg0), None))
def not_contains(container, item): return LambdaDSL( expression.OpExpression(expression.SpecialOps.NOT_CONTAINS, 2, get_expr(container), get_expr(item), None))
def __neg__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.NEGATIVE, 1, get_expr(self), None, None))
def logical_not(expr): return LambdaDSL( expression.OpExpression(expression.SpecialOps.LOGICAL_NOT, 1, get_expr(expr), None, None))
def __abs__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.ABS, 1, get_expr(self), None, None))
def __matmul__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.MATMUL, 2, get_expr(self), get_expr(arg0), None))
def __invert__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.INVERT, 1, get_expr(self), None, None))
def __floordiv__(self, arg0): return LambdaDSL( expression.OpExpression(expression.ArithmeticOps.FLOORDIV, 2, get_expr(self), get_expr(arg0), None))
def __trunc__(self, ): return LambdaDSL( expression.OpExpression(expression.UnaryOps.TRUNC, 1, get_expr(self), None, None))