ó
    "EñiON  ã                   ó^   • S SK r S SK Jr  SSKJrJrJr  S/rS	S jr S
S jr " S S\5      r	g)é    N)ÚTensoré   )Ú
_to_scalarÚ	OptimizerÚParamsTÚLBFGSc                 ó:  • Ub  Uu  pxOX::  a  X4OX04u  pxX%-   SX-
  -  X-
  -  -
  n	U	S-  X%-  -
  n
U
S:¼  a_  U
R                  5       nX::  a  X3U -
  X[-   U	-
  XR-
  SU-  -   -  -  -
  nOX U-
  X+-   U	-
  X%-
  SU-  -   -  -  -
  n[        [        XÇ5      U5      $ Xx-   S-  $ )Né   é   r   g       @)ÚsqrtÚminÚmax)Úx1Úf1Úg1Úx2Úf2Úg2ÚboundsÚ
xmin_boundÚ
xmax_boundÚd1Ú	d2_squareÚd2Úmin_poss                ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/optim/lbfgs.pyÚ_cubic_interpolater      sÖ   € ð ÑØ!'Ñˆ
�Jà-/«X "¡¸B¸8Ñˆ
ð 
‰�1˜™‘= B¡GÑ,Ñ	,€BØ�A‘˜™‘€IØ�Aƒ~Ø�^‰^ÓˆØ‹8Ø ™G¨©°2©¸"¹'ÀAÈÁFÑ:JÑ(KÑLÑL‰Gà ™G¨©°2©¸"¹'ÀAÈÁFÑ:JÑ(KÑLÑLˆGÜ”3�wÓ+¨ZÓ8Ð8àÑ'¨3Ñ.Ð.ó    c           
      ó‚  • UR                  5       R                  5       nUR                  [        R                  S9nU " XU5      u  pÍSnUR                  U5      nSXEU4u  nnnnSnSnUU
:  Ga
  XÄXr-  U-  -   :”  d  US:”  a2  UU:¼  a,  UU/nUU/nUUR                  [        R                  S9/nUU/nOÅ[        U5      U* U-  ::  a  U/nU/nU/nSnO¦US:¼  a,  UU/nUU/nUUR                  [        R                  S9/nUU/nOtUSUU-
  -  -   nUS-  nUn[        UUUX,UUU4S9nUnUnUR                  [        R                  S9nUnU " XU5      u  pÍUS-  nUR                  U5      nUS-  nUU
:  a  GM
  UU
:X  a
  SU/nXL/nX]/nSnWS   US	   ::  a  S
OSu  nnU(       Gd  UU
:  Ga  [        WS   US   -
  5      U-  U	:  a  GOä[        US   US   WS   US   US   US   5      nS[        U5      [        U5      -
  -  n [        [        U5      U-
  U[        U5      -
  5      U :  ax  U(       d  U[        U5      :¼  d  U[        U5      ::  aP  [        U[        U5      -
  5      [        U[        U5      -
  5      :  a  [        U5      U -
  nO[        U5      U -   nSnOSnOSnU " XU5      u  pÍUS-  nUR                  U5      nUS-  nXÄXr-  U-  -   :”  d	  UUU   :¼  aC  UUU'   UUU'   UR                  [        R                  S9WU'   UUU'   US   US   ::  a  S
OSu  nnOw[        U5      U* U-  ::  a  SnO2UUU   UU   -
  -  S:¼  a   UU   UU'   UU   UU'   WU   UU'   UU   UU'   UUU'   UUU'   UR                  [        R                  S9WU'   UUU'   U(       d	  UU
:  a  GM  WU   nUU   nWU   nXÍX.4$ )N©Úmemory_formatr   r   FTg{®Gáz„?é
   )r   éÿÿÿÿ)r   r   )r   r   gš™™™™™¹?)Úabsr   ÚcloneÚtorchÚcontiguous_formatÚdotr   r   )!Úobj_funcÚxÚtÚdÚfÚgÚgtdÚc1Úc2Útolerance_changeÚmax_lsÚd_normÚf_newÚg_newÚls_func_evalsÚgtd_newÚt_prevÚf_prevÚg_prevÚgtd_prevÚdoneÚls_iterÚbracketÚ	bracket_fÚ	bracket_gÚbracket_gtdÚmin_stepÚmax_stepÚtmpÚinsuf_progressÚlow_posÚhigh_posÚepss!                                    r   Ú_strong_wolferJ   (   s¸  € ð �U‰U‹W�[‰[‹]€FØ	�‰œe×5Ñ5ˆÐ6€Aá˜A !Ó$�L€EØ€MØ�i‰i˜‹l€Gð ()¨!° |Ñ$€FˆF�F˜HØ€DØ€GØ
�FÔ
à˜™ ™Ñ$Ó%¨'°A«+¸%À6»/Ø˜q�kˆGØ ˜ˆIØ §¡¼5×;RÑ;R Ð!SÐTˆIØ# WÐ-ˆKØäˆw‹<˜B˜3 ™9Ó$Ø�cˆGØ˜ˆIØ˜ˆIØˆDØà�a‹<Ø˜q�kˆGØ ˜ˆIØ §¡¼5×;RÑ;R Ð!SÐTˆIØ# WÐ-ˆKØð �t˜q 6™zÑ*Ñ*ˆØ�r‘6ˆØˆÜØ�F˜H a°ÀÈ8Ð@Tñ
ˆð
 ˆØˆØ—‘¬5×+BÑ+B�ÐCˆØˆÙ  aÓ(‰ˆØ˜ÑˆØ—)‘)˜A“,ˆØ�1‰ˆðO �FÖ
ðT �&ÓØ�a�&ˆØ�Jˆ	Ø�Jˆ	ð
 €Nà"+¨A¡,°)¸B±-Ó"?™ÀVÑ€GˆXß�w Ô'äˆw�q‰z˜G A™JÑ&Ó'¨&Ñ0Ð3CÓCÙô ð �A‰Jà�a‰LØ˜‰Nð �A‰Jà�a‰Là˜‰Nó
ˆð0 ”S˜“\¤C¨£LÑ0Ñ1ˆäŒs�7‹|˜aÑ ¤S¨£\Ñ!1Ó2°SÓ8ö  ¤c¨'£lÓ!2°a¼3¸w»<Ó6Gô �qœ3˜w›<Ñ'Ó(¬3¨q´3°w³<Ñ/?Ó+@Ó@ä˜G› sÑ*‘Aô ˜G› sÑ*�AØ!&‘à!%‘à"ˆNñ    aÓ(‰ˆØ˜ÑˆØ—)‘)˜A“,ˆØ�1‰ˆð ˜™ ™Ñ$Ó%¨°)¸GÑ2DÓ)Dð !"ˆG�HÑà"'ˆI�hÑØ"'§+¡+¼E×<SÑ<S +Ð"TˆI�hÑà$+ˆK˜Ñ!à*3°A©,¸)ÀA¹,Ó*F¡ÈFÑˆG‘Xä�7‹| ˜s S™yÓ(à‘ð ˜G HÑ-°¸Ñ0@Ñ@ÑAÀQÓFð %,¨GÑ$4�˜Ñ!à&/°Ñ&8�	˜(Ñ#Ø&/°Ñ&8�	˜(Ñ#à(3°GÑ(<�˜HÑ%ð
  !ˆG�GÑà!&ˆI�gÑØ!&§¡¼5×;RÑ;R Ð!SˆI�gÑà#*ˆK˜Ñ ö} �w Ö'ðB 	�Ñ€Aà�gÑ€EØ�gÑ€EØ˜Ð)Ð)r   c                   óÒ   ^ • \ rS rSrSr       SS\S\\-  S\S\S-  S\S	\S
\S\	S-  SS4U 4S jjjr
S rS rSS jrS rSS jrS r\R$                  " 5       S 5       rSrU =r$ )r   éÔ   a:  Implements L-BFGS algorithm.

Heavily inspired by `minFunc
<https://www.cs.ubc.ca/~schmidtm/Software/minFunc.html>`_.

.. 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).
NÚparamsÚlrÚmax_iterÚmax_evalÚtolerance_gradr2   Úhistory_sizeÚline_search_fnÚreturnc	                 ób  >• [        U[        5      (       a  UR                  5       S:w  a  [        S5      eSU::  d  [        SU 35      eUc  US-  S-  nUUUUUUUS.n	[        T
U ]  X5        [        U R                  5      S:w  a  [        S5      eU R                  S	   S
   U l        S U l	        g )Nr   zTensor lr must be 1-elementg        zInvalid learning rate: é   é   )rN   rO   rP   rQ   r2   rR   rS   z>LBFGS doesn't support per-parameter options (parameter groups)r   rM   )
Ú
isinstancer   ÚnumelÚ
ValueErrorÚsuperÚ__init__ÚlenÚparam_groupsÚ_paramsÚ_numel_cache)ÚselfrM   rN   rO   rP   rQ   r2   rR   rS   ÚdefaultsÚ	__class__s             €r   r\   ÚLBFGS.__init__ö   sÇ   ø€ ô �bœ&×!Ñ! b§h¡h£j°A£oÜÐ:Ó;Ð;Ø�b‹yÜÐ6°r°dÐ;Ó<Ð<ØÑØ !‘| qÑ(ˆHàØ Ø Ø,Ø 0Ø(Ø,ñ
ˆô 	‰Ñ˜Ô*äˆt× Ñ Ó! QÓ&ÜØPóð ð ×(Ñ(¨Ñ+¨HÑ5ˆŒØ ˆÕr   c                 óv   • U R                   c!  [        S U R                   5       5      U l         U R                   $ )Nc              3   óž   #   • U  HC  n[         R                  " U5      (       a  S UR                  5       -  OUR                  5       v •  ME     g7f)r   N)r&   Ú
is_complexrY   )Ú.0Úps     r   Ú	<genexpr>ÚLBFGS._numel.<locals>.<genexpr>  s<   é € ð $â%�Aô "'×!1Ò!1°!×!4Ñ!4��A—G‘G“I’¸!¿'¹'»)ÔCÚ%ùs   ‚AA)r`   Úsumr_   )ra   s    r   Ú_numelÚLBFGS._numel  s:   € Ø×ÑÑ$ä #ñ $àŸšó$ó !ˆDÔð
 × Ñ Ð r   c                 ó2  • / nU R                    Hï  nUR                  c.  UR                  UR                  5       5      R	                  5       nO`UR                  R
                  (       a*  UR                  R                  5       R                  S5      nOUR                  R                  S5      n[        R                  " U5      (       a%  [        R                  " U5      R                  S5      nUR                  U5        Mñ     [        R                  " US5      $ )Nr#   r   )r_   ÚgradÚnewrY   Úzero_Ú	is_sparseÚto_denseÚviewr&   rg   Úview_as_realÚappendÚcat)ra   Úviewsri   ru   s       r   Ú_gather_flat_gradÚLBFGS._gather_flat_grad$  s¿   € ØˆØ—”ˆAØ�v‰v‰~Ø—u‘u˜QŸW™W›YÓ'×-Ñ-Ó/‘Ø—‘×!×!Ø—v‘v—‘Ó(×-Ñ-¨bÓ1‘à—v‘v—{‘{ 2“�Ü×Ò ×%Ñ%Ü×)Ò)¨$Ó/×4Ñ4°RÓ8�Ø�L‰L˜Öñ ô �yŠy˜ Ó"Ð"r   c                 ób  • SnU R                    Hk  n[        R                  " U5      (       a  [        R                  " U5      nUR	                  5       nUR                  X#X5-    R                  U5      US9  X5-  nMm     X0R                  5       :w  a  [        SU SU R                  5        35      eg )Nr   ©ÚalphazExpected offset z
 to equal )	r_   r&   rg   rv   rY   Úadd_Úview_asrm   ÚAssertionError)ra   Ú	step_sizeÚupdateÚoffsetri   rY   s         r   Ú	_add_gradÚLBFGS._add_grad2  sœ   € ØˆØ—”ˆAÜ×Ò ×"Ñ"Ü×&Ò& qÓ)�Ø—G‘G“IˆEà�F‰F�6 6¡>Ð2×:Ñ:¸1Ó=ÀYˆFÑOØ‰OŠFñ ð —[‘[“]Ó"Ü Ð#3°F°8¸:ÀdÇkÁkÃmÀ_Ð!UÓVÐVð #r   c                 óz   • U R                    Vs/ s H  oR                  [        R                  S9PM!     sn$ s  snf )Nr    )r_   r%   r&   r'   )ra   ri   s     r   Ú_clone_paramÚLBFGS._clone_param>  s-   € ØHLÏÊÓUÊÀ1—‘¤e×&=Ñ&=�Ó>ÉÑUÐUùÒUs   �&8c                 ób   • [        U R                  USS9 H  u  p#UR                  U5        M     g )NT)Ústrict)Úzipr_   Úcopy_)ra   Úparams_datari   Úpdatas       r   Ú
_set_paramÚLBFGS._set_paramA  s'   € Ü˜DŸL™L¨+¸dÔC‰HˆAØ�G‰G�EŽNò Dr   c                 óŒ   • U R                  X45        [        U" 5       5      nU R                  5       nU R                  U5        XV4$ ©N)r…   Úfloatrz   r�   )ra   Úclosurer*   r+   r,   ÚlossÚ	flat_grads          r   Ú_directional_evaluateÚLBFGS._directional_evaluateE  s<   € Ø�‰�qÔÜ‘W“YÓˆØ×*Ñ*Ó,ˆ	Ø�‰˜ÔØˆÐr   c                 óv  ^ ^• [        T R                  5      S:w  a!  [        S[        T R                  5       35      e[        R                  " 5       " T5      mT R                  S   n[        US   5      nUS   nUS   nUS   nUS   nUS	   nUS
   n	T R                  T R                  S      n
U
R                  SS5        U
R                  SS5        T" 5       n[        U5      nSnU
S==   S-  ss'   T R                  5       nUR                  5       R                  5       U:*  nU(       a  U$ U
R                  S5      nU
R                  S5      nU
R                  S5      nU
R                  S5      nU
R                  S5      nU
R                  S5      nU
R                  S5      nU
R                  S5      nSnUU:  GaÁ  US-  nU
S==   S-  ss'   U
S   S:X  a  UR                  5       n/ n/ n/ nSnGO�UR                  U5      nUR!                  U5      nUR#                  U5      nUS:”  aŒ  [        U5      U	:X  a3  UR%                  S5        UR%                  S5        UR%                  S5        UR'                  U5        UR'                  U5        UR'                  SU-  5        UUR#                  U5      -  n[        U5      nSU
;  a	  S/U	-  U
S'   U
S   nUR                  5       n[)        US-
  SS5       H7  nUU   R#                  U5      UU   -  UU'   UR+                  UU   UU   * S9  M9     [        R                   " UU5      =nn [)        U5       H6  nUU   R#                  U 5      UU   -  n!U R+                  UU   UU   U!-
  S9  M8     Uc  UR-                  [        R.                  S9nOUR1                  U5        UnU
S   S:X  a/  [3        SSUR                  5       R5                  5       -  5      U-  nOUnUR#                  U5      n"U"U* :”  a  GOgSn#Ubr  US:w  a  [7        S5      eT R9                  5       n$UU 4S jn%[;        U%U$UUUUU"X]-
  S9u  pÎnn#T R=                  UU5        UR                  5       R                  5       U:*  nO{T R=                  UU5        UU:w  ac  [        R                  " 5          T" 5       nSSS5        [        U5      nT R                  5       nUR                  5       R                  5       U:*  nSn#UU#-  nU
S==   U#-  ss'   UU:X  a  O\XÕ:¼  a  OVU(       a  ONUR!                  U5      R                  5       R                  5       U::  a  O[        UU-
  5      U:  a  O	UU:  a  GMÁ  UU
S'   UU
S'   UU
S'   UU
S'   UU
S'   UU
S'   UU
S'   UU
S'   U$ ! , (       d  f       Në= f) z†Perform a single optimization step.

Args:
    closure (Callable): A closure that reevaluates the model
        and returns the loss.
r   z*Expected exactly one param_group, but got r   rN   rO   rP   rQ   r2   rS   rR   Ú
func_evalsÚn_iterr,   r+   Úold_dirsÚold_stpsÚroÚH_diagÚprev_flat_gradÚ	prev_lossg»½×Ùß|Û=g      ð?ÚalNr#   r}   r    Ústrong_wolfez only 'strong_wolfe' is supportedc                 ó*   >• TR                  TXU5      $ r“   )r˜   )r*   r+   r,   r•   ra   s      €€r   r)   ÚLBFGS.step.<locals>.obj_funcÛ  s   ø€ Ø#×9Ñ9¸'À1ÈÓKÐKr   )r3   )r]   r^   r�   r&   Úenable_gradr   Ústater_   Ú
setdefaultr”   rz   r$   r   ÚgetÚnegÚsubÚmulr(   Úpoprw   Úranger   r%   r'   r�   r   rl   ÚRuntimeErrorrˆ   rJ   r…   )&ra   r•   ÚgrouprN   rO   rP   rQ   r2   rS   rR   r¨   Ú	orig_lossr–   Úcurrent_evalsr—   Úopt_condr,   r+   r�   rž   rŸ   r    r¡   r¢   rœ   ÚyÚsÚysÚnum_oldr£   ÚqÚiÚrÚbe_ir/   r7   Úx_initr)   s&   ``                                    r   ÚstepÚ
LBFGS.stepL  sß  ù€ ô ˆt× Ñ Ó! QÓ&Ü Ø<¼SÀ×ARÑARÓ=SÐ<TÐUóð ô
 ×#Ò#Ô% gÓ.ˆà×!Ñ! !Ñ$ˆÜ˜˜d™Ó$ˆØ˜Ñ$ˆØ˜Ñ$ˆØÐ/Ñ0ˆØ Ð!3Ñ4ÐØÐ/Ñ0ˆØ˜^Ñ,ˆð —
‘
˜4Ÿ<™<¨™?Ñ+ˆØ×Ñ˜ qÔ)Ø×Ñ˜ 1Ô%ñ “Iˆ	Ü�YÓˆØˆØˆlÓ˜qÑ Óà×*Ñ*Ó,ˆ	Ø—=‘=“?×&Ñ&Ó(¨NÑ:ˆö ØÐð �I‰I�c‹NˆØ�I‰I�c‹NˆØ—9‘9˜ZÓ(ˆØ—9‘9˜ZÓ(ˆØ�Y‰Y�t‹_ˆØ—‘˜8Ó$ˆØŸ™Ð#3Ó4ˆØ—I‘I˜kÓ*ˆ	àˆà�xÔà�a‰KˆFØ�(‹O˜qÑ ‹Oð
 �X‰ !Ó#Ø—M‘M“O�Ø�Ø�Ø�Ø’ð —M‘M .Ó1�Ø—E‘E˜!“H�Ø—U‘U˜1“X�Ø˜“:ä˜8“}¨Ó4à Ÿ™ QœØ Ÿ™ QœØŸ™˜qœ	ð —O‘O AÔ&Ø—O‘O AÔ&Ø—I‘I˜c B™hÔ'ð   !§%¡%¨£(™]�Fô ˜h›-�à˜uÓ$Ø#' &¨<Ñ"7�E˜$‘KØ˜4‘[�ð —M‘M“O�Ü˜w¨™{¨B°Ö3�AØ$ Q™KŸO™O¨AÓ.°°A±Ñ6�B�q‘EØ—F‘F˜8 A™;¨r°!©u¨f�FÓ5ñ 4ô Ÿ	š	 ! VÓ,Ð,��AÜ˜wž�AØ# A™;Ÿ?™?¨1Ó-°°1±Ñ5�DØ—F‘F˜8 A™;¨b°©e°d©l�FÓ;ñ (ð Ñ%Ø!*§¡¼u×?VÑ?V Ð!W‘à×$Ñ$ YÔ/ØˆIð �X‰ !Ó#Ü˜˜S 9§=¡=£?×#6Ñ#6Ó#8Ñ8Ó9¸BÑ>‘à�ð —-‘- Ó"ˆCð Ð&Ð&Ó&Ùð ˆMØÑ)à! ^Ó3Ü&Ð'IÓJÐJà!×.Ñ.Ó0�FöLô 9FØ ØØØØØ!ØØ'Ñ7ñ	9Ñ5�D Q¨ð —‘˜q !Ô$Ø$Ÿ=™=›?×.Ñ.Ó0°NÑB‘ð —‘˜q !Ô$Ø˜XÓ%ô ×*Ò*Õ,Ù&›y˜÷ -ä  ›;�DØ $× 6Ñ 6Ó 8�IØ(Ÿ}™}›×2Ñ2Ó4¸ÑF�HØ$%�Mð ˜]Ñ*ˆMØ�,Ó =Ñ0Óð
 ˜Ó!ØàÓ(Øö Øð �u‰u�Q‹x�|‰|‹~×!Ñ!Ó#Ð'7Ó7Øä�4˜)Ñ#Ó$Ð'7Ó7ØðU �xÖðX ˆˆc‰
Øˆˆc‰
Ø$ˆˆjÑØ$ˆˆjÑØˆˆd‰Ø ˆˆh‰Ø"0ˆÐÑØ&ˆˆkÑàÐ÷Q -Õ,ús   Ò=V*Ö*
V8)r`   r_   )r   é   NgH¯¼šò×z>ç•Ö&è.>éd   N)rT   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r”   r   ÚintÚstrr\   rm   rz   r…   rˆ   r�   r˜   r&   Úno_gradr¾   Ú__static_attributes__Ú__classcell__)rc   s   @r   r   r   Ô   sË   ø† ñðH ØØ#Ø $Ø"&ØØ%)ñ"!àð"!ð �F‰Nð"!ð ð	"!ð
 ˜‘*ð"!ð ð"!ð  ð"!ð ð"!ð ˜d™
ð"!ð 
÷"!ð "!òH!ò#ô
WòVôòð ‡]‚]ƒ_ñLó öLr   r“   )g-Cëâ6?gÍÌÌÌÌÌì?rÁ   é   )
r&   r   Ú	optimizerr   r   r   Ú__all__r   rJ   r   © r   r   Ú<module>rÑ      s=   ðó Ý ç 5Ñ 5ð ˆ)€ô/ð: RTôi*ôXEˆIõ Er   