Exemplo n.º 1
0
 def _print_Pow(self, expr):
     if expr.base == 2:
         return "exp2(%s)" % self._print(expr.exp)
     if expr.base == 10:
         return "exp10(%s)" % self._print(expr.exp)
     if expr.exp == 0.5 and isinstance(expr.base, Add):
         args = expr.base.args
         if len(args) == 2 and all(map(is_square, args)):
             if self.order != 'none':
                 args = self._as_ordered_terms(expr.base, order=None)
                 # TODO: (above) is it fine to use `order=None`?
             return "hypot(%s, %s)" % (self._print(args[0].args[0]),
                                       self._print(args[1].args[0]))
     if expr.exp == Rational(1, 3):
         return "cbrt(%s)" % self._print(expr.base)
     if expr.exp.is_integer and expr.exp != -1:
         return "pown(%s, %s)" % (
             self._print(expr.base), self._print(expr.exp))
     if expr.exp.is_positive and expr.exp != 0.5:
         return "powr(%s, %s)" % (
             self._print(expr.base), self._print(expr.exp))
     return CCodePrinter._print_Pow(self, expr)