ó
    >:jò  ã                  óZ   • S SK Jr  S SKrS SKJrJr  S SKJr  SSKJ	r	J
r
   " S S\5      rg)	é    )ÚannotationsN)Ú	BaseTunerÚBaseTunerLayer)Ú4TRANSFORMERS_MODELS_TO_PEANUT_TARGET_MODULES_MAPPINGé   )ÚLinearÚPeanutLayerc                  óF   • \ rS rSr% SrSrS\S'   \r\	r
S r\S 5       rSrg	)
ÚPeanutModelé   aC  
Creates a PEANuT model from a pretrained transformers model.

The method is described in detail in https://arxiv.org/abs/2410.01870.

Args:
    model ([`torch.nn.Module`]): The model to be adapted.
    config ([`PeanutConfig`]): The configuration of the PEANuT model.
    adapter_name (`str`): The name of the adapter, defaults to `"default"`.

Returns:
    `torch.nn.Module`: The PEANuT PEFT model.

**Attributes**:
    - **model** ([`~transformers.PreTrainedModel`]) -- The model to be adapted.
    - **peft_config** ([`PeanutConfig`]): The configuration of the PEANuT model.
Úpeanut_ÚstrÚprefixc           	     ó`  • Uc  [        S5      e[        U[        5      (       aG  UR                  UUR                  UR
                  UR                  UR                  UR                  S9  g U R                  XU5      nX R                  ;  a  UR                  S5        U R                  XTXƒ5        g )NzCurrent Key shouldn't be `None`)ÚdepthÚscalingÚact_fnÚinit_weightsF)Ú
ValueErrorÚ
isinstancer	   Úupdate_layerÚrr   r   r   r   Ú_create_new_moduleÚactive_adaptersÚrequires_grad_Ú_replace_module)	ÚselfÚpeanut_configÚadapter_nameÚtargetÚtarget_nameÚparentÚcurrent_keyÚoptional_kwargsÚ
new_modules	            ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/peanut/model.pyÚ_create_and_replaceÚPeanutModel._create_and_replace3   s¢   € ð ÑÜÐ>Ó?Ð?ä�fœk×*Ñ*Ø×ÑØØ—‘Ø#×)Ñ)Ø%×-Ñ-Ø$×+Ñ+Ø*×7Ñ7ð  ò ð ×0Ñ0°ÈfÓUˆJØ×#7Ñ#7Ó7Ø×)Ñ)¨%Ô0Ø× Ñ  °jÕIó    c           
     óV  • [        U[        5      (       a  UR                  5       nOUn[        U[        R                  R
                  5      (       aA  [        UUU R                  U R                  U R                  U R                  U R                  S9$ [        S[        U5       S35      e)N)r   r   r   r   r   z/PEANuT does not support target modules of type z yet.)r   r   Úget_base_layerÚtorchÚnnr   r   r   r   r   r   ÚNotImplementedErrorÚtype)r   r   r    Útarget_base_layers       r&   r   ÚPeanutModel._create_new_moduleO   s˜   € ä�fœn×-Ñ-Ø &× 5Ñ 5Ó 7Ñà &ÐäÐ'¬¯©¯©×9Ñ9ÜØØØ—/‘/Ø#×)Ñ)Ø%×-Ñ-Ø$×+Ñ+Ø*×7Ñ7ñð ô "Ð$SÔTXÐYjÓTkÐSlÐlqÐ"rÓsÐsr)   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r	   Útuner_layer_clsr   Útarget_module_mappingr'   Ústaticmethodr   Ú__static_attributes__r2   r)   r&   r   r      s:   ‡ ñð$ €FˆCÓØ!€OØPÐòJð8 ñtó ótr)   r   )Ú
__future__r   r,   Úpeft.tuners.tuners_utilsr   r   Ú
peft.utilsr   Úlayerr   r	   r   r2   r)   r&   Ú<module>rA      s+   ðõ #ã ÷õ Lç &ôEt�)õ Etr)   