# HG changeset patch
# User Karl-Dieter Crisman <kcrisman@gmail.com>
# Date 1340380591 14400
# Node ID 89dd04b06fd4b7944033d7d1289845ed4eb91730
# Parent  ef777986e8a5aa5ff04d778cf96746fbe8989aae
Trac 12101 - make exponential work with sparse matrices

diff --git a/sage/matrix/matrix2.pyx b/sage/matrix/matrix2.pyx
--- a/sage/matrix/matrix2.pyx
+++ b/sage/matrix/matrix2.pyx
@@ -11527,9 +11527,23 @@
             sage: a.change_ring(RDF).exp()
             [42748127.3153 7368259.24416]
             [234538976.138 40426191.4516]
+
+        This works for sparse matrices, too; see :trac:`12101`::
+
+            sage: D = matrix(SR,[1],sparse=True)
+            sage: D.exp()
+            [e]
+            sage: D
+            [1]
+            sage: exp(diagonal_matrix([1, 2, 3]))
+            [  e   0   0]
+            [  0 e^2   0]
+            [  0   0 e^3]
         """
         from sage.symbolic.ring import SR
-        return self.change_ring(SR).exp()
+        if not self.is_sparse():
+            return self.change_ring(SR).exp()
+        return self.change_ring(SR).dense_matrix().exp()
 
     def elementary_divisors(self):
         r""" 
