Ë
    ÛÓ^jkl  ã                   ó  — d dl mZmZ  e«       r
ddlZddlmZ d dlmZmZ d dlm	Z	m
Z
mZ  ej                  e«      Zg d¢Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Zd„ Zd„ Zej,                  ddœdej.                  dedej2                  fd„Zej,                  ddœdej.                  dedej2                  fd„Z G d„ dej8                  «      Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d#d!e$e%   dz  fd"„Z&y)$é   )Úis_torch_availableÚloggingé    N)Únn)ÚConversionOpsÚ_IdentityOp)Úget_module_from_nameÚ	on_deviceÚshould_convert_module)g        g      à?g      ð?g      ø?g       @g      @g      @g      @g       €g      à¿g      ð¿g      ø¿g       Àg      Àg      Àg      Àc                   ó²   — e Zd Zd„ Z	 	 	 d	deeej                  f   dej                  j                  dz  de
e   dz  dedz  deeej                  f   f
d„Zy)
ÚMxfp4Quantizec                 ó   — || _         y ©N©Úhf_quantizer©Úselfr   s     új/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/integrations/mxfp4.pyÚ__init__zMxfp4Quantize.__init__1   ó
   € Ø(ˆÕó    NÚ
input_dictÚmodelÚmissing_keysÚfull_layer_nameÚreturnc                 ó  — t        |j                  «       «      d   \  }}t        |t        «      r|d   n|}t	        ||«      \  }}t        j                  |j                  «      5  t        |t        «      rýt        |j                  dd«      t        «      \  }	}
t        j                  j                  t        j                  j                  t        j                  j                  }}}t        |	|
t        «      \  }	}
d|v rdnd}||j                   v r|j                   |= t#        |||	«       t#        ||› d� ||
 | |«       ¬«      ¬«      «       |j%                  |› «       d	|_        i cd d d «       S 	 d d d «       y # 1 sw Y   y xY w)
Nr   éÿÿÿÿéþÿÿÿÚgate_up_projÚ	down_projÚ_precision_config©Úrhs_data©Úweight_scaleÚflex_ctxT)ÚtupleÚitemsÚ
isinstanceÚlistr	   ÚtorchÚdeviceÚMxfp4GptOssExpertsÚquantize_to_mxfp4Ú	transposeÚtriton_kernels_hubÚ
matmul_ogsÚPrecisionConfigÚFlexCtxÚ
InFlexDataÚswizzle_mxfp4Ú_parametersÚsetattrÚdiscardÚ_is_hf_initialized)r   r   r   r   r   ÚkwargsÚ_ÚvalueÚmoduleÚtriton_weight_tensorr&   r3   r4   r5   Úprojs                  r   ÚconvertzMxfp4Quantize.convert4   ss  € ô ˜×)Ñ)Ó+Ó,¨QÑ/‰ˆˆ5Ü& u¬dÔ3��a’¸ˆä(¨°Ó@‰	ˆ�ä�\‰\˜%Ÿ,™,Ó'ñ 	Ü˜&Ô"4Ô5Ü5FÀuÇÁÐWYÐ[]ÓG^Ô`rÓ5sÑ2Ð$ lä&×1Ñ1×AÑAÜ&×1Ñ1×9Ñ9Ü&×1Ñ1×<Ñ<ð +5 �ô
 6CØ(¨,Ô8Jó6Ñ2Ð$ lð *8¸?Ñ)J‘~ÐP[�à˜6×-Ñ-Ñ-à×*Ñ*¨4Ð0ä˜ Ð&:Ô;ÜØØ�fÐ-Ð.Ù#°ÉÑYcÓYeÔHfÔgôð ×$Ñ$¨Ð'8Ô:Ø,0�Ô)à÷9	ñ 	Ø5÷	÷ 	ñ 	ús   Á%DE=Å=F©NNN©Ú__name__Ú
__module__Ú__qualname__r   ÚdictÚstrr,   ÚTensorr   ÚModuler+   rA   © r   r   r   r   0   s}   „ ò)ð )-Ø)-Ø&*ñ)à˜˜eŸl™lÐ*Ñ+ð)ð �x‰x�‰ Ñ%ð)ð ˜3‘i $Ñ&ð	)ð
 ˜t™ð)ð 
ˆc�5—<‘<ÐÑ	 ô)r   r   c                   óÄ   — e Zd Zd„ Z	 	 	 d
deeej                  f   dej                  j                  dz  dedz  de
e   dz  deeej                  f   f
d„Zedd	„«       Zy)ÚMxfp4Dequantizec                 ó   — || _         y r   r   r   s     r   r   zMxfp4Dequantize.__init__a   r   r   Nr   r   r   r   r   c                 óz  — i }d|v rdnd}|› d�|j                  «       v r6t        ||› d�   t        «      r||› d�   d   ||› d�<   n||› d�   ||› d�<   |› d�|j                  «       v r6t        ||› d�   t        «      r||› d�   d   ||› d�<   n||› d�   ||› d�<   t        ||› d�   ||› d�   «      }||iS )Nr    r!   Ú_blocksr   Ú_scales)Úkeysr*   r+   Údequantize_convertops)	r   r   r   r   r   r;   Ú
param_datar@   Údequantizeds	            r   rA   zMxfp4Dequantize.convertd   s!  € ð ˆ
Ø!/°?Ñ!B‰~ÈˆØˆV�7Ð˜zŸ™Ó0Ñ0Ü˜*¨ v¨WÐ%5Ñ6¼Ô=Ø/9¸T¸FÀ'Ð:JÑ/KÈAÑ/N�
˜d˜V 7Ð+Ò,à/9¸T¸FÀ'Ð:JÑ/K�
˜d˜V 7Ð+Ñ,ØˆV�7Ð˜zŸ™Ó0Ñ0Ü˜*¨ v¨WÐ%5Ñ6¼Ô=Ø/9¸T¸FÀ'Ð:JÑ/KÈAÑ/N�
˜d˜V 7Ð+Ò,à/9¸T¸FÀ'Ð:JÑ/K�
˜d˜V 7Ð+Ñ,ô ,¨J¸$¸¸wÐ7GÑ,HÈ*ÐX\ÐW]Ð]dÐUeÑJfÓgˆØ Ð-Ð-r   c                 ó   — t        «       S r   )r   ©r   s    r   Ú
reverse_opzMxfp4Dequantize.reverse_op}   s
   € ä‹}Ðr   rB   )r   r   )rD   rE   rF   r   rG   rH   r,   rI   r   rJ   r+   rA   ÚpropertyrX   rK   r   r   rM   rM   `   s‘   „ ò)ð )-Ø&*Ø)-ñ.à˜˜eŸl™lÐ*Ñ+ð.ð �x‰x�‰ Ñ%ð.ð ˜t™ð	.ð
 ˜3‘i $Ñ&ð.ð 
ˆc�5—<‘<ÐÑ	 ó.ð2 òó ñr   rM   c                   óÈ   — e Zd Zd„ Z	 	 	 d
deeej                  f   dej                  j                  dz  dedz  de
e   dz  deeej                  f   f
d„Zedefd	„«       Zy)ÚMxfp4Deserializec                 ó   — || _         y r   r   r   s     r   r   zMxfp4Deserialize.__init__ƒ   r   r   Nr   r   r   r   r   c           	      óö  — i }d|v rdnd}|› d�|j                  «       v r6t        ||› d�   t        «      r||› d�   d   ||› d�<   n||› d�   ||› d�<   |› d�|j                  «       v r6t        ||› d�   t        «      r||› d�   d   ||› d�<   n||› d�   ||› d�<   t        ||«      \  }}	t	        ||› d�   ||› d�   ||||› d�   j
                  t        «       |j                  |› «       d|_        i S )Nr    r!   rP   r   rQ   T)	rR   r*   r+   r	   Úswizzle_mxfp4_convertopsr-   r1   r9   r:   )
r   r   r   r   r   r;   rT   r@   r>   r<   s
             r   rA   zMxfp4Deserialize.convert†   se  € ð ˆ
Ø!/°?Ñ!B‰~ÈˆàˆV�7Ð˜zŸ™Ó0Ñ0Ü˜*¨ v¨WÐ%5Ñ6¼Ô=Ø/9¸T¸FÀ'Ð:JÑ/KÈAÑ/N�
˜d˜V 7Ð+Ò,à/9¸T¸FÀ'Ð:JÑ/K�
˜d˜V 7Ð+Ñ,ØˆV�7Ð˜zŸ™Ó0Ñ0Ü˜*¨ v¨WÐ%5Ñ6¼Ô=Ø/9¸T¸FÀ'Ð:JÑ/KÈAÑ/N�
˜d˜V 7Ð+Ò,à/9¸T¸FÀ'Ð:JÑ/K�
˜d˜V 7Ð+Ñ,ô )¨°Ó@‰	ˆ�Ü Ø˜$˜˜wÐ'Ñ(Ø˜$˜˜wÐ'Ñ(ØØØ˜$˜˜wÐ'Ñ(×/Ñ/Üô	
ð 	×Ñ Ð0Ô2Ø$(ˆÔ!ð ˆ	r   c                 ó,   — t        | j                  «      S r   )ÚMxfp4ReverseDeserializer   rW   s    r   rX   zMxfp4Deserialize.reverse_op­   s   € ä& t×'8Ñ'8Ó9Ð9r   rB   )rD   rE   rF   r   rG   rH   r,   rI   r   rJ   r+   rA   rY   r   rX   rK   r   r   r[   r[   ‚   s™   „ ò)ð )-Ø&*Ø)-ñ%à˜˜eŸl™lÐ*Ñ+ð%ð �x‰x�‰ Ñ%ð%ð ˜t™ð	%ð
 ˜3‘i $Ñ&ð%ð 
ˆc�5—<‘<ÐÑ	 ó%ðN ð:˜Mò :ó ñ:r   r[   c                   ó²   — e Zd Zd„ Z	 	 	 d	deeej                  f   dej                  j                  dz  dedz  de
e   dz  deeej                  f   f
d„Zy)
r`   c                 ó   — || _         y r   r   r   s     r   r   z Mxfp4ReverseDeserialize.__init__³   r   r   Nr   r   r   r   r   c                 óð  — t        |j                  dd«      }t        |j                  dd«      }d|v rdnd}|j                  dd«      d	   }	t        ||«      \  }
}i }t	        |
t
        «      �rd
|v r&|j                  dd«      }	t        |
|dz   «      ||	<   |S d|v rî|
j                  j                  j                  j                  |
j                  j                  j                  «      j                  dd«      j                  |ddd«      ||	› d�<   |
j                  j                  j                  j                  j                  |
j                  j                  j                  j                  «      j                  dd«      ||	› d�<   |S |
j                   j                  j                  j                  |
j                   j                  j                  «      j                  dd«      j                  ||dd«      ||	› d�<   |
j"                  j                  j                  j                  j                  |
j"                  j                  j                  j                  «      j                  dd«      ||	› d�<   |S )NÚnum_local_expertsé    Úhidden_sizei@  r    r!   r<   é   r   ÚbiasrP   Ú Ú_biasr   r   éZ   é   rQ   )ÚgetattrÚconfigÚrsplitr	   r*   r.   Úreplacer    ÚstorageÚlayoutÚunswizzle_dataÚdatar0   ÚreshapeÚgate_up_proj_precision_configr&   r!   Údown_proj_precision_config)r   r   r   r   r   r;   rd   rf   r@   Únamer>   r<   Ú
state_dicts                r   rA   zMxfp4ReverseDeserialize.convert¶   s>  € ô $ E§L¡LÐ2EÀrÓJÐÜ˜eŸl™l¨M¸4Ó@ˆà!/°?Ñ!B‰~Èˆà×%Ñ% c¨1Ó-¨aÑ0ˆÜ(¨°Ó@‰	ˆ�Øˆ
Ü�fÔ0Õ1Ø˜Ñ(Ø&×.Ñ.¨y¸"Ó=�Ü#*¨6°4¸'±>Ó#B�
˜4Ñ Ø!Ð!Ø Ñ0à×'Ñ'×/Ñ/×6Ñ6×EÑEÀf×FYÑFY×FaÑFa×FfÑFfÓgß‘Y˜r 2Ó&ß‘WÐ.°°B¸Ó;ð ˜d˜V 7Ð+Ñ,ð ×8Ñ8×EÑE×MÑM×TÑT×cÑcØ×<Ñ<×IÑI×QÑQ×VÑVóç‘i  BÓ'ð ˜d˜V 7Ð+Ñ,ð" Ðð ×$Ñ$×,Ñ,×3Ñ3×BÑBÀ6×CSÑCS×C[ÑC[×C`ÑC`Óaß‘Y˜r 2Ó&ß‘WÐ.°¸RÀÓDð ˜d˜V 7Ð+Ñ,ð ×5Ñ5×BÑB×JÑJ×QÑQ×`Ñ`Ø×9Ñ9×FÑF×NÑN×SÑSóç‘i  BÓ'ð ˜d˜V 7Ð+Ñ,ð Ðr   rB   rC   rK   r   r   r`   r`   ²   s}   „ ò)ð )-Ø&*Ø)-ñ,à˜˜eŸl™lÐ*Ñ+ð,ð �x‰x�‰ Ñ%ð,ð ˜t™ð	,ð
 ˜3‘i $Ñ&ð,ð 
ˆc�5—<‘<ÐÑ	 ô,r   r`   c                 ó¼   — |j                   j                  j                  } || j                  t        j
                  «      t        j                  d¬«      \  } }| |fS )Nrg   )Úaxis)Únumerics_detailsÚmxfpÚdowncast_to_mxfp_torchÚtor,   Úbfloat16Úuint8)Úwr1   r~   Úw_scales       r   r/   r/   æ   sH   € Ø/×@Ñ@×EÑE×\Ñ\ÐÙ'¨¯©¬U¯^©^Ó(<¼e¿k¹kÐPQÔR�J€A€wØˆgˆ:Ðr   c                 óf  — |j                   j                  |j                   j                  |j                   j                  }}}|j                  j
                  }|j                  j
                  j                  }|j                  d¬«      \  }}	 | || |¬«      |fi |	¤Ž}  | ||«      |«      }| |fS )zE
    Changes the layout of the tensors depending on the hardware
    rg   )Úmx_axis©Údtype)ÚtensorÚFP4Úconvert_layoutÚwrap_torch_tensorÚtensor_detailsrr   ÚStridedLayoutÚ"make_default_matmul_mxfp4_w_layout)
r‚   rƒ   r1   r‰   rŠ   r‹   rr   r�   Úvalue_layoutÚvalue_layout_optss
             r   r6   r6   ì   s´   € ð
 	×!Ñ!×%Ñ%Ø×!Ñ!×0Ñ0Ø×!Ñ!×3Ñ3ð +ˆ€Cð
  ×.Ñ.×5Ñ5€FØ&×5Ñ5×<Ñ<×JÑJ€Mà&,×&OÑ&OÐXYÐ&OÓ&ZÑ#€LÐ#ÙÑ(¨°#Ô6¸ÑZÐHYÑZ€AÙÑ.¨wÓ7¸ÓG€GØˆgˆ:Ðr   i   ©r‡   Úrows_per_chunkr‡   r’   r   c                ó4  — ddl }| j                  t        j                  «      } |j                  t        j                  «      dz
  }| j
                  dd |j
                  k(  s$J d| j
                  dd ›d|j
                  ›�«       ‚t        j                  t        || j                  ¬«      }| j
                  �^ }}}|j                  |«      |z  }	| j                  |	|«      } |j                  |	d«      }t        j                  |	|d	z  || j                  ¬«      }
t        d|	|«      D ]Ÿ  }t        ||z   |	«      }| || }||| }|
|| }|d
z  j                  t        j                  «      }||   |dd…ddd	…f<   ~|dz	  j                  t        j                  «      }||   |dd…ddd	…f<   ~t        j                  |||¬«       ~~~Œ¡   |
j                  g |¢|‘|d	z  ‘­Ž j                   g |¢||z  d	z  ‘­Ž }
|
j#                  dd	«      j%                  «       S )úw
    Convert the mxfp4 weights again, dequantizing and makes them compatible with the forward
    pass of GPT_OSS.
    r   Né   r   zblocks.shape[:-1]=z does not match scales.shape=)r‡   r-   rg   r   é   é   )Úout)Úmathr   r,   r�   Úint32Úshaperˆ   Ú
FP4_VALUESr-   Úprodru   ÚemptyÚrangeÚminÚintÚldexpÚviewr0   Ú
contiguous)ÚblocksÚscalesr‡   r’   r™   ÚlutÚprefix_shapeÚGÚBÚ
rows_totalr˜   Úr0Úr1ÚblkÚexpÚsubÚidx_loÚidx_his                     r   Ú_convert_moe_packed_tensorsr³      s  € ó à�Y‰Y”u—{‘{Ó#€FØ�Y‰Y”u—{‘{Ó# cÑ)€Fà�<‰<˜˜Ð §¡Ò,ÐdÐ1C°·±¸c¸rÐ1BÐ0DÐDbÐU[×UaÑUaÐTcÐ.dÓdÐ,ä
�,‰,”z¨°v·}±}Ô
E€Cà Ÿ,™,Ñ€\�1�aØ—‘˜<Ó(¨1Ñ,€Jà�^‰^˜J¨Ó*€FØ�^‰^˜J¨Ó*€Fä
�+‰+�j ! a¡%¨u¸V¿]¹]Ô
K€Cä�A�z >Ó2ò ˆÜ��nÑ$ jÓ1ˆà�R˜ˆmˆØ�R˜ˆmˆØ�"�Rˆjˆð ˜‘*—‘¤§¡Ó+ˆØ˜6‘{ˆŠAˆqˆt�!ˆtˆG‰Øð ˜‘(—‘œuŸy™yÓ)ˆØ˜6‘{ˆŠAˆqˆt�!ˆtˆG‰Øô 	�‰�C˜ #Õ&Ø�‘cð'ð* 4ˆ+ˆ#�+‰+Ð
.�|Ð
. QÐ
.¨¨A©Ò
.×
3Ñ
3Ð
M°\Ð
MÀ1ÀqÁ5È1Á9Ò
M€Cà�=‰=˜˜AÓ×)Ñ)Ó+Ð+r   c                ó¶   — 	 t        | |||¬«      S # t        j                  $ r4 | j                  d«      } |j                  d«      }t        | |||¬«      cY S w xY w)r”   r‘   Úcpu)r³   r,   ÚOutOfMemoryErrorr   )r¥   r¦   r‡   r’   s       r   Úconvert_moe_packed_tensorsr·   6  sa   € ðgÜ*¨6°6ÀÐWeÔfÐføô ×!Ñ!ò gØ—‘˜5Ó!ˆØ—‘˜5Ó!ˆÜ*¨6°6ÀÐWeÔfÒfðgús   ‚ ‘AAÁAc                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )r.   c           	      óä  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        t        j                  t        j                  | j                  d| j                  z  | j
                  dz  dt        j                  ¬«      d¬«      | _        t        j                  t        j                  | j                  d| j                  z  t        j                  ¬«      d¬«      | _        t        j                  t        j                  | j                  | j
                  | j                  dz  dft        j                  ¬«      d¬«      | _        t        j                  t        j                  | j                  | j
                  t        j                  ¬«      d¬«      | _        d| _        t#        |dd	«      | _        d | _        d | _        t#        |dd	«      | _        y )
Nr   re   rl   r†   F©Úrequires_gradg¬Zd;û?Úswiglu_limitg      @)Úsuperr   rd   Únum_expertsÚintermediate_sizerf   r   Ú	Parameterr,   Úzerosr�   r    Úfloat32Úgate_up_proj_biasr!   Údown_proj_biasÚalpharm   Úlimitrv   rw   )r   rn   Ú	__class__s     €r   r   zMxfp4GptOssExperts.__init__P  s{  ø€ Ü‰ÑÔà!×3Ñ3ˆÔØ!'×!9Ñ!9ˆÔØ!×-Ñ-ˆÔäŸL™LÜ�K‰K˜×(Ñ(¨!¨d×.DÑ.DÑ*DÀd×FVÑFVÐZ\ÑF\Ð^`Ôhm×hsÑhsÔtØô
ˆÔô
 "$§¡Ü�K‰K˜×(Ñ(¨!¨d×.DÑ.DÑ*DÌEÏMÉMÔZÐjoô"
ˆÔô Ÿ™Ü�K‰K˜×)Ñ)¨4×+;Ñ+;¸T×=SÑ=SÐWYÑ=YÐ[]Ð^Ôfk×fqÑfqÔrØô
ˆŒô
 !Ÿl™lÜ�K‰K˜×(Ñ(¨$×*:Ñ*:Ä%Ç-Á-ÔPÐ`eô
ˆÔð ˆŒ
Ü˜V ^°SÓ9ˆŒ
Ø-1ˆÔ*Ø*.ˆÔ'Ü˜V ^°SÓ9ˆ�
r   Úhidden_statesr   c                 óº  — t         j                  j                  t         j                  j                  t         j                  j                  }}}t         j                  j
                  }t        |j                  «      5   | |d|d«      | j                  | j                  fd«      }	 ||| j                  | j                  j                  t        j                  «      ||| j                  d |	¬«      }
 ||
| j                   | j"                  j                  t        j                  «      ||| j$                  |j&                  ¬«      }d d d «       |S # 1 sw Y   S xY w)NÚswiglu)rÅ   rÆ   r   )Úgather_indxÚprecision_configÚgammasÚfused_activation)Úscatter_indxrÌ   rÍ   )r1   r2   ÚFnSpecsÚFusedActivationrÊ   Ú	swiglu_fnr
   r-   rÅ   rÆ   r    rÃ   r   r,   rÂ   rv   r!   rÄ   rw   Ú	gate_scal)r   rÈ   Úrouting_dataÚ
gather_idxÚscatter_idxrÐ   rÑ   r2   rÒ   ÚactÚintermediate_cache1Úintermediate_cache3s               r   ÚforwardzMxfp4GptOssExperts.forwardn  s0  € ä×)Ñ)×1Ñ1Ü×)Ñ)×9Ñ9Ü×)Ñ)×4Ñ4ð #-�ˆô
 '×-Ñ-×7Ñ7ˆ	ä�}×+Ñ+Ó,ñ 	Ù!¡'¨(°IÐ?QÓ"RÐUY×U_ÑU_Ðae×akÑakÐTlÐnoÓpˆCá",ØØ×!Ñ!Ø×&Ñ&×)Ñ)¬%¯-©-Ó8ØØ&Ø!%×!CÑ!CØØ!$ô	#Ðñ #-Ø#Ø—‘Ø×#Ñ#×&Ñ&¤u§}¡}Ó5ØØ(Ø!%×!@Ñ!@Ø#×-Ñ-ô#Ð÷	ð. #Ð"÷/	ð. #Ð"ús   Á>CEÅE)rD   rE   rF   r   r,   rI   rÚ   Ú__classcell__)rÇ   s   @r   r.   r.   O  s&   ø„ ô:ð<# U§\¡\ð #Ð]b×]iÑ]i÷ #r   r.   c                 óB  — dd l }t        j                  j                  t        j                  j                  t        j                  j
                  t        j                  j                  f\  }}}}t        | j                  «      5  t        j                  j                  «       }t        |j                  j                  dd«      «      }d}	| j                  d   }
| j                  d   }||z  }||z  }|dz   |z  }|
|z  }d„ } || |«      \  }}t        j                   |d¬«      }t        j"                  |d¬«      \  }}t        j$                  |d|«      }|j'                  d«      }t        j(                  |||dz
  ¬«      || }|j+                  d«      j-                  t        j.                  «      }d	}t        j0                  ||k  ||«      }t        j2                  |d
¬«      j-                  t        j.                  «      }t        j2                  |«      j-                  t        j.                  «      }t        j0                  ||k  ||	«      }t        j0                  ||k  ||	«      }t        j0                  ||	k(  |	|«      }||   }t        j0                  ||   |	k(  |	|«      } ||j                  «       |j                  «       ¬«      } ||j                  «       |j                  «       ¬«      } ||||«      }|}d d d «        |«      fS # 1 sw Y   ŒxY w)Nr   Ú
LOCAL_RANKÚ0r   rg   c                 óº   — t        j                  |  dd¬«      d d …d |…f   }|j                  «       }t        j                  | |d¬«      }||j	                  «       fS )Nrg   T)ÚdimÚstable©rà   )r,   ÚargsortÚlongÚtake_along_dimr¡   )ÚvalsÚkÚtk_indxÚtk_vals       r   Útopkz routing_torch_dist.<locals>.topk­  sS   € Ü—m‘m T E¨q¸Ô>ºqÀ"À1À"¸uÑEˆGØ—l‘l“nˆGÜ×)Ñ)¨$°¸QÔ?ˆFØ˜7Ÿ;™;›=Ð(Ð(r   râ   )ÚbinsÚmaxiè  T)rá   )Úsrc_indxÚdst_indx)Úosr1   ÚroutingÚ
GatherIndxÚRoutingDataÚScatterIndxÚcompute_expt_data_torchr
   r-   r,   ÚdistributedÚget_world_sizer¡   ÚenvironÚgetr›   ÚsoftmaxÚsortÚgatherru   Úhistcr£   r   rš   Úwhererã   )ÚlogitsÚn_expts_actrï   rñ   rò   ró   rô   Ú
world_sizeÚrankÚreplace_valueÚn_tokensÚn_expts_totÚn_local_expertsÚlocal_expert_startÚlocal_expert_endÚn_gates_padrê   Ú	expt_scalÚ	expt_indxÚsort_indicesÚhistÚvarÚ	topk_indxÚ	gate_indxrÓ   rË   rÏ   Ú	expt_dataÚhit_expertss                                r   Úrouting_torch_distr  ’  sÀ  € ó ô 	×"Ñ"×-Ñ-Ü×"Ñ"×.Ñ.Ü×"Ñ"×.Ñ.Ü×"Ñ"×:Ñ:ð	EÑA€J�˜[Ð*Aô 
�6—=‘=Ó	!ñ 3"Ü×&Ñ&×5Ñ5Ó7ˆ
Ü�2—:‘:—>‘> ,°Ó4Ó5ˆØˆà—<‘< ‘?ˆØ—l‘l 1‘oˆà%¨Ñ3ˆØ! OÑ3ÐØ  1™H¨Ñ7Ðà Ñ,ˆò	)ñ  $ F¨KÓ8Ñˆ	�9Ü—M‘M )°Ô4ˆ	Ü"'§*¡*¨Y¸AÔ">Ñˆ	�<Ü—L‘L ¨A¨|Ó<ˆ	ð ×%Ñ% bÓ)ˆ	ä�{‰{˜9¨;¸KÈ!¹OÔLÐM_Ð`pÐqˆà—N‘N 2Ó&×)Ñ)¬%¯+©+Ó6ˆ	ð ˆÜ—K‘K 	Ð,>Ñ >ÀÀYÓOˆ	Ü—M‘M )°DÔ9×<Ñ<¼U¿[¹[ÓIˆ	Ü—M‘M )Ó,×/Ñ/´·±Ó<ˆ	Ü—K‘K 	Ð,<Ñ <¸iÈÓWˆ	Ü—K‘KÐ 2°iÑ ?ÀÈMÓZˆ	ä—K‘K 	¨]Ñ :¸MÈ9ÓUˆ	Ø˜iÑ(ˆ	ä—K‘K 	¨)Ñ 4¸Ñ EÀ}ÐV_Ó`ˆ	ñ !¨)¯-©-«/ÀIÇMÁMÃOÔTˆÙ"¨I¯M©M«OÀiÇmÁmÃoÔVˆá+¨D°/À;ÓOˆ	à!ˆ÷g3"ñh �y $¨¸ÀiÓPÐR]Ð_kÐkÐk÷i3"ð 3"ús   ÂI9LÌLc                 óº  — dd l m} |j                  «       r#|j                  «       rt	        | d«      rt
        }nt        j                  j                  }|j                  d   }|j                  d| j                  j                  «      }t        j                  j                  || j                  j                  | j                  j                   «      }t#        |j$                  «      5   ||| j                  j&                  «      \  }}}d d d «       | j)                  |¬«      }	|	j                  |d| j                  j                  «      }	|	|fS # 1 sw Y   ŒIxY w)Nr   Ú
_is_hookedr   )rÖ   )Útorch.distributedrõ   Úis_availableÚis_initializedÚhasattrr  r1   rð   r›   ru   ÚrouterÚ
hidden_dimr   Ú
functionalÚlinearÚweightrh   r
   r-   Útop_kÚexperts)
r   rÈ   Údistrð   Ú
batch_sizeÚrouter_logitsrÔ   rÕ   rÖ   Ú
routed_outs
             r   Úmlp_forwardr$  Ö  s  € Ý$à×ÑÔ˜t×2Ñ2Ô4¼ÀÀ|Ô9TÜ$‰ä$×,Ñ,×4Ñ4ˆà×$Ñ$ QÑ'€JØ!×)Ñ)¨"¨d¯k©k×.DÑ.DÓE€MÜ—M‘M×(Ñ(¨¸¿¹×8JÑ8JÈDÏKÉK×L\ÑL\Ó]€Mä	�=×'Ñ'Ó	(ñ ZÙ07¸ÀtÇ{Á{×GXÑGXÓ0YÑ-ˆ�j +÷Zð —‘˜m¨\¸:ÐS^�Ó_€JØ×#Ñ# J°°D·K±K×4JÑ4JÓK€JØ�}Ð$Ð$÷Zð Zús   Ã'"EÅEc                 ó€  — ddl m} |j                  d«      }|j                  d«      }|j                  d«      }	|j                  d«      }
|j                  d«      }|j                  d«      }d	D ]Í  }||v sŒ|� ||||||	|
||«      }|› d
�}|› d�}t        | |j	                  dd«      d   |«       t        | |«      sŒPt        | |«      sŒ]t        t        | |«      t        | |«      «      }t        | |t        j                  j                  |j                  |«      «      «       t        | |«       t        | |«       ŒÏ y )Nr   ©Úshard_and_distribute_moduler   Úempty_paramÚcasting_dtypeÚto_contiguousr  Údevice_mesh)r    r!   rP   rQ   ú.rg   )Úintegrations.tensor_parallelr'  rø   r8   ro   r  r·   rm   r,   r   rÀ   r   Údelattr)r>   Ú
param_nameÚparam_valueÚtarget_deviceÚdq_param_namer;   r'  r   r(  r)  r*  r  r+  r@   Úblocks_attrÚscales_attrrU   s                    r   Ú
dequantizer5  ê  s8  € ÝJà�J‰J�wÓ€EØ—*‘*˜]Ó+€KØ—J‘J˜Ó/€MØ—J‘J˜Ó/€MØ�:‰:�fÓ€DØ—*‘*˜]Ó+€Kà-ò -ˆØ�:ÒØÐ&Ù9ØØØØ!Ø!Ø!ØØó	�ð "˜F 'Ð*ˆKØ!˜F 'Ð*ˆKÜ�F˜J×-Ñ-¨c°1Ó5°aÑ8¸+ÔFÜ�v˜{Õ+´¸ÀÕ0LÜ8¼ÀÈÓ9UÔW^Ð_eÐgrÓWsÓt�Ü˜ ¤e§h¡h×&8Ñ&8¸¿¹ÈÓ9VÓ&WÔXÜ˜ Ô,Ü˜ Õ,ñ)-r   c                 óX   — t        | |«      }t        j                  j                  |«      S r   )r·   r,   r   rÀ   )r¥   r¦   rU   s      r   rS   rS     s#   € Ü,¨V°VÓ<€KÜ�8‰8×Ñ˜kÓ*Ð*r   c                 óZ  — |j                   j                  |j                   j                  |j                   j                  }}}ddlm}	 |j                  d«      }
|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }d	|v r&|j                  d
«      d   j                  d«      d   }d|v r&|j                  d
«      d   j                  d«      d   }|� |	|
|||||||«       n?t        | |j                  d
d«      d   t        j                  j                  |d¬«      «       › d�}|› d�}t        | |«      }t        | |«      }|j                  j                  dk7  �r|j                  j                  dk7  �rõ|j!                  d«      }|dk(  r!|j#                  || j$                  dz  d«      }n |j#                  |d| j$                  dz  «      }t        |d|«      dk(  rVt'        t        d«      rFt        j(                  j+                  «       �(t        j(                  j+                  «       j                  }|j-                  |«      j/                  «       }|j-                  |«      j/                  «       }t1        |«      5  t3        |j5                  dd«      |j5                  dd«      |«      \  }}ddd«       |dk(  r5t        j6                  || j8                  | j$                  dz  g«      _        n1t        j6                  || j$                  | j8                  g«      _        t        | ||«       t        | |› d� | | |«       ¬«      ¬«      «       t=        | |«       t=        | |«       ~yyy# 1 sw Y   ŒÁxY w)úq
    This transforms the weights obtained using `convert_gpt_oss.py` to load them into `Mxfp4GptOssExperts`.
    r   r&  r   r(  r)  r*  r  r+  r¥   r,  r   rP   r   r¦   rQ   Nrg   Frº   Úmetar    Útyperµ   Úacceleratorr   r"   r#   r%   )r2   r3   r4   r5   r-  r'  rø   Úsplitr8   ro   r,   r   rÀ   rm   r-   r:  Úsizeru   r¿   r  r;  Úcurrent_acceleratorr   r¤   r
   r6   r0   ÚSizerf   r›   r.  )r>   r/  r0  r1  r1   r;   r3   r4   r5   r'  r   r(  r)  r*  r  r+  r@   r3  r4  r¥   r¦   Úlocal_expertsr?   r&   s                           r   Úload_and_swizzle_mxfp4rA    sf  € ð
 	×%Ñ%×5Ñ5Ø×%Ñ%×-Ñ-Ø×%Ñ%×0Ñ0ð )�W€Oõ
 Kà�J‰J�wÓ€EØ—*‘*˜]Ó+€KØ—J‘J˜Ó/€MØ—J‘J˜Ó/€MØ�:‰:�fÓ€DØ—*‘*˜]Ó+€KØ�:ÑØ×Ñ Ó$ RÑ(×.Ñ.¨yÓ9¸!Ñ<ˆØ�:ÑØ×Ñ Ó$ RÑ(×.Ñ.¨yÓ9¸!Ñ<ˆØÐÙ#Ø�; ¨Z¸ÈÐW[Ð]hõ	
ô 	�˜
×)Ñ)¨#¨qÓ1°!Ñ4´e·h±h×6HÑ6HÈÐdiÐ6HÓ6jÔkØ�F˜'Ð"€KØ�F˜'Ð"€KÜ�V˜[Ó)€FÜ�V˜[Ó)€Fà‡}�}×Ñ˜VÓ#¨¯©×(:Ñ(:¸fÓ(DØŸ™ A›ˆØ�>Ò!Ø—^‘^ M°6×3KÑ3KÈaÑ3OÐQSÓT‰Fà—^‘^ M°2°v×7OÑ7OÐSTÑ7TÓUˆFä�M 6¨=Ó9¸UÒBÜœ˜}Ô-Ü×!Ñ!×5Ñ5Ó7ÐCä!×-Ñ-×AÑAÓC×HÑHˆMØ—‘˜=Ó)×4Ñ4Ó6ˆØ—‘˜=Ó)×4Ñ4Ó6ˆÜ�}Ó%ñ 	Ü1>Ø× Ñ   RÓ(¨&×*:Ñ*:¸2¸rÓ*BÐDVó2Ñ.Ð  ,÷	ð �>Ò!Ü).¯©°]ÀF×DVÑDVÐX^×XpÑXpÐstÑXtÐ4uÓ)vÐ Õ&ä).¯©°]ÀF×D\ÑD\Ð^d×^pÑ^pÐ4qÓ)rÐ Ô&ô 	�˜Ð2Ô3ÜØØˆfÐ%Ð&Ù¨ÁÑQ[ÓQ]Ô@^Ô_ô	
ô 	�˜Ô$Ü�˜Ô$ÙðI )EÐ#÷	ð 	ús   Ê01N!Î!N*c                 óŒ  — |j                   j                  |j                   j                  |j                   j                  }}}| j	                  d«      }	t        |d|«      dk(  rVt        t        d«      rFt        j                  j                  «       �(t        j                  j                  «       j                  }| j                  |«      j                  «       } |j                  |«      j                  «       }|dk(  r!| j                  |	|j                  dz  d«      } n | j                  |	d|j                  dz  «      } t        |«      5  t!        | j#                  d	d«      |j#                  d	d«      |«      \  }
}ddd«       |dk(  r5t        j$                  |	|j&                  |j                  dz  g«      
_        n1t        j$                  |	|j                  |j&                  g«      
_        ||j*                  v r|j*                  |= t-        |||
«       t-        ||› d
� | | |«       ¬«      ¬«      «       y# 1 sw Y   ŒÁxY w)r8  r   r:  rµ   r;  Nr    r   r   r   r"   r#   r%   )r2   r3   r4   r5   r=  rm   r  r,   r;  r>  r:  r   r¤   ru   r¿   r
   r6   r0   r?  rf   r›   r7   r8   )r¥   r¦   r>   r@   r1  r1   r3   r4   r5   r@  r?   r&   s               r   r^   r^   W  s   € ð
 	×%Ñ%×5Ñ5Ø×%Ñ%×-Ñ-Ø×%Ñ%×0Ñ0ð )�W€Oð —K‘K “N€Mä�˜v }Ó5¸Ò>Ü”E˜=Ô)Ü×Ñ×1Ñ1Ó3Ð?ä×)Ñ)×=Ñ=Ó?×DÑDˆà�Y‰Y�}Ó%×0Ñ0Ó2€FØ�Y‰Y�}Ó%×0Ñ0Ó2€Fàˆ~ÒØ—‘ ¨v×/GÑ/GÈ!Ñ/KÈRÓP‰à—‘ ¨r°6×3KÑ3KÈqÑ3PÓQˆä	�=Ó	!ñ 
Ü-:Ø×Ñ˜R Ó$ f×&6Ñ&6°r¸2Ó&>Ð@Ró.
Ñ*Ð˜l÷
ð
 ˆ~ÒÜ%*§Z¡Z°À×@RÑ@RÐTZ×TlÑTlÐopÑTpÐ0qÓ%rÐÕ"ä%*§Z¡Z°À×@XÑ@XÐZ`×ZlÑZlÐ0mÓ%nÐÔ"ð ˆv×!Ñ!Ñ!à×Ñ˜tÐ$ÜˆF�DÐ.Ô/ÜØØˆ&Ð!Ð"Ù \¹GÉZË\Ô<ZÔ[õ÷!
ð 
ús   Å	1H:È:IÚmodules_to_not_convertc                 ó(  — |j                   r| S ddlm}  |dd¬«      ad}| j	                  «       D ]»  \  }}t        ||«      sŒ|j                  j                  dk(  rQ|j                   sEt        j                  d«      5  | j                  |t        | j                  «      «       d}d	d	d	«       |j                  j                  d
k(  sŒ—|j                   rŒ¤ddlm}  |t        |«      |_        Œ½ |st"        j%                  d«       | S # 1 sw Y   ŒcxY w)aD  
    Public method that replaces the expert layers of the given model with mxfp4 quantized layers.

    Args:
        model (`torch.nn.Module`):
            The model to convert, can be any `torch.nn.Module` instance.
        quantization_config (`Mxfp4Config`, defaults to `None`):
            The quantization config object that contains the quantization parameters.
        modules_to_not_convert (`list`, *optional*, defaults to `None`):
            A list of modules to not convert. If a module name is in the list (e.g. `lm_head`), it will not be
            converted.
    rg   )Ú
get_kernelz(kernels-community/gpt-oss-triton-kernels)ÚversionFÚGptOssExpertsr9  TNÚ	GptOssMLPr   )Ú
MethodTypez×You are loading your model using mixed-precision FP4 quantization but no linear modules were found in your model. Please double check your model architecture, or submit an issue on github if you think this is a bug.)r5  Úhub_kernelsrE  r1   Únamed_modulesr   rÇ   rD   r,   r-   Úset_submoduler.   rn   ÚtypesrI  r$  rÚ   ÚloggerÚwarning)r   Úquantization_configrC  rE  Úhas_been_replacedÚmodule_namer>   rI  s           r   Úreplace_with_mxfp4_linearrS  ˆ  s  € ð ×%Ò%Øˆå'ñ $Ð$NÐXYÔZÐàÐØ$×2Ñ2Ó4ò 
=Ñˆ�VÜ$ [Ð2HÔIØØ×Ñ×$Ñ$¨Ò7Ð@S×@^Ò@^Ü—‘˜fÓ%ñ )Ø×#Ñ# KÔ1CÀEÇLÁLÓ1QÔRØ$(Ð!÷)ð ×Ñ×$Ñ$¨Ó3Ð<O×<ZÓ<ZÝ(á'¬°VÓ<ˆF�Nð
=ñ Ü�‰ðô	
ð €L÷)ð )ús   Á>(DÄD	)NN)'Úutilsr   r   r,   r   Úcore_model_loadingr   r   Úquantizers.quantizers_utilsr	   r
   r   Ú
get_loggerrD   rN  rœ   r   rM   r[   r`   r/   r6   r€   r‡   r¡   rI   r³   r·   rJ   r.   r  r$  r5  rS   rA  r^   r+   rH   rS  rK   r   r   ú<module>rX     s<  ð÷ 0ñ ÔÛÝç ;ß `Ñ `ð 
ˆ×	Ñ	˜HÓ	%€ò€
ô(-�Mô -ô`�mô ôD-:�}ô -:ô`0˜mô 0òhòð0 Ÿ™Ø&ò3,ð �;‰;ð	3,ð
 ð3,ð ‡\�\ó3,ðt Ÿ™Ø&ògð �;‰;ð	gð
 ðgð ‡\�\ógô2>#˜Ÿ™ô >#òFAlòH%ò(-òB+ò
DòN.ñb)ÐW[Ð\_ÑW`ÐcgÑWgô )r   