@@ -80,7 +80,8 @@ def test_easy_nlp(nlp_model_ctor):
80
80
81
81
82
82
def test_nlfunc_ifelse (nlp_model_ctor ):
83
- if nlp_model_ctor is not ipopt .Model :
83
+ model = nlp_model_ctor ()
84
+ if not isinstance (model , ipopt .Model ):
84
85
pytest .skip ("ifelse is only supported in IPOPT" )
85
86
86
87
for x_ , fx in zip ([0.2 , 0.5 , 1.0 , 2.0 , 3.0 ], [0.2 , 0.5 , 1.0 , 4.0 , 9.0 ]):
@@ -100,6 +101,53 @@ def test_nlfunc_ifelse(nlp_model_ctor):
100
101
assert x_value == pytest .approx (x_ )
101
102
102
103
104
+ def test_ipopt_optimizer_not_called ():
105
+ model = ipopt .Model ()
106
+
107
+ x = model .add_variable (lb = 0.0 , ub = 10.0 )
108
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
109
+ assert termination_status == poi .TerminationStatusCode .OPTIMIZE_NOT_CALLED
110
+
111
+ model .set_objective (x ** 2 )
112
+ model .optimize ()
113
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
114
+ assert termination_status == poi .TerminationStatusCode .LOCALLY_SOLVED
115
+
116
+ model .add_linear_constraint (x >= 0.5 )
117
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
118
+ assert termination_status == poi .TerminationStatusCode .OPTIMIZE_NOT_CALLED
119
+
120
+ model .optimize ()
121
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
122
+ assert termination_status == poi .TerminationStatusCode .LOCALLY_SOLVED
123
+
124
+ model .add_quadratic_constraint (x ** 2 >= 0.36 )
125
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
126
+ assert termination_status == poi .TerminationStatusCode .OPTIMIZE_NOT_CALLED
127
+
128
+ model .optimize ()
129
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
130
+ assert termination_status == poi .TerminationStatusCode .LOCALLY_SOLVED
131
+
132
+ with nl .graph ():
133
+ model .add_nl_constraint (nl .exp (x ) <= 100.0 )
134
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
135
+ assert termination_status == poi .TerminationStatusCode .OPTIMIZE_NOT_CALLED
136
+
137
+ model .optimize ()
138
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
139
+ assert termination_status == poi .TerminationStatusCode .LOCALLY_SOLVED
140
+
141
+ with nl .graph ():
142
+ model .add_nl_objective (nl .log (x ))
143
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
144
+ assert termination_status == poi .TerminationStatusCode .OPTIMIZE_NOT_CALLED
145
+
146
+ model .optimize ()
147
+ termination_status = model .get_model_attribute (poi .ModelAttribute .TerminationStatus )
148
+ assert termination_status == poi .TerminationStatusCode .LOCALLY_SOLVED
149
+
150
+
103
151
if __name__ == "__main__" :
104
152
105
153
def c ():
0 commit comments