--- sympy/printing/ccode.py | 21 +++++++++++++++++---- sympy/printing/tests/test_ccode.py | 27 ++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 9 deletions(-)
diff --git a/sympy/printing/ccode.py b/sympy/printing/ccode.py index e62786e..a1341b5 100644 --- a/sympy/printing/ccode.py +++ b/sympy/printing/ccode.py @@ -7,19 +7,32 @@ from sympy.printing.precedence import precedence, PRECEDENCE from sympy.core.basic import S class CCodePrinter(StrPrinter): - """A printer to convert python expressions to stings of c code""" + """A printer to convert python expressions to strings of c code""" printmethod = "_ccode_" def _print_Pow(self, expr): PREC = precedence(expr) if expr.exp is S.NegativeOne: - return '1/%s'%(self.parenthesize(expr.base, PREC)) + return '1.0/%s'%(self.parenthesize(expr.base, PREC)) else: return 'pow(%s,%s)'%(self.parenthesize(expr.base, PREC), self.parenthesize(expr.exp, PREC)) + def _print_Rational(self, expr): + p, q = int(expr.p), int(expr.q) + return '%d.0/%d.0' % (p, q) + def _print_Exp1(self, expr): - return "exp(1)" + return "M_E" + + def _print_Pi(self, expr): + return 'M_PI' + + def _print_Infinity(self, expr): + return 'HUGE_VAL' + + def _print_NegativeInfinity(self, expr): + return '-HUGE_VAL' def _print_Piecewise(self, expr): ecpairs = ["(%s) {\n%s\n}\n" % (self._print(c), self._print(e)) \ @@ -44,7 +57,7 @@ def ccode(expr): >>> from sympy.abc import * >>> ccode((2*tau)**Rational(7,2)) - '8*pow(2,(1/2))*pow(tau,(7/2))' + '8*pow(2,(1.0/2.0))*pow(tau,(7.0/2.0))' """ return CCodePrinter().doprint(expr) diff --git a/sympy/printing/tests/test_ccode.py b/sympy/printing/tests/test_ccode.py index 9ff2587..9534891 100644 --- a/sympy/printing/tests/test_ccode.py +++ b/sympy/printing/tests/test_ccode.py @@ -1,4 +1,5 @@ -from sympy import abs, exp, Function, Piecewise, symbols +from sympy import sin, cos, abs, exp, pi, oo, symbols +from sympy import Function, Piecewise, Rational, Integer from sympy.printing import ccode from sympy.utilities.pytest import XFAIL @@ -9,8 +10,8 @@ g = Function('g') def test_printmethod(): class fabs(abs): def _ccode_(self): - return "fabs(%s);" % ccode(self.args[0]) - assert ccode(fabs(x)) == "fabs(x);" + return "fabs(%s)" % ccode(self.args[0]) + assert ccode(fabs(x)) == "fabs(x)" def test_ccode_Pow(): assert ccode(x**3) == "pow(x,3)" @@ -18,8 +19,24 @@ def test_ccode_Pow(): assert ccode(1/(g(x)*3.5)**(x - y**x)/(x**2 + y)) == \ "pow((3.5*g(x)),(-x + pow(y,x)))/(y + pow(x,2))" -def test_ccode_Exp1(): - assert ccode(exp(1)) == "exp(1)" +def test_ccode_constants(): + assert ccode(exp(1)) == "M_E" + assert ccode(pi) == "M_PI" + assert ccode(oo) == "HUGE_VAL" + assert ccode(-oo) == "-HUGE_VAL" + +def test_ccode_Rational(): + assert ccode(Rational(3,7)) == "3.0/7.0" + assert ccode(Rational(18,9)) == "2" + assert ccode(Rational(3,-7)) == "-3.0/7.0" + assert ccode(Rational(-3,-7)) == "3.0/7.0" + +def test_ccode_Integer(): + assert ccode(Integer(67)) == "67" + assert ccode(Integer(-1)) == "-1" + +def test_ccode_functions(): + assert ccode(sin(x) ** cos(x)) == "pow(sin(x),cos(x))" def test_ccode_Piecewise(): p = ccode(Piecewise((x,x<1),(x**2,True))) -- 1.5.6.5 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sympy-patches" group. To post to this group, send email to sympy-patches@googlegroups.com To unsubscribe from this group, send email to sympy-patches+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sympy-patches?hl=en -~----------~----~----~----~------~----~------~--~---