示例#1
0
文件: rules.py 项目: chris-b1/ibis
 def _get_type(self):
     if util.any_of(self.args, ir.FloatingValue):
         if util.any_of(self.args, ir.DoubleValue):
             return 'double'
         else:
             return 'float'
     elif util.all_of(self.args, ir.IntegerValue):
         return self._get_int_type()
     elif util.any_of(self.args, ir.DecimalValue):
         return _decimal_promoted_type(self.args)
     else:
         raise NotImplementedError
示例#2
0
文件: rules.py 项目: zuxfoucault/ibis
 def _get_type(self):
     if util.any_of(self.args, ir.FloatingValue):
         if util.any_of(self.args, ir.DoubleValue):
             return 'double'
         else:
             return 'float'
     elif util.all_of(self.args, ir.IntegerValue):
         return self._get_int_type()
     elif util.any_of(self.args, ir.DecimalValue):
         return _decimal_promoted_type(self.args)
     else:
         raise NotImplementedError
示例#3
0
 def _get_type(self):
     if util.any_of(self.args, ir.FloatingValue):
         if util.any_of(self.args, ir.DoubleValue):
             return 'double'
         else:
             return 'float'
     elif util.any_of(self.args, ir.DecimalValue):
         return _decimal_promoted_type(self.args)
     elif util.all_of(self.args, ir.IntegerValue):
         return 'double'
     else:
         raise NotImplementedError(
             'Operands {}, {} not supported for binary operation {}'.format(
                 type(self.left).__name__,
                 type(self.right).__name__, self.op.__name__))
示例#4
0
文件: rules.py 项目: chris-b1/ibis
    def _get_type(self):
        rval = self.args[1].op()

        if util.any_of(self.args, ir.FloatingValue):
            if util.any_of(self.args, ir.DoubleValue):
                return 'double'
            else:
                return 'float'
        elif util.any_of(self.args, ir.DecimalValue):
            return _decimal_promoted_type(self.args)
        elif isinstance(rval, ir.Literal) and rval.value < 0:
            return 'double'
        elif util.all_of(self.args, ir.IntegerValue):
            return self._get_int_type()
        else:
            raise NotImplementedError
示例#5
0
文件: rules.py 项目: zuxfoucault/ibis
    def _get_type(self):
        rval = self.args[1].op()

        if util.any_of(self.args, ir.FloatingValue):
            if util.any_of(self.args, ir.DoubleValue):
                return 'double'
            else:
                return 'float'
        elif util.any_of(self.args, ir.DecimalValue):
            return _decimal_promoted_type(self.args)
        elif isinstance(rval, ir.Literal) and rval.value < 0:
            return 'double'
        elif util.all_of(self.args, ir.IntegerValue):
            return self._get_int_type()
        else:
            raise NotImplementedError
示例#6
0
def _floor_divide(t, expr):
    op = expr.op()
    left, right = op.args

    if util.any_of(op.args, ir.FloatingValue):
        new_expr = expr.floor()
        return t.translate(new_expr)

    return fixed_arity(lambda x, y: x / y, 2)(t, expr)
示例#7
0
文件: alchemy.py 项目: obswork/ibis
def _floor_divide(t, expr):
    op = expr.op()
    left, right = op.args

    if util.any_of(op.args, ir.FloatingValue):
        new_expr = expr.floor()
        return t.translate(new_expr)

    return fixed_arity(lambda x, y: x / y, 2)(t, expr)
示例#8
0
def shape_like(arg, dtype=None):
    if util.is_iterable(arg):
        datatype = dtype or highest_precedence_dtype(arg)
        columnar = util.any_of(arg, ir.AnyColumn)
    else:
        datatype = dtype or arg.type()
        columnar = isinstance(arg, ir.AnyColumn)

    dtype = dt.dtype(datatype)

    if columnar:
        return dtype.column_type()
    else:
        return dtype.scalar_type()
示例#9
0
文件: rules.py 项目: cloudera/ibis
def shape_like(arg, dtype=None):
    if isinstance(arg, (tuple, list, ir.ListExpr)):
        datatype = dtype or highest_precedence_dtype(arg)
        columnar = util.any_of(arg, ir.AnyColumn)
    else:
        datatype = dtype or arg.type()
        columnar = isinstance(arg, ir.AnyColumn)

    dtype = dt.dtype(datatype)

    if columnar:
        return dtype.column_type()
    else:
        return dtype.scalar_type()
示例#10
0
def shape_like(arg, dtype=None):
    if isinstance(arg, (tuple, list, ir.ListExpr)):
        datatype = dtype or highest_precedence_dtype(arg)
        columnar = util.any_of(arg, ir.AnyColumn)
    else:
        datatype = dtype or arg.type()
        columnar = isinstance(arg, ir.AnyColumn)

    dtype = dt.dtype(datatype)

    if columnar:
        return dtype.column_type()
    else:
        return dtype.scalar_type()
示例#11
0
文件: rules.py 项目: cpcloud/ibis
    def _get_int_type(self):
        deps = [x.op() for x in self.args]

        if util.all_of(deps, ir.Literal):
            return _smallest_int_containing([self.op(deps[0].value, deps[1].value)])
        elif util.any_of(deps, ir.Literal):
            if isinstance(deps[0], ir.Literal):
                val = deps[0].value
                atype = self.args[1].type()
            else:
                val = deps[1].value
                atype = self.args[0].type()
            return _int_one_literal_promotion(atype, val, self.op)
        else:
            return _int_bounds_promotion(self.left.type(), self.right.type(), self.op)
示例#12
0
文件: rules.py 项目: chris-b1/ibis
    def _get_int_type(self):
        deps = [x.op() for x in self.args]

        if util.all_of(deps, ir.Literal):
            return _smallest_int_containing(
                [self.op(deps[0].value, deps[1].value)])
        elif util.any_of(deps, ir.Literal):
            if isinstance(deps[0], ir.Literal):
                val = deps[0].value
                atype = self.args[1].type()
            else:
                val = deps[1].value
                atype = self.args[0].type()
            return _int_one_literal_promotion(atype, val, self.op)
        else:
            return _int_bounds_promotion(self.left.type(), self.right.type(),
                                         self.op)
示例#13
0
def shape_like_args(args, out_type):
    if util.any_of(args, ir.ArrayExpr):
        return ir.array_type(out_type)
    else:
        return ir.scalar_type(out_type)
示例#14
0
文件: rules.py 项目: chris-b1/ibis
 def _check_compatibility(self):
     if (util.any_of(self.args, ir.StringValue)
             and not util.all_of(self.args, ir.StringValue)):
         raise TypeError('String and non-string incompatible')
示例#15
0
文件: rules.py 项目: chris-b1/ibis
def shape_like_args(args, out_type):
    out_type = dt.validate_type(out_type)
    if util.any_of(args, ir.ColumnExpr):
        return out_type.array_type()
    else:
        return out_type.scalar_type()
示例#16
0
文件: rules.py 项目: zuxfoucault/ibis
 def _check_compatibility(self):
     if (util.any_of(self.args, ir.StringValue) and
             not util.all_of(self.args, ir.StringValue)):
         raise TypeError('String and non-string incompatible')
示例#17
0
文件: rules.py 项目: zuxfoucault/ibis
def shape_like_args(args, out_type):
    out_type = dt.validate_type(out_type)
    if util.any_of(args, ir.ArrayExpr):
        return out_type.array_type()
    else:
        return out_type.scalar_type()