@@ -306,7 +306,7 @@ def solve_geom_system(self, rhs):
306306 return col_scale (LA .lstsq (W , col_scale (rhs * left_scaling ))[0 ], right_scaling )
307307
308308 def interpolate_mini_models_svd (self , verbose = False , make_full_rank = False , min_sing_val = 1e-6 , sing_val_frac = 1.0 , max_jac_cond = 1e8 ,
309- get_chg_J = False ):
309+ get_chg_J = False , throw_error_on_nans = False ):
310310 W , left_scaling , right_scaling = self .interpolation_matrix ()
311311 self .factorise_geom_system ()
312312 ls_interp_cond_num = np .linalg .cond (W ) if verbose else 0.0 # scipy.linalg does not have condition number!
@@ -327,12 +327,18 @@ def interpolate_mini_models_svd(self, verbose=False, make_full_rank=False, min_s
327327 self .model_jac = np .dot (self .model_jac , np .dot (Qhat , Qhat .T ))
328328
329329 rhs = self .fval_v [fval_row_idx , :] # size npt * m
330+ if np .any (np .isnan (rhs )) and throw_error_on_nans :
331+ if self .do_logging :
332+ logging .warning ("model.interpolate_mini_models_svd: NaNs encountered in objective evaluations, raising error" )
333+ raise np .linalg .LinAlgError ("NaN encountered in objective evaluations" )
330334 try :
331335 dg = self .solve_geom_system (rhs ) # size (n+1)*m
332336 except LA .LinAlgError :
333337 return False , None , None , None , None # flag error
334338 except ValueError :
335339 return False , None , None , None , None # flag error (e.g. inf or NaN encountered)
340+ if not np .all (np .isfinite (dg )): # another check for inf or NaN
341+ return False , None , None , None , None
336342 J_old = self .model_jac .copy ()
337343 self .model_jac = dg [1 :,:].T
338344 self .model_const = dg [0 ,:] - np .dot (self .model_jac , xopt ) # shift base to xbase
0 commit comments