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