@@ -287,11 +287,18 @@ def geometry_step(self, knew, adelt, number_of_samples, params):
287
287
module_logger .debug ("Running geometry-fixing step" )
288
288
try :
289
289
c , g , H = self .model .lagrange_polynomial (knew ) # based at xopt
290
- # Solve problem: bounds are sl <= xnew <= su, and ||xnew-xopt|| <= adelt
291
- xnew = trsbox_geometry (self .model .xopt (), c , g , H , self .model .sl , self .model .su , adelt )
292
290
except LA .LinAlgError :
293
291
exit_info = ExitInformation (EXIT_LINALG_ERROR , "Singular matrix encountered in geometry step" )
294
292
return exit_info # didn't fix geometry - return & quit
293
+
294
+ # Solve problem: bounds are sl <= xnew <= su, and ||xnew-xopt|| <= adelt
295
+ try :
296
+ xnew = trsbox_geometry (self .model .xopt (), c , g , H , self .model .sl , self .model .su , adelt )
297
+ except ValueError :
298
+ # A ValueError may be raised if gopt or H have nan/inf values (issue #23)
299
+ # Ideally this should be picked up earlier in self.model.lagrange_polynomial(...)
300
+ exit_info = ExitInformation (EXIT_LINALG_ERROR , "Error when calculating geometry-improving step" )
301
+ return exit_info # didn't fix geometry - return & quit
295
302
296
303
gopt , H = self .model .build_full_model () # save here, to calculate predicted value from geometry step
297
304
fopt = self .model .fopt () # again, evaluate now, before model.change_point()
0 commit comments