Skip to content

Commit e23ae82

Browse files
committed
dense: simplify check for update
1 parent ebcb350 commit e23ae82

File tree

1 file changed

+45
-83
lines changed

1 file changed

+45
-83
lines changed

include/proxsuite/proxqp/dense/helpers.hpp

Lines changed: 45 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -171,136 +171,98 @@ initial_guess(Workspace<T>& qpwork,
171171

172172
template<typename T>
173173
void
174-
update(optional<MatRef<T>> H_,
175-
optional<VecRef<T>> g_,
176-
optional<MatRef<T>> A_,
177-
optional<VecRef<T>> b_,
178-
optional<MatRef<T>> C_,
179-
optional<VecRef<T>> u_,
180-
optional<VecRef<T>> l_,
174+
update(optional<MatRef<T>> H,
175+
optional<VecRef<T>> g,
176+
optional<MatRef<T>> A,
177+
optional<VecRef<T>> b,
178+
optional<MatRef<T>> C,
179+
optional<VecRef<T>> u,
180+
optional<VecRef<T>> l,
181181
Model<T>& model,
182182
Workspace<T>& work)
183183
{
184184
// check the model is valid
185-
if (g_ != nullopt) {
186-
PROXSUITE_CHECK_ARGUMENT_SIZE(g_.value().rows(),
185+
if (g != nullopt) {
186+
PROXSUITE_CHECK_ARGUMENT_SIZE(g.value().rows(),
187187
model.dim,
188188
"the dimension wrt the primal variable x "
189189
"variable for updating g is not valid.");
190190
}
191-
if (b_ != nullopt) {
192-
PROXSUITE_CHECK_ARGUMENT_SIZE(b_.value().rows(),
191+
if (b != nullopt) {
192+
PROXSUITE_CHECK_ARGUMENT_SIZE(b.value().rows(),
193193
model.n_eq,
194194
"the dimension wrt equality constrained "
195195
"variables for updating b is not valid.");
196196
}
197-
if (u_ != nullopt) {
198-
PROXSUITE_CHECK_ARGUMENT_SIZE(u_.value().rows(),
197+
if (u != nullopt) {
198+
PROXSUITE_CHECK_ARGUMENT_SIZE(u.value().rows(),
199199
model.n_in,
200200
"the dimension wrt inequality constrained "
201201
"variables for updating u is not valid.");
202202
}
203-
if (l_ != nullopt) {
204-
PROXSUITE_CHECK_ARGUMENT_SIZE(l_.value().rows(),
203+
if (l != nullopt) {
204+
PROXSUITE_CHECK_ARGUMENT_SIZE(l.value().rows(),
205205
model.n_in,
206206
"the dimension wrt inequality constrained "
207207
"variables for updating l is not valid.");
208208
}
209-
if (H_ != nullopt) {
209+
if (H != nullopt) {
210210
PROXSUITE_CHECK_ARGUMENT_SIZE(
211-
H_.value().rows(),
211+
H.value().rows(),
212212
model.dim,
213213
"the row dimension for updating H is not valid.");
214214
PROXSUITE_CHECK_ARGUMENT_SIZE(
215-
H_.value().cols(),
215+
H.value().cols(),
216216
model.dim,
217217
"the column dimension for updating H is not valid.");
218218
}
219-
if (A_ != nullopt) {
219+
if (A != nullopt) {
220220
PROXSUITE_CHECK_ARGUMENT_SIZE(
221-
A_.value().rows(),
221+
A.value().rows(),
222222
model.n_eq,
223223
"the row dimension for updating A is not valid.");
224224
PROXSUITE_CHECK_ARGUMENT_SIZE(
225-
A_.value().cols(),
225+
A.value().cols(),
226226
model.dim,
227227
"the column dimension for updating A is not valid.");
228228
}
229-
if (C_ != nullopt) {
229+
if (C != nullopt) {
230230
PROXSUITE_CHECK_ARGUMENT_SIZE(
231-
C_.value().rows(),
231+
C.value().rows(),
232232
model.n_in,
233233
"the row dimension for updating C is not valid.");
234234
PROXSUITE_CHECK_ARGUMENT_SIZE(
235-
C_.value().cols(),
235+
C.value().cols(),
236236
model.dim,
237237
"the column dimension for updating C is not valid.");
238238
}
239+
239240
// update the model
240-
if (g_ != nullopt) {
241-
model.g = g_.value().eval();
241+
if (g != nullopt) {
242+
model.g = g.value().eval();
242243
}
243-
if (b_ != nullopt) {
244-
model.b = b_.value().eval();
244+
if (b != nullopt) {
245+
model.b = b.value().eval();
245246
}
246-
if (u_ != nullopt) {
247-
model.u = u_.value().eval();
247+
if (u != nullopt) {
248+
model.u = u.value().eval();
248249
}
249-
if (l_ != nullopt) {
250-
model.l = l_.value().eval();
250+
if (l != nullopt) {
251+
model.l = l.value().eval();
251252
}
252-
if (H_ != nullopt) {
253-
work.refactorize = true;
254-
if (A_ != nullopt) {
255-
if (C_ != nullopt) {
256-
model.H = Eigen::
257-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
258-
H_.value());
259-
model.A = Eigen::
260-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
261-
A_.value());
262-
model.C = Eigen::
263-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
264-
C_.value());
265-
} else {
266-
model.H = Eigen::
267-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
268-
H_.value());
269-
model.A = Eigen::
270-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
271-
A_.value());
272-
}
273-
} else if (C_ != nullopt) {
274-
model.H = Eigen::
275-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
276-
H_.value());
277-
model.C = Eigen::
278-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
279-
C_.value());
280-
} else {
281-
model.H = Eigen::
282-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
283-
H_.value());
284-
}
285-
} else if (A_ != nullopt) {
286-
work.refactorize = true;
287-
if (C_ != nullopt) {
288-
model.A = Eigen::
289-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
290-
A_.value());
291-
model.C = Eigen::
292-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
293-
C_.value());
294-
} else {
295-
model.A = Eigen::
296-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
297-
A_.value());
298-
}
299-
} else if (C_ != nullopt) {
253+
254+
if (H != nullopt || A != nullopt || C != nullopt) {
300255
work.refactorize = true;
301-
model.C = Eigen::
302-
Matrix<T, Eigen::Dynamic, Eigen::Dynamic, to_eigen_layout(rowmajor)>(
303-
C_.value());
256+
}
257+
258+
if (H != nullopt) {
259+
model.H = H.value();
260+
}
261+
if (A != nullopt) {
262+
model.A = A.value();
263+
}
264+
if (C != nullopt) {
265+
model.C = C.value();
304266
}
305267
}
306268
/*!

0 commit comments

Comments
 (0)