[docs]defminimize_scalar(objective,x0,diffArgs,nondiffArgs,settings):ifnotisinstance(diffArgs,tuple):msg="diffArgs argument to optimism.MinimizeScalar.minimize_scalar must be a tuple, got {}"raiseTypeError(msg.format(diffArgs))ifnotisinstance(diffArgs,tuple):msg="nondiffArgs argument to optimism.MinimizeScalar.minimize_scalar must be a tuple, got {}"raiseTypeError(msg.format(nondiffArgs))# define function with argsdefF(x):returnobjective(x,*diffArgs,*nondiffArgs)G=jacfwd(F)GH=value_and_grad(G)tol=settings.tolmax_iters=settings.max_itersdefconditional(carry):x,f,g,h,alpha,i=carryresNorm=np.abs(g)return(resNorm>tol)&(i<max_iters)defbody(carry):x,f,g,h,alpha,i=carryprint("h=",h)ifh>0:# positive curvature, use newton stepp=-g/halpha0=1.0alpha=line_search_backtrack(x,f,g,p,alpha0,F)else:# negative curvature, use gradient descentp=-gprint("alpha initial=",alpha)alpha=line_search_bidirectional(x,f,g,p,alpha,F)x+=alpha*pprint("i",i,"x",x)g,h=GH(x)f=F(x)return(x,f,g,h,alpha,i+1)f0=F(x0)df0,ddf0=GH(x0)alpha0=1.0xStar,f,df,_,_,iters=while_loop(conditional,body,(x0,f0,df0,ddf0,alpha0,0))print("\n----\niters taken=",iters)print("df=",df)print("objective = ",f)returnxStar