ó
    >:j  ã                  ón   • S SK Jr  S SKrS SKrS SKJ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)ÚConv1D)Ú	BaseTunerÚBaseTunerLayer)Ú5TRANSFORMERS_MODELS_TO_GRALORA_TARGET_MODULES_MAPPINGé   )ÚGraloraLayerÚLinearc                  óF   • \ rS rSr% SrSrS\S'   \r\	r
S r\S 5       rSrg	)
ÚGraloraModelé   ac  
Creates Vector-based Random Matrix Adaptation (Gralora) model from a pretrained transformers model.

Args:
    model ([`~transformers.PreTrainedModel`]): The model to be adapted.
    config ([`GraloraConfig`]): The configuration of the Gralora model.
    adapter_name (`str`): The name of the adapter, defaults to `"default"`.

Returns:
    `torch.nn.Module`: The Gralora model.

Example:

    ```py
    >>> from transformers import AutoModelForCausalLM
    >>> from peft import GraloraConfig, get_peft_model

    >>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
    >>> config = GraloraConfig(r=128)
    >>> model = get_peft_model(base_model, config)
    ```

**Attributes**:
    - **model** ([`~transformers.PreTrainedModel`]) -- The model to be adapted.
    - **peft_config** ([`GraloraConfig`]): The configuration of the Gralora model.
Úgralora_ÚstrÚprefixc           
     óZ  • Uc  [        S5      eUR                  n[        US5      =(       a    UR                  S Ln	UUR                  UR
                  UR                  UR                  UR                  UR                  S.n
XšS'   [        U[        5      (       aK  UR                  UUUUR                  UR
                  UR                  UR                  UR                  5        g U R                  " XX640 U
D6nX R                  ;  a  UR                  S5        U R!                  XTX³5        g )NzCurrent Key shouldn't be `None`Úbias)ÚrÚalphaÚgralora_dropoutÚ	gralora_kÚfan_in_fan_outÚhybrid_rÚinit_weightsF)Ú
ValueErrorr   Úhasattrr   r   r   r   r   r   r   Ú
isinstancer
   Úupdate_layerÚ_create_new_moduleÚactive_adaptersÚrequires_grad_Ú_replace_module)ÚselfÚgralora_configÚadapter_nameÚtargetÚtarget_nameÚparentÚcurrent_keyÚoptional_kwargsr   r   ÚkwargsÚ
new_modules               ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/gralora/model.pyÚ_create_and_replaceÚ GraloraModel._create_and_replace?   s  € ð ÑÜÐ>Ó?Ð?à×ÑˆÜ�v˜vÓ&×B¨6¯;©;¸dÐ+BˆàØ#×)Ñ)Ø-×=Ñ=Ø'×1Ñ1Ø,×;Ñ;Ø&×/Ñ/Ø*×7Ñ7ñ
ˆð ˆv‰ä�fœf×%Ñ%Ø×ÑØØØØ×$Ñ$Ø×.Ñ.Ø×(Ñ(Ø×'Ñ'Ø×+Ñ+õ	ð ×0Ò0°ÈvÑmÐflÑmˆJØ×#7Ñ#7Ó7à×)Ñ)¨%Ô0Ø× Ñ  °jÕIó    c                óÊ  • [        U[        5      (       a  UR                  5       nOUn[        U[        R                  R
                  5      (       a-  US   (       a"  [        R                  " S5        S=US'   U l        OV[        U[        5      (       a2  SUS'   US   (       d"  [        R                  " S5        S=US'   U l        O[        SU S35      e[        UUU40 UD6nU$ )	Nr   zjfan_in_fan_out is set to True but the target module is `torch.nn.Linear`. Setting fan_in_fan_out to False.FTÚis_target_conv_1d_layerzafan_in_fan_out is set to False but the target module is `Conv1D`. Setting fan_in_fan_out to True.zTarget module z is not supported. Currently, only the following modules are supported: `torch.nn.Linear`, `transformers.pytorch_utils.Conv1D`.)r   r   Úget_base_layerÚtorchÚnnr
   ÚwarningsÚwarnr   r   r   )r#   r$   r%   Úmodule_namer*   Útarget_base_layerr+   s          r,   r   ÚGraloraModel._create_new_modulek   sü   € ä�fœn×-Ñ-Ø &× 5Ñ 5Ó 7Ñà &ÐäÐ'¬¯©¯©×9Ñ9ØÐ&×'Ü—’ð7ôð LQÐP�Ð'Ñ(¨>Ô+HøÜÐ)¬6×2Ñ2Ø04ˆFÐ,Ñ-ØÐ*×+Ü—’Øwôð LPÐO�Ð'Ñ(¨>Ô+HøäØ   ð )Jð Jóð ô ØØØñ
ð ñ	
ˆ
ð Ðr/   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r	   Útuner_layer_clsr   Útarget_module_mappingr-   Ústaticmethodr   Ú__static_attributes__r:   r/   r,   r   r      s9   ‡ ñð8 €FˆCÓà"€OàQÐò*JðX ñ ó ó r/   r   )Ú
__future__r   r5   r3   Útransformers.pytorch_utilsr   Úpeft.tuners.tuners_utilsr   r   Ú
peft.utilsr   Úlayerr	   r
   r   r:   r/   r,   Ú<module>rJ      s*   ðõ #ã ã Ý -ç >Ý Lç 'ôp�9õ pr/   