ó
    >:jÊ  ã                  ó    • S SK Jr  S SK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Jr  S S	KJr  S
SKJrJr  S r " S S\5      rg)é    )ÚannotationsN)Úcontextmanager)Úpartial)Únn)Úis_bnb_4bit_availableÚis_bnb_available)Ú
RoadConfig)Ú	BaseTunerÚget_device_map)Ú2TRANSFORMERS_MODELS_TO_ROAD_TARGET_MODULES_MAPPINGé   )Ú	RoadLayerÚdispatch_defaultc                ó   • X2S'   X4$ )NÚadapter_names© )ÚtargetÚargsÚkwargsr   s       ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/road/model.pyÚ_adapter_names_pre_forward_hookr   !   s   € à+ˆ?ÑØˆ<Ðó    c                  óv   • \ rS rSr% SrSrS\S'   \r\	r
            SS jr\SS j5       r\S 5       rS	rg
)Ú	RoadModelé'   Ú Úroad_ÚstrÚprefixc           	     óZ  • Uc  [        S5      eUR                  nUR                  nUUUR                  [	        U R
                  SS5      [	        U R
                  SS5      S.n	 [        R                  " S5      " U R
                  5      U	S'   [        U[        5      (       a  UR                  UUUUR                  S9  g [        U R
                  5      n
U R                  " XU4S	U
0U	D6nX R                  ;  a  UR                  S5        U R!                  XTX³5        g ! [         a     Nœf = f)
NzCurrent Key shouldn't be `None`Úis_loaded_in_8bitFÚis_loaded_in_4bit)ÚvariantÚ
group_sizeÚinit_weightsÚloaded_in_8bitÚloaded_in_4bitz:hf_quantizer.quantization_config.get_apply_tensor_subclassÚget_apply_tensor_subclass)r%   Ú
device_map)Ú
ValueErrorr#   r$   r%   ÚgetattrÚmodelÚoperatorÚ
attrgetterÚAttributeErrorÚ
isinstancer   Úupdate_layerr   Ú_create_new_moduleÚactive_adaptersÚrequires_grad_Ú_replace_module)ÚselfÚroad_configÚadapter_namer   Útarget_nameÚparentÚcurrent_keyr#   r$   r   r)   Ú
new_modules               r   Ú_create_and_replaceÚRoadModel._create_and_replace.   s2  € ð ÑÜÐ>Ó?Ð?ð ×%Ñ%ˆØ ×+Ñ+ˆ
ð Ø$Ø'×4Ñ4Ü% d§j¡jÐ2EÀuÓMÜ% d§j¡jÐ2EÀuÓMñ
ˆð	Ü2:×2EÒ2EØLô3à�j‰jó3ˆFÐ.Ñ/ô �fœi×(Ñ(Ø×ÑØØØØ(×5Ñ5ð	  ò ô (¨¯
©
Ó3ˆJØ×0Ò0°ÈFÑtÐ_iÐtÐmsÑtˆJØ×#7Ñ#7Ó7à×)Ñ)¨%Ô0Ø× Ñ  °jÕIøô! ó 	Ùð	ús   Á$)D Ä
D*Ä)D*c                ó(  • / n[        5       (       a  SSKJn  UR                  U5        [	        5       (       a  SSKJn  UR                  U5        UR                  [        /5        S nU H  nU" X!4SU 0UD6nUc  M    O   Uc  [        SU S35      eU$ )Nr   )Údispatch_bnb_8bit)Údispatch_bnb_4bitr7   zTarget module zZ is not supported. Currently, only the following modules are supported: `torch.nn.Linear`.)	r   Úbnbr@   Úappendr   rA   Úextendr   r*   )	r7   r8   r   r   Údispatchersr@   rA   r<   Ú
dispatchers	            r   r2   ÚRoadModel._create_new_module\   s²   € àˆô ×ÑÝ.à×ÑÐ0Ô1ä ×"Ñ"Ý.à×ÑÐ0Ô1à×Ñä ðô	
ð ˆ
Û%ˆJÙ# FÑ\ÀkÐ\ÐU[Ñ\ˆJØÓ%Ùñ &ð
 ÑäØ   ð )%ð %óð ð
 Ðr   c              /  ó¶  #   • UR                  SS 5      nUc  S v •  g U R                  (       a  [        S5      e[        5       nU R	                  5        H6  n[        U[        5      (       d  M  XER                  R                  5       -  nM8     U Vs1 s H  ofS:w  d  M
  UiM     nnXt-
  nU(       a&  [        SSR                  [        U5      5       35      e/ n	U R	                  5        HI  n
[        U
[        5      (       d  M  [        [        US9nU
R                  USS9nU	R                  U5        MK     S v •  U	 H  nUR                  5         M     g s  snf 7f)	Nr   z?Cannot pass `adapter_names` when the model is in training mode.Ú__base__z.Trying to infer with non-existing adapter(s): z, )r   T)Úwith_kwargs)ÚpopÚtrainingr*   ÚsetÚmodulesr0   r   Ú
road_thetaÚkeysÚjoinÚsortedr   r   Úregister_forward_pre_hookrC   Úremove)r6   r   r   r   Úexpected_adaptersÚlayerÚnameÚunique_adaptersÚunexpected_adaptersÚhook_handlesÚmoduleÚpre_forwardÚhandles                r   Ú_enable_peft_forward_hooksÚ$RoadModel._enable_peft_forward_hooks€   s2  é € ð Ÿ
™
 ?°DÓ9ˆØÑ ãØà�=�=ÜÐ^Ó_Ð_ô
  ›EÐØ—\‘\–^ˆEÜ˜%¤×+Ó+Ø!×%5Ñ%5×%:Ñ%:Ó%<Ñ<Ò!ñ $ñ -:ÓPªM DÀZÑ=OŸ4©MˆÐPØ-ÑAÐÞÜÐMÈdÏiÉiÔX^Ð_rÓXsÓNtÐMuÐvÓwÐwàˆØ—l‘l–nˆFÜ˜&¤)×,Ó,Ü%Ô&EÐUbÑc�Ø×9Ñ9¸+ÐSWÐ9ÐX�Ø×#Ñ# FÖ+ñ	 %ó 	ã"ˆFØ�M‰MŽOò #ùò! Qùs&   ‚A'EÁ-$EÂ	EÂEÂ$AEÄAEr   N)r7   r	   r8   r   r   ú	nn.Moduler9   r   r:   r`   ÚreturnÚNone)r7   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__annotations__r   Útuner_layer_clsr   Útarget_module_mappingr=   Ústaticmethodr2   r   r^   Ú__static_attributes__r   r   r   r   r   '   sŠ   ‡ Ùà€FˆCÓØ€OØNÐð,Jàð,Jð ð,Jð ð	,Jð
 ð,Jð ð,Jð 
ô,Jð\ ó!ó ð!ðF ñ#ó ó#r   r   )Ú
__future__r   r-   Ú
contextlibr   Ú	functoolsr   Útorchr   Úpeft.import_utilsr   r   Úpeft.tuners.road.configr	   Úpeft.tuners.tuners_utilsr
   r   Ú
peft.utilsr   rV   r   r   r   r   r   r   r   Ú<module>ru      s=   ðõ #ã Ý %Ý å ç EÝ .÷õ Jç .òô}�	õ }r   