@@ -80,7 +80,8 @@ def test_easy_nlp(nlp_model_ctor):
8080
8181
8282def 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 ):
8485 pytest .skip ("ifelse is only supported in IPOPT" )
8586
8687 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):
100101 assert x_value == pytest .approx (x_ )
101102
102103
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+
103151if __name__ == "__main__" :
104152
105153 def c ():
0 commit comments