# HG changeset patch
# User Burcin Erocal <burcin@erocal.org>
# Date 1237912294 -3600
# Node ID 99916902b1d1b0674315779687b6d23133bb899f
# Parent  cdc1edc584f69da3df11190919feedd0bf1e2265
Change base class of sage.symbolic.ring.NSymbolicRing to CommutativeRing and
add is_exact and is_field methods. This allows constructing matrices and
vectors with pynac expressions.

diff --git a/sage/symbolic/ring.pxd b/sage/symbolic/ring.pxd
--- a/sage/symbolic/ring.pxd
+++ b/sage/symbolic/ring.pxd
@@ -1,5 +1,5 @@
 include "../libs/ginac/decl.pxi"
 
-from sage.rings.ring cimport Ring
+from sage.rings.ring cimport CommutativeRing
 
-cdef class NSymbolicRing(Ring)
+cdef class NSymbolicRing(CommutativeRing)
diff --git a/sage/symbolic/ring.pyx b/sage/symbolic/ring.pyx
--- a/sage/symbolic/ring.pyx
+++ b/sage/symbolic/ring.pyx
@@ -7,6 +7,21 @@
 #                  http://www.gnu.org/licenses/
 ###############################################################################
 
+"""
+
+TESTS:
+    creating matrices and vectors with pynac expresssions::
+    sage: var('x,y,z',ns=1)
+    (x, y, z)
+    sage: M = matrix(2,2,[x,y,z,x])
+    sage: M.base_ring()
+    New Symbolic Ring
+
+    sage: v = vector([x,y])
+    sage: v.base_ring()
+    New Symbolic Ring
+"""
+
 include "../ext/stdsage.pxi"
 include "../ext/cdefs.pxi"
 
@@ -23,7 +38,7 @@
 
 from sage.structure.element import RingElement
 
-cdef class NSymbolicRing(Ring):
+cdef class NSymbolicRing(CommutativeRing):
     """
     Symbolic Ring, parent object for all symbolic expressions.
     """
@@ -138,7 +153,30 @@
             arctan(x^2)
         """
         return new_Expression_from_GEx(g_wild(n))
-    
+
+    def is_field(self):
+        """
+        Returns True, since symbolic expressions behave (mostly) like
+        field elements.
+
+        EXAMPLES:
+            sage: from sage.symbolic.ring import NSR
+            sage: NSR.is_field()
+            True
+        """
+        return True
+
+    def is_exact(self):
+        """
+        Returns False, since there are approximate symbolic expressions.
+
+        EXAMPLES:
+            sage: from sage.symbolic.ring import NSR
+            sage: NSR.is_exact()
+            False
+        """
+        return False
+
 
 NSR = NSymbolicRing()
 
