ó
    >:j�  ã                   óx   • S SK r S SKJr  S SKJr  S SKrS SKJr  S SKJ	r	J
r
Jr   " S S\R                  \	5      rg)é    N)Údeepcopy)ÚOptional)ÚBaseTunerLayerÚ_get_in_out_featuresÚcheck_adapters_to_mergec                   ó  ^ • \ rS rSrSrSrS\R                  S\4U 4S jjr	SS\R                  S\S\
4S	 jjrS
\
SS4S jrSS\\\      S\
4S jjrS rS\R$                  S\R$                  4S jrS\4U 4S jjrSrU =r$ )ÚLNTuningLayeré   z!
Selects a layer from the model.
)Úln_tuning_layersÚ
base_layerÚadapter_namec                 ó  >• [         TU ]  5         Xl        [        R                  " 0 5      U l        U R                  U R                  U5        X l        / U l        [        U R                  5       5      u  p4X0l        X@l        g )N)ÚsuperÚ__init__r   ÚnnÚ
ModuleDictr   Úupdate_layerÚ_active_adapterÚmerged_adaptersr   Úget_base_layerÚin_featuresÚout_features)Úselfr   r   r   r   Ú	__class__s        €ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/ln_tuning/layer.pyr   ÚLNTuningLayer.__init__    sh   ø€ Ü‰ÑÔØ$ŒÜ "§¢¨bÓ 1ˆÔØ×Ñ˜$Ÿ/™/¨<Ô8Ø+ÔØ!ˆÔä$8¸×9LÑ9LÓ9NÓ$OÑ!ˆØ&ÔØ(Õó    ÚlayerÚinference_modec                 óR   • [        U5      U R                  U'   U R                  X#S9  g )N)r   )r   r   Úset_adapter)r   r   r   r   Úkwargss        r   r   ÚLNTuningLayer.update_layer,   s'   € Ü.6°u«oˆ×Ñ˜lÑ+Ø×Ñ˜ÐÒEr   ÚenabledÚreturnNc                 ó  • U(       a#  U R                  U R                  5        SU l        gU R                  (       a  U R	                  5         U R
                   H  n[        X5      nUR                  S5        M!     SU l        g)zÃToggle the enabling and disabling of adapters

Takes care of setting the requires_grad flag for the adapter weights.

Args:
    enabled (bool): True to enable adapters, False to disable adapters
FTN)r!   Úactive_adaptersÚ_disable_adaptersÚmergedÚunmergeÚadapter_layer_namesÚgetattrÚrequires_grad_)r   r$   Ú
layer_namer   s       r   Úenable_adaptersÚLNTuningLayer.enable_adapters0   se   € ö Ø×Ñ˜T×1Ñ1Ô2Ø%*ˆDÕ"à�{�{Ø—‘”à"×6Ô6�
Ü Ó1�Ø×$Ñ$ UÖ+ñ 7ð &*ˆDÕ"r   Úadapter_namesÚ
safe_mergec                 ó¨  • [        X5      nU(       d  g [        U5      S:”  a  [        S[        U5       S35      e[        U R                  5      nU(       a*  [
        R                  " SU S35        U R                  5         U R                  US      U R                  sU l	        U R                  US   '   U R                  R                  US   5        g )Né   zTrying to merge zO adapters, but LN tuning does not allow merging more than one adapter at a timezAlready merged with z. Unmerging first.r   )r   ÚlenÚ
ValueErrorÚsetr   ÚwarningsÚwarnr*   r   r   Úappend)r   r1   r2   r   s       r   ÚmergeÚLNTuningLayer.mergeD   sÎ   € ä/°ÓDˆÞàäˆ}Ó Ó!ÜØ"¤3 }Ó#5Ð"6ð 7Pð Qóð ô ˜d×2Ñ2Ó3ˆÞÜ�MŠMÐ0°Ð0AÐASÐTÔUØ�L‰LŒNð ×!Ñ! -°Ñ"2Ñ3Ø�O‰Oð 	AˆŒ˜×.Ñ.¨}¸QÑ/?Ñ@ð 	×Ñ×#Ñ# M°!Ñ$4Õ5r   c                 óä   • U R                   (       d  [        R                  " S5        g U R                  R	                  5       nU R
                  U   U R                  sU l        U R
                  U'   g )Nz Already unmerged. Nothing to do.)r)   r8   r9   r   Úpopr   r   )r   Úmerged_names     r   r*   ÚLNTuningLayer.unmerge[   sZ   € Ø�{�{Ü�MŠMÐ<Ô=Øð ×*Ñ*×.Ñ.Ó0ˆà×!Ñ! +Ñ.Ø�O‰Oð 	<ˆŒ˜×.Ñ.¨{Ò;r   Úxc                 óä  • U R                   (       a9  U R                  (       a  U R                  5         U R                  " U/UQ70 UD6nU$ U R                  (       d  [	        U R
                  5      S:X  a  U R                  " U/UQ70 UD6nU$ [	        U R
                  5      S:w  a"  [        S[	        U R
                  5       S35      eU R
                  S   nU R                  U   " U/UQ70 UD6nU$ )Nr   r4   zTrying to run forward with z] active adapters, but LN tuning does not allow inference with more than one adapter at a time)Údisable_adaptersr)   r*   r   r5   r'   r6   r   )r   rA   Úargsr"   ÚresultÚactive_adapters         r   ÚforwardÚLNTuningLayer.forwardg   sì   € Ø× × Ø�{�{Ø—‘”Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð ˆð �[�[œS ×!5Ñ!5Ó6¸!Ó;Ø—_’_ QÐ8¨Ò8°Ñ8ˆFð ˆô �4×'Ñ'Ó(¨AÓ-Ü Ø1´#°d×6JÑ6JÓ2KÐ1Lð Mlð móð ð "×1Ñ1°!Ñ4ˆNØ×*Ñ*¨>Ò:¸1ÐN¸tÒNÀvÑNˆFàˆr   c                 ó*   >• [         TU ]  5       nSU-   $ )Nz
ln_tuning.)r   Ú__repr__)r   Úrepr   s     €r   rJ   ÚLNTuningLayer.__repr__y   s   ø€ Ü‰gÑÓ ˆØ˜cÑ!Ð!r   )r   r(   r   r   r   r   r   )F)NF)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r+   r   ÚModuleÚstrr   Úboolr   r/   r   Úlistr;   r*   ÚtorchÚTensorrG   rJ   Ú__static_attributes__Ú__classcell__)r   s   @r   r	   r	      sª   ø† ñð 0Ðð
) 2§9¡9ð 
)¸C÷ 
)ñF "§)¡)ð F¸3ð FÐPTõ Fð* tð *°ô *ñ(6 8¨D°©IÑ#6ð 6È4õ 6ò.

ð˜Ÿ™ð ¸5¿<¹<ô ð$"˜#÷ "õ "r   r	   )r8   Úcopyr   Útypingr   rV   Útorch.nnr   Úpeft.tuners.tuners_utilsr   r   r   rR   r	   © r   r   Ú<module>r_      s0   ðó Ý Ý ã Ý ç bÑ bôb"�B—I‘I˜~õ b"r   