
    oi
                         S SK JrJr  S SKrS SKJr  S SKJr  SSKJr  Sr	S\S	\R                  4S
 jr " S S\R                  \5      r " S S\5      rg)    )ABCabstractmethodN)nn)RelaxedBernoulli   )
PolyConfigg-q=poly_configreturnc                 j    U R                   S:X  a  [        U 5      $ [        SU R                    S35      e)NpolyzUnsupported poly_type: z<. Currently, only the following types are supported: `poly`.)	poly_type
PolyRouter
ValueError)r	   s    Q/home/james-whalen/.local/lib/python3.13/site-packages/peft/tuners/poly/router.py
get_routerr      s@    &+&&%k&;&;%< = 
 	
    c                   h    \ rS rSr\S 5       r\S\R                  S\R                  4S j5       rSr	g)Router&   c                     g N selfs    r   resetRouter.reset'   s    r   task_ids	input_idsc                     g r   r   )r   r   r   s      r   forwardRouter.forward*   s    HKr   r   N)
__name__
__module____qualname____firstlineno__r   r   torchTensorr    __static_attributes__r   r   r   r   r   &   s0     KKK Kr   r   c                   p   ^  \ rS rSrS\4U 4S jjrS rS\R                  S\R                  4S jr	Sr
U =r$ )	r   .   r	   c                 N  > [         TU ]  5         UR                  U l        UR                  U l        UR                  U l        UR
                  U l        [        R                  " [        R                  " U R                  U R
                  U R                  -  45      5      U l
        g r   )super__init__r   n_tasksn_skillsn_splitsr   	Parameterr&   emptymodule_logits)r   r	   	__class__s     r   r-   PolyRouter.__init__1   su    $.."**#,,#,,\\%++t||T]]UYUbUbEb6c*der   c                 n    [         R                  R                  R                  U R                  SS5        g )NgMbPgMbP?)r&   r   inituniform_r3   r   s    r   r   PolyRouter.reset;   s"    t115$?r   r   r   c                 P   Uc  [        S5      eUR                  5       R                  5       U R                  :  a7  [        SU R                   SUR                  5       R                  5        35      eUR	                  U R
                  R                  5      nU R
                  U   nUR                  SU R                  U R                  5      nU R                  (       a  [        SUS9R                  5       nO[        R                  " U5      nX3R                  SSS9[         -   -  nU$ )	Nztask_ids should not be None.zOnly z" tasks available. Found task id = g      ?)temperaturelogitsT)dimkeepdim)r   maxitemr.   tor3   deviceviewr0   r/   trainingr   rsampler&   sigmoidsumEPS)r   r   r   r3   module_weightss        r   r    PolyRouter.forward>   s    ;<<<<> DLL0uT\\N2TU]UaUaUcUhUhUjTklmm ;;t11889**84%**2t}}dmmL==,]S[[]M!MM-8M&*;*;D*;*QTW*WXr   )r3   r/   r0   r.   r   )r"   r#   r$   r%   r   r-   r   r&   r'   r    r(   __classcell__)r4   s   @r   r   r   .   s7    fJ f@   r   r   )abcr   r   r&   r   %torch.distributions.relaxed_bernoullir   configr   rI   Moduler   r   r   r   r   r   <module>rQ      sT    $   B  
J 
299 
LRYY L# #r   