ó
    >:jâ  ã                  ó~   • S SK Jr  S SKJr  S SKJr  S SK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g)é    )Úannotations)ÚOptional)ÚModule)Útqdm)Ú
PeftConfig)Ú	BaseTunerÚ_get_submodules)Ú6TRANSFORMERS_MODELS_TO_LNTUNING_TARGET_MODULES_MAPPINGé   )ÚLNTuningLayerc                  ó¨   • \ rS rSr% SrSrS\S'   \r\	r
              SS jr        SS jrSS jr    S     SS
 jjrSSS jjrSrg	)ÚLNTuningModelé   a¤  
Creates LayerNorm tuning from a pretrained transformer model.

The method is described in detail in https://huggingface.co/papers/2312.11420.

Args:
    model ([`torch.nn.Module`]): The model to be adapted.
    config ([`LNTuningConfig`]): The configuration of the Lora model.
    adapter_name (`str`): The name of the adapter, defaults to `"default"`.
    low_cpu_mem_usage (`bool`, `optional`, defaults to `False`):
        This option has no effect on LN tuning but exists for consistency with other PEFT methods.

Returns:
    'torch.nn.Module': The adapted model with LayerNorm tuned on.

Example:

    ```py
    >>> from transformers import AutoModelForCausalLM
    >>> from peft import get_peft_model, TaskType, LNTuningConfig

    >>> peft_config = LNTuningConfig(
    ...     task_type=TaskType.CAUSAL_LM,
    ... )

    >>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
    >>> model = get_peft_model(model, peft_config)
    >>> model.print_trainable_parameters()
    ```

**Attributes**:
    - **model** ([`~transformers.PreTrainedModel`]) -- The model to be adapted.
    - **peft_config** ([`LNTuningConfig`]): The configuration of the Lora model.
Ú
ln_tuning_ÚstrÚprefixc                óŒ   • U R                  XU5      nX R                  :w  a  UR                  S5        U R                  XTXs5        g )NF)Ú_create_new_moduleÚactive_adapterÚrequires_grad_Ú_replace_module)ÚselfÚpeft_configÚadapter_nameÚtargetÚtarget_nameÚparentÚcurrent_keyÚ
new_modules           ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/ln_tuning/model.pyÚ_create_and_replaceÚ!LNTuningModel._create_and_replaceD   s@   € ð ×,Ñ,¨[À,ÓOˆ
Ø×.Ñ.Ó.Ø×%Ñ% eÔ,Ø×Ñ˜V°*ÕEó    c                ó†   • [        U[        5      (       d  [        X#5      nU$ UnUR                  UR                  U5        U$ ©N)Ú
isinstancer   Úupdate_layerÚ
base_layer)r   r   r   r   r   s        r    r   Ú LNTuningModel._create_new_moduleS   sF   € ô ˜&¤-×0Ñ0Ü& vÓ<ˆJð Ðð  ˆJØ×#Ñ# F×$5Ñ$5°|ÔDØÐr#   c                óž   ^ • U=(       d    T R                   n[        U 4S jU 5       5      nU(       a  [        U5      S:”  a  [        S5      eg g )Nc              3  óV   >#   • U  H  nTR                   U   R                  v •  M      g 7fr%   )r   Úmodules_to_save)Ú.0Úadapterr   s     €r    Ú	<genexpr>Ú2LNTuningModel._unloading_checks.<locals>.<genexpr>b   s&   øé € ð +
ÚEY¸'ˆD×Ñ˜WÑ%×5Ö5ÒEYùs   ƒ&)r   z?Cannot unload multiple adapters that specify `modules_to_save`.)Úactive_adaptersÚanyÚlenÚ
ValueError)r   Úadapter_namesÚadapters_to_considerÚis_modules_to_save_availables   `   r    Ú_unloading_checksÚLNTuningModel._unloading_checks`   sS   ø€ Ø,×D°×0DÑ0DÐÜ'*ô +
ÙEYó+
ó (
Ð$ö (¬CÐ0DÓ,EÈÓ,IÜÐ^Ó_Ð_ð -JÐ'r#   Nc                óR  • U R                  U5        U R                  R                  5        VVs/ s H  u  pVU R                  U;  d  M  UPM     nnnSU(       a  SOS-   S-   n[	        Xr(       + US9 Hi  n [        U R                  U5      u  pšn[        U
S5      (       d  M0  U(       a  U
R                  U5        U R                  X›U
R                  5       U
5        Mk     [        U R                  S5      (       a  U R                  ?U R                  $ s  snnf ! [         a     M³  f = f)NzUnloading adapters zand merging Ú Úmodel)ÚdisableÚdescr(   r   )r8   r<   Únamed_modulesr   r   r	   ÚAttributeErrorÚhasattrÚmerger   Úget_base_layerr   )r   rB   ÚprogressbarÚ
safe_merger5   ÚkeyÚ_Úkey_listr>   r   r   r   s               r    Ú_unload_and_optionally_mergeÚ*LNTuningModel._unload_and_optionally_mergeh   sÿ   € ð 	×Ñ˜}Ô-Ø&*§j¡j×&>Ñ&>Ô&@Ô[Ò&@™F˜CÀDÇKÁKÐWZÑDZ—CÑ&@ˆÑ[Ø$¾%©ÀRÑHÈ7ÑRˆä˜¬/ÀÔEˆCðÜ.=¸d¿j¹jÈ#Ó.NÑ+� ô �v˜|×,Ó,ÞØ—L‘L Ô/Ø×$Ñ$ V¸&×:OÑ:OÓ:QÐSYÖZñ Fô �4—:‘:˜}×-Ñ-Ø—
‘
Ð&à�z‰zÐùó' \øô "ó Úðús   ¯DÁ	DÁ6DÄ
D&Ä%D&c                ó   • g r%   © )r   r   Úautocast_adapter_dtypes      r    Ú_cast_adapter_dtypeÚ!LNTuningModel._cast_adapter_dtype…   s   € ð 	r#   rL   )r   r   r   r   r   r   r   r   r   r   r   r   ÚreturnÚNone)r   r   r   r   r   r   rP   r   )r5   úOptional[list[str]])TFFN)rD   ÚboolrE   rS   r5   rR   )T)r   r   rM   rS   rP   rQ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r   Útuner_layer_clsr
   Útarget_module_mappingr!   r   r8   rI   rN   Ú__static_attributes__rL   r#   r    r   r      sÜ   ‡ ñ!ðF €FˆCÓØ#€OØRÐðFàðFð ðFð ð	Fð
 ðFð ðFð ðFð 
ôFðàðð ðð ð	ð
 
ôô`ð Ø!Ø Ø-1ðð ðð ð	ð
 +õ÷:ñ r#   r   N)Ú
__future__r   Útypingr   Útorch.nn.modulesr   r   Úpeft.configr   Úpeft.tuners.tuners_utilsr   r	   Ú
peft.utilsr
   Úlayerr   r   rL   r#   r    Ú<module>rd      s-   ðõ #å å #Ý å "ß ?Ý Må  ôm�Iõ mr#   