changeset 9230:579a19943d38

Merge with current archive
author Michael Goffioul <michael.goffioul@gmail.com>
date Thu, 21 May 2009 18:19:46 +0100
parents 4b94672337d0 (current diff) ab40ef1e232f (diff)
children 8a5a04b6c46b
files ChangeLog
diffstat 20 files changed, 271 insertions(+), 137 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu May 21 18:13:47 2009 +0100
+++ b/ChangeLog	Thu May 21 18:19:46 2009 +0100
@@ -15,6 +15,10 @@
 	(clean): Remove mkoctfile$(EXEEXT), octave-config$(EXEEXT),
 	octave-bug$(EXEEXT) and the corresponding object files.
 
+2009-05-07  Rik <rdrider0-list@yahoo.com>
+
+	* README.mirrors: Remove invalid mirror sites which no longer exist.
+
 2009-05-07  John W. Eaton  <jwe@octave.org>
 
 	* configure.in, mkoctfile.in, mkoctfile.cc.in, octave-bug.in,
--- a/README.mirrors	Thu May 21 18:13:47 2009 +0100
+++ b/README.mirrors	Thu May 21 18:19:46 2009 +0100
@@ -6,22 +6,7 @@
 
   site                          directory
   ----                          ---------
-  ftp.eos.hokudai.ac.jp         /pub/GNU/misc/octave
   ftp.u-aizu.ac.jp              /pub/SciEng/numanal/Octave
   neacm.fe.up.pt                /pub/octave
 
-HTTP:
-
-  url
-  ---
-  http://neacm.fe.up.pt/pub/octave
-  http://octave.oss-mirror.org
-  http://octave.linux-mirror.org
-
-
-John W. Eaton
-jwe@bevo.che.wisc.edu
-University of Wisconsin-Madison
-Department of Chemical & Biological Engineering
-
-Wed, 31 Oct 2007 16:32:44 EDT
+Last updated: Wed, 20 May 2009 20:58:14 PST
--- a/liboctave/CMatrix.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/CMatrix.cc	Thu May 21 18:19:46 2009 +0100
@@ -3232,43 +3232,43 @@
 boolMatrix
 ComplexMatrix::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, Complex> (*this, dim, mx_inline_all);
 }
 
 boolMatrix
 ComplexMatrix::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, Complex> (*this, dim, mx_inline_any);
 }
 
 ComplexMatrix
 ComplexMatrix::cumprod (int dim) const
 {
-  return do_mx_cum_op<ComplexMatrix> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<ComplexMatrix, Complex> (*this, dim, mx_inline_cumprod);
 }
 
 ComplexMatrix
 ComplexMatrix::cumsum (int dim) const
 {
-  return do_mx_cum_op<ComplexMatrix> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<ComplexMatrix, Complex> (*this, dim, mx_inline_cumsum);
 }
 
 ComplexMatrix
 ComplexMatrix::prod (int dim) const
 {
-  return do_mx_red_op<ComplexMatrix> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<ComplexMatrix, Complex> (*this, dim, mx_inline_prod);
 }
 
 ComplexMatrix
 ComplexMatrix::sum (int dim) const
 {
-  return do_mx_red_op<ComplexMatrix> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<ComplexMatrix, Complex> (*this, dim, mx_inline_sum);
 }
 
 ComplexMatrix
 ComplexMatrix::sumsq (int dim) const
 {
-  return do_mx_red_op<Matrix> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<Matrix, Complex> (*this, dim, mx_inline_sumsq);
 }
 
 Matrix ComplexMatrix::abs (void) const
--- a/liboctave/CNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/CNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -632,43 +632,43 @@
 boolNDArray
 ComplexNDArray::all (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolNDArray, Complex> (*this, dim, mx_inline_all);
 }
 
 boolNDArray
 ComplexNDArray::any (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolNDArray, Complex> (*this, dim, mx_inline_any);
 }
 
 ComplexNDArray
 ComplexNDArray::cumprod (int dim) const
 {
-  return do_mx_cum_op<ComplexNDArray> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<ComplexNDArray, Complex> (*this, dim, mx_inline_cumprod);
 }
 
 ComplexNDArray
 ComplexNDArray::cumsum (int dim) const
 {
-  return do_mx_cum_op<ComplexNDArray> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<ComplexNDArray, Complex> (*this, dim, mx_inline_cumsum);
 }
 
 ComplexNDArray
 ComplexNDArray::prod (int dim) const
 {
-  return do_mx_red_op<ComplexNDArray> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<ComplexNDArray, Complex> (*this, dim, mx_inline_prod);
 }
 
 ComplexNDArray
 ComplexNDArray::sum (int dim) const
 {
-  return do_mx_red_op<ComplexNDArray> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<ComplexNDArray, Complex> (*this, dim, mx_inline_sum);
 }
 
 ComplexNDArray
 ComplexNDArray::sumsq (int dim) const
 {
-  return do_mx_red_op<NDArray> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<NDArray, Complex> (*this, dim, mx_inline_sumsq);
 }
 
 ComplexNDArray
--- a/liboctave/ChangeLog	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/ChangeLog	Thu May 21 18:19:46 2009 +0100
@@ -1,3 +1,68 @@
+2009-05-20  Jaroslav Hajek  <highegg@gmail.com>
+
+	* eigs-base.cc (
+	EigsRealSymmetricMatrix,
+	EigsRealSymmetricMatrixShift,
+	EigsRealSymmetricFunc,
+	EigsRealNonSymmetricMatrix,
+	EigsRealNonSymmetricMatrixShift,
+	EigsRealNonSymmetricFunc,
+	EigsComplexNonSymmetricMatrix,
+	EigsComplexNonSymmetricMatrixShift,
+	EigsComplexNonSymmetricFunc): Update tests.
+
+2009-05-21  Jaroslav Hajek  <highegg@gmail.com>
+
+
+	* CMatrix.cc 
+	(ComplexMatrix::all, ComplexMatrix::any, ComplexMatrix::cumprod,
+	ComplexMatrix::cumsum, ComplexMatrix::prod, ComplexMatrix::sum,
+	ComplexMatrix::sumsq): Use explicit template qualifications
+	to workaround bugs in Intel C++ and MSVC++ compilers.
+	* CNDArray.cc
+	(ComplexNDArray::all, ComplexNDArray::any, ComplexNDArray::cumprod,
+	ComplexNDArray::cumsum, ComplexNDArray::prod, ComplexNDArray::sum,
+	ComplexNDArray::sumsq): Ditto.
+	* boolMatrix.cc
+	(boolMatrix::all, boolMatrix::any): Ditto.
+	* boolNDArray.cc
+	(boolNDArray::all, boolNDArray::any): Ditto.
+	* chMatrix.cc
+	(charMatrix::all, charMatrix::any): Ditto.
+	* chNDArray.cc
+	(charNDArray::all, charNDArray::any): Ditto.
+	* dMatrix.cc
+	(Matrix::all, Matrix::any, Matrix::cumprod,
+	Matrix::cumsum, Matrix::prod, Matrix::sum,
+	Matrix::sumsq): Ditto.
+	* dNDArray.cc
+	(NDArray::all, NDArray::any, NDArray::cumprod,
+	NDArray::cumsum, NDArray::prod, NDArray::sum,
+	NDArray::sumsq): Ditto.
+	* fCMatrix.cc
+	(FloatComplexMatrix::all, FloatComplexMatrix::any, FloatComplexMatrix::cumprod,
+	FloatComplexMatrix::cumsum, FloatComplexMatrix::prod, FloatComplexMatrix::sum,
+	FloatComplexMatrix::sumsq): Ditto.
+	* fCNDArray.cc
+	(FloatComplexNDArray::all, FloatComplexNDArray::any, FloatComplexNDArray::cumprod,
+	FloatComplexNDArray::cumsum, FloatComplexNDArray::prod, FloatComplexNDArray::sum,
+	FloatComplexNDArray::sumsq): Ditto.
+	* fMatrix.cc
+	(FloatMatrix::all, FloatMatrix::any, FloatMatrix::cumprod,
+	FloatMatrix::cumsum, FloatMatrix::prod, FloatMatrix::sum,
+	FloatMatrix::sumsq): Ditto.
+	* fNDArray.cc
+	(FloatNDArray::all, FloatNDArray::any, FloatNDArray::cumprod,
+	FloatNDArray::cumsum, FloatNDArray::prod, FloatNDArray::sum,
+	FloatNDArray::sumsq): Ditto.
+	* intNDArray.cc
+	(intNDArray<T>::all, intNDArray<T>::any,
+	intNDArray<T>::cumsum, intNDArray<T>::sum): Ditto.
+
+2009-05-20  Jaroslav Hajek  <highegg@gmail.com>
+
+	* Makefile.in: Remove reference to ArrayN-idx.h.
+
 2009-05-20  Jaroslav Hajek  <highegg@gmail.com>
 
 	* Array-voidp.cc: New source.
--- a/liboctave/Makefile.in	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/Makefile.in	Thu May 21 18:19:46 2009 +0100
@@ -41,7 +41,7 @@
   $(ARPACK_LIBS) $(QRUPDATE_LIBS) $(BLAS_LIBS) $(FFTW_LIBS) $(LIBREADLINE) $(LIBGLOB) $(REGEX_LIBS) $(LIBS) $(FLIBS)
 
 MATRIX_INC := Array.h Array2.h Array3.h ArrayN.h DiagArray2.h \
-	Array-util.h ArrayN-idx.h MArray-decl.h MArray-defs.h \
+	Array-util.h MArray-decl.h MArray-defs.h \
 	MArray.h MArray2.h MDiagArray2.h Matrix.h MArrayN.h \
 	base-lu.h base-aepbal.h dim-vector.h mx-base.h mx-op-decl.h \
 	mx-op-defs.h mx-defs.h mx-ext.h CColVector.h CDiagMatrix.h \
--- a/liboctave/boolMatrix.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/boolMatrix.cc	Thu May 21 18:19:46 2009 +0100
@@ -90,13 +90,13 @@
 boolMatrix
 boolMatrix::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, bool> (*this, dim, mx_inline_all);
 }
 
 boolMatrix
 boolMatrix::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, bool> (*this, dim, mx_inline_any);
 }
 
 MM_CMP_OPS (boolMatrix, , boolMatrix, )
--- a/liboctave/boolNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/boolNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -50,27 +50,27 @@
 boolNDArray
 boolNDArray::all (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolNDArray, bool> (*this, dim, mx_inline_all);
 }
 
 boolNDArray
 boolNDArray::any (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolNDArray, bool> (*this, dim, mx_inline_any);
 }
 
 NDArray 
 boolNDArray::sum (int dim) const
 {
   // NOTE: going via octave_idx_type is faster even though it requires a conversion.
-  return do_mx_red_op<Array<octave_idx_type> > (*this, dim, mx_inline_count);
+  return do_mx_red_op<Array<octave_idx_type> , bool> (*this, dim, mx_inline_count);
 }
 
 NDArray 
 boolNDArray::cumsum (int dim) const
 {
   // NOTE: going via octave_idx_type is faster even though it requires a conversion.
-  return do_mx_cum_op<Array<octave_idx_type> > (*this, dim, mx_inline_cumcount);
+  return do_mx_cum_op<Array<octave_idx_type> , bool> (*this, dim, mx_inline_cumcount);
 }
 
 boolNDArray
--- a/liboctave/chMatrix.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/chMatrix.cc	Thu May 21 18:19:46 2009 +0100
@@ -204,13 +204,13 @@
 boolMatrix
 charMatrix::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, char> (*this, dim, mx_inline_all);
 }
 
 boolMatrix
 charMatrix::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, char> (*this, dim, mx_inline_any);
 }
 
 MS_CMP_OPS(charMatrix, , char, )
--- a/liboctave/chNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/chNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -37,13 +37,13 @@
 boolNDArray
 charNDArray::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, char> (*this, dim, mx_inline_all);
 }
 
 boolNDArray
 charNDArray::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, char> (*this, dim, mx_inline_any);
 }
 
 charNDArray
--- a/liboctave/dMatrix.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/dMatrix.cc	Thu May 21 18:19:46 2009 +0100
@@ -2765,43 +2765,43 @@
 boolMatrix
 Matrix::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, double> (*this, dim, mx_inline_all);
 }
 
 boolMatrix
 Matrix::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, double> (*this, dim, mx_inline_any);
 }
 
 Matrix
 Matrix::cumprod (int dim) const
 {
-  return do_mx_cum_op<Matrix> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<Matrix, double> (*this, dim, mx_inline_cumprod);
 }
 
 Matrix
 Matrix::cumsum (int dim) const
 {
-  return do_mx_cum_op<Matrix> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<Matrix, double> (*this, dim, mx_inline_cumsum);
 }
 
 Matrix
 Matrix::prod (int dim) const
 {
-  return do_mx_red_op<Matrix> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<Matrix, double> (*this, dim, mx_inline_prod);
 }
 
 Matrix
 Matrix::sum (int dim) const
 {
-  return do_mx_red_op<Matrix> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<Matrix, double> (*this, dim, mx_inline_sum);
 }
 
 Matrix
 Matrix::sumsq (int dim) const
 {
-  return do_mx_red_op<Matrix> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<Matrix, double> (*this, dim, mx_inline_sumsq);
 }
 
 Matrix
--- a/liboctave/dNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/dNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -699,43 +699,43 @@
 boolNDArray
 NDArray::all (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolNDArray, double> (*this, dim, mx_inline_all);
 }
 
 boolNDArray
 NDArray::any (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolNDArray, double> (*this, dim, mx_inline_any);
 }
 
 NDArray
 NDArray::cumprod (int dim) const
 {
-  return do_mx_cum_op<NDArray> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<NDArray, double> (*this, dim, mx_inline_cumprod);
 }
 
 NDArray
 NDArray::cumsum (int dim) const
 {
-  return do_mx_cum_op<NDArray> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<NDArray, double> (*this, dim, mx_inline_cumsum);
 }
 
 NDArray
 NDArray::prod (int dim) const
 {
-  return do_mx_red_op<NDArray> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<NDArray, double> (*this, dim, mx_inline_prod);
 }
 
 NDArray
 NDArray::sum (int dim) const
 {
-  return do_mx_red_op<NDArray> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<NDArray, double> (*this, dim, mx_inline_sum);
 }
 
 NDArray
 NDArray::sumsq (int dim) const
 {
-  return do_mx_red_op<NDArray> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<NDArray, double> (*this, dim, mx_inline_sumsq);
 }
 
 NDArray
--- a/liboctave/eigs-base.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/eigs-base.cc	Thu May 21 18:19:46 2009 +0100
@@ -784,6 +784,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2;
@@ -794,18 +801,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p <= k || p > n)
+  
+  if (k < 1 || k > n - 2)
     {
       (*current_liboctave_error_handler) 
-	("eigs: opts.p must be between k and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1-1).\n"
+	 "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n )
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler) 
-	("eigs: Too many eigenvalues to extract (k >= n).\n"
-	 "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -1100,6 +1108,21 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
+  if (k <= 0 || k >= n - 1)
+    {
+      (*current_liboctave_error_handler) 
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1-1).\n"
+	     "      Use 'eig(full(A))' instead");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2;
@@ -1110,18 +1133,11 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p <= k || p > n)
+  
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler) 
-	("eigs: opts.p must be between k and n");
-      return -1;
-    }
-
-  if (k > n )
-    {
-      (*current_liboctave_error_handler) 
-	("eigs: Too many eigenvalues to extract (k >= n).\n"
-	     "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -1401,6 +1417,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2;
@@ -1411,18 +1434,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p <= k || p > n)
+  
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler)
-	("eigs: opts.p must be between k and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	     "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n )
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler)
-	("eigs: Too many eigenvalues to extract (k >= n).\n"
-	     "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -1674,6 +1698,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2 + 1;
@@ -1684,18 +1715,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p < k || p > n)
+
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler) 
-	("eigs: opts.p must be between k+1 and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	 "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n - 1)
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler) 
-	("eigs: Too many eigenvalues to extract (k >= n-1).\n"
-	 "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -2032,6 +2064,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2 + 1;
@@ -2042,18 +2081,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p < k || p > n)
+
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler) 
-	("eigs: opts.p must be between k+1 and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	     "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n - 1)
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler) 
-	("eigs: Too many eigenvalues to extract (k >= n-1).\n"
-	     "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -2380,6 +2420,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2 + 1;
@@ -2390,18 +2437,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p < k || p > n)
+
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler)
-	("eigs: opts.p must be between k+1 and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	     "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n - 1)
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler)
-	("eigs: Too many eigenvalues to extract (k >= n-1).\n"
-	     "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -2697,6 +2745,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2 + 1;
@@ -2707,18 +2762,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p < k || p > n)
+
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler) 
-	("eigs: opts.p must be between k+1 and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	 "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n - 1)
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler) 
-	("eigs: Too many eigenvalues to extract (k >= n-1).\n"
-	 "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -3014,6 +3070,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2 + 1;
@@ -3024,18 +3087,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p < k || p > n)
+
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler) 
-	("eigs: opts.p must be between k+1 and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	     "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n - 1)
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler) 
-	("eigs: Too many eigenvalues to extract (k >= n-1).\n"
-	     "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
@@ -3323,6 +3387,13 @@
       octave_rand::distribution(rand_dist);
     }
 
+  if (n < 3)
+    {
+      (*current_liboctave_error_handler)
+	("eigs: n must be at least 3");
+      return -1;
+    }
+
   if (p < 0)
     {
       p = k * 2 + 1;
@@ -3333,18 +3404,19 @@
       if (p > n - 1)
 	p = n - 1 ;
     }
-  else if (p < k || p > n)
+
+  if (k <= 0 || k >= n - 1)
     {
       (*current_liboctave_error_handler)
-	("eigs: opts.p must be between k+1 and n");
+	("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
+	     "      Use 'eig(full(A))' instead");
       return -1;
     }
 
-  if (k > n - 1)
+  if (p <= k || p >= n)
     {
       (*current_liboctave_error_handler)
-	("eigs: Too many eigenvalues to extract (k >= n-1).\n"
-	     "      Use 'eig(full(A))' instead");
+	("eigs: opts.p must be greater than k and less than n");
       return -1;
     }
 
--- a/liboctave/fCMatrix.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/fCMatrix.cc	Thu May 21 18:19:46 2009 +0100
@@ -3225,43 +3225,43 @@
 boolMatrix
 FloatComplexMatrix::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, FloatComplex> (*this, dim, mx_inline_all);
 }
 
 boolMatrix
 FloatComplexMatrix::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, FloatComplex> (*this, dim, mx_inline_any);
 }
 
 FloatComplexMatrix
 FloatComplexMatrix::cumprod (int dim) const
 {
-  return do_mx_cum_op<FloatComplexMatrix> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<FloatComplexMatrix, FloatComplex> (*this, dim, mx_inline_cumprod);
 }
 
 FloatComplexMatrix
 FloatComplexMatrix::cumsum (int dim) const
 {
-  return do_mx_cum_op<FloatComplexMatrix> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<FloatComplexMatrix, FloatComplex> (*this, dim, mx_inline_cumsum);
 }
 
 FloatComplexMatrix
 FloatComplexMatrix::prod (int dim) const
 {
-  return do_mx_red_op<FloatComplexMatrix> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<FloatComplexMatrix, FloatComplex> (*this, dim, mx_inline_prod);
 }
 
 FloatComplexMatrix
 FloatComplexMatrix::sum (int dim) const
 {
-  return do_mx_red_op<FloatComplexMatrix> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<FloatComplexMatrix, FloatComplex> (*this, dim, mx_inline_sum);
 }
 
 FloatComplexMatrix
 FloatComplexMatrix::sumsq (int dim) const
 {
-  return do_mx_red_op<FloatMatrix> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<FloatMatrix, FloatComplex> (*this, dim, mx_inline_sumsq);
 }
 
 FloatMatrix FloatComplexMatrix::abs (void) const
--- a/liboctave/fCNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/fCNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -627,43 +627,43 @@
 boolNDArray
 FloatComplexNDArray::all (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolNDArray, FloatComplex> (*this, dim, mx_inline_all);
 }
 
 boolNDArray
 FloatComplexNDArray::any (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolNDArray, FloatComplex> (*this, dim, mx_inline_any);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::cumprod (int dim) const
 {
-  return do_mx_cum_op<FloatComplexNDArray> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<FloatComplexNDArray, FloatComplex> (*this, dim, mx_inline_cumprod);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::cumsum (int dim) const
 {
-  return do_mx_cum_op<FloatComplexNDArray> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<FloatComplexNDArray, FloatComplex> (*this, dim, mx_inline_cumsum);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::prod (int dim) const
 {
-  return do_mx_red_op<FloatComplexNDArray> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<FloatComplexNDArray, FloatComplex> (*this, dim, mx_inline_prod);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::sum (int dim) const
 {
-  return do_mx_red_op<FloatComplexNDArray> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<FloatComplexNDArray, FloatComplex> (*this, dim, mx_inline_sum);
 }
 
 FloatComplexNDArray
 FloatComplexNDArray::sumsq (int dim) const
 {
-  return do_mx_red_op<FloatNDArray> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<FloatNDArray, FloatComplex> (*this, dim, mx_inline_sumsq);
 }
 
 FloatComplexNDArray
--- a/liboctave/fMatrix.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/fMatrix.cc	Thu May 21 18:19:46 2009 +0100
@@ -2764,43 +2764,43 @@
 boolMatrix
 FloatMatrix::all (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolMatrix, float> (*this, dim, mx_inline_all);
 }
 
 boolMatrix
 FloatMatrix::any (int dim) const
 {
-  return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolMatrix, float> (*this, dim, mx_inline_any);
 }
 
 FloatMatrix
 FloatMatrix::cumprod (int dim) const
 {
-  return do_mx_cum_op<FloatMatrix> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<FloatMatrix, float> (*this, dim, mx_inline_cumprod);
 }
 
 FloatMatrix
 FloatMatrix::cumsum (int dim) const
 {
-  return do_mx_cum_op<FloatMatrix> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<FloatMatrix, float> (*this, dim, mx_inline_cumsum);
 }
 
 FloatMatrix
 FloatMatrix::prod (int dim) const
 {
-  return do_mx_red_op<FloatMatrix> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<FloatMatrix, float> (*this, dim, mx_inline_prod);
 }
 
 FloatMatrix
 FloatMatrix::sum (int dim) const
 {
-  return do_mx_red_op<FloatMatrix> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<FloatMatrix, float> (*this, dim, mx_inline_sum);
 }
 
 FloatMatrix
 FloatMatrix::sumsq (int dim) const
 {
-  return do_mx_red_op<FloatMatrix> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<FloatMatrix, float> (*this, dim, mx_inline_sumsq);
 }
 
 FloatMatrix
--- a/liboctave/fNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/fNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -654,43 +654,43 @@
 boolNDArray
 FloatNDArray::all (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolNDArray, float> (*this, dim, mx_inline_all);
 }
 
 boolNDArray
 FloatNDArray::any (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolNDArray, float> (*this, dim, mx_inline_any);
 }
 
 FloatNDArray
 FloatNDArray::cumprod (int dim) const
 {
-  return do_mx_cum_op<FloatNDArray> (*this, dim, mx_inline_cumprod);
+  return do_mx_cum_op<FloatNDArray, float> (*this, dim, mx_inline_cumprod);
 }
 
 FloatNDArray
 FloatNDArray::cumsum (int dim) const
 {
-  return do_mx_cum_op<FloatNDArray> (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<FloatNDArray, float> (*this, dim, mx_inline_cumsum);
 }
 
 FloatNDArray
 FloatNDArray::prod (int dim) const
 {
-  return do_mx_red_op<FloatNDArray> (*this, dim, mx_inline_prod);
+  return do_mx_red_op<FloatNDArray, float> (*this, dim, mx_inline_prod);
 }
 
 FloatNDArray
 FloatNDArray::sum (int dim) const
 {
-  return do_mx_red_op<FloatNDArray> (*this, dim, mx_inline_sum);
+  return do_mx_red_op<FloatNDArray, float> (*this, dim, mx_inline_sum);
 }
 
 FloatNDArray
 FloatNDArray::sumsq (int dim) const
 {
-  return do_mx_red_op<FloatNDArray> (*this, dim, mx_inline_sumsq);
+  return do_mx_red_op<FloatNDArray, float> (*this, dim, mx_inline_sumsq);
 }
 
 FloatNDArray
--- a/liboctave/intNDArray.cc	Thu May 21 18:13:47 2009 +0100
+++ b/liboctave/intNDArray.cc	Thu May 21 18:19:46 2009 +0100
@@ -74,14 +74,14 @@
 boolNDArray
 intNDArray<T>::all (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_all);
+  return do_mx_red_op<boolNDArray, T > (*this, dim, mx_inline_all);
 }
 
 template <class T>
 boolNDArray
 intNDArray<T>::any (int dim) const
 {
-  return do_mx_red_op<boolNDArray> (*this, dim, mx_inline_any);
+  return do_mx_red_op<boolNDArray, T > (*this, dim, mx_inline_any);
 }
 
 template <class T>
@@ -204,14 +204,14 @@
 intNDArray<T>
 intNDArray<T>::sum (int dim) const
 {
-  return do_mx_red_op<intNDArray<T> > (*this, dim, mx_inline_sum);
+  return do_mx_red_op<intNDArray<T> , T > (*this, dim, mx_inline_sum);
 }
 
 template <class T>
 intNDArray<T>
 intNDArray<T>::cumsum (int dim) const
 {
-  return do_mx_cum_op<intNDArray<T> > (*this, dim, mx_inline_cumsum);
+  return do_mx_cum_op<intNDArray<T> , T > (*this, dim, mx_inline_cumsum);
 }
 
 template <class T>
--- a/src/ChangeLog	Thu May 21 18:13:47 2009 +0100
+++ b/src/ChangeLog	Thu May 21 18:19:46 2009 +0100
@@ -1,3 +1,9 @@
+2009-05-20  John W. Eaton  <jwe@octave.org>
+
+	* pt-assign.cc (maybe_warn_former_built_in_variable):
+	Set initialized to true when done initializing vars set.
+	From Michael Goffioul  <michael.goffioul@gmail.com>.
+
 2009-05-20  Jaroslav Hajek  <highegg@gmail.com>
 
 	* ov-typeinfo.h
--- a/src/pt-assign.cc	Thu May 21 18:13:47 2009 +0100
+++ b/src/pt-assign.cc	Thu May 21 18:19:46 2009 +0100
@@ -149,6 +149,8 @@
 
       while (*p)
 	vars.insert (*p++);
+
+      initialized = true;
     }
 
   if (vars.find (nm) != vars.end ())