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