@@ -447,19 +447,19 @@ def _solve(
447447 models ,
448448 variable_names ,
449449 constraints = None ,
450- restraints = None ,
450+ bounds = None ,
451451 weights = None ,
452452 residual_equations = None ,
453453 metas = None ,
454- verbose_iterations = 0 ,
455454 ):
456- # NOTE: restraints to be implemented
457455 recipe = FitRecipe ()
458456 self .recipes_dict [name ] = recipe
459457 if weights is None :
460458 weights = numpy .ones (len (profiles ))
461459 if residual_equations is None :
462460 residual_equations = ["chiv" ] * len (profiles )
461+ if bounds is None :
462+ bounds = {}
463463 if metas is not None :
464464 for i in range (len (metas )):
465465 profiles [i ].meta .update (metas [i ])
@@ -494,7 +494,20 @@ def _solve(
494494 if var in recipe ._parameters .values ():
495495 continue
496496 recipe .add_variable (var , name = variable_names [i ])
497-
497+ for eq_or_var_name , arg_dict in bounds .items ():
498+ lb = arg_dict .get ("lower_bound" , - numpy .inf )
499+ ub = arg_dict .get ("upper_bound" , numpy .inf )
500+ use_soft_bounds = arg_dict .get ("use_soft_bounds" , True )
501+ if use_soft_bounds :
502+ uncertainty = arg_dict .get ("uncertainty" , 1 )
503+ scaled = arg_dict .get ("scaled" , False )
504+ eq_or_var_name = eq_or_var_name .replace ("." , "_" )
505+ recipe .add_soft_bounds (
506+ eq_or_var_name , lb , ub , sig = uncertainty , scaled = scaled
507+ )
508+ else :
509+ par = self .get_variable (eq_or_var_name )["obj" ]
510+ par .bound_range (lb , ub )
498511 recipe .free ("all" )
499512 leastsq (recipe .residual , recipe .getValues ())
500513 # NOTE: non-scalar value will raise error in `get_results_string`
@@ -511,12 +524,11 @@ def solve(
511524 variable_names = [],
512525 residual_equations = None ,
513526 constraints = None ,
514- restraints = None ,
527+ bounds = None ,
515528 name = uuid .uuid4 (),
516529 weights = None ,
517530 metas = None ,
518531 include_sgpars = False ,
519- verbose_iterations = 0 ,
520532 ):
521533 profiles = []
522534 for profile_name in profile_names :
@@ -555,11 +567,10 @@ def solve(
555567 variable_names = variable_names ,
556568 residual_equations = residual_equations ,
557569 constraints = constraints ,
558- restraints = restraints ,
570+ bounds = bounds ,
559571 name = name ,
560572 weights = weights ,
561573 metas = metas ,
562- verbose_iterations = verbose_iterations ,
563574 )
564575
565576 def plot (self ):
0 commit comments