@@ -341,11 +341,8 @@ function MOI.add_variable(m::CachingOptimizer)
341
341
vindex_optimizer =
342
342
MOI. add_variable (m. optimizer):: MOI.VariableIndex
343
343
catch err
344
- if err isa MOI. NotAllowedError
345
- reset_optimizer (m)
346
- else
347
- rethrow (err)
348
- end
344
+ _rethrow_if_not_NotAllowedError (err)
345
+ reset_optimizer (m)
349
346
end
350
347
else
351
348
vindex_optimizer = MOI. add_variable (m. optimizer):: MOI.VariableIndex
@@ -366,11 +363,8 @@ function MOI.add_variables(m::CachingOptimizer, n)
366
363
vindices_optimizer =
367
364
MOI. add_variables (m. optimizer, n):: Vector{MOI.VariableIndex}
368
365
catch err
369
- if err isa MOI. NotAllowedError
370
- reset_optimizer (m)
371
- else
372
- rethrow (err)
373
- end
366
+ _rethrow_if_not_NotAllowedError (err)
367
+ reset_optimizer (m)
374
368
end
375
369
else
376
370
vindices_optimizer =
@@ -413,11 +407,8 @@ function MOI.add_constrained_variable(
413
407
MOI. ConstraintIndex{MOI. VariableIndex,S},
414
408
}
415
409
catch err
416
- if err isa MOI. NotAllowedError
417
- reset_optimizer (m)
418
- else
419
- rethrow (err)
420
- end
410
+ _rethrow_if_not_NotAllowedError (err)
411
+ reset_optimizer (m)
421
412
end
422
413
else
423
414
vindex_optimizer, cindex_optimizer = MOI. add_constrained_variable (
@@ -480,11 +471,8 @@ function MOI.add_constrained_variables(
480
471
MOI. ConstraintIndex{MOI. VectorOfVariables,S},
481
472
}
482
473
catch err
483
- if err isa MOI. NotAllowedError
484
- reset_optimizer (m)
485
- else
486
- rethrow (err)
487
- end
474
+ _rethrow_if_not_NotAllowedError (err)
475
+ reset_optimizer (m)
488
476
end
489
477
else
490
478
vindices_optimizer, cindex_optimizer =
@@ -534,14 +522,11 @@ function MOI.add_constraint(
534
522
set,
535
523
):: MOI.ConstraintIndex{F,S}
536
524
catch err
537
- if err isa MOI. NotAllowedError
538
- # It could be MOI.AddConstraintNotAllowed{F', S'} with F' != F
539
- # or S' != S if, for example, the `F`-in-`S` constraint is bridged
540
- # to other constraints in `m.optimizer`
541
- reset_optimizer (m)
542
- else
543
- rethrow (err)
544
- end
525
+ _rethrow_if_not_NotAllowedError (err)
526
+ # It could be MOI.AddConstraintNotAllowed{F', S'} with F' != F
527
+ # or S' != S if, for example, the `F`-in-`S` constraint is bridged
528
+ # to other constraints in `m.optimizer`
529
+ reset_optimizer (m)
545
530
end
546
531
else
547
532
cindex_optimizer = MOI. add_constraint (
@@ -571,11 +556,8 @@ function MOI.modify(
571
556
try
572
557
MOI. modify (m. optimizer, cindex_optimizer, change_optimizer)
573
558
catch err
574
- if err isa MOI. NotAllowedError
575
- reset_optimizer (m)
576
- else
577
- rethrow (err)
578
- end
559
+ _rethrow_if_not_NotAllowedError (err)
560
+ reset_optimizer (m)
579
561
end
580
562
else
581
563
MOI. modify (m. optimizer, cindex_optimizer, change_optimizer)
@@ -607,11 +589,8 @@ function _replace_constraint_function_or_set(
607
589
replacement_optimizer,
608
590
)
609
591
catch err
610
- if err isa MOI. NotAllowedError
611
- reset_optimizer (m)
612
- else
613
- rethrow (err)
614
- end
592
+ _rethrow_if_not_NotAllowedError (err)
593
+ reset_optimizer (m)
615
594
end
616
595
else
617
596
MOI. set (
@@ -671,11 +650,8 @@ function MOI.modify(
671
650
try
672
651
MOI. modify (m. optimizer, obj, change_optimizer)
673
652
catch err
674
- if err isa MOI. NotAllowedError
675
- reset_optimizer (m)
676
- else
677
- rethrow (err)
678
- end
653
+ _rethrow_if_not_NotAllowedError (err)
654
+ reset_optimizer (m)
679
655
end
680
656
else
681
657
MOI. modify (m. optimizer, obj, change_optimizer)
@@ -700,11 +676,8 @@ function MOI.delete(m::CachingOptimizer, index::MOI.Index)
700
676
try
701
677
MOI. delete (m. optimizer, index_optimizer)
702
678
catch err
703
- if err isa MOI. NotAllowedError
704
- reset_optimizer (m)
705
- else
706
- rethrow (err)
707
- end
679
+ _rethrow_if_not_NotAllowedError (err)
680
+ reset_optimizer (m)
708
681
end
709
682
else
710
683
MOI. delete (m. optimizer, index_optimizer)
@@ -734,11 +707,8 @@ function MOI.delete(m::CachingOptimizer, indices::Vector{<:MOI.Index})
734
707
try
735
708
MOI. delete (m. optimizer, indices_optimizer)
736
709
catch err
737
- if err isa MOI. NotAllowedError
738
- reset_optimizer (m)
739
- else
740
- rethrow (err)
741
- end
710
+ _rethrow_if_not_NotAllowedError (err)
711
+ reset_optimizer (m)
742
712
end
743
713
else
744
714
MOI. delete (m. optimizer, indices_optimizer)
@@ -771,11 +741,8 @@ function MOI.set(m::CachingOptimizer, attr::MOI.AbstractModelAttribute, value)
771
741
try
772
742
MOI. set (m. optimizer, attr, optimizer_value)
773
743
catch err
774
- if err isa MOI. NotAllowedError
775
- reset_optimizer (m)
776
- else
777
- rethrow (err)
778
- end
744
+ _rethrow_if_not_NotAllowedError (err)
745
+ reset_optimizer (m)
779
746
end
780
747
else
781
748
MOI. set (m. optimizer, attr, optimizer_value)
@@ -798,11 +765,8 @@ function MOI.set(
798
765
try
799
766
MOI. set (m. optimizer, attr, optimizer_index, optimizer_value)
800
767
catch err
801
- if err isa MOI. NotAllowedError
802
- reset_optimizer (m)
803
- else
804
- rethrow (err)
805
- end
768
+ _rethrow_if_not_NotAllowedError (err)
769
+ reset_optimizer (m)
806
770
end
807
771
else
808
772
MOI. set (m. optimizer, attr, optimizer_index, optimizer_value)
@@ -831,13 +795,15 @@ function MOI.supports(
831
795
(m. state == NO_OPTIMIZER || MOI. supports (m. optimizer, attr):: Bool )
832
796
end
833
797
798
+ _rethrow_if_not_NotAllowedError (err) = rethrow (err)
799
+
800
+ _rethrow_if_not_NotAllowedError (:: MOI.NotAllowedError ) = nothing
801
+
834
802
function _get_model_attribute (model:: CachingOptimizer , attr:: MOI.ObjectiveValue )
835
803
try
836
804
return MOI. get (model. optimizer, attr)
837
805
catch err
838
- if ! (err isa MOI. GetAttributeNotAllowed)
839
- rethrow (err)
840
- end
806
+ _rethrow_if_not_NotAllowedError (err)
841
807
return get_fallback (model, attr)
842
808
end
843
809
end
@@ -849,9 +815,7 @@ function _get_model_attribute(
849
815
try
850
816
return MOI. get (model. optimizer, attr)
851
817
catch err
852
- if ! (err isa MOI. GetAttributeNotAllowed)
853
- rethrow (err)
854
- end
818
+ _rethrow_if_not_NotAllowedError (err)
855
819
MOI. check_result_index_bounds (model, attr)
856
820
# We don't know what coefficient type to use, so just use whatever the
857
821
# objective value type is. This is slightly inefficient, but it
@@ -996,10 +960,7 @@ function _get_fallback(
996
960
model. model_to_optimizer_map[index],
997
961
)
998
962
catch err
999
- # Thrown if .optimizer doesn't support attr
1000
- if ! (err isa MOI. GetAttributeNotAllowed)
1001
- rethrow (err)
1002
- end
963
+ _rethrow_if_not_NotAllowedError (err)
1003
964
return get_fallback (model, attr, index)
1004
965
end
1005
966
end
@@ -1016,10 +977,7 @@ function _get_fallback(
1016
977
[model. model_to_optimizer_map[i] for i in indices],
1017
978
)
1018
979
catch err
1019
- # Thrown if .optimizer doesn't support attr
1020
- if ! (err isa MOI. GetAttributeNotAllowed)
1021
- rethrow (err)
1022
- end
980
+ _rethrow_if_not_NotAllowedError (err)
1023
981
return [get_fallback (model, attr, i) for i in indices]
1024
982
end
1025
983
end
0 commit comments