diff liboctave/numeric/schur.cc @ 22329:7f3c7a8bd131

maint: Indent namespaces in liboctave/numeric files.
author John W. Eaton <jwe@octave.org>
date Wed, 17 Aug 2016 10:55:38 -0400
parents bac0d6f07a3e
children 4caa7b28d183
line wrap: on
line diff
--- a/liboctave/numeric/schur.cc	Wed Aug 17 10:37:57 2016 -0400
+++ b/liboctave/numeric/schur.cc	Wed Aug 17 10:55:38 2016 -0400
@@ -34,437 +34,435 @@
 
 namespace octave
 {
-namespace math
-{
-
-// For real types.
+  namespace math
+  {
+    // For real types.
 
-template <typename T>
-static octave_idx_type
-select_ana (const T& a, const T&)
-{
-  return (a < 0.0);
-}
-
-template <typename T>
-static octave_idx_type
-select_dig (const T& a, const T& b)
-{
-  return (hypot (a, b) < 1.0);
-}
-
-// For complex types.
+    template <typename T>
+    static octave_idx_type
+    select_ana (const T& a, const T&)
+    {
+      return (a < 0.0);
+    }
 
-template <typename T>
-static octave_idx_type
-select_ana (const T& a)
-{
-  return a.real () < 0.0;
-}
+    template <typename T>
+    static octave_idx_type
+    select_dig (const T& a, const T& b)
+    {
+      return (hypot (a, b) < 1.0);
+    }
 
-template <typename T>
-static octave_idx_type
-select_dig (const T& a)
-{
-  return (abs (a) < 1.0);
-}
+    // For complex types.
 
-template <>
-octave_idx_type
-schur<Matrix>::init (const Matrix& a, const std::string& ord, bool calc_unitary)
-{
-  octave_idx_type a_nr = a.rows ();
-  octave_idx_type a_nc = a.cols ();
+    template <typename T>
+    static octave_idx_type
+    select_ana (const T& a)
+    {
+      return a.real () < 0.0;
+    }
 
-  if (a_nr != a_nc)
-    (*current_liboctave_error_handler) ("schur: requires square matrix");
-
-  if (a_nr == 0)
+    template <typename T>
+    static octave_idx_type
+    select_dig (const T& a)
     {
-      schur_mat.clear ();
-      unitary_mat.clear ();
-      return 0;
+      return (abs (a) < 1.0);
     }
 
-  // Workspace requirements may need to be fixed if any of the
-  // following change.
+    template <>
+    octave_idx_type
+    schur<Matrix>::init (const Matrix& a, const std::string& ord, bool calc_unitary)
+    {
+      octave_idx_type a_nr = a.rows ();
+      octave_idx_type a_nc = a.cols ();
+
+      if (a_nr != a_nc)
+        (*current_liboctave_error_handler) ("schur: requires square matrix");
 
-  char jobvs;
-  char sense = 'N';
-  char sort = 'N';
+      if (a_nr == 0)
+        {
+          schur_mat.clear ();
+          unitary_mat.clear ();
+          return 0;
+        }
+
+      // Workspace requirements may need to be fixed if any of the
+      // following change.
 
-  if (calc_unitary)
-    jobvs = 'V';
-  else
-    jobvs = 'N';
+      char jobvs;
+      char sense = 'N';
+      char sort = 'N';
+
+      if (calc_unitary)
+        jobvs = 'V';
+      else
+        jobvs = 'N';
 
-  char ord_char = ord.empty () ? 'U' : ord[0];
+      char ord_char = ord.empty () ? 'U' : ord[0];
+
+      if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
+        sort = 'S';
 
-  if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
-    sort = 'S';
+      volatile double_selector selector = 0;
+      if (ord_char == 'A' || ord_char == 'a')
+        selector = select_ana<double>;
+      else if (ord_char == 'D' || ord_char == 'd')
+        selector = select_dig<double>;
 
-  volatile double_selector selector = 0;
-  if (ord_char == 'A' || ord_char == 'a')
-    selector = select_ana<double>;
-  else if (ord_char == 'D' || ord_char == 'd')
-    selector = select_dig<double>;
+      octave_idx_type n = a_nc;
+      octave_idx_type lwork = 8 * n;
+      octave_idx_type liwork = 1;
+      octave_idx_type info;
+      octave_idx_type sdim;
+      double rconde;
+      double rcondv;
+
+      schur_mat = a;
+
+      if (calc_unitary)
+        unitary_mat.clear (n, n);
+
+      double *s = schur_mat.fortran_vec ();
+      double *q = unitary_mat.fortran_vec ();
+
+      Array<double> wr (dim_vector (n, 1));
+      double *pwr = wr.fortran_vec ();
+
+      Array<double> wi (dim_vector (n, 1));
+      double *pwi = wi.fortran_vec ();
 
-  octave_idx_type n = a_nc;
-  octave_idx_type lwork = 8 * n;
-  octave_idx_type liwork = 1;
-  octave_idx_type info;
-  octave_idx_type sdim;
-  double rconde;
-  double rcondv;
+      Array<double> work (dim_vector (lwork, 1));
+      double *pwork = work.fortran_vec ();
+
+      // BWORK is not referenced for the non-ordered Schur routine.
+      octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
+      Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
+      octave_idx_type *pbwork = bwork.fortran_vec ();
+
+      Array<octave_idx_type> iwork (dim_vector (liwork, 1));
+      octave_idx_type *piwork = iwork.fortran_vec ();
 
-  schur_mat = a;
-
-  if (calc_unitary)
-    unitary_mat.clear (n, n);
+      F77_XFCN (dgeesx, DGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
+                                 F77_CONST_CHAR_ARG2 (&sort, 1),
+                                 selector,
+                                 F77_CONST_CHAR_ARG2 (&sense, 1),
+                                 n, s, n, sdim, pwr, pwi, q, n, rconde, rcondv,
+                                 pwork, lwork, piwork, liwork, pbwork, info
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)));
 
-  double *s = schur_mat.fortran_vec ();
-  double *q = unitary_mat.fortran_vec ();
-
-  Array<double> wr (dim_vector (n, 1));
-  double *pwr = wr.fortran_vec ();
+      return info;
+    }
 
-  Array<double> wi (dim_vector (n, 1));
-  double *pwi = wi.fortran_vec ();
+    template <>
+    octave_idx_type
+    schur<FloatMatrix>::init (const FloatMatrix& a, const std::string& ord,
+                              bool calc_unitary)
+    {
+      octave_idx_type a_nr = a.rows ();
+      octave_idx_type a_nc = a.cols ();
 
-  Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+      if (a_nr != a_nc)
+        (*current_liboctave_error_handler) ("SCHUR requires square matrix");
+
+      if (a_nr == 0)
+        {
+          schur_mat.clear ();
+          unitary_mat.clear ();
+          return 0;
+        }
 
-  // BWORK is not referenced for the non-ordered Schur routine.
-  octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
-  Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
-  octave_idx_type *pbwork = bwork.fortran_vec ();
+      // Workspace requirements may need to be fixed if any of the
+      // following change.
+
+      char jobvs;
+      char sense = 'N';
+      char sort = 'N';
 
-  Array<octave_idx_type> iwork (dim_vector (liwork, 1));
-  octave_idx_type *piwork = iwork.fortran_vec ();
+      if (calc_unitary)
+        jobvs = 'V';
+      else
+        jobvs = 'N';
+
+      char ord_char = ord.empty () ? 'U' : ord[0];
+
+      if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
+        sort = 'S';
+
+      volatile float_selector selector = 0;
+      if (ord_char == 'A' || ord_char == 'a')
+        selector = select_ana<float>;
+      else if (ord_char == 'D' || ord_char == 'd')
+        selector = select_dig<float>;
 
-  F77_XFCN (dgeesx, DGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
-                             F77_CONST_CHAR_ARG2 (&sort, 1),
-                             selector,
-                             F77_CONST_CHAR_ARG2 (&sense, 1),
-                             n, s, n, sdim, pwr, pwi, q, n, rconde, rcondv,
-                             pwork, lwork, piwork, liwork, pbwork, info
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)));
+      octave_idx_type n = a_nc;
+      octave_idx_type lwork = 8 * n;
+      octave_idx_type liwork = 1;
+      octave_idx_type info;
+      octave_idx_type sdim;
+      float rconde;
+      float rcondv;
+
+      schur_mat = a;
 
-  return info;
-}
+      if (calc_unitary)
+        unitary_mat.clear (n, n);
+
+      float *s = schur_mat.fortran_vec ();
+      float *q = unitary_mat.fortran_vec ();
+
+      Array<float> wr (dim_vector (n, 1));
+      float *pwr = wr.fortran_vec ();
+
+      Array<float> wi (dim_vector (n, 1));
+      float *pwi = wi.fortran_vec ();
 
-template <>
-octave_idx_type
-schur<FloatMatrix>::init (const FloatMatrix& a, const std::string& ord,
-                          bool calc_unitary)
-{
-  octave_idx_type a_nr = a.rows ();
-  octave_idx_type a_nc = a.cols ();
+      Array<float> work (dim_vector (lwork, 1));
+      float *pwork = work.fortran_vec ();
+
+      // BWORK is not referenced for the non-ordered Schur routine.
+      octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
+      Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
+      octave_idx_type *pbwork = bwork.fortran_vec ();
+
+      Array<octave_idx_type> iwork (dim_vector (liwork, 1));
+      octave_idx_type *piwork = iwork.fortran_vec ();
 
-  if (a_nr != a_nc)
-    (*current_liboctave_error_handler) ("SCHUR requires square matrix");
+      F77_XFCN (sgeesx, SGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
+                                 F77_CONST_CHAR_ARG2 (&sort, 1),
+                                 selector,
+                                 F77_CONST_CHAR_ARG2 (&sense, 1),
+                                 n, s, n, sdim, pwr, pwi, q, n, rconde, rcondv,
+                                 pwork, lwork, piwork, liwork, pbwork, info
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)));
 
-  if (a_nr == 0)
-    {
-      schur_mat.clear ();
-      unitary_mat.clear ();
-      return 0;
+      return info;
     }
 
-  // Workspace requirements may need to be fixed if any of the
-  // following change.
+    template <>
+    octave_idx_type
+    schur<ComplexMatrix>::init (const ComplexMatrix& a, const std::string& ord,
+                                bool calc_unitary)
+    {
+      octave_idx_type a_nr = a.rows ();
+      octave_idx_type a_nc = a.cols ();
 
-  char jobvs;
-  char sense = 'N';
-  char sort = 'N';
+      if (a_nr != a_nc)
+        (*current_liboctave_error_handler) ("SCHUR requires square matrix");
 
-  if (calc_unitary)
-    jobvs = 'V';
-  else
-    jobvs = 'N';
+      if (a_nr == 0)
+        {
+          schur_mat.clear ();
+          unitary_mat.clear ();
+          return 0;
+        }
 
-  char ord_char = ord.empty () ? 'U' : ord[0];
+      // Workspace requirements may need to be fixed if any of the
+      // following change.
 
-  if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
-    sort = 'S';
+      char jobvs;
+      char sense = 'N';
+      char sort = 'N';
 
-  volatile float_selector selector = 0;
-  if (ord_char == 'A' || ord_char == 'a')
-    selector = select_ana<float>;
-  else if (ord_char == 'D' || ord_char == 'd')
-    selector = select_dig<float>;
+      if (calc_unitary)
+        jobvs = 'V';
+      else
+        jobvs = 'N';
+
+      char ord_char = ord.empty () ? 'U' : ord[0];
+
+      if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
+        sort = 'S';
 
-  octave_idx_type n = a_nc;
-  octave_idx_type lwork = 8 * n;
-  octave_idx_type liwork = 1;
-  octave_idx_type info;
-  octave_idx_type sdim;
-  float rconde;
-  float rcondv;
+      volatile complex_selector selector = 0;
+      if (ord_char == 'A' || ord_char == 'a')
+        selector = select_ana<Complex>;
+      else if (ord_char == 'D' || ord_char == 'd')
+        selector = select_dig<Complex>;
 
-  schur_mat = a;
-
-  if (calc_unitary)
-    unitary_mat.clear (n, n);
+      octave_idx_type n = a_nc;
+      octave_idx_type lwork = 8 * n;
+      octave_idx_type info;
+      octave_idx_type sdim;
+      double rconde;
+      double rcondv;
 
-  float *s = schur_mat.fortran_vec ();
-  float *q = unitary_mat.fortran_vec ();
-
-  Array<float> wr (dim_vector (n, 1));
-  float *pwr = wr.fortran_vec ();
+      schur_mat = a;
+      if (calc_unitary)
+        unitary_mat.clear (n, n);
 
-  Array<float> wi (dim_vector (n, 1));
-  float *pwi = wi.fortran_vec ();
+      Complex *s = schur_mat.fortran_vec ();
+      Complex *q = unitary_mat.fortran_vec ();
+
+      Array<double> rwork (dim_vector (n, 1));
+      double *prwork = rwork.fortran_vec ();
 
-  Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+      Array<Complex> w (dim_vector (n, 1));
+      Complex *pw = w.fortran_vec ();
+
+      Array<Complex> work (dim_vector (lwork, 1));
+      Complex *pwork = work.fortran_vec ();
 
-  // BWORK is not referenced for the non-ordered Schur routine.
-  octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
-  Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
-  octave_idx_type *pbwork = bwork.fortran_vec ();
+      // BWORK is not referenced for non-ordered Schur.
+      octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
+      Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
+      octave_idx_type *pbwork = bwork.fortran_vec ();
 
-  Array<octave_idx_type> iwork (dim_vector (liwork, 1));
-  octave_idx_type *piwork = iwork.fortran_vec ();
+      F77_XFCN (zgeesx, ZGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
+                                 F77_CONST_CHAR_ARG2 (&sort, 1),
+                                 selector,
+                                 F77_CONST_CHAR_ARG2 (&sense, 1),
+                                 n, F77_DBLE_CMPLX_ARG (s), n, sdim, F77_DBLE_CMPLX_ARG (pw), F77_DBLE_CMPLX_ARG (q), n, rconde, rcondv,
+                                 F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, pbwork, info
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)));
 
-  F77_XFCN (sgeesx, SGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
-                             F77_CONST_CHAR_ARG2 (&sort, 1),
-                             selector,
-                             F77_CONST_CHAR_ARG2 (&sense, 1),
-                             n, s, n, sdim, pwr, pwi, q, n, rconde, rcondv,
-                             pwork, lwork, piwork, liwork, pbwork, info
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)));
+      return info;
+    }
 
-  return info;
-}
+    template <>
+    schur<ComplexMatrix>
+    rsf2csf<ComplexMatrix, Matrix> (const Matrix& s_arg, const Matrix& u_arg)
+    {
+      ComplexMatrix s (s_arg);
+      ComplexMatrix u (u_arg);
+
+      octave_idx_type n = s.rows ();
 
-template <>
-octave_idx_type
-schur<ComplexMatrix>::init (const ComplexMatrix& a, const std::string& ord,
-                            bool calc_unitary)
-{
-  octave_idx_type a_nr = a.rows ();
-  octave_idx_type a_nc = a.cols ();
+      if (s.columns () != n || u.rows () != n || u.columns () != n)
+        (*current_liboctave_error_handler)
+          ("rsf2csf: inconsistent matrix dimensions");
 
-  if (a_nr != a_nc)
-    (*current_liboctave_error_handler) ("SCHUR requires square matrix");
+      if (n > 0)
+        {
+          OCTAVE_LOCAL_BUFFER (double, c, n-1);
+          OCTAVE_LOCAL_BUFFER (double, sx, n-1);
 
-  if (a_nr == 0)
-    {
-      schur_mat.clear ();
-      unitary_mat.clear ();
-      return 0;
+          F77_XFCN (zrsf2csf, ZRSF2CSF, (n, F77_DBLE_CMPLX_ARG (s.fortran_vec ()),
+                                         F77_DBLE_CMPLX_ARG (u.fortran_vec ()), c, sx));
+        }
+
+      return schur<ComplexMatrix> (s, u);
     }
 
-  // Workspace requirements may need to be fixed if any of the
-  // following change.
-
-  char jobvs;
-  char sense = 'N';
-  char sort = 'N';
+    template <>
+    octave_idx_type
+    schur<FloatComplexMatrix>::init (const FloatComplexMatrix& a,
+                                     const std::string& ord, bool calc_unitary)
+    {
+      octave_idx_type a_nr = a.rows ();
+      octave_idx_type a_nc = a.cols ();
 
-  if (calc_unitary)
-    jobvs = 'V';
-  else
-    jobvs = 'N';
-
-  char ord_char = ord.empty () ? 'U' : ord[0];
-
-  if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
-    sort = 'S';
+      if (a_nr != a_nc)
+        (*current_liboctave_error_handler) ("SCHUR requires square matrix");
 
-  volatile complex_selector selector = 0;
-  if (ord_char == 'A' || ord_char == 'a')
-    selector = select_ana<Complex>;
-  else if (ord_char == 'D' || ord_char == 'd')
-    selector = select_dig<Complex>;
+      if (a_nr == 0)
+        {
+          schur_mat.clear ();
+          unitary_mat.clear ();
+          return 0;
+        }
+
+      // Workspace requirements may need to be fixed if any of the
+      // following change.
 
-  octave_idx_type n = a_nc;
-  octave_idx_type lwork = 8 * n;
-  octave_idx_type info;
-  octave_idx_type sdim;
-  double rconde;
-  double rcondv;
+      char jobvs;
+      char sense = 'N';
+      char sort = 'N';
 
-  schur_mat = a;
-  if (calc_unitary)
-    unitary_mat.clear (n, n);
+      if (calc_unitary)
+        jobvs = 'V';
+      else
+        jobvs = 'N';
 
-  Complex *s = schur_mat.fortran_vec ();
-  Complex *q = unitary_mat.fortran_vec ();
+      char ord_char = ord.empty () ? 'U' : ord[0];
 
-  Array<double> rwork (dim_vector (n, 1));
-  double *prwork = rwork.fortran_vec ();
+      if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
+        sort = 'S';
 
-  Array<Complex> w (dim_vector (n, 1));
-  Complex *pw = w.fortran_vec ();
-
-  Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+      volatile float_complex_selector selector = 0;
+      if (ord_char == 'A' || ord_char == 'a')
+        selector = select_ana<FloatComplex>;
+      else if (ord_char == 'D' || ord_char == 'd')
+        selector = select_dig<FloatComplex>;
 
-  // BWORK is not referenced for non-ordered Schur.
-  octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
-  Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
-  octave_idx_type *pbwork = bwork.fortran_vec ();
+      octave_idx_type n = a_nc;
+      octave_idx_type lwork = 8 * n;
+      octave_idx_type info;
+      octave_idx_type sdim;
+      float rconde;
+      float rcondv;
 
-  F77_XFCN (zgeesx, ZGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
-                             F77_CONST_CHAR_ARG2 (&sort, 1),
-                             selector,
-                             F77_CONST_CHAR_ARG2 (&sense, 1),
-                             n, F77_DBLE_CMPLX_ARG (s), n, sdim, F77_DBLE_CMPLX_ARG (pw), F77_DBLE_CMPLX_ARG (q), n, rconde, rcondv,
-                             F77_DBLE_CMPLX_ARG (pwork), lwork, prwork, pbwork, info
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)));
+      schur_mat = a;
+      if (calc_unitary)
+        unitary_mat.clear (n, n);
+
+      FloatComplex *s = schur_mat.fortran_vec ();
+      FloatComplex *q = unitary_mat.fortran_vec ();
+
+      Array<float> rwork (dim_vector (n, 1));
+      float *prwork = rwork.fortran_vec ();
 
-  return info;
-}
+      Array<FloatComplex> w (dim_vector (n, 1));
+      FloatComplex *pw = w.fortran_vec ();
 
-template <>
-schur<ComplexMatrix>
-rsf2csf<ComplexMatrix, Matrix> (const Matrix& s_arg, const Matrix& u_arg)
-{
-  ComplexMatrix s (s_arg);
-  ComplexMatrix u (u_arg);
+      Array<FloatComplex> work (dim_vector (lwork, 1));
+      FloatComplex *pwork = work.fortran_vec ();
 
-  octave_idx_type n = s.rows ();
+      // BWORK is not referenced for non-ordered Schur.
+      octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
+      Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
+      octave_idx_type *pbwork = bwork.fortran_vec ();
 
-  if (s.columns () != n || u.rows () != n || u.columns () != n)
-    (*current_liboctave_error_handler)
-      ("rsf2csf: inconsistent matrix dimensions");
+      F77_XFCN (cgeesx, CGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
+                                 F77_CONST_CHAR_ARG2 (&sort, 1),
+                                 selector,
+                                 F77_CONST_CHAR_ARG2 (&sense, 1),
+                                 n, F77_CMPLX_ARG (s), n, sdim, F77_CMPLX_ARG (pw), F77_CMPLX_ARG (q), n, rconde, rcondv,
+                                 F77_CMPLX_ARG (pwork), lwork, prwork, pbwork, info
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)
+                                 F77_CHAR_ARG_LEN (1)));
 
-  if (n > 0)
-    {
-      OCTAVE_LOCAL_BUFFER (double, c, n-1);
-      OCTAVE_LOCAL_BUFFER (double, sx, n-1);
-
-      F77_XFCN (zrsf2csf, ZRSF2CSF, (n, F77_DBLE_CMPLX_ARG (s.fortran_vec ()),
-                                     F77_DBLE_CMPLX_ARG (u.fortran_vec ()), c, sx));
+      return info;
     }
 
-  return schur<ComplexMatrix> (s, u);
-}
+    template <>
+    schur<FloatComplexMatrix>
+    rsf2csf<FloatComplexMatrix, FloatMatrix> (const FloatMatrix& s_arg, const FloatMatrix& u_arg)
+    {
+      FloatComplexMatrix s (s_arg);
+      FloatComplexMatrix u (u_arg);
+
+      octave_idx_type n = s.rows ();
 
-template <>
-octave_idx_type
-schur<FloatComplexMatrix>::init (const FloatComplexMatrix& a,
-                                 const std::string& ord, bool calc_unitary)
-{
-  octave_idx_type a_nr = a.rows ();
-  octave_idx_type a_nc = a.cols ();
+      if (s.columns () != n || u.rows () != n || u.columns () != n)
+        (*current_liboctave_error_handler)
+          ("rsf2csf: inconsistent matrix dimensions");
 
-  if (a_nr != a_nc)
-    (*current_liboctave_error_handler) ("SCHUR requires square matrix");
+      if (n > 0)
+        {
+          OCTAVE_LOCAL_BUFFER (float, c, n-1);
+          OCTAVE_LOCAL_BUFFER (float, sx, n-1);
 
-  if (a_nr == 0)
-    {
-      schur_mat.clear ();
-      unitary_mat.clear ();
-      return 0;
+          F77_XFCN (crsf2csf, CRSF2CSF, (n, F77_CMPLX_ARG (s.fortran_vec ()),
+                                         F77_CMPLX_ARG (u.fortran_vec ()), c, sx));
+        }
+
+      return schur<FloatComplexMatrix> (s, u);
     }
 
-  // Workspace requirements may need to be fixed if any of the
-  // following change.
-
-  char jobvs;
-  char sense = 'N';
-  char sort = 'N';
-
-  if (calc_unitary)
-    jobvs = 'V';
-  else
-    jobvs = 'N';
-
-  char ord_char = ord.empty () ? 'U' : ord[0];
-
-  if (ord_char == 'A' || ord_char == 'D' || ord_char == 'a' || ord_char == 'd')
-    sort = 'S';
-
-  volatile float_complex_selector selector = 0;
-  if (ord_char == 'A' || ord_char == 'a')
-    selector = select_ana<FloatComplex>;
-  else if (ord_char == 'D' || ord_char == 'd')
-    selector = select_dig<FloatComplex>;
+    // Instantiations we need.
 
-  octave_idx_type n = a_nc;
-  octave_idx_type lwork = 8 * n;
-  octave_idx_type info;
-  octave_idx_type sdim;
-  float rconde;
-  float rcondv;
-
-  schur_mat = a;
-  if (calc_unitary)
-    unitary_mat.clear (n, n);
-
-  FloatComplex *s = schur_mat.fortran_vec ();
-  FloatComplex *q = unitary_mat.fortran_vec ();
+    template class schur<ComplexMatrix>;
 
-  Array<float> rwork (dim_vector (n, 1));
-  float *prwork = rwork.fortran_vec ();
-
-  Array<FloatComplex> w (dim_vector (n, 1));
-  FloatComplex *pw = w.fortran_vec ();
-
-  Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
-
-  // BWORK is not referenced for non-ordered Schur.
-  octave_idx_type ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
-  Array<octave_idx_type> bwork (dim_vector (ntmp, 1));
-  octave_idx_type *pbwork = bwork.fortran_vec ();
+    template class schur<FloatComplexMatrix>;
 
-  F77_XFCN (cgeesx, CGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
-                             F77_CONST_CHAR_ARG2 (&sort, 1),
-                             selector,
-                             F77_CONST_CHAR_ARG2 (&sense, 1),
-                             n, F77_CMPLX_ARG (s), n, sdim, F77_CMPLX_ARG (pw), F77_CMPLX_ARG (q), n, rconde, rcondv,
-                             F77_CMPLX_ARG (pwork), lwork, prwork, pbwork, info
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)
-                             F77_CHAR_ARG_LEN (1)));
-
-  return info;
-}
-
-template <>
-schur<FloatComplexMatrix>
-rsf2csf<FloatComplexMatrix, FloatMatrix> (const FloatMatrix& s_arg, const FloatMatrix& u_arg)
-{
-  FloatComplexMatrix s (s_arg);
-  FloatComplexMatrix u (u_arg);
-
-  octave_idx_type n = s.rows ();
+    template class schur<FloatMatrix>;
 
-  if (s.columns () != n || u.rows () != n || u.columns () != n)
-    (*current_liboctave_error_handler)
-      ("rsf2csf: inconsistent matrix dimensions");
-
-  if (n > 0)
-    {
-      OCTAVE_LOCAL_BUFFER (float, c, n-1);
-      OCTAVE_LOCAL_BUFFER (float, sx, n-1);
-
-      F77_XFCN (crsf2csf, CRSF2CSF, (n, F77_CMPLX_ARG (s.fortran_vec ()),
-                                     F77_CMPLX_ARG (u.fortran_vec ()), c, sx));
-    }
-
-  return schur<FloatComplexMatrix> (s, u);
+    template class schur<Matrix>;
+  }
 }
-
-// Instantiations we need.
-
-template class schur<ComplexMatrix>;
-
-template class schur<FloatComplexMatrix>;
-
-template class schur<FloatMatrix>;
-
-template class schur<Matrix>;
-
-}
-}