L iGjddlmZmZddlZddlmZddlmZmZmZdgZ d dZ d dZ Gd deZ y) )OptionalUnionN)Tensor) _to_scalar OptimizerParamsTLBFGScV||\}}n||kr||fn||f\}}||zd||z z||z z z } | dz||zz } | dk\rf| j} ||kr|||z || z| z ||z d| zzz zz } n|||z || z| z ||z d| zzz zz } tt| ||S||zdz S)Nrg@)sqrtminmax) x1f1g1x2f2g2bounds xmin_bound xmax_boundd1 d2_squared2min_poss W/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/optim/lbfgs.py_cubic_interpolater s!' J-/2X"bB8 J b1R=BG, ,BARIA~ ^^  8BGb2"r'AF:J(KLLGBGb2"r'AF:J(KLLG3w +Z88Z'3..c |jj} |jtj}||||\} } d}| j |}d|||f\}}}}d}d}|| kr| |||z|zzkDs |dkDr4| |k\r/||g}|| g}|| jtjg}||g}nt|| |zkr |g}| g}| g}d}n|dk\r/||g}|| g}|| jtjg}||g}n{|d||z zz}|dz}|}t ||||| |||f}|}| }| jtj}|}||||\} } |dz }| j |}|dz }|| kr|| k(r d|g}|| g}|| g}d}d|d krd nd \}}|s|| krtd|dz | z| krnt |d|dd|d|d|d}d t|t|z z} tt||z |t|z | krp|s|t|k\s|t|krOt|t|z t|t|z krt|| z }nt|| z}d}nd}nd}||||\} } |dz }| j |}|dz }| |||z|zzkDs| ||k\rE|||<| ||<| jtj|<|||<|d|dkrd nd \}}nxt|| |zkrd}n1|||||z zdk\r ||||<||||<|||<||||<|||<| ||<| jtj|<|||<|s|| kr|}||} |} | | ||fS) N memory_formatrrFTg{Gz? )r)rr)rrg?)absrclonetorchcontiguous_formatdotrr)!obj_funcxtdfggtdc1c2tolerance_changemax_lsd_normf_newg_new ls_func_evalsgtd_newt_prevf_prevg_prevgtd_prevdonels_iterbracket bracket_f bracket_g bracket_gtdmin_stepmax_steptmpinsuf_progresslow_poshigh_posepss! r _strong_wolferL)sUUW[[]F e556AAq!$LE5MiilG()!Q|$FFFH DG F  AQ $ %'A+%6/qkGI5;R;R!STI#W-K  w`_. .. warning:: This optimizer doesn't support per-parameter options and parameter groups (there can be only one). .. warning:: Right now all parameters have to be on a single device. This will be improved in the future. .. note:: This is a very memory intensive optimizer (it requires additional ``param_bytes * (history_size + 1)`` bytes). If it doesn't fit in memory try reducing the history size, or use a different algorithm. Args: params (iterable): iterable of parameters to optimize. Parameters must be real. lr (float, optional): learning rate (default: 1) max_iter (int, optional): maximal number of iterations per optimization step (default: 20) max_eval (int, optional): maximal number of function evaluations per optimization step (default: max_iter * 1.25). tolerance_grad (float, optional): termination tolerance on first order optimality (default: 1e-7). tolerance_change (float, optional): termination tolerance on function value/parameter changes (default: 1e-9). history_size (int, optional): update history size (default: 100). line_search_fn (str, optional): either 'strong_wolfe' or None (default: None). paramslrmax_itermax_evaltolerance_gradr4 history_sizeline_search_fnc Rt|tr|jdk7r tdd|kstd|||dzdz}|||||||d} t ||| t |jdk7r td|jd d |_d|_ y) NrzTensor lr must be 1-elementgzInvalid learning rate: )rOrPrQrRr4rSrTz>LBFGS doesn't support per-parameter options (parameter groups)rrN) isinstancernumel ValueErrorsuper__init__len param_groups_params _numel_cache) selfrNrOrPrQrRr4rSrTdefaults __class__s rr\zLBFGS.__init__s b& !bhhjAo:; ;by6rd;< <  !|q(H  , 0(,  * t  !Q &P ((+H5  r ct|j!td|jD|_|jS)Nc3K|]<}tj|rd|jzn|j>yw)r N)r( is_complexrY).0ps r zLBFGS._numel..s:$"'!1!1!!4AGGI !'')C$sAA)r`sumr_)ras r_numelz LBFGS._numels:    $ #$$!D     r cg}|jD]}|j.|j|jj }n[|jj r*|jj jd}n|jjd}tj|r$tj|jd}|j|tj|dS)Nr%r) r_gradnewrYzero_ is_sparseto_denseviewr(rf view_as_realappendcat)raviewsrhrrs r_gather_flat_gradzLBFGS._gather_flat_grads Avv~uuQWWY'--/!!vv(--b1vv{{2%))$/44R8 LL  yy""r c"d}|jD]i}tj|rtj|}|j }|j ||||zj ||||z }k||jk(sJy)Nralpha)r_r(rfrsrYadd_view_asrk)ra step_sizeupdateoffsetrhrYs r _add_gradzLBFGS._add_grads A"&&q)GGIE FF6&6E>2::1=YF O eOF  &&&r c||jDcgc]"}|jtj$c}Scc}w)Nr")r_r'r(r))rarhs r _clone_paramzLBFGS._clone_params+HL U1e&=&=>UUUs'9cbt|j|D]\}}|j|yN)zipr_copy_)ra params_datarhpdatas r _set_paramzLBFGS._set_param"s+DLL+6 HAu GGEN r c|j||t|}|j}|j|||fSr)rfloatrwr)raclosurer,r-r.loss flat_grads r_directional_evaluatezLBFGS._directional_evaluate&s@ q!WY**,  Yr c  tjdk(sJtjjd}t |d}|d}|d}|d}|d}|d}|d } j j d} | jd d| jd d} t| } d} | d xxdz cc<j}|jj|k}|r| S| jd }| jd }| jd}| jd}| jd}| jd}| jd}| jd}d}||kr|dz }| d xxdz cc<| d dk(r|j}g}g}g}d}n|j|}|j|}|j!|}|dkDrt|| k(r3|j#d|j#d|j#d|j%||j%||j%d|z ||j!|z }t|}d| vr dg| z| d<| d}|j}t'|dz ddD]9}||j!|||z||<|j)|||| ;tj||x}} t'|D]8}||j!| ||z}!| j)|||||!z :|!|j+tj,}n|j/|| }| d dk(r/t1dd|jj3z |z}n|}|j!|}"|"| kDrnXd}#|p|dk7r t5dj7}$fd}%t9|%|$||| ||"\} }}}#j;|||jj|k}nyj;||||k7rbtj5} dddt| } j}|jj|k}d}#| |#z } | d xx|#z cc<||k(rnS| |k\rnM|rnJ|j|jj|krnt| |z |krn||kr|| d <|| d <|| d<|| d<|| d<|| d<|| d<|| d<| S#1swYxYw)zPerform a single optimization step. Args: closure (Callable): A closure that reevaluates the model and returns the loss. rrrOrPrQrRr4rTrS func_evalsn_iterr.r-old_dirsold_stpsroH_diagprev_flat_grad prev_lossg|=g?alNr%ryr" strong_wolfez only 'strong_wolfe' is supportedc,j|||Sr)r)r,r-r.rras rr+zLBFGS.step..obj_funcs#99'1aKKr )r]r^r( enable_gradrstater_ setdefaultrrwr&rgetnegsubmulr*poprtranger{r'r)rrrj RuntimeErrorrrLr)&rargrouprOrPrQrRr4rTrSr orig_lossr current_evalsropt_condr.r-rrrrrrrysysnum_oldrqirbe_ir1r9x_initr+s&`` rstepz LBFGS.step-s4$$%***&%##%g.!!!$ d $$$/0 !34/0^,  4<<?+ q) 1%I Y  lq **, ==?&&(N:   IIcN IIcN99Z(99Z( YYt_8$#34IIk* x aKF (Oq O X!#MMOMM.1EE!HUU1X:8} 4 Q Qq OOA&OOA&IIcBh' !%%(]Fh-u$#'&<"7E$K4[MMOw{B36A$QKOOA.A6BqEFF8A;r!ufF56  !V,,Aw--"C&&&M)!^3&'IJJ!..0FL9F &!Qi95D)Q q!$$==?..0NBq!$X%**,)&y) ;D $ 6 6 8I(}}224FH$%M ] *M , = 0  !(uuQx||~!!#'774)#$'77GxJc c $j$jd  h"0&kQ))s U00U9)rNgHz>& .>dN)__name__ __module__ __qualname____doc__r rrrintrstrr\rkrwrrrrr(no_gradr __classcell__)rcs@rr r sH$%"& $"&(,"!"! %- "! "! 3- "!  "! "!"!! "!H! # 'VU]]_BBr r)g-C6?g?r) typingrrr(r optimizerrrr __all__rrLr r rrs>" 55 )/:RTK*\yIyr