ó
    >:j  ã                   ó˜   • S SK r S SKrS SKJrJr  S SKrS SKJs  Jr	  S SKJr  S SK
Jr   " S S\5      r " S S\R                  \5      rg)	é    N)ÚAnyÚOptional)Únn)ÚBaseTunerLayerc            	       óØ   • \ rS rSr% Sr\\S4   \S'   Sr\\S4   \S'   S\	R                  SS	4S
 jr    SS\\	R                     S\\	R                     S\S\4S jjrSS\4S jjrSrg	)Ú	LilyLayeré   )Úlily_AÚlily_BÚlily_router.Úadapter_layer_names)ÚrÚscalingÚstride_AÚnum_BÚother_param_namesÚ
base_layerÚreturnNc                 ó„  • Xl         0 U l        0 U l        0 U l        0 U l        [
        R                  " 0 5      U l        [
        R                  " 0 5      U l        [
        R                  " 0 5      U l	        X l
        SU l        / U l        U R                  5       n[        U[
        R                  5      (       a  UR                   UR"                  pCOf[%        US5      (       a)  [%        US5      (       a  UR                   UR"                  pCOSu  p4[&        R(                  " S[+        U5       S3[,        5        X0l        X@l        g )NFÚin_featuresÚout_features)NNzUnsupported layer type 'z(' encountered, proceed at your own risk.)r   r   r   r   r   r   Ú
ModuleDictr
   r   r   ÚkwargsÚ_disable_adaptersÚmerged_adaptersÚget_base_layerÚ
isinstanceÚLinearr   r   ÚhasattrÚwarningsÚwarnÚtypeÚUserWarning)Úselfr   r   r   r   s        ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/lily/layer.pyÚ__init__ÚLilyLayer.__init__    s  € Ø$ŒØˆŒØˆŒØˆŒØˆŒ
Ü—m’m BÓ'ˆŒÜ—m’m BÓ'ˆŒÜŸ=š=¨Ó,ˆÔØŒà!&ˆÔØ!ˆÔà×(Ñ(Ó*ˆ
ä�j¤"§)¡)×,Ñ,Ø(2×(>Ñ(>À
×@WÑ@W™ô �z =×1Ñ1´g¸jÈ.×6YÑ6YØ,6×,BÑ,BÀJ×D[ÑD[™\à,6Ñ)�Ü�MŠMØ*¬4°
Ó+;Ð*<Ð<dÐeÔgrôð 'ÔØ(Õó    r
   r   Úinit_weightsÚinference_modec
                 óV  • [        5       R                  5       n
U
S	 US::  a  [        SU 35      eX R                  U'   X0R                  U'   Ub  UO[
        R                  " U R                  USS9U R                  U'   Ub  UO![
        R                  " U R                  XR-  SS9U R                  U'   [
        R                  " X%SS9U R                  U'   X@R                  U'   XPR                  U'   U R                  XS9  U R                  U5        U R!                  U R"                  U	S9  g )Nr$   r   z?`r` should be a positive integer value but the value passed is F)Úbias)r)   )r*   )ÚlocalsÚcopyÚ
ValueErrorr   r   r   r   r   r
   r   r   r   r   r   Úreset_lily_parametersÚ%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)r$   Úadapter_namer   r   r   r   r
   r   r)   r*   r   s              r%   Úupdate_layerÚLilyLayer.update_layer?   s  € ô “—‘“ˆØ�6ˆNà�‹6ÜÐ^Ð_`Ð^aÐbÓcÐcà �‰ˆ|ÑØ%,�‰�\Ñ"ð /5Ñ.@¡FÄbÇiÂiÐPT×P`ÑP`ÐbcÐjoÑFpˆ�‰�LÑ!àÑ(‰F¬b¯iªi¸×8IÑ8IÈ5É9Ð[`Ñ.að 	�‰�LÑ!ô *,¯ª°1À%Ñ)Hˆ×Ñ˜Ñ&à&.�‰�lÑ#Ø#(�
‰
�<Ñ Ø×"Ñ" <Ð"ÑKØ×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMr(   c                 óX  • XR                   ;   Ga  [        R                  R                  U R                   U   R                  [
        R                  " S5      S9  [        R                  R                  U R                  U   R                  [
        R                  " S5      S9  U(       dJ  [        R                  R                  U R                  U   R                  [
        R                  " S5      S9  g [        R                  R                  U R                  U   R                  5        g g )Né   )Úa)
r
   r   ÚinitÚkaiming_uniform_ÚweightÚmathÚsqrtr   r   Úzeros_)r$   r4   r)   s      r%   r0   ÚLilyLayer.reset_lily_parametersb   sÂ   € ØŸ;™;Ô&Ü�G‰G×$Ñ$ T§[¡[°Ñ%>×%EÑ%EÌÏÊÐSTËÐ$ÑVÜ�G‰G×$Ñ$ T×%5Ñ%5°lÑ%C×%JÑ%JÌdÏiÊiÐXYËlÐ$Ñ[ÞÜ—‘×(Ñ(¨¯©°\Ñ)B×)IÑ)IÌTÏYÊYÐWXË\Ð(ÒZä—‘—‘˜tŸ{™{¨<Ñ8×?Ñ?Õ@ð 'r(   )r   r   r   r   r
   r   r   r   r   r   r   r   r   )NNTF)T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚtupleÚstrÚ__annotations__r   r   ÚModuler&   r   r   Úboolr5   r0   Ú__static_attributes__© r(   r%   r   r      s§   ‡ à+NÐ˜˜s C˜x™ÓNà)NÐ�u˜S #˜X‘ÓNð) 2§9¡9ð )¸4ô )ðL '+Ø&*Ø!Ø$ñ!Nð ˜Ÿ™Ñ#ð!Nð ˜Ÿ™Ñ#ð!Nð ð!Nð õ!NñFAÀ÷ Að Ar(   r   c                   ó2  ^ • \ rS rSr       SS\S\S\S\S\S\R                  S	\R                  S
\	SS4U 4S jjjr
S\R                  4S jrSS\	S\\\      SS4S jjrSS jrS\R                  S\S\S\R                  4S jrS\4U 4S jjrSrU =r$ )r   él   Nr4   r   r   r   r   r
   r   r)   r   c
                 óˆ   >• [         TU ]  5         [        R                  " X40 U
D6  X l        U R	                  UUUUUUUU	S9  g )N)r   r
   r   r   r   r)   )Úsuperr&   r   Ú_active_adapterr5   )r$   r   r4   r   r   r   r   r
   r   r)   r   Ú	__class__s              €r%   r&   ÚLinear.__init__n   sT   ø€ ô 	‰ÑÔÜ×Ò˜4Ñ6¨vÒ6à+Ôà×ÑØØØØØØØØ%ð 	ò 		
r(   c                 ó   • [        S5      e)zš
Compute the delta weight for the given adapter.

Args:
    adapter (str):
        The name of the adapter for which the delta weight should be computed.
ú&This method is not supported for Lily.©ÚNotImplementedError)r$   Úadapters     r%   Úget_delta_weightÚLinear.get_delta_weight‹   s   € ô "Ð"JÓKÐKr(   Ú
safe_mergeÚadapter_namesc                 ó   • [        S5      e©NrT   rU   )r$   rZ   r[   s      r%   ÚmergeÚLinear.merge•   ó   € Ü!Ð"JÓKÐKr(   c                 ó   • [        S5      er]   rU   )r$   s    r%   ÚunmergeÚLinear.unmerge˜   r`   r(   ÚxÚargsr   c                 óZ  • U R                   " U/UQ70 UD6nU R                  (       d  U R                  (       d  U$ UR                  nU R                  R                  5       nU R                   GH9  nXv;  a  M  U R                  U   nU R                  U   n	U R                  U   n
U R                  U   nU	R                  R                  USU	R                  R                  S   5      nU R                  U   nU R                  XR                  R                  5      nU" U5      nU
" U5      n[        R                  " USS9nUR                  SU5      R!                  SS9n["        R$                  " SUU5      n["        R&                  " UU5      nUUU-  R)                  U5      -   nGM<     U$ )Néÿÿÿÿé   )Údimr   z	e,eio->io)r   Údisable_adaptersr3   Údtyper
   Úkeysr   r   r   r<   ÚreshapeÚshaper   Ú_cast_input_dtypeÚFÚsoftmaxÚmeanÚtorchÚeinsumÚmatmulÚto)r$   rd   re   r   ÚresultÚtorch_result_dtypeÚlily_A_keysÚactive_adapterr
   r   Úrouterr   ÚBr   ÚhiddenÚrouter_logitsÚrouter_probabilityÚexpert_probabilitiesÚ
combined_BÚdeltas                       r%   ÚforwardÚLinear.forward›   sw  € Ø—’ Ð4 TÒ4¨VÑ4ˆà× × ¨×(<×(<ØˆMà#Ÿ\™\Ðà—k‘k×&Ñ&Ó(ˆà"×2Õ2ˆNØÓ0Ùà—[‘[ Ñ0ˆFØ—[‘[ Ñ0ˆFØ×%Ñ% nÑ5ˆFØ—J‘J˜~Ñ.ˆEØ—‘×%Ñ% e¨R°·±×1DÑ1DÀQÑ1GÓHˆAØ—l‘l >Ñ2ˆGØ×&Ñ& q¯-©-×*=Ñ*=Ó>ˆAÙ˜A“YˆFÙ" 6›NˆMÜ!"§¢¨=¸bÑ!AÐØ#5×#=Ñ#=¸bÀ%Ó#H×#MÑ#MÐRSÐ#MÐ#TÐ ÜŸš kÐ3GÈÓKˆJÜ—L’L ¨Ó4ˆEØ˜u w™×2Ñ2Ð3EÓFÑF‹Fñ# 3ð& ˆr(   c                 ó*   >• [         TU ]  5       nSU-   $ )Nzlily.)rO   Ú__repr__)r$   ÚreprQ   s     €r%   r†   ÚLinear.__repr__º   s   ø€ Ü‰gÑÓ ˆØ˜‰}Ðr(   )rP   )é    g      ð?rh   é   NNT)FN)r   N)rA   rB   rC   rD   rF   ÚintÚfloatr   r   rI   r&   rs   ÚTensorrX   r   Úlistr^   rb   r   rƒ   r†   rJ   Ú__classcell__)rQ   s   @r%   r   r   l   s   ø† ð ØØØØ Ø Ø!ñ
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð —	‘	ð
ð —	‘	ð
ð ð
ð 
÷
ð 
ð:L¨5¯<©<ô LñL ð L¸XÀdÈ3ÁiÑ=Pð LÐ\`õ LôLð˜Ÿ™ð ¨cð ¸Sð ÀUÇ\Á\ô ð>˜#÷ õ r(   r   )r=   r    Útypingr   r   rs   Útorch.nn.functionalr   Ú
functionalrp   Úpeft.tuners.tuners_utilsr   r   rH   r   rK   r(   r%   Ú<module>r”      sD   ðó Û ß  ã ß Ð Ý å 3ôOA�ô OAôdPˆR�Y‰Y˜	õ Pr(   