ó
    >:j#0  ã                   ó´   • S SK r S SKJr  S SKrS SKJr  S SKJs  Jr  S SK	J
r
  S SKJrJr  S SKJr  SSKJr   " S S	\5      r " S
 S\R&                  \5      rg)é    N)ÚOptional)ÚConv1D)ÚBaseTunerLayerÚcheck_adapters_to_merge)Ú	transposeé   )Ú
BufferDictc            	       óŠ   • \ rS rSrSrSrS\R                  4S jr\	S\
4S j5       r  SS\S	\S
\S\
4S jjrSS
\4S jjrSrg)Ú	VeraLayeré   )Úvera_lambda_bÚvera_lambda_d)Úvera_AÚvera_BÚ
base_layerc                 ój  • Xl         0 U l        [        R                  " 0 5      U l        [        R
                  " 0 5      U l        [        R
                  " 0 5      U l        S U l        S U l	        SU l
        / U l        U R                  5       n[        U[        R                  5      (       a  UR                  UR                   pCO^[        U["        5      (       aI  [%        UR&                  S5      (       a  UR&                  R(                  OUR&                  R*                  u  p4WU l        WU l        X l        g )NFÚds_shape)r   ÚrÚnnÚ
ModuleDictÚvera_dropoutÚParameterDictr   r   r   r   Ú_disable_adaptersÚmerged_adaptersÚget_base_layerÚ
isinstanceÚLinearÚin_featuresÚout_featuresr   ÚhasattrÚweightr   ÚshapeÚkwargs)Úselfr   r#   r   r   s        ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/vera/layer.pyÚ__init__ÚVeraLayer.__init__"   sö   € Ø$ŒØˆŒÜŸMšM¨"Ó-ˆÔô  ×-Ò-¨bÓ1ˆÔÜ×-Ò-¨bÓ1ˆÔð -1ˆŒØ,0ˆŒð "'ˆÔØ!ˆÔà×(Ñ(Ó*ˆ
Ü�j¤"§)¡)×,Ñ,Ø(2×(>Ñ(>À
×@WÑ@W™Ü˜
¤F×+Ñ+ä.5°j×6GÑ6GÈ×.TÑ.T�
×!Ñ!×*Ò*ÐZd×ZkÑZk×ZqÑZqñ &ˆKð 'ˆÔØ(ˆÔØ�ó    Úreturnc                 ó,   • [        U R                  5      $ ©N)Úboolr   )r$   s    r%   ÚmergedÚVeraLayer.merged@   s   € ä�D×(Ñ(Ó)Ð)r(   r   r   Ú	d_initialÚinference_modec	                 óR  • US::  a  [        SU 35      eX@R                  U'   US:”  a  [        R                  " US9n
O[        R                  " 5       n
U R
                  R                  [        R                  " X05      5        [        R                  " [        R                  " U R                  5      SS9U R                  U'   [        R                  " [        R                  " U5      SS9U R                  U'   X l        X0l        X;  GaÜ  [#        U R                  5      S:  a  [        S5      e[%        U R                  R'                  5       5      S   n[%        U R                   R'                  5       5      S   nS	nUR(                  S   U R*                  :  a3  [        UR-                  S
UR(                  S   U R*                  5      5      eUR(                  S   U R                  :  a3  [        UR-                  SUR(                  S   U R                  5      5      eSnUR(                  S   U R                  U   :  a6  [        UR-                  S
UR(                  S   U R                  U   5      5      eUR(                  S   U R                  U   :  a6  [        UR-                  SUR(                  S   U R                  U   5      5      eX°R                  U'   XÀR                   U'   U(       a  U R/                  XS9  U R1                  U5        U R3                  U R4                  US9  g )Nr   z?`r` should be a positive integer value but the value passed is ç        )ÚpT)Úrequires_gradé   z^The `vera_A` and `vera_B` buffers are empty. This should not happen. Please report this issue.z¤{} has a size of {} but {} or greater is required; this probably happened because an additional VeRA adapter was added after the first one with incompatible shapes.r   r   zÓ{} has a size of {} but {} or greater is required; this probably happened because an additional VeRA adapter with a lower rank was added after the first one; loading the adapters in reverse order may solve this.©r/   )r0   )Ú
ValueErrorr   r   ÚDropoutÚIdentityr   Úupdater   Ú	ParameterÚtorchÚonesr   r   Úrandnr   r   r   ÚlenÚlistÚvaluesr"   r   ÚformatÚreset_vera_parametersÚ%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)r$   Úadapter_namer   r   r   r   Úinit_weightsr/   r0   r#   Úvera_dropout_layerÚvera_A_paramÚvera_B_paramÚ
error_tmpls                 r%   Úupdate_layerÚVeraLayer.update_layerD   sÁ  € ð �‹6ÜÐ^Ð_`Ð^aÐbÓcÐcØ �‰ˆ|ÑØ˜#ÓÜ!#§¢¨lÑ!;Ñä!#§¢£Ðà×Ñ× Ñ ¤§¢°Ð/QÓ!RÔSä+-¯<ª<¼¿
º
À4×CTÑCTÓ8UÐeiÑ+jˆ×Ñ˜<Ñ(Ü+-¯<ª<¼¿ºÀA»ÐVZÑ+[ˆ×Ñ˜<Ñ(ð ŒØŒØÔ%ä�4—;‘;Ó !Ó#Ü Øtóð ô   §¡× 2Ñ 2Ó 4Ó5°aÑ8ˆLÜ §¡× 2Ñ 2Ó 4Ó5°aÑ8ˆLðRð ð
 ×!Ñ! !Ñ$ t×'7Ñ'7Ó7Ü  ×!2Ñ!2°8¸\×=OÑ=OÐPQÑ=RÐTX×TdÑTdÓ!eÓfÐfà×!Ñ! !Ñ$ t×'8Ñ'8Ó8Ü  ×!2Ñ!2°8¸\×=OÑ=OÐPQÑ=RÐTX×TeÑTeÓ!fÓgÐgð3ð ð
 ×!Ñ! !Ñ$ t§v¡v¨lÑ';Ó;Ü  ×!2Ñ!2°8¸\×=OÑ=OÐPQÑ=RÐTX×TZÑTZÐ[gÑThÓ!iÓjÐjØ×!Ñ! !Ñ$ t§v¡v¨lÑ';Ó;Ü  ×!2Ñ!2°8¸\×=OÑ=OÐPQÑ=RÐTX×TZÑTZÐ[gÑThÓ!iÓjÐjà(4�K‰K˜Ñ%Ø(4�K‰K˜Ñ%æØ×&Ñ& |Ð&ÑIà×2Ñ2°<Ô@Ø×Ñ˜×-Ñ-¸nÐÒMr(   c                 ól  • XR                   R                  5       ;   a†  [        R                  " 5          [        R
                  R                  U R                   U   5      R                  U5        [        R
                  R                  U R                  U   5        S S S 5        g g ! , (       d  f       g = fr+   )	r   Úkeysr<   Úno_gradr   ÚinitÚzeros_Úfill_r   )r$   rG   r/   s      r%   rC   ÚVeraLayer.reset_vera_parametersˆ   ss   € Ø×-Ñ-×2Ñ2Ó4Ó4Ü—’•Ü—‘—‘˜t×1Ñ1°,Ñ?Ó@×FÑFÀyÔQÜ—‘—‘˜t×1Ñ1°,Ñ?Ô@÷ !�ð 5ß •ús   ³A(B%Â%
B3)r   r   r   r#   r   r   r   r   r   r   r   r   N)çš™™™™™¹?F)rV   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úadapter_layer_namesÚother_param_namesr   ÚModuler&   Úpropertyr,   r-   r	   ÚfloatrM   rC   Ú__static_attributes__© r(   r%   r   r      s�   † à<ÐØ,Ðð 2§9¡9ô ð< ð*˜ó *ó ð*ð Ø$ñBNð ðBNð ð	BNð ðBNð õBNñHA¸U÷ Að Ar(   r   c                   ó  ^ • \ rS rSr      SS\S\S\S\S\S\S\S	\S
\SS4U 4S jjjr	SS\S\
\\      SS4S jjrSS jrS\R                  4S jrS\R                  S\R                  4S jrSS\S\4S jjrS\4U 4S jjrSrU =r$ )r   é�   r   r   rG   r   r   Úfan_in_fan_outÚis_target_conv_1d_layerrH   r/   r)   Nc           
      ó´   >• [         [        R                  U ]  5         [        R                  " X40 UD6  Xpl        X@l        U R                  XBX5XiU
S9  X€l        g )Nr6   )	Úsuperr   r   r&   r   rd   Ú_active_adapterrM   re   )r$   r   r   r   rG   r   r   rd   re   rH   r/   r#   Ú	__class__s               €r%   r&   ÚLinear.__init__‘   sS   ø€ ô 	Œb�i‰i˜Ñ'Ô)Ü×Ò˜4Ñ6¨vÒ6Ø,Ôà+ÔØ×Ñ˜,°¸<ÐajÐÑkØ'>Õ$r(   Ú
safe_mergeÚadapter_namesc                 ó>  • [        X5      nU(       d  gU GH  nX0R                  R                  5       ;   d  M#  U R                  5       nU(       a€  UR                  R
                  R                  5       nXPR                  U5      -  n[        R                  " U5      R                  5       (       d  [        SU S35      eXTR                  l        O.UR                  =R
                  U R                  U5      -  sl        U R                  R                  U5        GM     g)a  
Merge the active adapter weights into the base weights

Args:
    safe_merge (`bool`, *optional*):
        If True, the merge operation will be performed in a copy of the original weights and check for NaNs
        before merging the weights. This is useful if you want to check if the merge operation will produce
        NaNs. Defaults to `False`.
    adapter_names (`List[str]`, *optional*):
        The list of adapter names that should be merged. If None, all active adapters will be merged. Defaults
        to `None`.
Nz1NaNs detected in the merged weights. The adapter z seems to be broken)r   r   rP   r   r!   ÚdataÚcloneÚget_delta_weightr<   ÚisfiniteÚallr7   r   Úappend)r$   rk   rl   Úactive_adapterr   Úorig_weightss         r%   ÚmergeÚLinear.merge¨   së   € ô 0°ÓDˆÞàä+ˆNØ×!3Ñ!3×!8Ñ!8Ó!:Õ:Ø!×0Ñ0Ó2�
Þð $.×#4Ñ#4×#9Ñ#9×#?Ñ#?Ó#A�Là ×$9Ñ$9¸.Ó$IÑI�Lä Ÿ>š>¨,Ó7×;Ñ;×=Ñ=Ü(ØOÐP^ÐO_Ð_rÐsóð ð .:×%Ñ%Õ*à×%Ñ%×*Ò*¨d×.CÑ.CÀNÓ.SÑSÕ*Ø×$Ñ$×+Ñ+¨N×;ò% ,r(   c                 ó¤  • U R                   (       d  [        R                  " S5        g [        U R                  5      S:”  a�  U R                  R                  5       nXR                  R                  5       ;   a<  U R                  5       R                  =R                  U R                  U5      -  sl
        [        U R                  5      S:”  a  MŽ  g g )Nz Already unmerged. Nothing to do.r   )r-   ÚwarningsÚwarnr?   r   Úpopr   rP   r   r!   rn   rp   )r$   rt   s     r%   ÚunmergeÚLinear.unmergeÎ   s•   € Ø�{�{Ü�MŠMÐ<Ô=Øä�$×&Ñ&Ó'¨!Ó+Ø!×1Ñ1×5Ñ5Ó7ˆNØ×!3Ñ!3×!8Ñ!8Ó!:Ó:Ø×#Ñ#Ó%×,Ñ,×1Ò1°T×5JÑ5JÈ>Ó5ZÑZÕ1ô �$×&Ñ&Ó'¨!×+r(   c                 ó$  • U R                   U   nU R                  U   nUR                  nUR                  nUR                  S:H  =(       a-    U[
        R                  :H  =(       d    U[
        R                  :H  nU R                  U   nU R                  U   nU(       a@  UR                  5       nUR                  5       nUR                  5       nUR                  5       nUSS2SU R                  24   R                  UR                  5      n	USU R                  2SS24   R                  UR                  5      n
UR                  S5      nUR                  S5      n[        XŠ-  Xy-  -  U R                   5      nU(       a  UR                  US9nU$ )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.
ÚcpuNéÿÿÿÿ)Údtype)r   r   Údevicer�   Útyper<   Úfloat16Úbfloat16r   r   r_   r   Útor   Ú	unsqueezer   rd   )r$   Úadapterr   r   r‚   r�   Úcast_to_fp32Úlambda_dÚlambda_bÚsliced_AÚsliced_BÚoutput_tensors               r%   rp   ÚLinear.get_delta_weightØ   s`  € ð —‘˜WÑ%ˆØ—‘˜WÑ%ˆà—‘ˆØ—‘ˆð
 —{‘{ eÑ+×c°¼%¿-¹-Ñ1G×1bÈ5ÔTY×TbÑTbÑKbˆà×%Ñ% gÑ.ˆØ×%Ñ% gÑ.ˆæØ—\‘\“^ˆFØ—\‘\“^ˆFØ—~‘~Ó'ˆHØ—~‘~Ó'ˆHàš!Ð/˜t×/Ñ/Ð/Ð/Ñ0×3Ñ3°H·O±OÓDˆØÐ-˜D×-Ñ-Ð-ªqÐ0Ñ1×4Ñ4°X·_±_ÓEˆØ×%Ñ% bÓ)ˆØ×%Ñ% bÓ)ˆÜ! 8Ñ#6¸8Ñ;NÑ"OÐQU×QdÑQdÓeˆæØ)×,Ñ,°5Ð,Ð9ˆMàÐr(   Úxc                 ó²  • UR                   nU R                  (       a9  U R                  (       a  U R                  5         U R                  " U/UQ70 UD6nGOoU R                  (       a  U R                  " U/UQ70 UD6nGOFU R                  " U/UQ70 UD6nU R
                   GH  nX`R                  R                  5       ;  a  M#  U R                  U   nU R                  U   nU R                  U   n	U R                  U   n
U	S S 2S U R                  24   R                  UR                  5      nU
S U R                  2S S 24   R                  UR                  5      nU R                  U   nUR                  UR                   5      nXX[         R"                  " U[         R"                  " U" U5      U5      -  U5      -  -   nGM"     UR                  U5      nU$ r+   )r�   Údisable_adaptersr-   r|   r   rF   r   rP   r   r   r   r   r†   r‚   r   r   ÚFÚlinear)r$   r�   Úargsr#   Úprevious_dtypeÚresultrt   rŠ   r‹   r   r   rŒ   r�   Údropouts                 r%   ÚforwardÚLinear.forwardÿ   s“  € ØŸ™ˆà× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ŠFØ�[�[Ø—_’_ QÐ8¨Ò8°Ñ8ŠFà—_’_ QÐ8¨Ò8°Ñ8ˆFØ"&×"6Õ"6�Ø!×);Ñ);×)@Ñ)@Ó)BÓBÙà×-Ñ-¨nÑ=�Ø×-Ñ-¨nÑ=�àŸ™ ^Ñ4�ØŸ™ ^Ñ4�ð
 "¢!Ð%7 t×'7Ñ'7Ð%7Ð"7Ñ8×;Ñ;¸A¿H¹HÓE�Ø!Ð"5 D×$5Ñ$5Ð"5²qÐ"8Ñ9×<Ñ<¸Q¿X¹XÓF�à×+Ñ+¨NÑ;�Ø—D‘D˜Ÿ™Ó(�Ø¬Q¯XªX°hÄÇÂÉ'ÐRSË*ÐV^ÓA_Ñ6_ÐaiÓ-jÑ"jÑj“ñ% #7ð( —‘˜>Ó*ˆØˆr(   c                 ó   • g)NTra   )r$   rG   s     r%   Úsupports_lora_conversionÚLinear.supports_lora_conversion!  s   € Ør(   c                 ó*   >• [         TU ]  5       nSU-   $ )Nzvera.)rg   Ú__repr__)r$   Úrepri   s     €r%   rŸ   ÚLinear.__repr__$  s   ø€ Ü‰gÑÓ ˆØ˜‰}Ðr(   )rh   rd   re   )r   r2   FFTrV   )FN)r)   N)Údefault)rW   rX   rY   rZ   r	   ÚstrÚintr_   r,   r&   r   r@   rv   r|   r<   ÚTensorrp   r™   rœ   rŸ   r`   Ú__classcell__)ri   s   @r%   r   r   �   s  ø† ð Ø!Ø$Ø(-Ø!Øñ?ð ð?ð ð	?ð
 ð?ð ð?ð ð?ð ð?ð "&ð?ð ð?ð ð?ð 
÷?ð ?ñ.$< ð $<¸XÀdÈ3ÁiÑ=Pð $<Ð\`õ $<ôL[ð%¨5¯<©<ô %ðN ˜Ÿ™ð  ¸5¿<¹<ô  ñD°Sð Èõ ð˜#÷ õ r(   r   )ry   Útypingr   r<   Útorch.nnr   Útorch.nn.functionalÚ
functionalr“   Útransformers.pytorch_utilsr   Úpeft.tuners.tuners_utilsr   r   Úpeft.utils.otherr   Ú_buffer_dictr	   r   r   ra   r(   r%   Ú<module>r¯      sJ   ðó Ý ã Ý ß Ð Ý -ç LÝ &å %ôoA�ô oAôdWˆR�Y‰Y˜	õ Wr(   