
    oi                     ~    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           P/home/james-whalen/.local/lib/python3.13/site-packages/peft/tuners/poly/model.py_create_and_replacePolyModel._create_and_replace!   sd     fi((: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    fn-- & 5 5 7 &'99&Fv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	  jj((*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    FC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$   