コード例 #1
0
ファイル: frontend.py プロジェクト: thomascong121/NCRF
    def build_Compare(ctx, expr):
        operands = [
            build_expr(ctx, e) for e in [expr.left] + list(expr.comparators)
        ]
        result = None
        for lhs, op_, rhs in zip(operands, expr.ops, operands[1:]):
            op = type(op_)
            op_token = ExprBuilder.cmpop_map.get(op)
            r = ctx.make_raw_range(lhs.range().end, rhs.range().start)
            if op_token is None:
                raise NotSupportedError(
                    r, "unsupported comparison operator: " + op.__name__)

            if op == ast.NotIn:
                # NB: `not in` is just `not( in )`, so we don't introduce new tree view
                # but just make it a nested call in our tree view structure
                in_expr = BinOp('in', lhs, rhs)
                cmp_expr = UnaryOp(r, 'not', in_expr)
            else:
                cmp_expr = BinOp(op_token, lhs, rhs)

            if result is None:
                result = cmp_expr
            else:
                result = BinOp('and', result, cmp_expr)
        return result
コード例 #2
0
ファイル: frontend.py プロジェクト: awthomp/pytorch-dev
 def build_BoolOp(ctx, expr):
     if len(expr.values) < 2:
         raise AssertionError("expected at least 2 values in BoolOp, but got " + str(len(expr.values)))
     sub_exprs = [build_expr(ctx, sub_expr) for sub_expr in expr.values]
     op = type(expr.op)
     op_token = ExprBuilder.boolop_map.get(op)
     if op_token is None:
         err_range = ctx.make_raw_range(sub_exprs[0].range().end, sub_exprs[1].range().start)
         raise NotSupportedError(err_range, "unsupported boolean operator: " + op.__name__)
     lhs = sub_exprs[0]
     for rhs in sub_exprs[1:]:
         lhs = BinOp(op_token, lhs, rhs)
     return lhs
コード例 #3
0
ファイル: frontend.py プロジェクト: awthomp/pytorch-dev
    def build_BinOp(ctx, expr):
        lhs = build_expr(ctx, expr.left)
        rhs = build_expr(ctx, expr.right)
        op = type(expr.op)

        if op == ast.Div and not ctx.uses_true_division:
            err_range = ctx.make_raw_range(lhs.range().end, rhs.range().start)
            raise FrontendError(err_range, 'Division of ints in TorchScript uses Python 3 true '
                                'division semantics. Please put `from __future__ '
                                'import division` at the top of your file')
        op_token = ExprBuilder.binop_map.get(op)
        if op_token is None:
            err_range = ctx.make_raw_range(lhs.range().end, rhs.range().start)
            raise NotSupportedError(err_range, "unsupported binary operator: " + op.__name__)
        return BinOp(op_token, lhs, rhs)