
    C1ij                     B    S SK rS rS rS	S jrS rS r " S S5      rg)
    Nc           
         U(       d  [        S5      e[        US   R                  [        R                  5      (       a!  [        R
                  n[        R                  nOSS KnUR                  nUR                  nU" U Vs/ s H  oUR                  PM     sn5      U l        S nU H0  nUR                  5       (       d  M  UR                  R                  n  O   Ub]  U" U Vs/ s HC  nUR                  5       (       a  UR                  OU" UR                  R                  S   /US9PME     sn5      U l
        g g s  snf s  snf )N9Cannot fuse linear layers: at least one layer is requiredr   )dtype)
ValueError
isinstanceweightnpndarrayconcatenatezerostorchcathas_biasbiasr   shape)speclayersr   r   r   layer
bias_dtypes          V/home/james-whalen/.local/lib/python3.13/site-packages/ctranslate2/converters/utils.pyfuse_linearr      s   TUU&)""BJJ//nnii@||@ADKJ>>))J 
  $ $E ~~'' JJ 2 21 56jIJ $	
	  As   D<$A
Ec                 >   U(       d  [        S5      e/ SQn[        US   R                  [        R                  5      (       a  [        R
                  nOSS KnUR                  nU H/  n[        U UU" U Vs/ s H  n[        Xv5      PM     snUS95        M1     g s  snf )Nr   )r   weight_scaleweight_zeror   axis)
r   r   r   r	   r
   r   r   r   setattrgetattr)r   r   r   paramsr   r   paramr   s           r   fuse_linear_prequantr!   &   s    TUU6F&)""BJJ//nniiFCF5.FC$O	
  Ds   6Bc                    Ub  U R                  XR                  S   U-  S5      n U SS2SU24   n[        UR                  X-  S5      U5      R                  XS5      nX0SS2SU24'   U R                  SU R                  S   5      $ U R                  XR                  S   U-  S-  SU R                  S   5      R                  SS5      R                  U R                  S   U R                  S   5      $ )z<Permutes the weight to use the sliced rotary implementation.Nr         )reshaper   permute_for_sliced_rotaryswapaxes)r   	num_heads
rotary_dimrotary_weights       r   r'   r'   9   s    	<<?i+GLq+:+~.1!!)"8"=y

')
, 	 "/q+:+~~~b&,,r"233 	y,,q/Y">!"CQUVX	!Q	a&,,q/	2    c                    [        UR                  [        R                  5      (       d+  UR                  R	                  5       nUR	                  5       nOUR                  n[        R
                  " [        R                  " U5      SS9n[        R                  " US5      nUR                  UR                  5      n[        R                  " X$-  5      n[        R                  " US5      n[        UR                  [        R                  5      (       d  SSKnUR                  U5      nU =R                  U-  sl        U =R                  U-  sl        U=R                  UR                  SS5      -  sl        g)zdApplies the activation smoothing technique described in
https://github.com/mit-han-lab/smoothquant.
r   r   gh㈵>Nr%   r#   )r   r   r	   r
   numpyamaxabsolutemaximumastyper   sqrtr   
from_numpygammabetar&   )
layer_normlinearactivation_scaleslinear_weightweight_scalesscalesr   s          r   smooth_activationr=   N   s    fmmRZZ00++--335GGBKK6Q?MJJ}d3M)001D1DEWW&67FZZ%FfmmRZZ00!!&)OOvO
MMV^^Ar**Mr,   c                 >    SnU  H  nUSU-   -  nM     [        U5      e)NzjThe model you are trying to convert is not supported by CTranslate2. We identified the following reasons:
z
- )r   )reasonsmessagereasons      r   raise_unsupportedrB   k   s1    	1  6F?" 
W
r,   c                   &    \ rS rSrS rS rS rSrg)ConfigurationCheckeru   c                     / U l         g N_unsupported_reasonsselfs    r   __init__ConfigurationChecker.__init__v   s
    $&!r,   c                 J    U(       d  U R                   R                  U5        g g rG   )rI   append)rK   assert_conditionerror_messages      r   __call__ConfigurationChecker.__call__y   s    %%,,];  r,   c                 R    U R                   (       a  [        U R                   5        g g rG   )rI   rB   rJ   s    r   validateConfigurationChecker.validate}   s    $$d778 %r,   rH   N)__name__
__module____qualname____firstlineno__rL   rR   rU   __static_attributes__ r,   r   rD   rD   u   s    '<9r,   rD   rG   )r.   r	   r   r!   r'   r=   rB   rD   r\   r,   r   <module>r]      s,    
D
&*+:
9 
9r,   