Ë
    èÍ:jj  ã                   ó@   — d dl Zd„ Zd„ Zd	d„Zd„ Zd„ Z G d„ d«      Zy)
é    Nc           	      óZ  — |st        d«      ‚t        |d   j                  t        j                  «      r!t        j
                  }t        j                  }ndd l}|j                  }|j                  } ||D �cg c]  }|j                  ‘Œ c}«      | _        d }|D ]*  }|j                  «       sŒ|j                  j                  } n |�X ||D �cg c]@  }|j                  «       r|j                  n! ||j                  j                  d   g|¬«      ‘ŒB c}«      | _
        y y c c}w c c}w )Nú9Cannot 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          úq/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/ctranslate2/converters/utils.pyÚfuse_linearr      s  € ÙÜÐTÓUÐUä�&˜‘)×"Ñ"¤B§J¡JÔ/Ü—n‘nˆÜ—‘‰ãà—i‘iˆØ—‘ˆá¸Ö@°˜uŸ|›|Ò@ÓA€D„Kà€JØò ˆØ�>‰>ÕØŸ™×)Ñ)ˆJÙðð
 ÐÙð $öð ð —~‘~Ô'ð —J’Já §¡× 2Ñ 2°1Ñ 5Ð6¸jÔIñJòó	
ˆ�	ð ùò Aùòs   Á8D#ÃAD(c                 ó(  — |st        d«      ‚g d¢}t        |d   j                  t        j                  «      rt        j
                  }ndd l}|j                  }|D ]/  }t        | | ||D �cg c]  }t        ||«      ‘Œ c}|¬«      «       Œ1 y c c}w )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Ú6€FÜ�&˜‘)×"Ñ"¤B§J¡JÔ/Ü—n‘n‰ãà—i‘iˆàò 
ˆÜØØÙ¸FÖC°5œ ¨Õ.ÒCÈ$ÔOõ	
ñ
ùò Ds   Á,Bc                 óò  — |�ˆ| j                  || j                  d   |z  d«      } | dd…d|…f   }t        |j                  ||z  d«      |«      j                  ||d«      }|| dd…d|…f<   | j                  d| j                  d   «      S | j                  || j                  d   |z  dz  d| j                  d   «      j                  dd«      j                  | 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ˆàšq + : +˜~Ñ.ˆÜ1Ø×!Ñ! )¨jÑ"8¸"Ó=¸yó
ç
‰'�)˜Z¨Ó
,ð 	ð "/ˆŠq�+�:�+ˆ~Ñà�~‰~˜b &§,¡,¨rÑ"2Ó3Ð3ð 	�‰�y &§,¡,¨q¡/°YÑ">À!Ñ"CÀQÈÏÉÐUVÉÓXß	‰�!�Q‹ß	‰�—‘˜a‘ &§,¡,¨q¡/Ó	2ðó    c                 óÜ  — t        |j                  t        j                  «      s+|j                  j	                  «       }|j	                  «       }n|j                  }t        j
                  t        j                  |«      d¬«      }t        j                  |d«      }|j                  |j                  «      }t        j                  ||z  «      }t        j                  |d«      }t        |j                  t        j                  «      sddl}|j                  |«      }| xj                  |z  c_        | xj                  |z  c_        |xj                  |j                  dd«      z  c_        y)zlApplies the activation smoothing technique described in
    https://github.com/mit-han-lab/smoothquant.
    r   r   gñhãˆµøä>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  € ô �f—m‘m¤R§Z¡ZÔ0ØŸ™×+Ñ+Ó-ˆØ-×3Ñ3Ó5ÑàŸ™ˆä—G‘GœBŸK™K¨Ó6¸QÔ?€MÜ—J‘J˜}¨dÓ3€Mà)×0Ñ0°×1DÑ1DÓEÐä�W‰WÐ&¨Ñ6Ó7€FÜ�Z‰Z˜ Ó%€Fä�f—m‘m¤R§Z¡ZÔ0Ûà×!Ñ! &Ó)ˆà×Ò˜ÑÕØ‡O‚O�vÑ…Oà
‡M‚M�V—^‘^ A rÓ*Ñ*†Mr,   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_unsupportedrB   k   s6   € ð	1ð ð ò #ˆØ�6˜F‘?Ñ"‰ð#ä
�WÓ
Ðr,   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚConfigurationCheckerc                 ó   — g | _         y ©N)Ú_unsupported_reasons©Úselfs    r   Ú__init__zConfigurationChecker.__init__v   s
   € Ø$&ˆÕ!r,   c                 ó@   — |s| j                   j                  |«       y y rF   )rG   Úappend)rI   Úassert_conditionÚerror_messages      r   Ú__call__zConfigurationChecker.__call__y   s   € ÙØ×%Ñ%×,Ñ,¨]Õ;ð  r,   c                 óH   — | j                   rt        | j                   «       y y rF   )rG   rB   rH   s    r   ÚvalidatezConfigurationChecker.validate}   s   € Ø×$Ò$Ü˜d×7Ñ7Õ8ð %r,   N)Ú__name__Ú
__module__Ú__qualname__rJ   rO   rQ   © r,   r   rD   rD   u   s   „ ò'ò<ó9r,   rD   rF   )r.   r	   r   r!   r'   r=   rB   rD   rU   r,   r   ú<module>rV      s,   ðÛ ò
òD
ó&ò*+ò:÷
9ò 
9r,   