# HG changeset patch
# User Martin Albrecht <malb@informatik.uni-bremen.de>
# Date 1269299359 0
# Node ID 7492a1776ff1e685b57733d6604b38a4a60e3721
# Parent  47352ff4413791ecebf61d6213b8393ea89a90f0
allow dense vectors mod 2 with degree == 0

diff -r 47352ff44137 -r 7492a1776ff1 sage/matrix/matrix_mod2_dense.pyx
--- a/sage/matrix/matrix_mod2_dense.pyx	Mon Mar 22 11:48:15 2010 +0000
+++ b/sage/matrix/matrix_mod2_dense.pyx	Mon Mar 22 23:09:19 2010 +0000
@@ -523,6 +523,10 @@
             
             sage: A.row(2,from_list=True)
             (0, 1, 1, 1, 0, 0, 0, 1, 1, 1)
+
+            sage: A = Matrix(GF(2),1,0)
+            sage: A.row(0)
+            ()
         """
         if self._nrows == 0:
             raise IndexError("matrix has no rows")
@@ -535,7 +539,8 @@
         cdef Py_ssize_t j
         cdef Vector_mod2_dense z = PY_NEW(Vector_mod2_dense)
         z._init(self._ncols, VectorSpace(self.base_ring(),self._ncols))
-        mzd_submatrix(z._entries, self._entries, i, 0, i+1, self._ncols)
+        if self._ncols:
+            mzd_submatrix(z._entries, self._entries, i, 0, i+1, self._ncols)
         return z
     
     ########################################################################
diff -r 47352ff44137 -r 7492a1776ff1 sage/modules/vector_mod2_dense.pyx
--- a/sage/modules/vector_mod2_dense.pyx	Mon Mar 22 11:48:15 2010 +0000
+++ b/sage/modules/vector_mod2_dense.pyx	Mon Mar 22 23:09:19 2010 +0000
@@ -87,7 +87,8 @@
             (1, 0, 0, 0, 1, 1, 1, 0, 0, 1)
         """
         cdef Vector_mod2_dense y = self._new_c()
-        mzd_copy(y._entries, self._entries)
+        if self._degree:
+            mzd_copy(y._entries, self._entries)
         return y
 
     cdef _init(self, Py_ssize_t degree, parent):
@@ -186,6 +187,8 @@
             sage: w > v
             True
         """
+        if left._degree == 0:
+            return 0
         return mzd_cmp(left._entries, (<Vector_mod2_dense>right)._entries)
 
     def __len__(self):
@@ -274,7 +277,8 @@
             (0, 1, 1, 0, 0, 1, 1, 0, 0, 1)
         """
         cdef Vector_mod2_dense z = self._new_c()
-        mzd_add(z._entries, self._entries, (<Vector_mod2_dense>right)._entries)
+        if self._degree:
+            mzd_add(z._entries, self._entries, (<Vector_mod2_dense>right)._entries)
         return z
 
     cpdef ModuleElement _sub_(self, ModuleElement right):
@@ -288,7 +292,8 @@
             (0, 1, 1, 0, 0, 1, 1, 0, 0, 1)
         """
         cdef Vector_mod2_dense z = self._new_c()
-        mzd_add(z._entries, self._entries, (<Vector_mod2_dense>right)._entries)
+        if self._degree:
+            mzd_add(z._entries, self._entries, (<Vector_mod2_dense>right)._entries)
         return z
 
     cpdef Element _dot_product_(self, Vector right):
