ó
    >:jÏ  ã                   ó~   • 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  S SK	J
r
  SSKJr  SS	KJrJr   " S
 S\5      rg)é    )Úcontextmanager)ÚAnyN)Únn)Ú	BaseTunerÚBaseTunerLayer)Ú2TRANSFORMERS_MODELS_TO_POLY_TARGET_MODULES_MAPPINGé   )Ú
PolyConfig)ÚLinearÚ	PolyLayerc                   ó¸   • \ rS rSr% Sr\\S'   \r\	r
S\S\S\R                  S\S\R                  S	\4S
 jr\S 5       rS r\S 5       rSS.S jrSS.S jrSrg)Ú	PolyModelé   Úpoly_ÚprefixÚpoly_configÚadapter_nameÚtargetÚtarget_nameÚparentÚoptional_kwargsc                 óÜ   • [        U[        5      (       a  UR                  X!5        g U R                  UUU5      nX R                  ;  a  UR                  S5        U R                  XTXs5        g )NF)Ú
isinstancer   Úupdate_layerÚ_create_new_moduleÚactive_adaptersÚrequires_grad_Ú_replace_module)Úselfr   r   r   r   r   r   Ú
new_modules           ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/poly/model.pyÚ_create_and_replaceÚPolyModel._create_and_replace!   sd   € ô �fœi×(Ñ(Ø×Ñ Õ:à×0Ñ0ØØØóˆJð
 ×#7Ñ#7Ó7à×)Ñ)¨%Ô0Ø× Ñ  °jÕIó    c                 óÜ   • [        U[        5      (       a  UR                  5       nOUn[        U[        R                  R
                  5      (       a  [        X!U 40 UD6$ [        SU S35      e)NzTarget module zZ is not supported. Currently, only the following modules are supported: `torch.nn.Linear`.)r   r   Úget_base_layerÚtorchr   r   Ú
ValueError)r   r   r   ÚkwargsÚtarget_base_layers        r!   r   ÚPolyModel._create_new_module7   sj   € ä�fœn×-Ñ-Ø &× 5Ñ 5Ó 7Ñà &ÐäÐ'¬¯©¯©×9Ñ9Ü˜&°ÑF¸vÑFÐFäØ   ð )%ð %óð r$   c                 óÔ   ^• Tc  / $ U4S jn/ nU R                   R                  5        H;  n[        U[        5      (       d  M  UR	                  USS9nUR                  U5        M=     U$ )z$Helper method to register pre hooks.c                 ó   >• TUS'   X4$ )NÚtask_ids© )Ú_Úargsr)   r.   s      €r!   Úpre_hookÚ/PolyModel._register_pre_hooks.<locals>.pre_hookK   s   ø€ Ø!)ˆF�:ÑØ�<Ðr$   T)Úwith_kwargs)ÚmodelÚmodulesr   r   Úregister_forward_pre_hookÚappend)r   r.   r2   ÚhandlesÚmoduleÚhandles    `    r!   Ú_register_pre_hooksÚPolyModel._register_pre_hooksF   sg   ø€ àÑØˆIõ	 ð ˆà—j‘j×(Ñ(Ö*ˆFÜ˜&¤&×)Ó)Ø×9Ñ9¸(ÐPTÐ9ÐU�Ø—‘˜vÖ&ñ +ð
 ˆr$   c              #   ó¦   #   • U R                  U5      n Sv •  U H  nUR                  5         M     g! U H  nUR                  5         M     f = f7f)z5Context manager to handle the lifecycle of pre hooks.N)r<   Úremove)r   r.   r9   r;   s       r!   Ú_manage_pre_hooksÚPolyModel._manage_pre_hooksX   sE   é € ð ×*Ñ*¨8Ó4ˆð	 Ûã!�Ø—‘–ò "ø›'�Ø—‘–ò "üs   ‚A•3 ™A³AÁAN)r.   c                ó~   • U R                  U5         U R                  " U0 UD6sS S S 5        $ ! , (       d  f       g = f©N)r@   r5   ©r   r.   r1   r)   s       r!   ÚforwardÚPolyModel.forwardb   s-   € Ø×#Ñ# HÕ-Ø—:’:˜tÐ. vÑ.÷ .×-×-ús   ’.®
<c                ó’   • U R                  U5         U R                  R                  " U0 UD6sS S S 5        $ ! , (       d  f       g = frC   )r@   r5   ÚgeneraterD   s       r!   rH   ÚPolyModel.generatef   s3   € Ø×#Ñ# HÕ-Ø—:‘:×&Ò&¨Ð7°Ñ7÷ .×-×-ús	   ’8¸
Ar/   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   ÚstrÚ__annotations__r   Útuner_layer_clsr   Útarget_module_mappingr
   r   ÚModuler   r"   Ústaticmethodr   r<   r   r@   rE   rH   Ú__static_attributes__r/   r$   r!   r   r      s«   ‡ Ø€FˆCÓØ€OØNÐðJàðJð ðJð —	‘	ð	Jð
 ðJð —	‘	ðJð ôJð, ñó ðòð$ ñ ó ð ð '+õ /ð (,÷ 8ð 8r$   r   )Ú
contextlibr   Útypingr   r'   r   Úpeft.tuners.tuners_utilsr   r   Ú
peft.utilsr   Úconfigr
   Úlayerr   r   r   r/   r$   r!   Ú<module>r[      s-   ðõ &Ý ã Ý ç >Ý Iå ß $ôL8�	õ L8r$   