ó
    >:j%  ã                   ó–   • S SK r S SKrS SKJrJr  S SKrS SKJr  S SKJr  S SK	J
r
Jr   " S S\
5      r " S S	\R                  \5      rg)
é    N)ÚAnyÚOptional)Únn)ÚACT2FN)ÚBaseTunerLayerÚcheck_adapters_to_mergec                   óœ   • \ 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\S\4S jjrSS\S\4S jjrSrg	)ÚPeanutLayeré   )Úpeanut_AÚpeanut_BÚpeanut_encodersÚpeanut_decoders.Úadapter_layer_names)ÚrÚdepthÚscalingÚact_fnÚres_numÚother_param_namesÚ
base_layerÚreturnNc                 óÖ  • Xl         0 U 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
        [        R                  " 0 5      U l        X l        SU l        / U l        0 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[1        U5       S3[2        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   r   Ú
ModuleDictr   r   r   r   ÚkwargsÚ_disable_adaptersÚmerged_adaptersÚ_cached_delta_weightsÚget_base_layerÚ
isinstanceÚLinearr   r   ÚhasattrÚwarningsÚwarnÚtypeÚUserWarning)Úselfr   r   r   r   s        ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/peanut/layer.pyÚ__init__ÚPeanutLayer.__init__    s  € Ø$ŒØˆŒØˆŒ
ØˆŒØˆŒØˆŒÜŸš bÓ)ˆŒÜŸš bÓ)ˆŒÜ!Ÿ}š}¨RÓ0ˆÔÜ!Ÿ}š}¨RÓ0ˆÔØŒà!&ˆÔØ!ˆÔØ%'ˆÔ"à×(Ñ(Ó*ˆ
ä�j¤"§)¡)×,Ñ,Ø(2×(>Ñ(>À
×@WÑ@W™ä�z =×1Ñ1´g¸jÈ.×6YÑ6YØ,6×,BÑ,BÀJ×D[ÑD[™\à,6Ñ)�Ü�MŠMØ*¬4°
Ó+;Ð*<Ð<dÐeÔgrôð 'ÔØ(Õó    Úinit_weightsÚinference_modec                 ó
  • X R                   U'   X0R                  U'   X0R                  U'   X@R                  U'   XPR                  U'   [
        R                  " U R                  USS9U R                  U'   [
        R                  " [        U5       Vs/ s H  n[
        R                  " X"SS9PM     sn5      U R                  U'   [
        R                  " [        U5       Vs/ s H  n[
        R                  " X"SS9PM     sn5      U R                  U'   [
        R                  " X R                  SS9U R                  U'   U R                  XS9  U R                  U5        U R!                  U R"                  US9  g s  snf s  snf )NF)Úbias)r.   )r/   )r   r   r   r   r   r   r#   r   r   Ú
ModuleListÚranger   r   r   Úreset_peanut_parametersÚ%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)	r)   Úadapter_namer   r   r   r   r.   r/   Ú_s	            r*   Úupdate_layerÚPeanutLayer.update_layerA   s=  € ð  !�‰ˆ|ÑØ#(�
‰
�<Ñ Ø%*�‰�\Ñ"Ø%,�‰�\Ñ"Ø$*�‰�LÑ!ä&(§i¢i°×0AÑ0AÀ1È5Ñ&Qˆ�‰�lÑ#Ü-/¯]ª]ÔafÐglÔamÓ;nÒamÐ\]¼B¿IºIÀaÐQVÔ<WÑamÑ;nÓ-oˆ×Ñ˜\Ñ*Ü-/¯]ª]ÔafÐglÔamÓ;nÒamÐ\]¼B¿IºIÀaÐQVÔ<WÑamÑ;nÓ-oˆ×Ñ˜\Ñ*ä&(§i¢i°×3DÑ3DÈ5Ñ&Qˆ�‰�lÑ#à×$Ñ$ \Ð$ÑMØ×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMùò <oùÚ;ns   ÂE;Ã!F r8   c                 ó  • XR                   ;  a  g [        R                  R                  U R                   U   R                  [
        R                  " S5      S9  U R                  U    H?  n[        R                  R                  UR                  [
        R                  " S5      S9  MA     U R                  U    H?  n[        R                  R                  UR                  [
        R                  " S5      S9  MA     U(       a7  [        R                  R                  U R                  U   R                  5        g [        R                  R                  U R                  U   R                  [
        R                  " S5      S9  g )Né   )Úa)r   r   ÚinitÚkaiming_uniform_ÚweightÚmathÚsqrtr   r   Úzeros_r   )r)   r8   r.   ÚencoderÚdecoders        r*   r4   Ú#PeanutLayer.reset_peanut_parameters[   s  € ØŸ}™}Ó,Øä
�‰× Ñ  §¡¨|Ñ!<×!CÑ!CÄtÇyÂyÐQRÃ|Ð ÑTØ×+Ñ+¨LÔ9ˆGÜ�G‰G×$Ñ$ W§^¡^´t·y²yÀ³|Ð$ÓDñ :à×+Ñ+¨LÔ9ˆGÜ�G‰G×$Ñ$ W§^¡^´t·y²yÀ³|Ð$ÓDñ :ö Ü�G‰G�N‰N˜4Ÿ=™=¨Ñ6×=Ñ=Õ>ä�G‰G×$Ñ$ T§]¡]°<Ñ%@×%GÑ%GÌ4Ï9Ê9ÐUVË<Ð$ÒXr-   )r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )TF)T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚtupleÚstrÚ__annotations__r   r   ÚModuler+   Úboolr:   r4   Ú__static_attributes__© r-   r*   r
   r
      s€   ‡ à+iÐ˜˜s C˜x™Óià)WÐ�u˜S #˜X‘ÓWð) 2§9¡9ð )¸4ô )ðP "Ø$ñNð ðNð õNñ4Y°Cð YÀt÷ Yð Yr-   r
   c                   ó<  ^ • \ rS rSr     SS\S\S\S\S\S\SS	4U 4S
 jjjrS\S\	R                  S\	R                  4S 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#   ék   r8   r   r   r   r   r.   r   Nc           	      ó„   >• [         T	U ]  5         [        R                  " X40 UD6  X l        U R	                  UUUUUUS9  g )N)r   r   r   r.   )Úsuperr+   r
   Ú_active_adapterr:   )
r)   r   r8   r   r   r   r   r.   r   Ú	__class__s
            €r*   r+   ÚLinear.__init__m   sN   ø€ ô 	‰ÑÔÜ×Ò˜TÑ8°Ò8à+Ôà×ÑØØØØØØ%ð 	ò 	
r-   ÚadapterÚbase_weightc                 óø  • XR                   ;  a  [        SU S35      eU R                   U   nU R                  U   n[        U R                  U      nU R
                  U   nU R                  U   nU R                  U   nU R                  U   n	UR                  SS5      R                  UR                  R                  5      n
U" [        R                  " X£R                  R                  5       5      5      n/ n[!        U5       H&  nUR#                  U5        X�   nU" U" U5      5      nM(     [!        U5       H"  nX�   nU" U" U5      5      nX¼US-
  U-
     -   nM$     U" U5      nX¶-  R                  SS5      $ )NzAdapter z not found.r   é   )r   Ú
ValueErrorr   r   r   r   r   r   r   Ú	transposeÚtorA   ÚdtypeÚtorchÚmatmulÚtr3   Úappend)r)   rZ   r[   r   r   Ú
non_linearr   r   r   r   Úbase_weight_tÚdelta_wÚ	residualsÚirE   rF   s                   r*   Ú_compute_delta_weightÚLinear._compute_delta_weight†   sh  € ØŸ-™-Ó'Ü˜x¨ y°Ð<Ó=Ð=à—=‘= Ñ)ˆØ—=‘= Ñ)ˆÜ˜DŸK™K¨Ñ0Ñ1ˆ
Ø—,‘,˜wÑ'ˆØ—,‘,˜wÑ'ˆØ×.Ñ.¨wÑ7ˆØ×.Ñ.¨wÑ7ˆà#×-Ñ-¨a°Ó3×6Ñ6°x·±×7LÑ7LÓMˆÙœUŸ\š\¨-¿¹×9JÑ9JÓ9LÓMÓNˆàˆ	Ü�w–ˆAØ×Ñ˜WÔ%Ø%Ñ(ˆGÙ ¡¨Ó!1Ó2ŠGñ  ô
 �w–ˆAØ%Ñ(ˆGÙ ¡¨Ó!1Ó2ˆGØ¨'°A©+¸©/Ñ :Ñ:ŠGñ  ñ
 ˜7Ó#ˆØÑ!×,Ñ,¨Q°Ó2Ð2r-   c                 óX   • U R                  5       R                  nU R                  X5      $ )N)r!   rA   rk   )r)   rZ   r[   s      r*   Úget_delta_weightÚLinear.get_delta_weight£   s'   € Ø×)Ñ)Ó+×2Ñ2ˆØ×)Ñ)¨'Ó?Ð?r-   Ú
safe_mergeÚadapter_namesc                 óö  • [        X5      nU(       d  g U R                  5       nUR                  R                  R	                  5       R                  5       nU GHŒ  nXPR                  ;  a  M  [        R                  " 5          U R                  XT5      nUR                  UR                  R                  UR                  R                  S9nU(       aq  UR                  R                  R                  5       nXv-   n[        R                  " U5      R                  5       (       d  [        SU S35      eXsR                  l        O%UR                  R                  R!                  U5        S S S 5        WR                  R"                  S:w  a   UR	                  5       R                  S5      nOUR	                  5       nX€R$                  U'   U R&                  R)                  U5        GM�     g ! , (       d  f       N‡= f)N©ra   Údevicez1NaNs detected in the merged weights. The adapter z seems to be brokenÚcpu)r   r!   rA   ÚdataÚdetachÚcloner   rb   Úno_gradrk   r`   ra   rt   ÚisfiniteÚallr^   Úadd_r'   r    r   re   )	r)   rp   rq   r   Úmerge_base_weightÚactive_adapterÚdelta_weightÚorig_weightsÚcached_delta_weights	            r*   ÚmergeÚLinear.merge§   sŽ  € Ü/°ÓDˆÞØà×(Ñ(Ó*ˆ
Ø&×-Ñ-×2Ñ2×9Ñ9Ó;×AÑAÓCÐä+ˆNØ§]¡]Ó2Ùä—’•Ø#×9Ñ9¸.Ó\�Ø+Ÿ™°Z×5FÑ5F×5LÑ5LÐU_×UfÑUf×UmÑUm˜Ðn�æØ#-×#4Ñ#4×#9Ñ#9×#?Ñ#?Ó#A�LØ#/Ñ#>�Lä Ÿ>š>¨,Ó7×;Ñ;×=Ñ=Ü(ØOÐP^ÐO_Ð_rÐsóð ð .:×%Ñ%Õ*à×%Ñ%×*Ñ*×/Ñ/°Ô=÷ !ð" ×"Ñ"×'Ñ'¨5Ó0Ø&2×&9Ñ&9Ó&;×&>Ñ&>¸uÓ&EÑ#à&2×&9Ñ&9Ó&;Ð#Ø9L×&Ñ& ~Ñ6Ø× Ñ ×'Ñ'¨×7ò5 ,÷ !•ús   ÂC'G*Ç*
G8	c                 óF  • U R                   (       d  [        R                  " S5        g U R                  5       n[	        U R
                  5      S:”  aÐ  U R
                  R                  5       nX R                  ;  a  MD  U R                  R                  US 5      nUc  [        SU S35      eUR                  R                  R                  UR                  UR                  R                  UR                  R                  S95        [	        U R
                  5      S:”  a  MÏ  g g )Nz Already unmerged. Nothing to do.r   z!Cached delta weight for adapter 'z' is missing; cannot unmerge.rs   )Úmergedr%   r&   r!   Úlenr   Úpopr   r    r^   rA   rv   Úsub_r`   ra   rt   )r)   r   r~   r   s       r*   ÚunmergeÚLinear.unmergeË   sç   € Ø�{�{Ü�MŠMÐ<Ô=Øà×(Ñ(Ó*ˆ
Ü�$×&Ñ&Ó'¨!Ó+Ø!×1Ñ1×5Ñ5Ó7ˆNØ§]¡]Ó2Ùà×5Ñ5×9Ñ9¸.È$ÓOˆLØÑ#Ü Ð#DÀ^ÐDTÐTqÐ!rÓsÐsà×Ñ×"Ñ"×'Ñ'Ø—‘ j×&7Ñ&7×&=Ñ&=Àj×FWÑFW×F^ÑF^�Ð_ôô �$×&Ñ&Ó'¨!×+r-   ÚxÚargsr   c                 ód  • U R                   (       a9  U R                  (       a  U R                  5         U R                  " U/UQ70 UD6nU$ U R                  (       a  U R                  " U/UQ70 UD6nU$ U R                  " U/UQ70 UD6nU R                  (       a•  UR
                  nU R                   Hy  nX`R                  ;  a  M  U R                  U5      nU R                  XR
                  5      n[        R                  " X‡R                  SS5      5      n	XIR                  U5      -   nM{     U$ )Nr   r]   )Údisable_adaptersr…   r‰   r   r7   ra   r   rn   Ú_cast_input_dtyperb   rc   r_   r`   )
r)   r‹   rŒ   r   ÚresultÚtorch_result_dtyper~   r   Úx_castÚdeltas
             r*   ÚforwardÚLinear.forwardÞ   s  € Ø× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð$ ˆð# �[�[Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð  ˆð —_’_ QÐ8¨Ò8°Ñ8ˆFà×#×#Ø%+§\¡\Ð"à&*×&:Ô&:�NØ%¯]©]Ó:Ù à#'×#8Ñ#8¸Ó#H�LØ!×3Ñ3°A×7IÑ7IÓJ�FÜ!ŸLšL¨×1GÑ1GÈÈ1Ó1MÓN�EØ#§h¡hÐ/AÓ&BÑB’Fñ ';ð ˆr-   c                 ó*   >• [         TU ]  5       nSU-   $ )Nzpeanut.)rV   Ú__repr__)r)   ÚreprX   s     €r*   r—   ÚLinear.__repr__ö   s   ø€ Ü‰gÑÓ ˆØ˜3‰Ðr-   )rW   )é    r   g      ð?ÚreluT)FN)r   N)rH   rI   rJ   rK   rM   ÚintÚfloatrP   r+   rb   ÚTensorrk   rn   r   Úlistr‚   r‰   r   r”   r—   rQ   Ú__classcell__)rX   s   @r*   r#   r#   k   sÿ   ø† ð ØØØØ!ñ
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð ð
ð 
÷
ð 
ð23¨Sð 3¸u¿|¹|ð 3ÐPU×P\ÑP\ô 3ð:@¨5¯<©<ô @ñ"8 ð "8¸XÀdÈ3ÁiÑ=Pð "8Ð\`õ "8ôHð&˜Ÿ™ð ¨cð ¸Sð ÀUÇ\Á\ô ð0˜#÷ õ r-   r#   )rB   r%   Útypingr   r   rb   r   Útransformers.activationsr   Úpeft.tuners.tuners_utilsr   r   r
   rO   r#   rR   r-   r*   Ú<module>r¤      sA   ðó Û ß  ã Ý Ý +ç LôNY�.ô NYôbMˆR�Y‰Y˜õ Mr-   