
    oi                        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  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)2TRANSFORMERS_MODELS_TO_ROAD_TARGET_MODULES_MAPPING   )	RoadLayerdispatch_defaultc                    X2S'   X4$ )Nadapter_names )targetargskwargsr   s       P/home/james-whalen/.local/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           	        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
                  S	5      (       a  U R
                  R                  OS n
U R                  " XU4S
U
0U	D6nX R                  ;  a  UR!                  S5        U R#                  XTX5        g ! [         a     Nf = 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$   hf_device_map
device_map)
ValueErrorr"   r#   r$   getattrmodeloperator
attrgetterAttributeError
isinstancer   update_layerhasattrr(   _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-   sF    >?? %% ++
 $'44%djj2EuM%djj2EuM
	2:2E2EL3jj3F./ fi(((55	    6=TZZ5Y5Y11_cJ00Ft_itmstJ#7#77))%0  jI!  		s   $)D; ;
EE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_4bitr8   zTarget module zZ is not supported. Currently, only the following modules are supported: `torch.nn.Linear`.)	r   bnbrA   appendr   rB   extendr   r*   )	r8   r9   r   r   dispatchersrA   rB   r=   
dispatchers	            r   r3   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_hookrD   remove)r7   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%:%:%<<! $ -:PMDZ=O4MP-AMdiiX^_rXsNtMuvwwllnF&),,%&EUbc99+SW9X##F+	 % 	"FMMO #! Qs&   A'E-$E	EE$AEAEr   N)r8   r	   r9   r   r   	nn.Moduler:   r   r;   ra   returnNone)r8   r	   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r   tuner_layer_clsr   target_module_mappingr>   staticmethodr3   r   r_   __static_attributes__r   r   r   r   r   &   s    FC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
   
peft.utilsr   rW   r   r   r   r   r   r   r   <module>rv      s=    #  %   E . J .}	 }r   