diff --git a/docs/source/nnls_solving.rst b/docs/source/nnls_solving.rst
index ac617a7..db87619 100644
--- a/docs/source/nnls_solving.rst
+++ b/docs/source/nnls_solving.rst
@@ -2154,6 +2154,23 @@
    and asked for an automatic ordering, or if the problem contains
    some constant or inactive parameter blocks.
 
+.. member:: std::string Solver::Summary::schur_structure_given
+
+    For Schur type linear solvers, this string describes, the template
+    specialization which was detected in the problem and should be
+    used.
+
+.. member:: std::string Solver::Summary::schur_structure_used
+
+   For Schur type linear solvers, this string describes the template
+   specialization that was actually instantiated and used. The reason
+   this will be different from
+   :member:`Solver::Summary::schur_structure_given` is because the
+   corresponding template specialization does not exist.
+
+   Template specializations can be added to ceres by editing
+   ``internal/ceres/generate_template_specializations.py``
+
 .. member:: bool Solver::Summary::inner_iterations_given
 
    `True` if the user asked for inner iterations to be used as part of
diff --git a/include/ceres/solver.h b/include/ceres/solver.h
index 0d77d24..45a7c69 100644
--- a/include/ceres/solver.h
+++ b/include/ceres/solver.h
@@ -953,6 +953,19 @@
     // parameter blocks.
     std::vector<int> linear_solver_ordering_used;
 
+    // For Schur type linear solvers, this string describes, the
+    // template specialization which was detected in the problem and should be used.
+    std::string schur_structure_given;
+
+    // This is the Schur template specialization that was actually
+    // instantiated and used. The reason this will be different from
+    // schur_structure_given is because the corresponding template
+    // specialization does not exist.
+    //
+    // Template specializations can be added to ceres by editing
+    // internal/ceres/generate_template_specializations.py
+    std::string schur_structure_used;
+
     // True if the user asked for inner iterations to be used as part
     // of the optimization.
     bool inner_iterations_given;
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index bdcbdd1..0f6c4be 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -98,6 +98,7 @@
     schur_complement_solver.cc
     schur_eliminator.cc
     schur_jacobi_preconditioner.cc
+    schur_templates.cc
     scratch_evaluate_preparer.cc
     single_linkage_clustering.cc
     solver.cc
diff --git a/internal/ceres/generate_eliminator_specialization.py b/internal/ceres/generate_template_specializations.py
similarity index 67%
rename from internal/ceres/generate_eliminator_specialization.py
rename to internal/ceres/generate_template_specializations.py
index e89e7a4..cbfcb71 100644
--- a/internal/ceres/generate_eliminator_specialization.py
+++ b/internal/ceres/generate_template_specializations.py
@@ -67,10 +67,74 @@
                    (4, 4, 2),
                    (4, 4, 3),
                    (4, 4, 4),
-                   (4, 4, "Eigen::Dynamic"),
-                   ("Eigen::Dynamic", "Eigen::Dynamic", "Eigen::Dynamic")]
-HEADER = """// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+                   (4, 4, "Eigen::Dynamic")]
+
+import schur_eliminator_template
+import partitioned_matrix_view_template
+
+def SuffixForSize(size):
+  if size == "Eigen::Dynamic":
+    return "d"
+  return str(size)
+
+def SpecializationFilename(prefix, row_block_size, e_block_size, f_block_size):
+  return "_".join([prefix] + map(SuffixForSize, (row_block_size,
+                                                 e_block_size,
+                                                 f_block_size)))
+
+def GenerateFactoryConditional(row_block_size, e_block_size, f_block_size):
+  conditionals = []
+  if (row_block_size != "Eigen::Dynamic"):
+    conditionals.append("(options.row_block_size == %s)" % row_block_size)
+  if (e_block_size != "Eigen::Dynamic"):
+    conditionals.append("(options.e_block_size == %s)" % e_block_size)
+  if (f_block_size != "Eigen::Dynamic"):
+    conditionals.append("(options.f_block_size == %s)" % f_block_size)
+  if (len(conditionals) == 0):
+    return "%s"
+
+  if (len(conditionals) == 1):
+    return " if " + conditionals[0] + "{\n  %s\n }\n"
+
+  return " if (" + " &&\n  ".join(conditionals) + ") {\n  %s\n }\n"
+
+def Specialize(name, data):
+  """
+  Generate specialization code and the conditionals to instantiate it.
+  """
+  f = open(name + ".cc", "w")
+  f.write(data["HEADER"])
+  f.write(data["FACTORY_FILE_HEADER"])
+
+  for row_block_size, e_block_size, f_block_size in SPECIALIZATIONS:
+    output = SpecializationFilename("generated/" + name,
+                                    row_block_size,
+                                    e_block_size,
+                                    f_block_size) + ".cc"
+    fptr = open(output, "w")
+    fptr.write(data["HEADER"])
+
+    template = data["SPECIALIZATION_FILE"]
+    if (row_block_size == "Eigen::Dynamic" and
+        e_block_size == "Eigen::Dynamic" and
+        f_block_size == "Eigen::Dynamic"):
+      template = data["DYNAMIC_FILE"]
+
+    fptr.write(template % (row_block_size, e_block_size, f_block_size))
+    fptr.close()
+
+    FACTORY_CONDITIONAL =
+    GenerateFactoryConditional(row_block_size, e_block_size, f_block_size)
+    f.write(FACTORY_CONDITIONAL % data["FACTORY"] %
+              (row_block_size, e_block_size, f_block_size));
+
+  f.write(data["FACTORY_FOOTER"])
+  f.close()
+
+
+
+QUERY_HEADER = """// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -99,7 +163,7 @@
 //
 // Author: sameeragarwal@google.com (Sameer Agarwal)
 //
-// Template specialization of SchurEliminator.
+// What template specializations are available.
 //
 // ========================================
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
@@ -108,124 +172,60 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 """
 
-DYNAMIC_FILE = """
-
-#include "ceres/schur_eliminator_impl.h"
+QUERY_FILE_HEADER = """
 #include "ceres/internal/eigen.h"
+#include "ceres/schur_templates.h"
 
 namespace ceres {
 namespace internal {
 
-template class SchurEliminator<%s, %s, %s>;
-
-}  // namespace internal
-}  // namespace ceres
-"""
-
-SPECIALIZATION_FILE = """
-// This include must come before any #ifndef check on Ceres compile options.
-#include "ceres/internal/port.h"
-
-#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
-
-#include "ceres/schur_eliminator_impl.h"
-#include "ceres/internal/eigen.h"
-
-namespace ceres {
-namespace internal {
-
-template class SchurEliminator<%s, %s, %s>;
-
-}  // namespace internal
-}  // namespace ceres
-
-#endif  // CERES_RESTRICT_SCHUR_SPECIALIZATION
-"""
-
-FACTORY_FILE_HEADER = """
-#include "ceres/linear_solver.h"
-#include "ceres/schur_eliminator.h"
-#include "ceres/internal/eigen.h"
-
-namespace ceres {
-namespace internal {
-
-SchurEliminatorBase*
-SchurEliminatorBase::Create(const LinearSolver::Options& options) {
+void GetBestSchurTemplateSpecialization(int* row_block_size,
+                                        int* e_block_size,
+                                        int* f_block_size) {
+  LinearSolver::Options options;
+  options.row_block_size = *row_block_size;
+  options.e_block_size = *e_block_size;
+  options.f_block_size = *f_block_size;
+  *row_block_size = Eigen::Dynamic;
+  *e_block_size = Eigen::Dynamic;
+  *f_block_size = Eigen::Dynamic;
 #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
 """
 
-FACTORY_CONDITIONAL = """  if ((options.row_block_size == %s) &&
-      (options.e_block_size == %s) &&
-      (options.f_block_size == %s)) {
-    return new SchurEliminator<%s, %s, %s>(options);
-  }
-"""
-
-FACTORY_FOOTER = """
+QUERY_FOOTER = """
 #endif
-  VLOG(1) << "Template specializations not found for <"
-          << options.row_block_size << ","
-          << options.e_block_size << ","
-          << options.f_block_size << ">";
-  return new SchurEliminator<Eigen::Dynamic, Eigen::Dynamic, Eigen::Dynamic>(options);
+  return;
 }
 
 }  // namespace internal
 }  // namespace ceres
 """
 
+QUERY_ACTION = """*row_block_size = %s;
+  *e_block_size = %s;
+  *f_block_size = %s;
+  return;"""
 
-def SuffixForSize(size):
-  if size == "Eigen::Dynamic":
-    return "d"
-  return str(size)
-
-
-def SpecializationFilename(prefix, row_block_size, e_block_size, f_block_size):
-  return "_".join([prefix] + map(SuffixForSize, (row_block_size,
-                                                 e_block_size,
-                                                 f_block_size)))
-
-
-def Specialize():
+def GenerateQueryFile():
   """
   Generate specialization code and the conditionals to instantiate it.
   """
-  f = open("schur_eliminator.cc", "w")
-  f.write(HEADER)
-  f.write(FACTORY_FILE_HEADER)
+  f = open("schur_templates.cc", "w")
+  f.write(QUERY_HEADER)
+  f.write(QUERY_FILE_HEADER)
 
   for row_block_size, e_block_size, f_block_size in SPECIALIZATIONS:
-    output = SpecializationFilename("generated/schur_eliminator",
-                                    row_block_size,
-                                    e_block_size,
-                                    f_block_size) + ".cc"
-    fptr = open(output, "w")
-    fptr.write(HEADER)
+    FACTORY_CONDITIONAL = GenerateFactoryConditional(row_block_size, e_block_size, f_block_size)
+    f.write(FACTORY_CONDITIONAL % QUERY_ACTION % (row_block_size, e_block_size, f_block_size));
 
-    template = SPECIALIZATION_FILE
-    if (row_block_size == "Eigen::Dynamic" and
-        e_block_size == "Eigen::Dynamic" and
-        f_block_size == "Eigen::Dynamic"):
-      template = DYNAMIC_FILE
-
-    fptr.write(template % (row_block_size, e_block_size, f_block_size))
-    fptr.close()
-
-    f.write(FACTORY_CONDITIONAL % (row_block_size,
-                                   e_block_size,
-                                   f_block_size,
-                                   row_block_size,
-                                   e_block_size,
-                                   f_block_size))
-  f.write(FACTORY_FOOTER)
+  f.write(QUERY_FOOTER)
   f.close()
 
 
 if __name__ == "__main__":
-  Specialize()
+  Specialize("schur_eliminator", schur_eliminator_template.__dict__)
+  Specialize("partitioned_matrix_view", partitioned_matrix_view_template.__dict__)
+  GenerateQueryFile()
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc
index 500115b..86ad17b 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_2_2.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc
index 1384cb6..33018d5 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_2_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc
index 030035e..a429a54 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_2_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc
index c9501b5..f6f03ea 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_2_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc
index c2639bf..0b73e1a 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_3_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc
index 693e439..bc4a861 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_3_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_6.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_6.cc
index 7b9368f..fe8f7dd 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_3_6.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_3_6.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc
index e72c5f6..ac493fc 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_3_9.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc
index c1f410e..e29efaf 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_3_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc
index 7292c33..e61e0a3 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_4_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc
index 891d65a..2e1170d 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_4_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc
index 395f6bd..83015f1 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_4_8.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc
index 88952b1..25671f9 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_4_9.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc
index 7733e19..d259802 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_4_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc b/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc
index 117a0cd..c956759 100644
--- a/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_2_d_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc
index a620bb7..f08049c 100644
--- a/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_4_4_2.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc
index 2978630..9342612 100644
--- a/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_4_4_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc
index bcd03b0..8b273fa 100644
--- a/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_4_4_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc b/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc
index 6b541ec..e8b45e4 100644
--- a/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_4_4_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/partitioned_matrix_view_d_d_d.cc b/internal/ceres/generated/partitioned_matrix_view_d_d_d.cc
index 85111e7..434902c 100644
--- a/internal/ceres/generated/partitioned_matrix_view_d_d_d.cc
+++ b/internal/ceres/generated/partitioned_matrix_view_d_d_d.cc
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 
 #include "ceres/partitioned_matrix_view_impl.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_2_2.cc b/internal/ceres/generated/schur_eliminator_2_2_2.cc
index ac07a3f..79fcf43 100644
--- a/internal/ceres/generated/schur_eliminator_2_2_2.cc
+++ b/internal/ceres/generated/schur_eliminator_2_2_2.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_2_3.cc b/internal/ceres/generated/schur_eliminator_2_2_3.cc
index 0ec0955..edd7fb6 100644
--- a/internal/ceres/generated/schur_eliminator_2_2_3.cc
+++ b/internal/ceres/generated/schur_eliminator_2_2_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_2_4.cc b/internal/ceres/generated/schur_eliminator_2_2_4.cc
index 74a42cc..692267d 100644
--- a/internal/ceres/generated/schur_eliminator_2_2_4.cc
+++ b/internal/ceres/generated/schur_eliminator_2_2_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_2_d.cc b/internal/ceres/generated/schur_eliminator_2_2_d.cc
index 5ce757f..33d9c6d 100644
--- a/internal/ceres/generated/schur_eliminator_2_2_d.cc
+++ b/internal/ceres/generated/schur_eliminator_2_2_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_3_3.cc b/internal/ceres/generated/schur_eliminator_2_3_3.cc
index 2e7ae28..4a5e2fe 100644
--- a/internal/ceres/generated/schur_eliminator_2_3_3.cc
+++ b/internal/ceres/generated/schur_eliminator_2_3_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_3_4.cc b/internal/ceres/generated/schur_eliminator_2_3_4.cc
index 4432070..7ee63d0 100644
--- a/internal/ceres/generated/schur_eliminator_2_3_4.cc
+++ b/internal/ceres/generated/schur_eliminator_2_3_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_3_6.cc b/internal/ceres/generated/schur_eliminator_2_3_6.cc
index ac2f358..108760e 100644
--- a/internal/ceres/generated/schur_eliminator_2_3_6.cc
+++ b/internal/ceres/generated/schur_eliminator_2_3_6.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_3_9.cc b/internal/ceres/generated/schur_eliminator_2_3_9.cc
index 930ab44..4fea2fa 100644
--- a/internal/ceres/generated/schur_eliminator_2_3_9.cc
+++ b/internal/ceres/generated/schur_eliminator_2_3_9.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_3_d.cc b/internal/ceres/generated/schur_eliminator_2_3_d.cc
index 486c53d..0d13c99 100644
--- a/internal/ceres/generated/schur_eliminator_2_3_d.cc
+++ b/internal/ceres/generated/schur_eliminator_2_3_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_4_3.cc b/internal/ceres/generated/schur_eliminator_2_4_3.cc
index 6f247a7..3827c65 100644
--- a/internal/ceres/generated/schur_eliminator_2_4_3.cc
+++ b/internal/ceres/generated/schur_eliminator_2_4_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_4_4.cc b/internal/ceres/generated/schur_eliminator_2_4_4.cc
index c44cd04..47bdfab 100644
--- a/internal/ceres/generated/schur_eliminator_2_4_4.cc
+++ b/internal/ceres/generated/schur_eliminator_2_4_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_4_8.cc b/internal/ceres/generated/schur_eliminator_2_4_8.cc
index c9a0d5f..862c76a 100644
--- a/internal/ceres/generated/schur_eliminator_2_4_8.cc
+++ b/internal/ceres/generated/schur_eliminator_2_4_8.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_4_9.cc b/internal/ceres/generated/schur_eliminator_2_4_9.cc
index b0455b0..5b5b7cc 100644
--- a/internal/ceres/generated/schur_eliminator_2_4_9.cc
+++ b/internal/ceres/generated/schur_eliminator_2_4_9.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_4_d.cc b/internal/ceres/generated/schur_eliminator_2_4_d.cc
index 3234380..ce2d450 100644
--- a/internal/ceres/generated/schur_eliminator_2_4_d.cc
+++ b/internal/ceres/generated/schur_eliminator_2_4_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_2_d_d.cc b/internal/ceres/generated/schur_eliminator_2_d_d.cc
index 311f855..9b02bd9 100644
--- a/internal/ceres/generated/schur_eliminator_2_d_d.cc
+++ b/internal/ceres/generated/schur_eliminator_2_d_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_4_4_2.cc b/internal/ceres/generated/schur_eliminator_4_4_2.cc
index bc40bd5..10f709d 100644
--- a/internal/ceres/generated/schur_eliminator_4_4_2.cc
+++ b/internal/ceres/generated/schur_eliminator_4_4_2.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_4_4_3.cc b/internal/ceres/generated/schur_eliminator_4_4_3.cc
index cca88c8..bcbcc74 100644
--- a/internal/ceres/generated/schur_eliminator_4_4_3.cc
+++ b/internal/ceres/generated/schur_eliminator_4_4_3.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_4_4_4.cc b/internal/ceres/generated/schur_eliminator_4_4_4.cc
index 33c94a9..44ecc87 100644
--- a/internal/ceres/generated/schur_eliminator_4_4_4.cc
+++ b/internal/ceres/generated/schur_eliminator_4_4_4.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_4_4_d.cc b/internal/ceres/generated/schur_eliminator_4_4_d.cc
index 1a1866f..69c8563 100644
--- a/internal/ceres/generated/schur_eliminator_4_4_d.cc
+++ b/internal/ceres/generated/schur_eliminator_4_4_d.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 // This include must come before any #ifndef check on Ceres compile options.
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/generated/schur_eliminator_d_d_d.cc b/internal/ceres/generated/schur_eliminator_d_d_d.cc
index 6b18ef8..4a8a9c6 100644
--- a/internal/ceres/generated/schur_eliminator_d_d_d.cc
+++ b/internal/ceres/generated/schur_eliminator_d_d_d.cc
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 
 #include "ceres/schur_eliminator_impl.h"
diff --git a/internal/ceres/partitioned_matrix_view.cc b/internal/ceres/partitioned_matrix_view.cc
index 8054964..210eff1 100644
--- a/internal/ceres/partitioned_matrix_view.cc
+++ b/internal/ceres/partitioned_matrix_view.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 #include "ceres/linear_solver.h"
 #include "ceres/partitioned_matrix_view.h"
@@ -51,126 +50,95 @@
 PartitionedMatrixViewBase::Create(const LinearSolver::Options& options,
                                   const BlockSparseMatrix& matrix) {
 #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == 2)) {
-    return new PartitionedMatrixView<2, 2, 2>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == 3)) {
-    return new PartitionedMatrixView<2, 2, 3>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == 4)) {
-    return new PartitionedMatrixView<2, 2, 4>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new PartitionedMatrixView<2, 2, Eigen::Dynamic>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 3)) {
-    return new PartitionedMatrixView<2, 3, 3>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 4)) {
-    return new PartitionedMatrixView<2, 3, 4>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 6)) {
-    return new PartitionedMatrixView<2, 3, 6>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 9)) {
-    return new PartitionedMatrixView<2, 3, 9>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new PartitionedMatrixView<2, 3, Eigen::Dynamic>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 3)) {
-    return new PartitionedMatrixView<2, 4, 3>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 4)) {
-    return new PartitionedMatrixView<2, 4, 4>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 8)) {
-    return new PartitionedMatrixView<2, 4, 8>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 9)) {
-    return new PartitionedMatrixView<2, 4, 9>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new PartitionedMatrixView<2, 4, Eigen::Dynamic>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == Eigen::Dynamic) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new PartitionedMatrixView<2, Eigen::Dynamic, Eigen::Dynamic>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 2)) {
-    return new PartitionedMatrixView<4, 4, 2>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 3)) {
-    return new PartitionedMatrixView<4, 4, 3>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 4)) {
-    return new PartitionedMatrixView<4, 4, 4>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new PartitionedMatrixView<4, 4, Eigen::Dynamic>(
-                 matrix, options.elimination_groups[0]);
-  }
-  if ((options.row_block_size == Eigen::Dynamic) &&
-      (options.e_block_size == Eigen::Dynamic) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new PartitionedMatrixView<Eigen::Dynamic, Eigen::Dynamic, Eigen::Dynamic>(
-                 matrix, options.elimination_groups[0]);
-  }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 2)) {
+  return new PartitionedMatrixView<2, 2, 2>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 3)) {
+  return new PartitionedMatrixView<2, 2, 3>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 4)) {
+  return new PartitionedMatrixView<2, 2, 4>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2)) {
+  return new PartitionedMatrixView<2, 2, Eigen::Dynamic>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 3)) {
+  return new PartitionedMatrixView<2, 3, 3>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 4)) {
+  return new PartitionedMatrixView<2, 3, 4>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 6)) {
+  return new PartitionedMatrixView<2, 3, 6>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 9)) {
+  return new PartitionedMatrixView<2, 3, 9>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3)) {
+  return new PartitionedMatrixView<2, 3, Eigen::Dynamic>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 3)) {
+  return new PartitionedMatrixView<2, 4, 3>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 4)) {
+  return new PartitionedMatrixView<2, 4, 4>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 8)) {
+  return new PartitionedMatrixView<2, 4, 8>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 9)) {
+  return new PartitionedMatrixView<2, 4, 9>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4)) {
+  return new PartitionedMatrixView<2, 4, Eigen::Dynamic>(matrix, options.elimination_groups[0]);
+ }
+ if (options.row_block_size == 2){
+  return new PartitionedMatrixView<2, Eigen::Dynamic, Eigen::Dynamic>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 2)) {
+  return new PartitionedMatrixView<4, 4, 2>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 3)) {
+  return new PartitionedMatrixView<4, 4, 3>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 4)) {
+  return new PartitionedMatrixView<4, 4, 4>(matrix, options.elimination_groups[0]);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4)) {
+  return new PartitionedMatrixView<4, 4, Eigen::Dynamic>(matrix, options.elimination_groups[0]);
+ }
 
 #endif
   VLOG(1) << "Template specializations not found for <"
diff --git a/internal/ceres/generate_partitioned_matrix_view_specializations.py b/internal/ceres/partitioned_matrix_view_template.py
similarity index 67%
rename from internal/ceres/generate_partitioned_matrix_view_specializations.py
rename to internal/ceres/partitioned_matrix_view_template.py
index c4ac3cf..f610833 100644
--- a/internal/ceres/generate_partitioned_matrix_view_specializations.py
+++ b/internal/ceres/partitioned_matrix_view_template.py
@@ -46,29 +46,8 @@
 # The list of tuples, specializations indicates the set of
 # specializations that is generated.
 
-# Set of template specializations to generate
-SPECIALIZATIONS = [(2, 2, 2),
-                   (2, 2, 3),
-                   (2, 2, 4),
-                   (2, 2, "Eigen::Dynamic"),
-                   (2, 3, 3),
-                   (2, 3, 4),
-                   (2, 3, 6),
-                   (2, 3, 9),
-                   (2, 3, "Eigen::Dynamic"),
-                   (2, 4, 3),
-                   (2, 4, 4),
-                   (2, 4, 8),
-                   (2, 4, 9),
-                   (2, 4, "Eigen::Dynamic"),
-                   (2, "Eigen::Dynamic", "Eigen::Dynamic"),
-                   (4, 4, 2),
-                   (4, 4, 3),
-                   (4, 4, 4),
-                   (4, 4, "Eigen::Dynamic"),
-                   ("Eigen::Dynamic", "Eigen::Dynamic", "Eigen::Dynamic")]
 HEADER = """// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -106,8 +85,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_partitioned_matrix_view_specializations.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 """
 
 DYNAMIC_FILE = """
@@ -157,14 +135,7 @@
                                   const BlockSparseMatrix& matrix) {
 #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
 """
-
-FACTORY_CONDITIONAL = """  if ((options.row_block_size == %s) &&
-      (options.e_block_size == %s) &&
-      (options.f_block_size == %s)) {
-    return new PartitionedMatrixView<%s, %s, %s>(
-                 matrix, options.elimination_groups[0]);
-  }
-"""
+FACTORY = """return new PartitionedMatrixView<%s, %s, %s>(matrix, options.elimination_groups[0]);"""
 
 FACTORY_FOOTER = """
 #endif
@@ -179,54 +150,3 @@
 }  // namespace internal
 }  // namespace ceres
 """
-
-
-def SuffixForSize(size):
-  if size == "Eigen::Dynamic":
-    return "d"
-  return str(size)
-
-
-def SpecializationFilename(prefix, row_block_size, e_block_size, f_block_size):
-  return "_".join([prefix] + map(SuffixForSize, (row_block_size,
-                                                 e_block_size,
-                                                 f_block_size)))
-
-
-def Specialize():
-  """
-  Generate specialization code and the conditionals to instantiate it.
-  """
-  f = open("partitioned_matrix_view.cc", "w")
-  f.write(HEADER)
-  f.write(FACTORY_FILE_HEADER)
-
-  for row_block_size, e_block_size, f_block_size in SPECIALIZATIONS:
-    output = SpecializationFilename("generated/partitioned_matrix_view",
-                                    row_block_size,
-                                    e_block_size,
-                                    f_block_size) + ".cc"
-    fptr = open(output, "w")
-    fptr.write(HEADER)
-
-    template = SPECIALIZATION_FILE
-    if (row_block_size == "Eigen::Dynamic" and
-        e_block_size == "Eigen::Dynamic" and
-        f_block_size == "Eigen::Dynamic"):
-      template = DYNAMIC_FILE
-
-    fptr.write(template % (row_block_size, e_block_size, f_block_size))
-    fptr.close()
-
-    f.write(FACTORY_CONDITIONAL % (row_block_size,
-                                   e_block_size,
-                                   f_block_size,
-                                   row_block_size,
-                                   e_block_size,
-                                   f_block_size))
-  f.write(FACTORY_FOOTER)
-  f.close()
-
-
-if __name__ == "__main__":
-  Specialize()
diff --git a/internal/ceres/schur_eliminator.cc b/internal/ceres/schur_eliminator.cc
index ec0e2a0..0def9f0 100644
--- a/internal/ceres/schur_eliminator.cc
+++ b/internal/ceres/schur_eliminator.cc
@@ -1,5 +1,5 @@
 // Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -37,8 +37,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 
 #include "ceres/linear_solver.h"
 #include "ceres/schur_eliminator.h"
@@ -50,106 +49,95 @@
 SchurEliminatorBase*
 SchurEliminatorBase::Create(const LinearSolver::Options& options) {
 #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == 2)) {
-    return new SchurEliminator<2, 2, 2>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == 3)) {
-    return new SchurEliminator<2, 2, 3>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == 4)) {
-    return new SchurEliminator<2, 2, 4>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 2) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new SchurEliminator<2, 2, Eigen::Dynamic>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 3)) {
-    return new SchurEliminator<2, 3, 3>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 4)) {
-    return new SchurEliminator<2, 3, 4>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 6)) {
-    return new SchurEliminator<2, 3, 6>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == 9)) {
-    return new SchurEliminator<2, 3, 9>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 3) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new SchurEliminator<2, 3, Eigen::Dynamic>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 3)) {
-    return new SchurEliminator<2, 4, 3>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 4)) {
-    return new SchurEliminator<2, 4, 4>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 8)) {
-    return new SchurEliminator<2, 4, 8>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 9)) {
-    return new SchurEliminator<2, 4, 9>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new SchurEliminator<2, 4, Eigen::Dynamic>(options);
-  }
-  if ((options.row_block_size == 2) &&
-      (options.e_block_size == Eigen::Dynamic) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new SchurEliminator<2, Eigen::Dynamic, Eigen::Dynamic>(options);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 2)) {
-    return new SchurEliminator<4, 4, 2>(options);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 3)) {
-    return new SchurEliminator<4, 4, 3>(options);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == 4)) {
-    return new SchurEliminator<4, 4, 4>(options);
-  }
-  if ((options.row_block_size == 4) &&
-      (options.e_block_size == 4) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new SchurEliminator<4, 4, Eigen::Dynamic>(options);
-  }
-  if ((options.row_block_size == Eigen::Dynamic) &&
-      (options.e_block_size == Eigen::Dynamic) &&
-      (options.f_block_size == Eigen::Dynamic)) {
-    return new SchurEliminator<Eigen::Dynamic, Eigen::Dynamic, Eigen::Dynamic>(options);
-  }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 2)) {
+  return new SchurEliminator<2, 2, 2>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 3)) {
+  return new SchurEliminator<2, 2, 3>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 4)) {
+  return new SchurEliminator<2, 2, 4>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2)) {
+  return new SchurEliminator<2, 2, Eigen::Dynamic>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 3)) {
+  return new SchurEliminator<2, 3, 3>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 4)) {
+  return new SchurEliminator<2, 3, 4>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 6)) {
+  return new SchurEliminator<2, 3, 6>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 9)) {
+  return new SchurEliminator<2, 3, 9>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3)) {
+  return new SchurEliminator<2, 3, Eigen::Dynamic>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 3)) {
+  return new SchurEliminator<2, 4, 3>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 4)) {
+  return new SchurEliminator<2, 4, 4>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 8)) {
+  return new SchurEliminator<2, 4, 8>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 9)) {
+  return new SchurEliminator<2, 4, 9>(options);
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4)) {
+  return new SchurEliminator<2, 4, Eigen::Dynamic>(options);
+ }
+ if (options.row_block_size == 2){
+  return new SchurEliminator<2, Eigen::Dynamic, Eigen::Dynamic>(options);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 2)) {
+  return new SchurEliminator<4, 4, 2>(options);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 3)) {
+  return new SchurEliminator<4, 4, 3>(options);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 4)) {
+  return new SchurEliminator<4, 4, 4>(options);
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4)) {
+  return new SchurEliminator<4, 4, Eigen::Dynamic>(options);
+ }
 
 #endif
   VLOG(1) << "Template specializations not found for <"
diff --git a/internal/ceres/generate_eliminator_specialization.py b/internal/ceres/schur_eliminator_template.py
similarity index 67%
copy from internal/ceres/generate_eliminator_specialization.py
copy to internal/ceres/schur_eliminator_template.py
index e89e7a4..979ef25 100644
--- a/internal/ceres/generate_eliminator_specialization.py
+++ b/internal/ceres/schur_eliminator_template.py
@@ -1,5 +1,5 @@
 # Ceres Solver - A fast non-linear least squares minimizer
-# Copyright 2015 Google Inc. All rights reserved.
+# Copyright 2017 Google Inc. All rights reserved.
 # http://ceres-solver.org/
 #
 # Redistribution and use in source and binary forms, with or without
@@ -49,28 +49,9 @@
 # specializations that is generated.
 
 # Set of template specializations to generate
-SPECIALIZATIONS = [(2, 2, 2),
-                   (2, 2, 3),
-                   (2, 2, 4),
-                   (2, 2, "Eigen::Dynamic"),
-                   (2, 3, 3),
-                   (2, 3, 4),
-                   (2, 3, 6),
-                   (2, 3, 9),
-                   (2, 3, "Eigen::Dynamic"),
-                   (2, 4, 3),
-                   (2, 4, 4),
-                   (2, 4, 8),
-                   (2, 4, 9),
-                   (2, 4, "Eigen::Dynamic"),
-                   (2, "Eigen::Dynamic", "Eigen::Dynamic"),
-                   (4, 4, 2),
-                   (4, 4, 3),
-                   (4, 4, 4),
-                   (4, 4, "Eigen::Dynamic"),
-                   ("Eigen::Dynamic", "Eigen::Dynamic", "Eigen::Dynamic")]
+
 HEADER = """// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2015 Google Inc. All rights reserved.
+// Copyright 2017 Google Inc. All rights reserved.
 // http://ceres-solver.org/
 //
 // Redistribution and use in source and binary forms, with or without
@@ -108,8 +89,7 @@
 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
 //=========================================
 //
-// This file is generated using generate_eliminator_specialization.py.
-// Editing it manually is not recommended.
+// This file is generated using generate_template_specializations.py.
 """
 
 DYNAMIC_FILE = """
@@ -159,12 +139,7 @@
 #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
 """
 
-FACTORY_CONDITIONAL = """  if ((options.row_block_size == %s) &&
-      (options.e_block_size == %s) &&
-      (options.f_block_size == %s)) {
-    return new SchurEliminator<%s, %s, %s>(options);
-  }
-"""
+FACTORY = """return new SchurEliminator<%s, %s, %s>(options);"""
 
 FACTORY_FOOTER = """
 #endif
@@ -178,54 +153,3 @@
 }  // namespace internal
 }  // namespace ceres
 """
-
-
-def SuffixForSize(size):
-  if size == "Eigen::Dynamic":
-    return "d"
-  return str(size)
-
-
-def SpecializationFilename(prefix, row_block_size, e_block_size, f_block_size):
-  return "_".join([prefix] + map(SuffixForSize, (row_block_size,
-                                                 e_block_size,
-                                                 f_block_size)))
-
-
-def Specialize():
-  """
-  Generate specialization code and the conditionals to instantiate it.
-  """
-  f = open("schur_eliminator.cc", "w")
-  f.write(HEADER)
-  f.write(FACTORY_FILE_HEADER)
-
-  for row_block_size, e_block_size, f_block_size in SPECIALIZATIONS:
-    output = SpecializationFilename("generated/schur_eliminator",
-                                    row_block_size,
-                                    e_block_size,
-                                    f_block_size) + ".cc"
-    fptr = open(output, "w")
-    fptr.write(HEADER)
-
-    template = SPECIALIZATION_FILE
-    if (row_block_size == "Eigen::Dynamic" and
-        e_block_size == "Eigen::Dynamic" and
-        f_block_size == "Eigen::Dynamic"):
-      template = DYNAMIC_FILE
-
-    fptr.write(template % (row_block_size, e_block_size, f_block_size))
-    fptr.close()
-
-    f.write(FACTORY_CONDITIONAL % (row_block_size,
-                                   e_block_size,
-                                   f_block_size,
-                                   row_block_size,
-                                   e_block_size,
-                                   f_block_size))
-  f.write(FACTORY_FOOTER)
-  f.close()
-
-
-if __name__ == "__main__":
-  Specialize()
diff --git a/internal/ceres/schur_templates.cc b/internal/ceres/schur_templates.cc
new file mode 100644
index 0000000..60f4291
--- /dev/null
+++ b/internal/ceres/schur_templates.cc
@@ -0,0 +1,211 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2017 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+//   this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+//   this list of conditions and the following disclaimer in the documentation
+//   and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+//   used to endorse or promote products derived from this software without
+//   specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+//
+// What template specializations are available.
+//
+// ========================================
+// THIS FILE IS AUTOGENERATED. DO NOT EDIT.
+// THIS FILE IS AUTOGENERATED. DO NOT EDIT.
+// THIS FILE IS AUTOGENERATED. DO NOT EDIT.
+// THIS FILE IS AUTOGENERATED. DO NOT EDIT.
+//=========================================
+//
+// This file is generated using generate_template_specializations.py.
+
+#include "ceres/internal/eigen.h"
+#include "ceres/schur_templates.h"
+
+namespace ceres {
+namespace internal {
+
+void GetBestSchurTemplateSpecialization(int* row_block_size,
+                                        int* e_block_size,
+                                        int* f_block_size) {
+  LinearSolver::Options options;
+  options.row_block_size = *row_block_size;
+  options.e_block_size = *e_block_size;
+  options.f_block_size = *f_block_size;
+  *row_block_size = Eigen::Dynamic;
+  *e_block_size = Eigen::Dynamic;
+  *f_block_size = Eigen::Dynamic;
+#ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 2)) {
+  *row_block_size = 2;
+  *e_block_size = 2;
+  *f_block_size = 2;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 3)) {
+  *row_block_size = 2;
+  *e_block_size = 2;
+  *f_block_size = 3;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2) &&
+  (options.f_block_size == 4)) {
+  *row_block_size = 2;
+  *e_block_size = 2;
+  *f_block_size = 4;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 2)) {
+  *row_block_size = 2;
+  *e_block_size = 2;
+  *f_block_size = Eigen::Dynamic;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 3)) {
+  *row_block_size = 2;
+  *e_block_size = 3;
+  *f_block_size = 3;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 4)) {
+  *row_block_size = 2;
+  *e_block_size = 3;
+  *f_block_size = 4;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 6)) {
+  *row_block_size = 2;
+  *e_block_size = 3;
+  *f_block_size = 6;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3) &&
+  (options.f_block_size == 9)) {
+  *row_block_size = 2;
+  *e_block_size = 3;
+  *f_block_size = 9;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 3)) {
+  *row_block_size = 2;
+  *e_block_size = 3;
+  *f_block_size = Eigen::Dynamic;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 3)) {
+  *row_block_size = 2;
+  *e_block_size = 4;
+  *f_block_size = 3;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 4)) {
+  *row_block_size = 2;
+  *e_block_size = 4;
+  *f_block_size = 4;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 8)) {
+  *row_block_size = 2;
+  *e_block_size = 4;
+  *f_block_size = 8;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 9)) {
+  *row_block_size = 2;
+  *e_block_size = 4;
+  *f_block_size = 9;
+  return;
+ }
+ if ((options.row_block_size == 2) &&
+  (options.e_block_size == 4)) {
+  *row_block_size = 2;
+  *e_block_size = 4;
+  *f_block_size = Eigen::Dynamic;
+  return;
+ }
+ if (options.row_block_size == 2){
+  *row_block_size = 2;
+  *e_block_size = Eigen::Dynamic;
+  *f_block_size = Eigen::Dynamic;
+  return;
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 2)) {
+  *row_block_size = 4;
+  *e_block_size = 4;
+  *f_block_size = 2;
+  return;
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 3)) {
+  *row_block_size = 4;
+  *e_block_size = 4;
+  *f_block_size = 3;
+  return;
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4) &&
+  (options.f_block_size == 4)) {
+  *row_block_size = 4;
+  *e_block_size = 4;
+  *f_block_size = 4;
+  return;
+ }
+ if ((options.row_block_size == 4) &&
+  (options.e_block_size == 4)) {
+  *row_block_size = 4;
+  *e_block_size = 4;
+  *f_block_size = Eigen::Dynamic;
+  return;
+ }
+
+#endif
+  return;
+}
+
+}  // namespace internal
+}  // namespace ceres
diff --git a/internal/ceres/schur_templates.h b/internal/ceres/schur_templates.h
new file mode 100644
index 0000000..90aee0a
--- /dev/null
+++ b/internal/ceres/schur_templates.h
@@ -0,0 +1,46 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2017 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+//   this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+//   this list of conditions and the following disclaimer in the documentation
+//   and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+//   used to endorse or promote products derived from this software without
+//   specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+//
+
+#ifndef CERES_INTERNAL_SCHUR_TEMPLATES_H_
+#define CERES_INTERNAL_SCHUR_TEMPLATES_H_
+
+#include "ceres/linear_solver.h"
+
+namespace ceres {
+namespace internal {
+
+void GetBestSchurTemplateSpecialization(int* row_block_size,
+                                        int* e_block_size,
+                                        int* f_block_size);
+}  // namespace internal
+}  // namespace ceres
+
+#endif  // CERES_INTERNAL_SCHUR_TEMPLATES_H_
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index 8411350..8d9fc08 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -34,6 +34,7 @@
 #include <algorithm>
 #include <sstream>   // NOLINT
 #include <vector>
+#include "ceres/detect_structure.h"
 #include "ceres/gradient_checking_cost_function.h"
 #include "ceres/internal/port.h"
 #include "ceres/parameter_block_ordering.h"
@@ -41,6 +42,7 @@
 #include "ceres/problem.h"
 #include "ceres/problem_impl.h"
 #include "ceres/program.h"
+#include "ceres/schur_templates.h"
 #include "ceres/solver_utils.h"
 #include "ceres/stringprintf.h"
 #include "ceres/types.h"
@@ -316,7 +318,7 @@
   }
 
   for (int i = 0; i < ordering.size() - 1; ++i) {
-    internal::StringAppendF(report, "%d, ", ordering[i]);
+    internal::StringAppendF(report, "%d,", ordering[i]);
   }
   internal::StringAppendF(report, "%d", ordering.back());
 }
@@ -446,6 +448,24 @@
   }
 }
 
+std::string SchurStructureToString(const int row_block_size,
+                                   const int e_block_size,
+                                   const int f_block_size) {
+  const std::string row =
+      (row_block_size == Eigen::Dynamic)
+      ? "d" : internal::StringPrintf("%d", row_block_size);
+
+  const std::string e =
+      (e_block_size == Eigen::Dynamic)
+      ? "d" : internal::StringPrintf("%d", e_block_size);
+
+  const std::string f =
+      (f_block_size == Eigen::Dynamic)
+      ? "d" : internal::StringPrintf("%d", f_block_size);
+
+  return internal::StringPrintf("%s,%s,%s",row.c_str(), e.c_str(), f.c_str());
+}
+
 }  // namespace
 
 bool Solver::Options::IsValid(string* error) const {
@@ -517,7 +537,32 @@
   scoped_ptr<Preprocessor> preprocessor(
       Preprocessor::Create(modified_options.minimizer_type));
   PreprocessedProblem pp;
+
   const bool status = preprocessor->Preprocess(modified_options, problem_impl, &pp);
+
+  if (IsSchurType(pp.options.linear_solver_type)) {
+    // TODO(sameeragarwal): We can likely eliminate the duplicate call
+    // to DetectStructure here and inside the linear solver, by
+    // calling this in the preprocessor.
+    int row_block_size;
+    int e_block_size;
+    int f_block_size;
+    DetectStructure(*static_cast<internal::BlockSparseMatrix*>(
+                        pp.minimizer_options.jacobian.get())
+                    ->block_structure(),
+                    pp.linear_solver_options.elimination_groups[0],
+                    &row_block_size,
+                    &e_block_size,
+                    &f_block_size);
+    summary->schur_structure_given =
+        SchurStructureToString(row_block_size, e_block_size, f_block_size);
+    internal::GetBestSchurTemplateSpecialization(&row_block_size,
+                                                 &e_block_size,
+                                                 &f_block_size);
+    summary->schur_structure_used =
+        SchurStructureToString(row_block_size, e_block_size, f_block_size);
+  }
+
   summary->fixed_cost = pp.fixed_cost;
   summary->preprocessor_time_in_seconds = WallTimeInSeconds() - start_time;
 
@@ -720,6 +765,12 @@
                   "Linear solver ordering %22s %24s\n",
                   given.c_str(),
                   used.c_str());
+    if (IsSchurType(linear_solver_type_used)) {
+      StringAppendF(&report,
+                    "Schur structure        %22s %24s\n",
+                    schur_structure_given.c_str(),
+                    schur_structure_used.c_str());
+    }
 
     if (inner_iterations_given) {
       StringAppendF(&report,
