def map_constant(self, expr): """Convert complex values not within complex64 to a product for loopy """ if not isinstance(expr, complex): return IdentityMapper.map_constant(self, expr) if complex(self.float_type(expr.imag)) == expr.imag: return IdentityMapper.map_constant(self, expr) return expr.real + prim.Product((expr.imag, 1j))
def map_constant(self, expr): """Convert integer values not within the range of `self.int_type` to float. """ if not is_integer(expr): return IdentityMapper.map_constant(self, expr) if self.iinfo.min <= expr <= self.iinfo.max: return expr if self.warn: expr_as_float = self.float_type(expr) if int(expr_as_float) != int(expr): from warnings import warn warn("Converting '%d' to '%s' loses digits" % (expr, self.float_type.__name__)) # Suppress further warnings. self.warn = False return expr_as_float return self.float_type(expr)