ó
    >:jž3  ã                   ó´   • 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)Ú
PveraLayeré   )Úpvera_lambda_bÚpvera_lambda_d)Úpvera_AÚpvera_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Úpvera_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        ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/pvera/layer.pyÚ__init__ÚPveraLayer.__init__"   sö   € Ø$ŒØˆŒÜŸ]š]¨2Ó.ˆÔô !×.Ò.¨rÓ2ˆÔÜ ×.Ò.¨rÓ2ˆÔð .2ˆŒØ-1ˆŒð "'ˆÔØ!ˆÔà×(Ñ(Ó*ˆ
Ü�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ÚPveraLayer.merged@   s   € ä�D×(Ñ(Ó)Ð)r(   r   r   Ú	d_initialÚinference_modec	                 óX  • 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S-  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_gradr   é   z`The `pvera_A` and `pvera_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 PVeRA 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 PVeRA 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_pvera_parametersÚ%_move_adapter_to_device_of_base_layerÚset_adapterÚactive_adapters)r$   Úadapter_namer   r   r   r   Úinit_weightsr/   r0   r#   Úpvera_dropout_layerÚpvera_A_paramÚpvera_B_paramÚ
error_tmpls                 r%   Úupdate_layerÚPveraLayer.update_layerD   sÆ  € ð �‹6ÜÐ^Ð_`Ð^aÐbÓcÐcØ �‰ˆ|ÑØ˜3ÓÜ"$§*¢*¨}Ñ"=Ñä"$§+¢+£-Ðà×Ñ×!Ñ!¤"§-¢-°Ð0SÓ"TÔUä,.¯LªL¼¿ºÀD×DUÑDUÓ9VÐfjÑ,kˆ×Ñ˜LÑ)Ü,.¯LªL¼¿ºÀQÈÁUÓ9KÐ[_Ñ,`ˆ×Ñ˜LÑ)ð ŒØŒØÔ&ä�4—<‘<Ó  1Ó$Ü Øvóð ô ! §¡×!4Ñ!4Ó!6Ó7¸Ñ:ˆMÜ  §¡×!4Ñ!4Ó!6Ó7¸Ñ:ˆMðRð ð
 ×"Ñ" 1Ñ%¨×(8Ñ(8Ó8Ü  ×!2Ñ!2°9¸m×>QÑ>QÐRSÑ>TÐVZ×VfÑVfÓ!gÓhÐhà×"Ñ" 1Ñ%¨×(9Ñ(9Ó9Ü  ×!2Ñ!2°9¸m×>QÑ>QÐRSÑ>TÐVZ×VgÑVgÓ!hÓiÐið3ð ð
 ×"Ñ" 1Ñ%¨¯©¨|Ñ(<Ó<Ü  ×!2Ñ!2°9¸m×>QÑ>QÐRSÑ>TÐVZ×V\ÑV\Ð]iÑVjÓ!kÓlÐlØ×"Ñ" 1Ñ%¨¯©¨|Ñ(<Ó<Ü  ×!2Ñ!2°9¸m×>QÑ>QÐRSÑ>TÐVZ×V\ÑV\Ð]iÑVjÓ!kÓlÐlà)6�L‰L˜Ñ&Ø)6�L‰L˜Ñ&æØ×'Ñ'¨Ð'ÑJà×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   Ú!PveraLayer.reset_pvera_parametersˆ   ss   € Ø×.Ñ.×3Ñ3Ó5Ó5Ü—’•Ü—‘—‘˜t×2Ñ2°<Ñ@ÓA×GÑGÈ	ÔRÜ—‘—‘˜t×2Ñ2°<Ñ@ÔA÷ !�ð 6ß •ú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B¸e÷ Bð Br(   r   c                   ó  ^ • \ 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S\S\
\\      SS4S jjrSS jrS\R                  4S jrS rS\R                  S\R                  4S 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/   Úsample_at_inferencer)   Nc           
      óÀ   >• [         [        R                  U ]  5         [        R                  " X40 UD6  Xpl        X°l        X@l        U R                  XBX5XiU
S9  X€l	        g )Nr6   )
Úsuperr   r   r&   r   rd   rf   Ú_active_adapterrM   re   )r$   r   r   r   rG   r   r   rd   re   rH   r/   rf   r#   Ú	__class__s                €r%   r&   ÚLinear.__init__‘   sY   ø€ ô  	Œb�i‰i˜Ñ'Ô)Ü×Ò˜DÑ7°Ò7Ø,ÔØ#6Ô à+ÔØ×Ñ˜,°¸]ÐdmÐÑnØ'>Õ$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$   rl   rm   Úactive_adapterr   Úorig_weightss         r%   ÚmergeÚLinear.mergeª   së   € ô 0°ÓDˆÞàä+ˆNØ×!4Ñ!4×!9Ñ!9Ó!;Õ;Ø!×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!   ro   rq   )r$   ru   s     r%   ÚunmergeÚLinear.unmergeÐ   s•   € Ø�{�{Ü�MŠMÐ<Ô=Øä�$×&Ñ&Ó'¨!Ó+Ø!×1Ñ1×5Ñ5Ó7ˆNØ×!4Ñ!4×!9Ñ!9Ó!;Ó;Ø×#Ñ#Ó%×,Ñ,×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USUR                  S5      S-  2SS24   nU	SU	R                  S5      S-  2SS24   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éÿÿÿÿr   r   )Údtype)r   r   Údevicer‚   Útyper<   Úfloat16Úbfloat16r   r   r_   r   Útor   Ú	unsqueezeÚsizer   rd   )r$   Úadapterr   r   rƒ   r‚   Úcast_to_fp32Úlambda_dÚlambda_bÚsliced_AÚsliced_BÚoutput_tensors               r%   rq   ÚLinear.get_delta_weightÚ   s¨  € ð —,‘,˜wÑ'ˆØ—,‘,˜wÑ'ˆà—‘ˆØ—‘ˆð
 —{‘{ eÑ+×c°¼%¿-¹-Ñ1G×1bÈ5ÔTY×TbÑTbÑKbˆà×&Ñ& wÑ/ˆØ×&Ñ& wÑ/ˆæØ—m‘m“oˆGØ—m‘m“oˆGØ—~‘~Ó'ˆHØ—~‘~Ó'ˆHàš1Ð0 × 0Ñ 0Ð0Ð0Ñ1×4Ñ4°X·_±_ÓEˆØÐ.˜T×.Ñ.Ð.²Ð1Ñ2×5Ñ5°h·o±oÓFˆØ×%Ñ% bÓ)ˆØ×%Ñ% bÓ)ˆð Ð3˜hŸm™m¨AÓ.°!Ñ3Ð3²QÐ6Ñ7ˆØÐ3˜hŸm™m¨AÓ.°!Ñ3Ð3²QÐ6Ñ7ˆä! 8Ñ#6¸8Ñ;NÑ"OÐQU×QdÑQdÓeˆæØ)×,Ñ,°5Ð,Ð9ˆMàÐr(   c                 óÌ   • U R                   (       d  U R                   (       d?  U(       a8  [        R                  " SU-  5      n[        R                  " U5      nXU-  -   nU$ UnU$ )Ng      à?)Útrainingr<   ÚexpÚ
randn_like)r$   ÚmuÚlogvarrf   ÚstdÚepsÚzs          r%   Ú_reparametrizeÚLinear._reparametrize  sR   € Ø�=�= §§Ö3FÜ—)’)˜C &™LÓ)ˆCÜ×"Ò" 3Ó'ˆCØ˜3‘Y‘ˆAð ˆð ˆAØˆ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O›U R                  (       a  U R                  " U/UQ70 UD6nGOrU R                  " U/UQ70 UD6nU R
                   GHK  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U[         R"                  " U" U5      U5      -  R%                  SSS9u  pïXX[         R"                  " U R'                  XïU R(                  5      U5      -  -   nGMN     UR                  U5      nU$ )Nr   r�   )Údim)r‚   Údisable_adaptersr-   r}   r   rF   r   rP   r   r   r   r   r‡   rƒ   r   r   ÚFÚlinearÚchunkr›   rf   )r$   r�   Úargsr#   Úprevious_dtypeÚresultru   rŒ   r�   r   r   rŽ   r�   Údropoutr–   r—   s                   r%   ÚforwardÚLinear.forward  sÂ  € ØŸ™ˆà× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ŠFØ�[�[Ø—_’_ QÐ8¨Ò8°Ñ8ŠFà—_’_ QÐ8¨Ò8°Ñ8ˆFØ"&×"6Õ"6�Ø!×)<Ñ)<×)AÑ)AÓ)CÓCÙà×.Ñ.¨~Ñ>�Ø×.Ñ.¨~Ñ>�àŸ,™, ~Ñ6�ØŸ,™, ~Ñ6�ð
 #¢1Ð&8¨×(8Ñ(8Ð&8Ð#8Ñ9×<Ñ<¸Q¿X¹XÓF�Ø"Ð#6 T×%6Ñ%6Ð#6ºÐ#9Ñ:×=Ñ=¸a¿h¹hÓG�à×,Ñ,¨^Ñ<�Ø—D‘D˜Ÿ™Ó(�Ø&¬¯ª±'¸!³*¸hÓ)GÑG×NÑNÈqÐVXÐNÐY‘
�Ø¬Q¯XªXØ×'Ñ'¨°D×4LÑ4LÓMÈxó.ñ #ñ “ñ' #7ð. —‘˜>Ó*ˆØˆr(   c                 ó*   >• [         TU ]  5       nSU-   $ )Nzpvera.)rh   Ú__repr__)r$   Úreprj   s     €r%   r«   ÚLinear.__repr__4  s   ø€ Ü‰gÑÓ ˆØ˜#‰~Ðr(   )ri   rd   re   rf   )r   r2   FFTrV   F)FN)r)   N)rW   rX   rY   rZ   r	   ÚstrÚintr_   r,   r&   r   r@   rw   r}   r<   ÚTensorrq   r›   r¨   r«   r`   Ú__classcell__)rj   s   @r%   r   r   �   s   ø† ð Ø"Ø$Ø(-Ø!ØØ$)ñ?ð ð?ð ð	?ð
 ð?ð ð?ð ð?ð ð?ð "&ð?ð ð?ð ð?ð "ð?ð 
÷?ð ?ñ2$< ð $<¸XÀdÈ3ÁiÑ=Pð $<Ð\`õ $<ôL[ð*¨5¯<©<ô *òXð#˜Ÿ™ð #¸5¿<¹<ô #ðJ˜#÷ õ r(   r   )rz   Ú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B�ô oBôdgˆR�Y‰Y˜
õ gr(   