1 // Ceres Solver - A fast non-linear least squares minimizer
2 // Copyright 2017 Google Inc. All rights reserved.
3 // http://ceres-solver.org/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 //   this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 //   this list of conditions and the following disclaimer in the documentation
12 //   and/or other materials provided with the distribution.
13 // * Neither the name of Google Inc. nor the names of its contributors may be
14 //   used to endorse or promote products derived from this software without
15 //   specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
28 //
29 // Author: sameeragarwal@google.com (Sameer Agarwal)
30 //
31 // What template specializations are available.
32 //
33 // ========================================
34 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
35 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
36 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
37 // THIS FILE IS AUTOGENERATED. DO NOT EDIT.
38 //=========================================
39 //
40 // This file is generated using generate_template_specializations.py.
41 
42 #include "ceres/internal/eigen.h"
43 #include "ceres/schur_templates.h"
44 
45 namespace ceres {
46 namespace internal {
47 
GetBestSchurTemplateSpecialization(int * row_block_size,int * e_block_size,int * f_block_size)48 void GetBestSchurTemplateSpecialization(int* row_block_size,
49                                         int* e_block_size,
50                                         int* f_block_size) {
51   LinearSolver::Options options;
52   options.row_block_size = *row_block_size;
53   options.e_block_size = *e_block_size;
54   options.f_block_size = *f_block_size;
55   *row_block_size = Eigen::Dynamic;
56   *e_block_size = Eigen::Dynamic;
57   *f_block_size = Eigen::Dynamic;
58 #ifndef CERES_RESTRICT_SCHUR_SPECIALIZATION
59  if ((options.row_block_size == 2) &&
60      (options.e_block_size == 2) &&
61      (options.f_block_size == 2)) {
62    *row_block_size = 2;
63    *e_block_size = 2;
64    *f_block_size = 2;
65   return;
66  }
67  if ((options.row_block_size == 2) &&
68      (options.e_block_size == 2) &&
69      (options.f_block_size == 3)) {
70    *row_block_size = 2;
71    *e_block_size = 2;
72    *f_block_size = 3;
73   return;
74  }
75  if ((options.row_block_size == 2) &&
76      (options.e_block_size == 2) &&
77      (options.f_block_size == 4)) {
78    *row_block_size = 2;
79    *e_block_size = 2;
80    *f_block_size = 4;
81   return;
82  }
83  if ((options.row_block_size == 2) &&
84      (options.e_block_size == 2)) {
85    *row_block_size = 2;
86    *e_block_size = 2;
87    *f_block_size = Eigen::Dynamic;
88   return;
89  }
90  if ((options.row_block_size == 2) &&
91      (options.e_block_size == 3) &&
92      (options.f_block_size == 3)) {
93    *row_block_size = 2;
94    *e_block_size = 3;
95    *f_block_size = 3;
96   return;
97  }
98  if ((options.row_block_size == 2) &&
99      (options.e_block_size == 3) &&
100      (options.f_block_size == 4)) {
101    *row_block_size = 2;
102    *e_block_size = 3;
103    *f_block_size = 4;
104   return;
105  }
106  if ((options.row_block_size == 2) &&
107      (options.e_block_size == 3) &&
108      (options.f_block_size == 6)) {
109    *row_block_size = 2;
110    *e_block_size = 3;
111    *f_block_size = 6;
112   return;
113  }
114  if ((options.row_block_size == 2) &&
115      (options.e_block_size == 3) &&
116      (options.f_block_size == 9)) {
117    *row_block_size = 2;
118    *e_block_size = 3;
119    *f_block_size = 9;
120   return;
121  }
122  if ((options.row_block_size == 2) &&
123      (options.e_block_size == 3)) {
124    *row_block_size = 2;
125    *e_block_size = 3;
126    *f_block_size = Eigen::Dynamic;
127   return;
128  }
129  if ((options.row_block_size == 2) &&
130      (options.e_block_size == 4) &&
131      (options.f_block_size == 3)) {
132    *row_block_size = 2;
133    *e_block_size = 4;
134    *f_block_size = 3;
135   return;
136  }
137  if ((options.row_block_size == 2) &&
138      (options.e_block_size == 4) &&
139      (options.f_block_size == 4)) {
140    *row_block_size = 2;
141    *e_block_size = 4;
142    *f_block_size = 4;
143   return;
144  }
145  if ((options.row_block_size == 2) &&
146      (options.e_block_size == 4) &&
147      (options.f_block_size == 6)) {
148    *row_block_size = 2;
149    *e_block_size = 4;
150    *f_block_size = 6;
151   return;
152  }
153  if ((options.row_block_size == 2) &&
154      (options.e_block_size == 4) &&
155      (options.f_block_size == 8)) {
156    *row_block_size = 2;
157    *e_block_size = 4;
158    *f_block_size = 8;
159   return;
160  }
161  if ((options.row_block_size == 2) &&
162      (options.e_block_size == 4) &&
163      (options.f_block_size == 9)) {
164    *row_block_size = 2;
165    *e_block_size = 4;
166    *f_block_size = 9;
167   return;
168  }
169  if ((options.row_block_size == 2) &&
170      (options.e_block_size == 4)) {
171    *row_block_size = 2;
172    *e_block_size = 4;
173    *f_block_size = Eigen::Dynamic;
174   return;
175  }
176  if (options.row_block_size == 2){
177    *row_block_size = 2;
178    *e_block_size = Eigen::Dynamic;
179    *f_block_size = Eigen::Dynamic;
180   return;
181  }
182  if ((options.row_block_size == 3) &&
183      (options.e_block_size == 3) &&
184      (options.f_block_size == 3)) {
185    *row_block_size = 3;
186    *e_block_size = 3;
187    *f_block_size = 3;
188   return;
189  }
190  if ((options.row_block_size == 4) &&
191      (options.e_block_size == 4) &&
192      (options.f_block_size == 2)) {
193    *row_block_size = 4;
194    *e_block_size = 4;
195    *f_block_size = 2;
196   return;
197  }
198  if ((options.row_block_size == 4) &&
199      (options.e_block_size == 4) &&
200      (options.f_block_size == 3)) {
201    *row_block_size = 4;
202    *e_block_size = 4;
203    *f_block_size = 3;
204   return;
205  }
206  if ((options.row_block_size == 4) &&
207      (options.e_block_size == 4) &&
208      (options.f_block_size == 4)) {
209    *row_block_size = 4;
210    *e_block_size = 4;
211    *f_block_size = 4;
212   return;
213  }
214  if ((options.row_block_size == 4) &&
215      (options.e_block_size == 4)) {
216    *row_block_size = 4;
217    *e_block_size = 4;
218    *f_block_size = Eigen::Dynamic;
219   return;
220  }
221 
222 #endif
223   return;
224 }
225 
226 }  // namespace internal
227 }  // namespace ceres
228