# HG changeset patch
# User Joris Vankerschaver <joris.vankerschaver@gmail.com>
# Date 1309208852 25200
# Node ID 156217366e093e2035d3778f2f44ef1c19e05a93
# Parent  4ad86990d7215498658440de04560aa028dcdeeb
#11549: Symbolic vector arithmetic creates instance of FreeModuleElement_generic_dense

diff -r 4ad86990d721 -r 156217366e09 sage/modules/free_module_element.pyx
--- a/sage/modules/free_module_element.pyx	Fri Jun 24 00:12:39 2011 +0000
+++ b/sage/modules/free_module_element.pyx	Mon Jun 27 14:07:32 2011 -0700
@@ -3279,7 +3279,7 @@
         # Create a new dense free module element with minimal overhead and
         # no type checking.
         cdef FreeModuleElement_generic_dense x
-        x = PY_NEW(FreeModuleElement_generic_dense)
+        x = <FreeModuleElement_generic_dense>PY_NEW(<object>PY_TYPE(self))
         x._is_mutable = 1
         x._parent = self._parent
         x._entries = v
diff -r 4ad86990d721 -r 156217366e09 sage/modules/vector_callable_symbolic_dense.py
--- a/sage/modules/vector_callable_symbolic_dense.py	Fri Jun 24 00:12:39 2011 +0000
+++ b/sage/modules/vector_callable_symbolic_dense.py	Mon Jun 27 14:07:32 2011 -0700
@@ -14,9 +14,9 @@
     sage: f[0]
     (r, theta, z) |--> r*cos(theta)
     sage: f+f
-    ((r, theta, z) |--> 2*r*cos(theta), (r, theta, z) |--> 2*r*sin(theta), (r, theta, z) |--> 2*z)
+    (r, theta, z) |--> (2*r*cos(theta), 2*r*sin(theta), 2*z)
     sage: 3*f
-    ((r, theta, z) |--> 3*r*cos(theta), (r, theta, z) |--> 3*r*sin(theta), (r, theta, z) |--> 3*z)
+    (r, theta, z) |--> (3*r*cos(theta), 3*r*sin(theta), 3*z)
     sage: f*f # dot product
     (r, theta, z) |--> r^2*sin(theta)^2 + r^2*cos(theta)^2 + z^2
     sage: f.diff()(0,1,2) # the matrix derivative
diff -r 4ad86990d721 -r 156217366e09 sage/modules/vector_symbolic_dense.py
--- a/sage/modules/vector_symbolic_dense.py	Fri Jun 24 00:12:39 2011 +0000
+++ b/sage/modules/vector_symbolic_dense.py	Mon Jun 27 14:07:32 2011 -0700
@@ -21,6 +21,22 @@
     sage: u.simplify_full()
     (1, log(6) + 2*log(y))
 
+Check that the outcome of arithmetic with symbolic vectors is again 
+a symbolic vector (#11549): 
+
+    sage: v = vector(SR, [1, 2])
+    sage: w = vector(SR, [sin(x), 0])
+    sage: type(v)
+    <class 'sage.modules.vector_symbolic_dense.Vector_symbolic_dense'>
+    sage: type(w)
+    <class 'sage.modules.vector_symbolic_dense.Vector_symbolic_dense'>
+    sage: type(v + w)
+    <class 'sage.modules.vector_symbolic_dense.Vector_symbolic_dense'>
+    sage: type(-v)
+    <class 'sage.modules.vector_symbolic_dense.Vector_symbolic_dense'>
+    sage: type(5*w)
+    <class 'sage.modules.vector_symbolic_dense.Vector_symbolic_dense'>
+
 TESTS::
 
     sage: u = vector(SR, [sin(x^2)])
