
    n ij                     H    d dl Zd Zd Zd	dZd Zd Z G d d          ZdS )
    Nc                    |st          d          t          |d         j        t          j                  rt          j        }t          j        ndd l}|j        }|j         |d |D                       | _        d |D ]$}|	                                r|j
        j         n% |fd|D                       | _
        d S d S )N9Cannot fuse linear layers: at least one layer is requiredr   c                     g | ]	}|j         
S  )weight).0layers     \/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/ctranslate2/converters/utils.py
<listcomp>zfuse_linear.<locals>.<listcomp>   s    @@@u|@@@    c                     g | ];}|                                 r|j        n |j        j        d          g          <S )r   )dtype)has_biasbiasr   shape)r   r	   
bias_dtypezeross     r
   r   zfuse_linear.<locals>.<listcomp>   s`         ~~''JEJJ 21 56jIII	  r   )
ValueError
isinstancer   npndarrayconcatenater   torchcatr   r   r   )speclayersr   r   r	   r   r   s        @@r
   fuse_linearr      s    VTUUU&)"BJ// ni+@@@@@AADKJ  >> 	)JE	 K     $  	
 	
			 r   c           	         |st          d          g d}t          |d         j        t          j                  rt          j        }ndd l}|j        }|D ]*t          |  |fd|D             |                     +d S )Nr   )r   weight_scaleweight_zeror   c                 0    g | ]}t          |          S r   )getattr)r   r	   params     r
   r   z(fuse_linear_prequant.<locals>.<listcomp>5   s#    CCC5..CCCr   axis)	r   r   r   r   r   r   r   r   setattr)r   r   r%   paramsr   r   r#   s         @r
   fuse_linear_prequantr(   &   s     VTUUU666F&)"BJ//  ni 
 
KCCCCFCCC$OOO	
 	
 	
 	

 
r   c                     ||                      || j        d         |z  d          } | ddd|f         }t          |                     ||z  d          |                               ||d          }|| ddd|f<   |                      d| j        d                   S |                      || j        d         |z  dz  d| j        d                                       dd                               | j        d         | j        d                   S )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	   	6<?i+GLLqqq+:+~.1!!)j"8"==y
 

')Z
,
, 	 "/qqq+:+~~~b&,r"2333 	y&,q/Y">!"CQUVXX	!Q	a&,q/	2	2r   c                    t          |j        t          j                  s.|j                                        }|                                }n|j        }t          j        t          j        |          d          }t          j        |d          }|                    |j	                  }t          j
        ||z            }t          j        |d          }t          |j        t          j                  sddl}|                    |          }| xj        |z  c_        | xj        |z  c_        |xj        |                    dd          z  c_        dS )zlApplies 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_activationrC   N   s-    fmRZ00 &++---3355GBK66Q???MJ}d33M)001DEEW&677FZ%%FfmRZ00 *!!&))OOvOO
MMV^^Ar***MMMMr   c                 >    d}| D ]
}|d|z   z  }t          |          )NzjThe model you are trying to convert is not supported by CTranslate2. We identified the following reasons:
z
- )r   )reasonsmessagereasons      r
   raise_unsupportedrH   k   s;    	1   # #6F?"
W

r   c                        e Zd Zd Zd Zd ZdS )ConfigurationCheckerc                     g | _         d S N)_unsupported_reasonsselfs    r
   __init__zConfigurationChecker.__init__v   s    $&!!!r   c                 B    |s| j                             |           d S d S rL   )rM   append)rO   assert_conditionerror_messages      r
   __call__zConfigurationChecker.__call__y   s1     	<%,,];;;;;	< 	<r   c                 @    | j         rt          | j                    d S d S rL   )rM   rH   rN   s    r
   validatezConfigurationChecker.validate}   s.    $ 	9d788888	9 	9r   N)__name__
__module____qualname__rP   rU   rW   r   r   r
   rJ   rJ   u   sA        ' ' '< < <9 9 9 9 9r   rJ   rL   )r4   r   r   r(   r.   rC   rH   rJ   r   r   r
   <module>r[      s       
 
 
D
 
 
&   *+ + +:  
9 
9 
9 
9 
9 
9 
9 
9 
9 
9r   