aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
structuralConstraintSetStatic_tpl.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40#pragma once
41
42
49#ifndef DOXYGEN_SHOULD_SKIP_THIS
50
51# include <iostream>
52
53namespace gum {
54
55 namespace learning {
56
58 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
59 INLINE
60 _StructuralConstraintSetStatic_< CONSTRAINT1,
61 OTHER_CONSTRAINTS... >::_StructuralConstraintSetStatic_() {
62 }
63
65 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
66 INLINE _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::
67 _StructuralConstraintSetStatic_(
68 const _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >& from) :
69 CONSTRAINT1(from), _StructuralConstraintSetStatic_< OTHER_CONSTRAINTS... >(from) {}
70
72 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
73 INLINE _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::
74 ~_StructuralConstraintSetStatic_() {}
75
77 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
78 INLINE _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >&
79 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::operator=(
80 const _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >& from) {
81 if (this != &from) {
82 next_constraints::operator=(from);
83 first_constraint::operator=(from);
84 }
85
86 return *this;
87 }
88
90 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
91 INLINE void _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::setGraph(
92 const DiGraph& graph) {
93 next_constraints::setGraph(graph);
94 first_constraint::setGraphAlone(graph);
95 }
96
98 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
99 INLINE void _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
100 const ArcAddition& change) {
101 next_constraints::modifyGraph(change);
102 first_constraint::modifyGraphAlone(change);
103 }
104
106 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
107 INLINE void _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
108 const ArcDeletion& change) {
109 next_constraints::modifyGraph(change);
110 first_constraint::modifyGraphAlone(change);
111 }
112
114 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
115 INLINE void _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
116 const ArcReversal& change) {
117 next_constraints::modifyGraph(change);
118 first_constraint::modifyGraphAlone(change);
119 }
120
122 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
123 INLINE void _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
124 const GraphChange& change) {
125 next_constraints::modifyGraph(change);
126 first_constraint::modifyGraphAlone(change);
127 }
128
130 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
131 INLINE bool
132 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::isAlwaysInvalid(
133 const GraphChange& change) const {
134 return next_constraints::isAlwaysInvalid(change)
135 || first_constraint::isAlwaysInvalidAlone(change);
136 }
137
139 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
140 INLINE bool
141 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkArcAddition(
142 NodeId x,
143 NodeId y) const {
144 return next_constraints::checkArcAddition(x, y)
145 && first_constraint::checkArcAdditionAlone(x, y);
146 }
147
149 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
150 INLINE bool
151 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkArcDeletion(
152 NodeId x,
153 NodeId y) const {
154 return next_constraints::checkArcDeletion(x, y)
155 && first_constraint::checkArcDeletionAlone(x, y);
156 }
157
159 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
160 INLINE bool
161 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkArcReversal(
162 NodeId x,
163 NodeId y) const {
164 return next_constraints::checkArcReversal(x, y)
165 && first_constraint::checkArcReversalAlone(x, y);
166 }
167
169 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
170 INLINE bool
171 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
172 const ArcAddition& change) const {
173 return next_constraints::checkModification(change)
174 && first_constraint::checkModificationAlone(change);
175 }
176
178 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
179 INLINE bool
180 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
181 const ArcDeletion& change) const {
182 return next_constraints::checkModification(change)
183 && first_constraint::checkModificationAlone(change);
184 }
185
187 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
188 INLINE bool
189 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
190 const ArcReversal& change) const {
191 return next_constraints::checkModification(change)
192 && first_constraint::checkModificationAlone(change);
193 }
194
196 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
197 INLINE bool
198 _StructuralConstraintSetStatic_< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
199 const GraphChange& change) const {
200 return next_constraints::checkModification(change)
201 && first_constraint::checkModificationAlone(change);
202 }
203
204 // ===========================================================================
205
207 template < typename CONSTRAINT >
208 INLINE _StructuralConstraintSetStatic_< CONSTRAINT >::_StructuralConstraintSetStatic_() {}
209
211 template < typename CONSTRAINT >
212 INLINE _StructuralConstraintSetStatic_< CONSTRAINT >::_StructuralConstraintSetStatic_(
213 const _StructuralConstraintSetStatic_< CONSTRAINT >& from) : CONSTRAINT(from) {}
214
216 template < typename CONSTRAINT >
217 INLINE _StructuralConstraintSetStatic_< CONSTRAINT >::~_StructuralConstraintSetStatic_() {}
218
220 template < typename CONSTRAINT >
221 INLINE _StructuralConstraintSetStatic_< CONSTRAINT >&
222 _StructuralConstraintSetStatic_< CONSTRAINT >::operator=(
223 const _StructuralConstraintSetStatic_< CONSTRAINT >& from) {
224 if (this != &from) { CONSTRAINT::operator=(from); }
225
226 return *this;
227 }
228
230 template < typename CONSTRAINT >
231 INLINE void _StructuralConstraintSetStatic_< CONSTRAINT >::setGraph(const DiGraph& graph) {
232 first_constraint::setGraphAlone(graph);
233 }
234
236 template < typename CONSTRAINT >
237 INLINE void
238 _StructuralConstraintSetStatic_< CONSTRAINT >::modifyGraph(const ArcAddition& change) {
239 first_constraint::modifyGraphAlone(change);
240 }
241
243 template < typename CONSTRAINT >
244 INLINE void
245 _StructuralConstraintSetStatic_< CONSTRAINT >::modifyGraph(const ArcDeletion& change) {
246 first_constraint::modifyGraphAlone(change);
247 }
248
250 template < typename CONSTRAINT >
251 INLINE void
252 _StructuralConstraintSetStatic_< CONSTRAINT >::modifyGraph(const ArcReversal& change) {
253 first_constraint::modifyGraphAlone(change);
254 }
255
257 template < typename CONSTRAINT >
258 INLINE void
259 _StructuralConstraintSetStatic_< CONSTRAINT >::modifyGraph(const GraphChange& change) {
260 first_constraint::modifyGraphAlone(change);
261 }
262
264 template < typename CONSTRAINT >
265 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::isAlwaysInvalid(
266 const GraphChange& change) const {
267 return first_constraint::isAlwaysInvalidAlone(change);
268 }
269
271 template < typename CONSTRAINT >
272 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkArcAddition(NodeId x,
273 NodeId y) const {
274 return first_constraint::checkArcAdditionAlone(x, y);
275 }
276
278 template < typename CONSTRAINT >
279 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkArcDeletion(NodeId x,
280 NodeId y) const {
281 return first_constraint::checkArcDeletionAlone(x, y);
282 }
283
285 template < typename CONSTRAINT >
286 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkArcReversal(NodeId x,
287 NodeId y) const {
288 return first_constraint::checkArcReversalAlone(x, y);
289 }
290
292 template < typename CONSTRAINT >
293 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkModification(
294 const ArcAddition& change) const {
295 return first_constraint::checkModificationAlone(change);
296 }
297
299 template < typename CONSTRAINT >
300 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkModification(
301 const ArcDeletion& change) const {
302 return first_constraint::checkModificationAlone(change);
303 }
304
306 template < typename CONSTRAINT >
307 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkModification(
308 const ArcReversal& change) const {
309 return first_constraint::checkModificationAlone(change);
310 }
311
313 template < typename CONSTRAINT >
314 INLINE bool _StructuralConstraintSetStatic_< CONSTRAINT >::checkModification(
315 const GraphChange& change) const {
316 return first_constraint::checkModificationAlone(change);
317 }
318
319 // ===========================================================================
320
322 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
323 INLINE StructuralConstraintSetStatic< CONSTRAINT1,
324 OTHER_CONSTRAINTS... >::StructuralConstraintSetStatic() {
325 GUM_CONSTRUCTOR(StructuralConstraintSetStatic);
326 }
327
329 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
330 INLINE StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::
331 StructuralConstraintSetStatic(
332 const StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >& from) :
333 constraints(from) {
334 GUM_CONS_CPY(StructuralConstraintSetStatic);
335 }
336
338 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
339 INLINE StructuralConstraintSetStatic< CONSTRAINT1,
340 OTHER_CONSTRAINTS... >::~StructuralConstraintSetStatic() {
341 GUM_DESTRUCTOR(StructuralConstraintSetStatic);
342 }
343
345 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
346 INLINE StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >&
347 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::operator=(
348 const StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >& from) {
349 if (this != &from) { constraints::operator=(from); }
350
351 return *this;
352 }
353
355 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
356 INLINE void StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::setGraph(
357 const DiGraph& graph) {
358 constraints::setGraph(graph);
359 }
360
362 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
363 INLINE bool
364 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkArcAddition(
365 NodeId x,
366 NodeId y) const {
367 return constraints::checkArcAddition(x, y);
368 }
369
371 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
372 INLINE bool
373 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkArcDeletion(
374 NodeId x,
375 NodeId y) const {
376 return constraints::checkArcDeletion(x, y);
377 }
378
380 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
381 INLINE bool
382 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkArcReversal(
383 NodeId x,
384 NodeId y) const {
385 return constraints::checkArcReversal(x, y);
386 }
387
389 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
390 INLINE bool
391 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
392 const ArcAddition& change) const {
393 return constraints::checkModification(change);
394 }
395
397 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
398 INLINE bool
399 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
400 const ArcDeletion& change) const {
401 return constraints::checkModification(change);
402 }
403
405 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
406 INLINE bool
407 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
408 const ArcReversal& change) const {
409 return constraints::checkModification(change);
410 }
411
413 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
414 INLINE bool
415 StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::checkModification(
416 const GraphChange& change) const {
417 return constraints::checkModification(change);
418 }
419
421 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
422 INLINE void StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
423 const ArcAddition& change) {
424 if (checkModification(change)) {
425 constraints::modifyGraph(change);
426 } else {
428 "the constraint set does not allow this arc addition between "
429 << change.node1() << " and " << change.node2());
430 }
431 }
432
434 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
435 INLINE void StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
436 const ArcDeletion& change) {
437 if (checkModification(change)) {
438 constraints::modifyGraph(change);
439 } else {
441 "the constraint set does not allow this arc deletion between "
442 << change.node1() << " and " << change.node2());
443 }
444 }
445
447 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
448 INLINE void StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
449 const ArcReversal& change) {
450 if (checkModification(change)) {
451 constraints::modifyGraph(change);
452 } else {
454 "the constraint set does not allow this arc reversal between "
455 << change.node1() << " and " << change.node2());
456 }
457 }
458
460 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
461 INLINE void StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::modifyGraph(
462 const GraphChange& change) {
463 switch (change.type()) {
464 case GraphChangeType::ARC_ADDITION :
465 modifyGraph(reinterpret_cast< const ArcAddition& >(change));
466 break;
467
468 case GraphChangeType::ARC_DELETION :
469 modifyGraph(reinterpret_cast< const ArcDeletion& >(change));
470 break;
471
472 case GraphChangeType::ARC_REVERSAL :
473 modifyGraph(reinterpret_cast< const ArcReversal& >(change));
474 break;
475
476 default :
478 "edge modifications are not "
479 "currently supported by constraint sets");
480 }
481 }
482
484 template < typename CONSTRAINT1, typename... OTHER_CONSTRAINTS >
485 INLINE bool StructuralConstraintSetStatic< CONSTRAINT1, OTHER_CONSTRAINTS... >::isAlwaysInvalid(
486 const GraphChange& change) const {
487 return constraints::isAlwaysInvalid(change);
488 }
489
490 // ===========================================================================
491
493 template < typename CONSTRAINT >
494 INLINE StructuralConstraintSetStatic< CONSTRAINT >::StructuralConstraintSetStatic() {
495 GUM_CONSTRUCTOR(StructuralConstraintSetStatic);
496 }
497
499 template < typename CONSTRAINT >
500 INLINE StructuralConstraintSetStatic< CONSTRAINT >::StructuralConstraintSetStatic(
501 const StructuralConstraintSetStatic< CONSTRAINT >& from) : constraints(from) {
502 GUM_CONS_CPY(StructuralConstraintSetStatic);
503 }
504
506 template < typename CONSTRAINT >
507 INLINE StructuralConstraintSetStatic< CONSTRAINT >::~StructuralConstraintSetStatic() {
508 GUM_DESTRUCTOR(StructuralConstraintSetStatic);
509 }
510
512 template < typename CONSTRAINT >
513 INLINE StructuralConstraintSetStatic< CONSTRAINT >&
514 StructuralConstraintSetStatic< CONSTRAINT >::operator=(
515 const StructuralConstraintSetStatic< CONSTRAINT >& from) {
516 if (this != &from) { constraints::operator=(from); }
517
518 return *this;
519 }
520
522 template < typename CONSTRAINT >
523 INLINE void StructuralConstraintSetStatic< CONSTRAINT >::setGraph(const DiGraph& graph) {
524 constraints::setGraph(graph);
525 }
526
528 template < typename CONSTRAINT >
529 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkArcAddition(NodeId x,
530 NodeId y) const {
531 return constraints::checkArcAddition(x, y);
532 }
533
535 template < typename CONSTRAINT >
536 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkArcDeletion(NodeId x,
537 NodeId y) const {
538 return constraints::checkArcDeletion(x, y);
539 }
540
542 template < typename CONSTRAINT >
543 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkArcReversal(NodeId x,
544 NodeId y) const {
545 return constraints::checkArcReversal(x, y);
546 }
547
549 template < typename CONSTRAINT >
550 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkModification(
551 const ArcAddition& change) const {
552 return constraints::checkModification(change);
553 }
554
556 template < typename CONSTRAINT >
557 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkModification(
558 const ArcDeletion& change) const {
559 return constraints::checkModification(change);
560 }
561
563 template < typename CONSTRAINT >
564 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkModification(
565 const ArcReversal& change) const {
566 return constraints::checkModification(change);
567 }
568
570 template < typename CONSTRAINT >
571 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::checkModification(
572 const GraphChange& change) const {
573 return constraints::checkModification(change);
574 }
575
577 template < typename CONSTRAINT >
578 INLINE void
579 StructuralConstraintSetStatic< CONSTRAINT >::modifyGraph(const ArcAddition& change) {
580 if (checkModification(change)) {
581 constraints::modifyGraph(change);
582 } else {
584 "the constraint set does not allow this arc addition between "
585 << change.node1() << " and " << change.node2());
586 }
587 }
588
590 template < typename CONSTRAINT >
591 INLINE void
592 StructuralConstraintSetStatic< CONSTRAINT >::modifyGraph(const ArcDeletion& change) {
593 if (checkModification(change)) {
594 constraints::modifyGraph(change);
595 } else {
597 "the constraint set does not allow this arc deletion between "
598 << change.node1() << " and " << change.node2());
599 }
600 }
601
603 template < typename CONSTRAINT >
604 INLINE void
605 StructuralConstraintSetStatic< CONSTRAINT >::modifyGraph(const ArcReversal& change) {
606 if (checkModification(change)) {
607 constraints::modifyGraph(change);
608 } else {
610 "the constraint set does not allow this arc reversal between "
611 << change.node1() << " and " << change.node2());
612 }
613 }
614
616 template < typename CONSTRAINT >
617 INLINE void
618 StructuralConstraintSetStatic< CONSTRAINT >::modifyGraph(const GraphChange& change) {
619 switch (change.type()) {
620 case GraphChangeType::ARC_ADDITION :
621 modifyGraph(reinterpret_cast< const ArcAddition& >(change));
622 break;
623
624 case GraphChangeType::ARC_DELETION :
625 modifyGraph(reinterpret_cast< const ArcDeletion& >(change));
626 break;
627
628 case GraphChangeType::ARC_REVERSAL :
629 modifyGraph(reinterpret_cast< const ArcReversal& >(change));
630 break;
631
632 default :
634 "edge modifications are not "
635 "currently supported by constraint sets");
636 }
637 }
638
640 template < typename CONSTRAINT >
641 INLINE bool StructuralConstraintSetStatic< CONSTRAINT >::isAlwaysInvalid(
642 const GraphChange& change) const {
643 return constraints::isAlwaysInvalid(change);
644 }
645
646 } /* namespace learning */
647
648} /* namespace gum */
649
650#endif /* DOXYGEN_SHOULD_SKIP_THIS */
Exception : operation not allowed.
#define GUM_ERROR(type, msg)
Definition exceptions.h:72
include the inlined functions if necessary
Definition CSVParser.h:54
gum is the global namespace for all aGrUM entities
Definition agrum.h:46