@@ -451,19 +451,66 @@ def _parse_plom_parameters(self, surrogateInfo):
451451 try :
452452 self .n_mc = int (surrogateInfo ['newSampleRatio' ])
453453 self .epsilonPCA = surrogateInfo .get ("epsilonPCA" ,1e-6 )
454- self .smootherKDE = surrogateInfo .get ("smootherKDE" ,25 )
454+ # KZ, 07/24: adding customized option for smootherKDE factor
455+ self .smootherKDE_Customize = surrogateInfo .get ("smootherKDE_Customize" ,False )
456+ if self .smootherKDE_Customize :
457+ # KZ, 07/24: taking in user-defined function filepath and directory
458+ self .smootherKDE_file = surrogateInfo .get ("smootherKDE_path" ,False )
459+ self .smootherKDE_dir = surrogateInfo .get ("smootherKDE_pathPath" ,False )
460+ if self .smootherKDE_file and self .smootherKDE_dir :
461+ # KZ, 07/24: both file and file path received
462+ # Note that the file is saved by the frontend to the work_dir -> overwrite self.smootherKDE_file
463+ self .smootherKDE_file = os .path .join (work_dir , "templatedir" , self .smootherKDE_file )
464+ if not os .path .isfile (self .smootherKDE_file ):
465+ # not found the file
466+ msg = 'Error finding user-defined function file for KDE: {}.' .format (self .smootherKDE_file )
467+ errlog .exit (msg )
468+ else :
469+ # KZ, 07/24: missing user-defined file
470+ msg = 'Error loading user-defined function file for KDE.'
471+ errlog .exit (msg )
472+ else :
473+ # KZ, 07/24: get user defined smootherKDE
474+ self .smootherKDE = surrogateInfo .get ("smootherKDE" ,25 )
475+ #self.smootherKDE = surrogateInfo.get("smootherKDE",25)
455476 self .randomSeed = surrogateInfo .get ("randomSeed" ,None )
456477 self .diffMap = surrogateInfo .get ("diffusionMaps" ,True )
457478 self .logTransform = surrogateInfo .get ("logTransform" ,False )
458479 self .constraintsFlag = surrogateInfo .get ("constraints" ,False )
459- self .kdeTolerance = surrogateInfo .get ("kdeTolerance" ,0.1 )
480+ # KZ: 07/24: adding customized option for kdeTolerance
481+ self .kdeTolerance_Customize = surrogateInfo .get ("tolKDE_Customize" ,False )
482+ if self .kdeTolerance_Customize :
483+ # KZ, 07/24: taking in user-defined function filepath and directory
484+ self .kdeTolerance_file = surrogateInfo .get ("tolKDE_path" ,False )
485+ self .kdeTolerance_dir = surrogateInfo .get ("tolKDE_pathPath" ,False )
486+ if self .kdeTolerance_file and self .kdeTolerance_dir :
487+ # KZ, 07/24: both file and file path received
488+ # Note that the file is saved by the frontend to the work_dir -> overwrite self.kdeTolerance_file
489+ self .kdeTolerance_file = os .path .join (work_dir , "templatedir" , self .kdeTolerance_file )
490+ if not os .path .isfile (self .kdeTolerance_file ):
491+ # not found the file
492+ msg = 'Error finding user-defined function file for KDE: {}.' .format (self .kdeTolerance_file )
493+ errlog .exit (msg )
494+ else :
495+ # KZ, 07/24: missing user-defined file
496+ msg = 'Error loading user-defined function file for KDE tolerance.'
497+ errlog .exit (msg )
498+ else :
499+ self .kdeTolerance = surrogateInfo .get ("kdeTolerance" ,0.1 )
500+ #self.kdeTolerance = surrogateInfo.get("kdeTolerance",0.1)
460501 if self .constraintsFlag :
461502 self .constraintsFile = os .path .join (work_dir , "templatedir/plomConstraints.py" )
462503 self .numIter = surrogateInfo .get ("numIter" ,50 )
463504 self .tolIter = surrogateInfo .get ("tolIter" ,0.02 )
464505 self .preTrained = surrogateInfo .get ("preTrained" ,False )
465506 if self .preTrained :
466507 self .preTrainedModel = os .path .join (work_dir , "templatedir/surrogatePLoM.h5" )
508+
509+ # KZ, 07/24: loading hyperparameter functions (evaluating self.kdeTolerance and self.smootherKDE from user-defined case)
510+ if self ._load_hyperparameter ():
511+ msg = 'runPLoM._parse_plom_parameters: Error in loading hyperparameter functions.'
512+ self .errlog .exit (msg )
513+
467514 except :
468515 run_flag = 1
469516
@@ -578,6 +625,39 @@ def _load_variables(self, do_sampling, do_simulation):
578625
579626 # return
580627 return run_flag
628+
629+
630+ # KZ, 07/24: loading user-defined hyper-parameter files
631+ def _load_hyperparameter (self ):
632+ run_flag = 0
633+ try :
634+ # load constraints first
635+ constr_file = Path (self .constraintsFile ).resolve ()
636+ sys .path .insert (0 , str (constr_file .parent ) + '/' )
637+ constr_script = importlib .__import__ (constr_file .name [:- 3 ], globals (), locals (), [], 0 )
638+ self .beta_c = constr_script .beta_c ()
639+ print ("beta_c = " , self .beta_c )
640+ # if smootherKDE
641+ if self .smootherKDE_Customize :
642+ kde_file = Path (self .smootherKDE_file ).resolve ()
643+ sys .path .insert (0 , str (kde_file .parent ) + '/' )
644+ kde_script = importlib .__import__ (kde_file .name [:- 3 ], globals (), locals (), [], 0 )
645+ self .get_epsilon_k = kde_script .get_epsilon_k
646+ # evaluating the function
647+ self .smootherKDE = self .get_epsilon_k (self .beta_c )
648+ print ('epsilon_k = ' ,self .smootherKDE )
649+ # if tolKDE
650+ if self .kdeTolerance_Customize :
651+ beta_file = Path (self .kdeTolerance_file ).resolve ()
652+ sys .path .insert (0 , str (beta_file .parent ) + '/' )
653+ beta_script = importlib .__import__ (beta_file .name [:- 3 ], globals (), locals (), [], 0 )
654+ self .get_epsilon_db = beta_script .get_epsilon_db
655+ # evaluating the function
656+ self .kdeTolerance = self .get_epsilon_db (self .beta_c )
657+ print ('epsilon_db = ' ,self .kdeTolerance )
658+ except :
659+ run_flag = 1
660+ return run_flag
581661
582662
583663 def train_model (self , model_name = 'SurrogatePLoM' ):
0 commit comments