# HG changeset patch
# User Burcin Erocal <burcin@erocal.org>
# Date 1239396943 -7200
# Node ID a17d1b15206c908bb7ef9d26ab122c2d64dc3b54
# Parent  4971202c8eabfbeddde99672b17f7c7f7b1e5770
Fix py_real and py_imag in sage.symbolic.pynac.

diff --git a/sage/symbolic/pynac.pyx b/sage/symbolic/pynac.pyx
--- a/sage/symbolic/pynac.pyx
+++ b/sage/symbolic/pynac.pyx
@@ -277,23 +277,100 @@
 # Real Part
 #################################################################
 cdef public object py_real(object x):
+    """
+    Returns the real part of x.
+
+    TESTS::
+
+        sage: from sage.symbolic.pynac import py_real_for_doctests as py_real
+        sage: py_real(I)
+        0.0
+        sage: py_real(CC(1,5))
+        1.00000000000000
+        sage: py_real(CC(1))
+        1.00000000000000
+        sage: py_real(RR(1))
+        1.00000000000000
+
+        sage: py_real(Mod(2,7))
+        2
+
+        sage: py_real(QQ['x'].gen())
+        x
+    """
     try:
         return x.real()
     except AttributeError:
-        if isinstance(x, complex):
-            return x.real
-        return x  # assume is real
+        pass
+    if isinstance(x, complex):
+        return x.real
+    from sage.misc.functional import real
+    try:
+        return real(x)
+    except TypeError:
+        return x # assume x is real
+
+def py_real_for_doctests(x):
+    """
+    Used for doctesting py_real.
+
+    TESTS::
+
+        sage: from sage.symbolic.pynac import py_real_for_doctests
+        sage: py_real_for_doctests(I)
+        0.0
+    """
+    return py_real(x)
 
 #################################################################
 # Imaginary Part
 #################################################################
 cdef public object py_imag(object x):
+    """
+    Return the imaginary part of x.
+
+    TESTS::
+
+        sage: from sage.symbolic.pynac import py_imag_for_doctests as py_imag
+        sage: py_imag(I)
+        1.0
+        sage: py_imag(CC(1,5))
+        5.00000000000000
+        sage: py_imag(CC(1))
+        0.000000000000000
+        sage: py_imag(RR(1))
+        0.0
+
+        sage: py_imag(Mod(2,7))
+        0.0
+
+        sage: py_imag(QQ['x'].gen())
+        0
+    """
     try:
         return x.imag()
     except AttributeError:
-        if isinstance(x, complex):
-            return x.imag
-        return 0 # assume is real since it isn't of type complex and doesn't have an imag attribute.
+        pass
+
+    if isinstance(x, complex):
+        return x.imag
+    from sage.misc.functional import imag
+    try:
+        return imag(x)
+    except TypeError:
+        return 0 # assume x is real
+
+def py_imag_for_doctests(x):
+    """
+    Used for doctesting py_imag.
+
+    TESTS::
+
+        sage: from sage.symbolic.pynac import py_imag_for_doctests
+        sage: py_imag_for_doctests(I)
+        1.0
+    """
+    return py_imag(x)
 
 
 #################################################################
