Ë
    [^(h¸F  ã                   óf   — d dl mZmZ d dlZd dlmZ ddlmZmZ dgZd
d„Z		 dd„Z
 G d	„ de«      Zy)é    )ÚOptionalÚUnionN)ÚTensoré   )Ú	OptimizerÚParamsTÚLBFGSc                 óV  — |�|\  }}n| |k  r| |fn|| f\  }}||z   d||z
  z  | |z
  z  z
  }	|	dz  ||z  z
  }
|
dk\  rf|
j                  «       }| |k  r||| z
  ||z   |	z
  ||z
  d|z  z   z  z  z
  }n| | |z
  ||z   |	z
  ||z
  d|z  z   z  z  z
  }t        t        ||«      |«      S ||z   dz  S )Né   é   r   g       @)ÚsqrtÚminÚmax)Úx1Úf1Úg1Úx2Úf2Úg2ÚboundsÚ
xmin_boundÚ
xmax_boundÚd1Ú	d2_squareÚd2Úmin_poss                úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/optim/lbfgs.pyÚ_cubic_interpolater      sø   € ð ÐØ!'Ñˆ
‘Jà-/°2ªX " b¡¸BÀ¸8Ñˆ
�Jð 
ˆb‰�1˜˜R™‘= B¨¡GÑ,Ñ	,€BØ�A‘˜˜R™‘€IØ�A‚~Ø�^‰^ÓˆØ�Š8Ø˜B ™G¨¨b©°2©¸"¸r¹'ÀAÈÁFÑ:JÑ(KÑLÑL‰Gà˜B ™G¨¨b©°2©¸"¸r¹'ÀAÈÁFÑ:JÑ(KÑLÑLˆGÜ”3�w 
Ó+¨ZÓ8Ð8à˜ZÑ'¨3Ñ.Ð.ó    c           
      ó€  — |j                  «       j                  «       }|j                  t        j                  ¬«      } | |||«      \  }}d}|j                  |«      }d|||f\  }}}}d}d}||
k  �r||||z  |z  z   kD  s
|dkD  r4||k\  r/||g}||g}||j                  t        j                  ¬«      g}||g}nÍt        |«      | |z  k  r|g}|g}|g}d}n¯|dk\  r/||g}||g}||j                  t        j                  ¬«      g}||g}n{|d||z
  z  z   }|dz  }|}t        ||||||||f¬«      }|}|}|j                  t        j                  ¬«      }|} | |||«      \  }}|dz  }|j                  |«      }|dz  }||
k  r�Œ||
k(  rd|g}||g}||g}d}d   |d	   k  rd
nd\  }}|�sû||
k  �rõt        d   |d   z
  «      |z  |	k  r�nÙt        |d   |d   d   |d   |d   |d   «      }dt        |«      t        |«      z
  z  } t        t        |«      |z
  |t        |«      z
  «      | k  rp|s|t        |«      k\  s|t        |«      k  rOt        |t        |«      z
  «      t        |t        |«      z
  «      k  rt        |«      | z
  }nt        |«      | z   }d}nd}nd} | |||«      \  }}|dz  }|j                  |«      }|dz  }||||z  |z  z   kD  s|||   k\  rE|||<   |||<   |j                  t        j                  ¬«      |<   |||<   |d   |d   k  rd
nd\  }}nxt        |«      | |z  k  rd}n1|||   ||   z
  z  dk\  r ||   ||<   ||   ||<   |   ||<   ||   ||<   |||<   |||<   |j                  t        j                  ¬«      |<   |||<   |s||
k  r�Œõ|   }||   }|   }||||fS )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_wolferK   )   sÆ  € ð �U‰U‹W�[‰[‹]€FØ	�‰œe×5Ñ5ˆÓ6€Aá˜A˜q !Ó$�L€Eˆ5Ø€MØ�i‰i˜‹l€Gð ()¨!¨Q° |Ñ$€FˆF�F˜HØ€DØ€GØ
�FÓ
à�A˜˜Q™ ™Ñ$Ò%¨'°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ˆØˆÙ  1 aÓ(‰ˆˆuØ˜ÑˆØ—)‘)˜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ó
ˆð  ”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ñ    1 aÓ(‰ˆˆuØ˜ÑˆØ—)‘)˜A“,ˆØ�1‰ˆà�A˜˜Q™ ™Ñ$Ò%¨°)¸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˜Ñ ñC �w Ô'ðH 	�Ñ€AØ�gÑ€EØ�gÑ€EØ�%˜˜MÐ)Ð)r   c                   ó¼   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddedeeef   dede	e   dededed	e	e
   fˆ fd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z ej&                  «       d„ «       Zˆ xZS )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).
    ÚparamsÚlrÚmax_iterÚmax_evalÚtolerance_gradr3   Úhistory_sizeÚline_search_fnc	           	      ób  •— t        |t        «      r|j                  «       dk7  rt        d«      ‚d|k  st        d|› �«      ‚|€|dz  dz  }t	        |||||||¬«      }	t
        ‰
| �  ||	«       t        | j                  «      dk7  rt        d«      ‚| j                  d	   d
   | _	        d | _
        y )Nr   zTensor lr must be 1-elementg        zInvalid learning rate: é   é   )rN   rO   rP   rQ   r3   rR   rS   z>LBFGS doesn't support per-parameter options (parameter groups)r   rM   )Ú
isinstancer   ÚnumelÚ
ValueErrorÚdictÚsuperÚ__init__ÚlenÚparam_groupsÚ_paramsÚ_numel_cache)ÚselfrM   rN   rO   rP   rQ   r3   rR   rS   ÚdefaultsÚ	__class__s             €r   r\   zLBFGS.__init__Ù   sÉ   ø€ ô �bœ&Ô! b§h¡h£j°A¢oÜÐ:Ó;Ð;Ø�bŠyÜÐ6°r°dÐ;Ó<Ð<ØÐØ !‘| qÑ(ˆHÜØØØØ)Ø-Ø%Ø)ô
ˆô 	‰Ñ˜ Ô*äˆt× Ñ Ó! QÒ&ÜØPóð ð ×(Ñ(¨Ñ+¨HÑ5ˆŒØ ˆÕr   c                 ót   — | j                   €!t        d„ | j                  D «       «      | _         | j                   S )Nc              3   óŒ   K  — | ]<  }t        j                  |«      rd |j                  «       z  n|j                  «       –— Œ> y­w)r   N)r'   Ú
is_complexrX   )Ú.0Úps     r   ú	<genexpr>zLBFGS._numel.<locals>.<genexpr>ÿ   s:   è ø€ ò $àô "'×!1Ñ!1°!Ô!4��A—G‘G“I’¸!¿'¹'»)ÓCñ$ùs   ‚AA)r`   Úsumr_   )ra   s    r   Ú_numelzLBFGS._numelý   s:   € Ø×ÑÐ$Ü #ñ $àŸ™ô$ó !ˆDÔð
 × Ñ Ð r   c                 ó  — g }| j                   D ]á  }|j                  €.|j                  |j                  «       «      j	                  «       }n[|j                  j
                  r*|j                  j                  «       j                  d«      }n|j                  j                  d«      }t        j                  |«      r$t        j                  |«      j                  d«      }|j                  |«       Œã t        j                  |d«      S )Nr$   r   )r_   ÚgradÚnewrX   Úzero_Ú	is_sparseÚto_denseÚviewr'   rf   Úview_as_realÚappendÚcat)ra   Úviewsrh   rr   s       r   Ú_gather_flat_gradz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                 ó"  — d}| j                   D ]i  }t        j                  |«      rt        j                  |«      }|j	                  «       }|j                  ||||z    j                  |«      |¬«       ||z  }Œk || j                  «       k(  sJ ‚y )Nr   ©Úalpha)r_   r'   rf   rs   rX   Úadd_Úview_asrk   )ra   Ú	step_sizeÚupdateÚoffsetrh   rX   s         r   Ú	_add_gradzLBFGS._add_grad  sˆ   € ØˆØ—‘ò 	ˆAÜ×Ñ Ô"Ü×&Ñ& qÓ)�Ø—G‘G“IˆEà�F‰F�6˜& 6¨E¡>Ð2×:Ñ:¸1Ó=ÀYˆFÔOØ�e‰O‰Fð	ð ˜Ÿ™›Ò&Ð&Ñ&r   c                 ó|   — | j                   D �cg c]"  }|j                  t        j                  ¬«      ‘Œ$ c}S c c}w )Nr!   )r_   r&   r'   r(   )ra   rh   s     r   Ú_clone_paramzLBFGS._clone_param  s+   € ØHLÏÉÖUÀ1�—‘¤e×&=Ñ&=�Õ>ÒUÐUùÒUs   �'9c                 ób   — t        | j                  |«      D ]  \  }}|j                  |«       Œ y ©N)Úzipr_   Úcopy_)ra   Úparams_datarh   Úpdatas       r   Ú
_set_paramzLBFGS._set_param"  s+   € Ü˜DŸL™L¨+Ó6ò 	‰HˆAˆuØ�G‰G�E�Nñ	r   c                 ó�   — | j                  ||«       t         |«       «      }| j                  «       }| j                  |«       ||fS r„   )r€   Úfloatrw   r‰   )ra   Úclosurer+   r,   r-   ÚlossÚ	flat_grads          r   Ú_directional_evaluatezLBFGS._directional_evaluate&  s@   € Ø�‰�q˜!ÔÜ‘W“YÓˆØ×*Ñ*Ó,ˆ	Ø�‰˜ÔØ�YˆÐr   c           	      óâ
  ‡ ‡— t        ‰ j                  «      dk(  sJ ‚ t        j                  «       ‰«      Š‰ j                  d   }|d   }|d   }|d   }|d   }|d   }|d   }|d	   }	‰ j                  ‰ j
                  d      }
|
j                  d
d«       |
j                  dd«        ‰«       }t        |«      }d}|
d
xx   dz  cc<   ‰ j                  «       }|j                  «       j                  «       |k  }|r|S |
j                  d«      }|
j                  d«      }|
j                  d«      }|
j                  d«      }|
j                  d«      }|
j                  d«      }|
j                  d«      }|
j                  d«      }d}||k  �r¬|dz  }|
dxx   dz  cc<   |
d   dk(  r|j                  «       }g }g }g }d}�nš|j                  |«      }|j                  |«      }|j                  |«      }|dkD  r‹t        |«      |	k(  r3|j!                  d«       |j!                  d«       |j!                  d«       |j#                  |«       |j#                  |«       |j#                  d|z  «       ||j                  |«      z  }t        |«      }d|
vr	dg|	z  |
d<   |
d   }|j                  «       }t%        |dz
  dd«      D ]9  }||   j                  |«      ||   z  ||<   |j'                  ||   ||    ¬«       Œ; t        j                  ||«      x}} t%        |«      D ]8  }||   j                  | «      ||   z  }!| j'                  ||   ||   |!z
  ¬«       Œ: |€!|j)                  t        j*                  ¬«      }n|j-                  |«       |}|
d   dk(  r/t/        dd|j                  «       j1                  «       z  «      |z  }n|}|j                  |«      }"|"| kD  r�nVd}#|�p|dk7  rt3        d«      ‚‰ j5                  «       }$ˆˆ fd„}%t7        |%|$|||||"«      \  }}}}#‰ j9                  ||«       |j                  «       j                  «       |k  }nw‰ j9                  ||«       ||k7  r`t        j                  «       5  t         ‰«       «      }ddd«       ‰ j                  «       }|j                  «       j                  «       |k  }d}#||#z  }|
d
xx   |#z  cc<   ||k(  rnS||k\  rnM|rnJ|j                  |«      j                  «       j                  «       |k  rnt        ||z
  «      |k  rn||k  r�Œ¬||
d<   ||
d<   ||
d<   ||
d<   ||
d<   ||
d<   ||
d<   ||
d<   |S # 1 sw Y   ŒÑxY w)z¦Perform a single optimization step.

        Args:
            closure (Callable): A closure that reevaluates the model
                and returns the loss.
        r   r   rN   rO   rP   rQ   r3   rS   rR   Ú
func_evalsÚn_iterr-   r,   Úold_dirsÚold_stpsÚroÚH_diagÚprev_flat_gradÚ	prev_lossg»½×Ùß|Û=g      ð?ÚalNr$   ry   r!   Ústrong_wolfez only 'strong_wolfe' is supportedc                 ó,   •— ‰j                  ‰| ||«      S r„   )r�   )r+   r,   r-   rŒ   ra   s      €€r   r*   zLBFGS.step.<locals>.obj_func¹  s   ø€ Ø#×9Ñ9¸'À1ÀaÈÓKÐKr   )r]   r^   r'   Úenable_gradÚstater_   Ú
setdefaultr‹   rw   r%   r   ÚgetÚnegÚsubÚmulr)   Úpoprt   Úranger{   r&   r(   r†   r   rj   ÚRuntimeErrorr‚   rK   r€   )&ra   rŒ   ÚgrouprN   rO   rP   rQ   r3   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_ir0   r8   Úx_initr*   s&   ``                                    r   Ústepz
LBFGS.step-  sÄ  ù€ ô �4×$Ñ$Ó%¨Ò*Ð*Ð*ð &”%×#Ñ#Ó% gÓ.ˆà×!Ñ! !Ñ$ˆØ�4‰[ˆØ˜Ñ$ˆØ˜Ñ$ˆØÐ/Ñ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ò 6�AØ$ Q™KŸO™O¨AÓ.°°A±Ñ6�B�q‘EØ—F‘F˜8 A™;¨r°!©u¨f�FÕ5ð6ô Ÿ	™	 ! 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Ø  &¨!¨Q°°iÀó9Ñ5�D˜) Q¨ð —‘˜q !Ô$Ø$Ÿ=™=›?×.Ñ.Ó0°NÑB‘ð —‘˜q !Ô$Ø˜XÒ%ô ×*Ñ*Ó,ñ 0Ü$¡W£YÓ/˜÷0à $× 6Ñ 6Ó 8�IØ(Ÿ}™}›×2Ñ2Ó4¸ÑF�HØ$%�Mð ˜]Ñ*ˆMØ�,Ó =Ñ0Óð
 ˜Ò!Øà Ò(Øñ Øð �u‰u�Q‹x�|‰|‹~×!Ñ!Ó#Ð'7Ò7Øä�4˜)Ñ#Ó$Ð'7Ò7ØðE �xÔðH ˆˆc‰
Øˆˆc‰
Ø$ˆˆjÑØ$ˆˆjÑØˆˆd‰Ø ˆˆh‰Ø"0ˆÐÑØ&ˆˆkÑàÐ÷O0ð 0ús   ÒU%Õ%U.)r   é   NgH¯¼šò×z>ç•Ö&è.>éd   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r‹   r   Úintr   Ústrr\   rk   rw   r€   r‚   r‰   r�   r'   Úno_gradr³   Ú__classcell__)rc   s   @r   r	   r	   ·   sÂ   ø„ ñðH $%ØØ"&Ø $Ø"&ØØ(,ñ"!àð"!ð �%˜�-Ñ ð"!ð ð	"!ð
 ˜3‘-ð"!ð ð"!ð  ð"!ð ð"!ð ! ™õ"!òH!ò#ò	'òVòòð €U‡]�]ƒ_ñAó ôAr   r„   )g-Cëâ6?gÍÌÌÌÌÌì?rµ   é   )Útypingr   r   r'   r   Ú	optimizerr   r   Ú__all__r   rK   r	   © r   r   ú<module>rÄ      s;   ðç "ã Ý ç )ð ˆ)€ó/ð: RTóK*ô\xˆIõ xr   