ó
    >:j|  ã                  óf   • 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	\5      rg)
é    )ÚannotationsN)Ú
PeftConfig)Ú	BaseTuner)Ú_get_input_embeddings_nameÚ_get_submodulesé   )ÚTrainableTokensLayerc                  óÂ   ^ • \ rS rSr% SrS\S'   \rS r  S         SU 4S jjjr	S r
              SS jr              SS	 jr\S
 5       rSrU =r$ )ÚTrainableTokensModelé   Útrainable_tokens_ÚstrÚprefixc                óV   • UR                   c  [        U R                  S5      Ul         U$ )NÚembed_tokens)Útarget_modulesr   Úmodel)ÚselfÚpeft_configÚmodel_configs      Ú_/home/mande/repo/quber/.venv/lib/python3.13/site-packages/peft/tuners/trainable_tokens/model.pyÚ_prepare_adapter_configÚ,TrainableTokensModel._prepare_adapter_config   s(   € à×%Ñ%Ñ-Ü)CÀDÇJÁJÐP^Ó)_ˆKÔ&àÐó    c           
     ó¤  >• [         TU ]  " SUUUUS.UD6  U R                  U 5      nU R                  5       nU(       GaŒ  UR	                  SS5      (       Gas  [        U R                  R                  5       [        5      (       GaD  U R                  R                  SS9 GH%  u  p‰U V
s/ s H  o¨R                  U
5      (       d  M  U
PM     nn
U(       d  M8  [        X5      u  pÍn[        U[        5      (       aw  U R                  U   R                  5       nU R                  R                  5       US'   U R                  " XòUR                  40 UD6nU R!                  XÎUUR                  5        MÒ  U R                  U   R                  5       nU R                  R                  5       US'   U R#                  UUUUUUS   5        GM(     g g g g s  sn
f )N)r   Úadapter_nameÚautocast_adapter_dtypeÚlow_cpu_mem_usageÚtie_word_embeddingsF)Úremove_duplicateÚtied_adapterr   © )ÚsuperÚinject_adapterÚget_model_configÚ%_get_module_names_tied_with_embeddingÚgetÚ
isinstancer   Úget_input_embeddingsr	   Únamed_modulesÚendswithr   r   Úto_dictÚ_create_new_moduleÚ
base_layerÚ_replace_moduleÚ_create_and_replace_dict)r   r   r   r   r   Úkwargsr   Útied_weights_module_namesÚnameÚmoduleÚ
target_keyÚmatched_keysÚparentÚtargetÚtarget_namer   Ú
new_moduleÚ	__class__s                    €r   r$   Ú#TrainableTokensModel.inject_adapter%   sÄ  ø€ ô 	‰Òð 	
ØØ%Ø#9Ø/ñ		
ð
 ò	
ð ×,Ñ,¨TÓ2ˆð %)×$NÑ$NÓ$PÐ!÷ &Ø× Ñ Ð!6¸×>Ò>Ü˜4Ÿ:™:×:Ñ:Ó<Ô>R×SÒSð !%§
¡
× 8Ñ 8È%Ð 8Ô P‘�Ù=VÓtÒ=V¨z×ZgÑZgÐhr×Zs§
Ñ=V�Ðtß�<Ü2AÀ%Ó2NÑ/�F Kô
 " &Ô*>×?Ñ?à&*×&6Ñ&6°|Ñ&D×&LÑ&LÓ&N˜Ø6:·j±j×6UÑ6UÓ6W˜ NÑ3à%)×%<Ò%<Ø'°v×7HÑ7Hñ&ØLWñ&˜
ð ×,Ñ,¨VÀ*Èf×N_ÑN_Ö`ð '+×&6Ñ&6°|Ñ&D×&LÑ&LÓ&N˜Ø6:·j±j×6UÑ6UÓ6W˜ NÑ3à×5Ñ5Ø'Ø(Ø"Ø'Ø"Ø(¨™O÷ò- !Qð Tð ?ð &ùò  us   Â)GÃGc                ó   • / $ )Nr"   )r   Úargsr1   s      r   Ú_get_tied_target_modulesÚ-TrainableTokensModel._get_tied_target_modulesd   s	   € ð
 ˆ	r   c                ó¦   • Un[        U[        5      (       a  UR                  " U40 UD6  gU R                  " XU40 UD6nU R	                  XTXƒ5        g)z§
The same as `_create_and_replace` but takes a dictionary instead of a peft config so that we can add keys that
are not present in the config, such as `tied_adapter`.
N)r(   r	   Úupdate_layerr-   r/   )	r   r   r   r8   r9   r7   Úcurrent_keyr1   r:   s	            r   r0   Ú-TrainableTokensModel._create_and_replace_dictk   sR   € ð ˆä�fÔ2×3Ñ3Ø×Ò Ñ7°Ó7à×0Ò0°ÈFÑ]ÐV\Ñ]ˆJØ× Ñ  °jÕIr   c                óJ   • UR                  5       nU R                  XrX4XV5        g)zS
A private method to create and replace the target module with the adapter module.
N)r,   r0   )r   r   r   r8   r9   r7   rC   r1   s           r   Ú_create_and_replaceÚ(TrainableTokensModel._create_and_replace€   s%   € ð ×$Ñ$Ó&ˆØ×%Ñ% f¸FÐQWÕer   c           	     ón   • [        X!40 UD6nUR                  UUS   US   UR                  SS 5      S9  U$ )NÚinit_weightsÚtoken_indicesr!   )rI   rJ   r!   )r	   rB   r'   )r   r   r8   r1   r:   s        r   r-   Ú'TrainableTokensModel._create_new_module�   sM   € ä)¨&ÑIÀ&ÑIˆ
Ø×ÑØØ Ñ/Ø  Ñ1ØŸ™ N°DÓ9ð	 	 ñ 	
ð Ðr   r"   )TF)
r   ú	nn.Moduler   r   r   Úboolr   rM   ÚreturnÚNone)r   Údictr   r   r8   rL   r9   r   r7   rL   rC   r   rN   rO   )r   r   r   r   r8   rL   r9   r   r7   rL   rC   r   rN   rO   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__annotations__r	   Útuner_layer_clsr   r$   r?   r0   rF   Ústaticmethodr-   Ú__static_attributes__Ú__classcell__)r;   s   @r   r   r      s  ø‡ Ø%€FˆCÓ%Ø*€Oòð (,Ø"'ð=àð=ð ð=ð !%ð	=ð
  ð=ð 
÷=ð =ò~ðJàðJð ðJð ð	Jð
 ðJð ðJð ðJð 
ôJð*fàðfð ðfð ð	fð
 ðfð ðfð ðfð 
ôfð ñ	ó ö	r   r   )Ú
__future__r   Útorch.nnÚnnÚpeft.configr   Úpeft.tuners.tuners_utilsr   Ú
peft.utilsr   r   Úlayerr	   r   r"   r   r   Ú<module>ra      s'   ðõ #å å "Ý .ß Bå 'ô˜9õ r   