§
    ‚Štjkl  ã                   óä  — 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j        fd„Zej        ddœdej        dedej        fd„Z G d„ dej        ¦  «        Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d#d!e$e%         dz  fd"„Z&dS )$é   )Ú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dS )
ÚMxfp4Quantizec                 ó   — || _         d S ©N©Úhf_quantizer©Úselfr   s     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/mxfp4.pyÚ__init__zMxfp4Quantize.__init__1   ó   € Ø(ˆÔÐÐó    NÚ
input_dictÚmodelÚmissing_keysÚfull_layer_nameÚreturnc                 óJ  — t          |                     ¦   «         ¦  «        d         \  }}t          |t          ¦  «        r|d         n|}t	          ||¦  «        \  }}t          j        |j        ¦  «        5  t          |t          ¦  «        rþt          | 	                    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� ||
 | |¦   «         ¬¦  «        ¬¦  «        ¦  «         |                     |› ¦  «         d	|_        i cd d d ¦  «         S 	 d d d ¦  «         d S # 1 swxY w Y   d S )
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   s%  € õ ˜×)Ò)Ñ+Ô+Ñ,Ô,¨QÔ/‰ˆˆ5Ý& u­dÑ3Ô3Ð>��a”�¸ˆå(¨°Ñ@Ô@‰	ˆ�åŒ\˜%œ,Ñ'Ô'ð 	ð 	Ý˜&Õ"4Ñ5Ô5ð Ý5FÀuÇÂÐWYÐ[]ÑG^ÔG^Õ`rÑ5sÔ5sÑ2Ð$ lå&Ô1ÔAÝ&Ô1Ô9Ý&Ô1Ô<ð +5 �õ
 6CØ(¨,Õ8Jñ6ô 6Ñ2Ð$ lð *8¸?Ð)JÐ)J�~�~ÐP[�à˜6Ô-Ð-Ð-àÔ*¨4Ð0å˜ Ð&:Ñ;Ô;Ð;ÝØØÐ.Ð.Ð.Ø#�O°ÈÈÐYcÐYcÑYeÔYeÐHfÑHfÔHfÐgÑgÔgñô ð ð ×$Ò$¨Ð%9Ñ:Ô:Ð:Ø,0�Ô)àð9	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á6DFÆFÆF©NNN©Ú__name__Ú
__module__Ú__qualname__r   ÚdictÚstrr,   ÚTensorr   ÚModuler+   rA   © r   r   r   r   0   s¥   € € € € € ð)ð )ð )ð )-Ø)-Ø&*ð)ð )à˜˜eœlÐ*Ô+ð)ð Œ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dS )ÚMxfp4Dequantizec                 ó   — || _         d S r   r   r   s     r   r   zMxfp4Dequantize.__init__a   r   r   Nr   r   r   r   r   c                 óâ  — i }d|v rdnd}|› d�|                      ¦   «         v rGt          ||› d�         t          ¦  «        r||› d�         d         ||› d�<   n||› d�         ||› d�<   |› d�|                      ¦   «         v rGt          ||› 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   sg  € ð ˆ
Ø!/°?Ð!BÐ!Bˆ~ˆ~ÈˆØÐÐÐ˜zŸšÑ0Ô0Ð0Ð0Ý˜*¨Ð%5Ð%5Ð%5Ô6½Ñ=Ô=ð LØ/9¸TÐ:JÐ:JÐ:JÔ/KÈAÔ/N�
˜dÐ+Ð+Ð+Ñ,Ð,à/9¸TÐ:JÐ:JÐ:JÔ/K�
˜dÐ+Ð+Ð+Ñ,ØÐÐÐ˜zŸšÑ0Ô0Ð0Ð0Ý˜*¨Ð%5Ð%5Ð%5Ô6½Ñ=Ô=ð LØ/9¸TÐ:JÐ:JÐ:JÔ/KÈAÔ/N�
˜dÐ+Ð+Ð+Ñ,Ð,à/9¸TÐ:JÐ:JÐ:JÔ/K�
˜dÐ+Ð+Ð+Ñ,õ ,¨J¸$Ð7GÐ7GÐ7GÔ,HÈ*ÐX\ÐUeÐUeÐUeÔJfÑgÔgˆØ Ð-Ð-r   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Ð*Ô+ð.ð ŒxŒ Ñ%ð.ð ˜t™ð	.ð
 ˜3”i $Ñ&ð.ð 
ˆc�5”<ÐÔ	 ð.ð .ð .ð .ð2 ðð ð ñ „Xðð ð 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dS )ÚMxfp4Deserializec                 ó   — || _         d S r   r   r   s     r   r   zMxfp4Deserialize.__init__ƒ   r   r   Nr   r   r   r   r   c           	      ól  — i }d|v rdnd}|› d�|                      ¦   «         v rGt          ||› d�         t          ¦  «        r||› d�         d         ||› d�<   n||› d�         ||› d�<   |› d�|                      ¦   «         v rGt          ||› d�         t          ¦  «        r||› d�         d         ||› d�<   n||› d�         ||› d�<   t          ||¦  «        \  }}	t	          ||› d�         ||› d�         ||||› d�         j        t          ¦  «         |                     |› ¦  «         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†   s¼  € ð ˆ
Ø!/°?Ð!BÐ!Bˆ~ˆ~ÈˆàÐÐÐ˜zŸšÑ0Ô0Ð0Ð0Ý˜*¨Ð%5Ð%5Ð%5Ô6½Ñ=Ô=ð LØ/9¸TÐ:JÐ:JÐ:JÔ/KÈAÔ/N�
˜dÐ+Ð+Ð+Ñ,Ð,à/9¸TÐ:JÐ:JÐ:JÔ/K�
˜dÐ+Ð+Ð+Ñ,ØÐÐÐ˜zŸšÑ0Ô0Ð0Ð0Ý˜*¨Ð%5Ð%5Ð%5Ô6½Ñ=Ô=ð LØ/9¸TÐ:JÐ:JÐ:JÔ/KÈAÔ/N�
˜dÐ+Ð+Ð+Ñ,Ð,à/9¸TÐ:JÐ:JÐ:JÔ/K�
˜dÐ+Ð+Ð+Ñ,õ )¨°Ñ@Ô@‰	ˆ�Ý Ø˜$Ð'Ð'Ð'Ô(Ø˜$Ð'Ð'Ð'Ô(ØØØ˜$Ð'Ð'Ð'Ô(Ô/Ýñ	
ô 	
ð 	
ð 	×Ò Ð1Ñ2Ô2Ð2Ø$(ˆÔ!ð ˆ	r   c                 ó*   — t          | j        ¦  «        S r   )ÚMxfp4ReverseDeserializer   rW   s    r   rX   zMxfp4Deserialize.reverse_op­   s   € å& tÔ'8Ñ9Ô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Ð*Ô+ð%ð ŒxŒ Ñ%ð%ð ˜t™ð	%ð
 ˜3”i $Ñ&ð%ð 
ˆc�5”<ÐÔ	 ð%ð %ð %ð %ðN ð:˜Mð :ð :ð :ñ „Xð:ð :ð :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dS )
r`   c                 ó   — || _         d S r   r   r   s     r   r   z Mxfp4ReverseDeserialize.__init__³   r   r   Nr   r   r   r   r   c                 óR  — t          |j        dd¦  «        }t          |j        dd¦  «        }d|v rdnd}|                     dd¦  «        d	         }	t          ||¦  «        \  }
}i }t	          |
t
          ¦  «        �r«d
|v r.|                     dd¦  «        }	t          |
|dz   ¦  «        ||	<   |S d|v r»|
j        j        j	         
                    |
j        j        j        ¦  «                             dd¦  «                             |ddd¦  «        ||	› d�<   |
j        j        j        j	         
                    |
j        j        j        j        ¦  «                             dd¦  «        ||	› d�<   nº|
j        j        j	         
                    |
j        j        j        ¦  «                             dd¦  «                             ||dd¦  «        ||	› d�<   |
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¶   s0  € õ $ E¤LÐ2EÀrÑJÔJÐÝ˜eœl¨M¸4Ñ@Ô@ˆà!/°?Ð!BÐ!Bˆ~ˆ~Èˆà×%Ò% c¨1Ñ-Ô-¨aÔ0ˆÝ(¨°Ñ@Ô@‰	ˆ�Øˆ
Ý�fÕ0Ñ1Ô1ñ 	Ø˜Ð(Ð(Ø&×.Ò.¨y¸"Ñ=Ô=�Ý#*¨6°4¸'±>Ñ#BÔ#B�
˜4Ñ Ø!Ð!Ø Ð0Ð0àÔ'Ô/Ô6×EÒEÀfÔFYÔFaÔFfÑgÔgß’Y˜r 2Ñ&Ô&ß’WÐ.°°B¸Ñ;Ô;ð ˜dÐ+Ð+Ð+Ñ,ð Ô8ÔEÔMÔT×cÒcØÔ<ÔIÔQÔVñô ç’i  BÑ'Ô'ð ˜dÐ+Ð+Ð+Ñ,Ð,ð Ô$Ô,Ô3×BÒBÀ6ÔCSÔC[ÔC`ÑaÔaß’Y˜r 2Ñ&Ô&ß’WÐ.°¸RÀÑDÔDð ˜dÐ+Ð+Ð+Ñ,ð Ô5ÔBÔJÔQ×`Ò`ØÔ9ÔFÔNÔSñô ç’i  BÑ'Ô'ð ˜dÐ+Ð+Ð+Ñ,ð Ðr   rB   rC   rK   r   r   r`   r`   ²   s¥   € € € € € ð)ð )ð )ð )-Ø&*Ø)-ð,ð ,à˜˜eœlÐ*Ô+ð,ð ŒxŒ Ñ%ð,ð ˜t™ð	,ð
 ˜3”i $Ñ&ð,ð 
ˆc�5”<ÐÔ	 ð,ð ,ð ,ð ,ð ,ð ,r   r`   c                 óœ   — |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/   æ   sG   € Ø/Ô@ÔEÔ\ÐØ'Ð'¨¯ª­U¬^Ñ(<Ô(<½e¼kÐPQÐRÑRÔR�J€A€wØˆgˆ:Ðr   c                 ó  — |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ØÔ!Ô3ð +ˆ€Cð
  Ô.Ô5€FØ&Ô5Ô<ÔJ€Mà&,×&OÒ&OÐXYÐ&OÑ&ZÔ&ZÑ#€LÐ#ØˆÐ(Ð(¨°#Ð6Ñ6Ô6¸ÐZÐZÐHYÐZÐZ€AØˆnÐ.Ð.¨wÑ7Ô7¸ÑGÔG€GØˆgˆ:Ðr   i   ©r‡   Úrows_per_chunkr‡   r’   r   c                óP  — ddl }|                      t          j        ¦  «        } |                     t          j        ¦  «        dz
  }| j        dd…         |j        k    s"J d| j        dd…         ›d|j        ›�¦   «         ‚t          j        t          || j        ¬¦  «        }| j        �^ }}}| 	                    |¦  «        |z  }	|  
                    |	|¦  «        } | 
                    |	d¦  «        }t          j        |	|d	z  || j        ¬¦  «        }
t          d|	|¦  «        D ]·}t          ||z   |	¦  «        }| ||…         }|||…         }|
||…         }|d
z                       t          j        ¦  «        }||         |dd…ddd	…f<   ~|dz	                       t          j        ¦  «        }||         |dd…ddd	…f<   ~t          j        |||¬¦  «         ~~~Œ¸  |
j
        g |¢|‘|d	z  ‘R Ž j        g |¢||z  d	z  ‘R Ž }
|
                     dd	¦  «                             ¦   «         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³      sI  € ð €K€K€Kà�YŠY•u”{Ñ#Ô#€FØ�YŠY•u”{Ñ#Ô# cÑ)€FàŒ<˜˜˜Ô ¤Ò,Ð,Ð,Ð.d°´¸c¸r¸cÔ1BÐ.dÐ.dÐU[ÔUaÐ.dÐ.dÑ,Ô,Ð,å
Œ,•z¨°v´}Ð
EÑ
EÔ
E€Cà œ,Ñ€\�1�aØ—’˜<Ñ(Ô(¨1Ñ,€Jà�^Š^˜J¨Ñ*Ô*€FØ�^Š^˜J¨Ñ*Ô*€Få
Œ+�j ! a¡%¨u¸V¼]Ð
KÑ
KÔ
K€Cå�A�z >Ñ2Ô2ð ð ˆÝ��nÑ$ jÑ1Ô1ˆà�R˜�UŒmˆØ�R˜�UŒmˆØ�"�R�%Œjˆð ˜‘*—’¥¤Ñ+Ô+ˆØ˜6”{ˆˆAˆAˆAˆqˆt�!ˆtˆG‰Øð ˜‘(—’�uœyÑ)Ô)ˆØ˜6”{ˆˆAˆAˆAˆqˆt�!ˆtˆG‰Øõ 	Œ�C˜ #Ð&Ñ&Ô&Ð&Ø��c�cà
3ˆ+ˆ#Œ+Ð
.�|Ð
. QÐ
.¨¨A©Ð
.Ð
.Ð
.Ô
3Ð
M°\Ð
MÀ1ÀqÁ5È1Á9Ð
MÐ
MÐ
M€Cà�=Š=˜˜AÑÔ×)Ò)Ñ+Ô+Ð+r   c                óÎ   — 	 t          | |||¬¦  «        S # t          j        $ r@ |                      d¦  «        } |                     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  s„   € ðgÝ*¨6°6ÀÐWeÐfÑfÔfÐføõ Ô!ð gð gð gØ—’˜5Ñ!Ô!ˆØ—’˜5Ñ!Ô!ˆÝ*¨6°6ÀÐWeÐfÑfÔfÐfÐfÐfðgøøøs   ‚ •AA$Á#A$c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )r.   c           	      óh  •— 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	¦  «        | _        d S )
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ˆÔØ!'Ô!9ˆÔØ!Ô-ˆÔåœLÝŒK˜Ô(¨!¨dÔ.DÑ*DÀdÔFVÐZ\ÑF\Ð^`ÕhmÔhsÐtÑtÔtØð
ñ 
ô 
ˆÔõ
 "$¤ÝŒK˜Ô(¨!¨dÔ.DÑ*DÍEÌMÐZÑZÔZÐjoð"
ñ "
ô "
ˆÔõ œÝŒK˜Ô)¨4Ô+;¸TÔ=SÐWYÑ=YÐ[]Ð^ÕfkÔfqÐrÑrÔrØð
ñ 
ô 
ˆŒõ
 !œlÝŒK˜Ô(¨$Ô*:Å%Ä-ÐPÑPÔPÐ`eð
ñ 
ô 
ˆÔð ˆŒ
Ý˜V ^°SÑ9Ô9ˆŒ
Ø-1ˆÔ*Ø*.ˆÔ'Ý˜V ^°SÑ9Ô9ˆŒ
ˆ
ˆ
r   Úhidden_statesr   c                 ó2  — t           j        j        t           j        j        t           j        j        }}}t           j        j        }t          |j        ¦  «        5   | |d|d¦  «        | j        | j	        fd¦  «        }	 ||| j
        | j                             t          j        ¦  «        ||| j        d |	¬¦  «        }
 ||
| j        | j                             t          j        ¦  «        ||| j        |j        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |S )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  sb  € åÔ)Ô1ÝÔ)Ô9ÝÔ)Ô4ð #-�ˆõ
 'Ô-Ô7ˆ	å�}Ô+Ñ,Ô,ð 	ð 	Ø!�/ ' '¨(°IÐ?QÑ"RÔ"RÐUYÔU_ÐaeÔakÐTlÐnoÑpÔpˆCà", *ØØÔ!ØÔ&×)Ò)­%¬-Ñ8Ô8ØØ&Ø!%Ô!CØØ!$ð	#ñ 	#ô 	#Ðð #- *Ø#Ø”ØÔ#×&Ò&¥u¤}Ñ5Ô5ØØ(Ø!%Ô!@Ø#Ô-ð#ñ #ô #Ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð. #Ð"s   ÁB'DÄDÄD)rD   rE   rF   r   r,   rI   rÚ   Ú__classcell__)rÇ   s   @r   r.   r.   O  s`   ø€ € € € € ð:ð :ð :ð :ð :ð<# U¤\ð #Ð]bÔ]ið #ð #ð #ð #ð #ð #ð #ð #r   r.   c                 óT  — dd l }t          j        j        t          j        j        t          j        j        t          j        j        f\  }}}}t          | j        ¦  «        5  t          j
                             ¦   «         }t          |j                             dd¦  «        ¦  «        }d}	| j        d         }
| j        d         }||z  }||z  }|dz   |z  }|
|z  }d„ } || |¦  «        \  }}t          j        |d¬¦  «        }t          j        |d¬¦  «        \  }}t          j        |d|¦  «        }|                     d¦  «        }t          j        |||dz
  ¬¦  «        ||…         }|                     d¦  «                             t          j        ¦  «        }d	}t          j        ||k     ||¦  «        }t          j        |d
¬¦  «                             t          j        ¦  «        }t          j        |¦  «                             t          j        ¦  «        }t          j        ||k     ||	¦  «        }t          j        ||k    ||	¦  «        }t          j        ||	k    |	|¦  «        }||         }t          j        ||         |	k    |	|¦  «        } ||                     ¦   «         |                     ¦   «         ¬¦  «        } ||                     ¦   «         |                     ¦   «         ¬¦  «        } ||||¦  «        }|}d d d ¦  «         n# 1 swxY w Y    ||||||¦  «        ||fS )Nr   Ú
LOCAL_RANKÚ0r   rg   c                 óÌ   — t          j        |  dd¬¦  «        d d …d |…f         }|                     ¦   «         }t          j        | |d¬¦  «        }||                     ¦   «         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­  sb   € Ý”m T E¨q¸Ð>Ñ>Ô>¸q¸q¸qÀ"À1À"¸uÔEˆGØ—l’l‘n”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  ’  sF  € ð €I€I€Iõ 	Ô"Ô-ÝÔ"Ô.ÝÔ"Ô.ÝÔ"Ô:ð	EÑA€J�˜[Ð*Aõ 
�6”=Ñ	!Ô	!ð 3"ð 3"ÝÔ&×5Ò5Ñ7Ô7ˆ
Ý�2”:—>’> ,°Ñ4Ô4Ñ5Ô5ˆØˆà”< ”?ˆØ”l 1”oˆà%¨Ñ3ˆØ! OÑ3ÐØ  1™H¨Ñ7Ðà Ñ,ˆð	)ð 	)ð 	)ð  $˜t F¨KÑ8Ô8Ñˆ	�9Ý”M )°Ð4Ñ4Ô4ˆ	Ý"'¤*¨Y¸AÐ">Ñ">Ô">Ñˆ	�<Ý”L ¨A¨|Ñ<Ô<ˆ	ð ×%Ò% bÑ)Ô)ˆ	åŒ{˜9¨;¸KÈ!¹OÐLÑLÔLÐM_Ð`pÐMpÔqˆà—N’N 2Ñ&Ô&×)Ò)­%¬+Ñ6Ô6ˆ	ð ˆÝ”K 	Ð,>Ò >ÀÀYÑOÔOˆ	Ý”M )°DÐ9Ñ9Ô9×<Ò<½U¼[ÑIÔIˆ	Ý”M )Ñ,Ô,×/Ò/µ´Ñ<Ô<ˆ	Ý”K 	Ð,<Ò <¸iÈÑWÔWˆ	Ý”KÐ 2°iÒ ?ÀÈMÑZÔZˆ	å”K 	¨]Ò :¸MÈ9ÑUÔUˆ	Ø˜iÔ(ˆ	å”K 	¨)Ô 4¸Ò EÀ}ÐV_Ñ`Ô`ˆ	ð !�j¨)¯-ª-©/¬/ÀIÇMÂMÁOÄOÐTÑTÔTˆØ"�{¨I¯MªM©O¬OÀiÇmÂmÁoÄoÐVÑVÔVˆà+Ð+¨D°/À;ÑOÔOˆ	à!ˆðg3"ð 3"ð 3"ñ 3"ô 3"ð 3"ð 3"ð 3"ð 3"ð 3"ð 3"øøøð 3"ð 3"ð 3"ð 3"ðh ˆ;�y $¨¸ÀiÑPÔPÐR]Ð_kÐkÐks   Á J!LÌLÌLc                 ó|  — dd l m} |                     ¦   «         r,|                     ¦   «         rt	          | d¦  «        rt
          }nt          j        j        }|j        d         }| 	                    d| j
        j        ¦  «        }t          j                             || j
        j        | j
        j        ¦  «        }t#          |j        ¦  «        5   ||| j
        j        ¦  «        \  }}}d d d ¦  «         n# 1 swxY w Y   |                      ||||¬¦  «        }	|	 	                    |d| j
        j        ¦  «        }	|	|fS )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  € Ø$Ð$Ð$Ð$Ð$Ð$à×ÒÑÔð 5˜t×2Ò2Ñ4Ô4ð 5½ÀÀ|Ñ9TÔ9Tð 5Ý$ˆˆå$Ô,Ô4ˆàÔ$ QÔ'€JØ!×)Ò)¨"¨d¬kÔ.DÑEÔE€MÝ”M×(Ò(¨¸¼Ô8JÈDÌKÔL\Ñ]Ô]€Må	�=Ô'Ñ	(Ô	(ð Zð ZØ07°¸ÀtÄ{ÔGXÑ0YÔ0YÑ-ˆ�j +ðZð Zð Zñ Zô Zð Zð Zð Zð Zð Zð Zøøøð Zð Zð Zð Zð —’˜m¨\¸:ÐS^�Ñ_Ô_€JØ×#Ò# J°°D´KÔ4JÑKÔK€JØ�}Ð$Ð$s   ÃC5Ã5C9Ã<C9c                 ó  — ddl m} |                     d¦  «        }|                     d¦  «        }|                     d¦  «        }	|                     d¦  «        }
|                     d¦  «        }|                     d¦  «        }d	D ]ü}||v rö|� ||||||	|
||¦  «        }|› d
�}|› d�}t          | |                     dd¦  «        d         |¦  «         t          | |¦  «        r�t          | |¦  «        r�t          t          | |¦  «        t          | |¦  «        ¦  «        }t          | |t          j	         
                    |                     |¦  «        ¦  «        ¦  «         t          | |¦  «         t          | |¦  «         Œýd S )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  ê  s«  € ØJÐJÐJÐJÐJÐJà�JŠJ�wÑÔ€EØ—*’*˜]Ñ+Ô+€KØ—J’J˜Ñ/Ô/€MØ—J’J˜Ñ/Ô/€MØ�:Š:�fÑÔ€DØ—*’*˜]Ñ+Ô+€Kà-ð -ð -ˆØ�:ÐÐØÐ&Ø9Ð9ØØØØ!Ø!Ø!ØØñ	ô 	�ð "Ð*Ð*Ð*ˆKØ!Ð*Ð*Ð*ˆKÝ�F˜J×-Ò-¨c°1Ñ5Ô5°aÔ8¸+ÑFÔFÐFÝ�v˜{Ñ+Ô+ð -µ¸ÀÑ0LÔ0Lð -Ý8½ÀÈÑ9UÔ9UÕW^Ð_eÐgrÑWsÔWsÑtÔt�Ý˜ ¥e¤h×&8Ò&8¸¿ºÈÑ9VÔ9VÑ&WÔ&WÑXÔXÐXÝ˜ Ñ,Ô,Ð,Ý˜ Ñ,Ô,Ð,øð)-ð -r   c                 ó`   — t          | |¦  «        }t          j                             |¦  «        S r   )r·   r,   r   rÀ   )r¥   r¦   rU   s      r   rS   rS     s'   € Ý,¨V°VÑ<Ô<€KÝŒ8×Ò˜kÑ*Ô*Ð*r   c                 óò  — |j         j        |j         j        |j         j        }}}ddlm}	 |                     d¦  «        }
|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }d	|v r4|                     d
¦  «        d                              d¦  «        d         }d|v r4|                     d
¦  «        d                              d¦  «        d         }|� |	|
|||||||¦  «         nJt          | | 	                    d
d¦  «        d         t          j                             |d¬¦  «        ¦  «         |› d�}|› d�}t          | |¦  «        }t          | |¦  «        }|j        j        dk    �rB|j        j        dk    �r3|                     d¦  «        }|dk    r |                     || j        dz  d¦  «        }n|                     |d| j        dz  ¦  «        }t          |d|¦  «        dk    rVt'          t          d¦  «        rAt          j                             ¦   «         �#t          j                             ¦   «         j        }|                     |¦  «                             ¦   «         }|                     |¦  «                             ¦   «         }t1          |¦  «        5  t3          |                     dd¦  «        |                     dd¦  «        |¦  «        \  }}ddd¦  «         n# 1 swxY w Y   |dk    r*t          j        || j        | j        dz  g¦  «        |_        n&t          j        || j        | j        g¦  «        |_        t          | ||¦  «         t          | |› d� || | |¦   «         ¬¦  «        ¬¦  «        ¦  «         t=          | |¦  «         t=          | |¦  «         ~dS dS dS )ú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    sQ  € ð
 	Ô%Ô5ØÔ%Ô-ØÔ%Ô0ð )�W€Oð
 KÐJÐJÐJÐJÐJà�JŠJ�wÑÔ€EØ—*’*˜]Ñ+Ô+€KØ—J’J˜Ñ/Ô/€MØ—J’J˜Ñ/Ô/€MØ�:Š:�fÑÔ€DØ—*’*˜]Ñ+Ô+€KØ�:ÐÐØ×Ò Ñ$Ô$ RÔ(×.Ò.¨yÑ9Ô9¸!Ô<ˆØ�:ÐÐØ×Ò Ñ$Ô$ RÔ(×.Ò.¨yÑ9Ô9¸!Ô<ˆØÐØ#Ð#Ø�; ¨Z¸ÈÐW[Ð]hñ	
ô 	
ð 	
ð 	
õ 	�˜
×)Ò)¨#¨qÑ1Ô1°!Ô4µe´h×6HÒ6HÈÐdiÐ6HÑ6jÔ6jÑkÔkÐkØÐ"Ð"Ð"€KØÐ"Ð"Ð"€KÝ�V˜[Ñ)Ô)€FÝ�V˜[Ñ)Ô)€Fà„}Ô˜VÒ#Ñ#¨¬Ô(:¸fÒ(DÑ(DØŸš A™œˆØ�>Ò!Ð!Ø—^’^ M°6Ô3KÈaÑ3OÐQSÑTÔTˆFˆFà—^’^ M°2°vÔ7OÐSTÑ7TÑUÔUˆFå�M 6¨=Ñ9Ô9¸UÒBÐBÝ�˜}Ñ-Ô-ð CåÔ!×5Ò5Ñ7Ô7ÐCå!Ô-×AÒAÑCÔCÔHˆMØ—’˜=Ñ)Ô)×4Ò4Ñ6Ô6ˆØ—’˜=Ñ)Ô)×4Ò4Ñ6Ô6ˆÝ�}Ñ%Ô%ð 	ð 	Ý1>Ø× Ò   RÑ(Ô(¨&×*:Ò*:¸2¸rÑ*BÔ*BÐDVñ2ô 2Ñ.Ð  ,ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð �>Ò!Ð!Ý).¬°]ÀFÔDVÐX^ÔXpÐstÑXtÐ4uÑ)vÔ)vÐ Ô&Ð&å).¬°]ÀFÔD\Ð^dÔ^pÐ4qÑ)rÔ)rÐ Ô&õ 	�˜Ð2Ñ3Ô3Ð3ÝØØÐ&Ð&Ð&ØˆO¨ÀÀÐQ[ÐQ[ÑQ]ÔQ]Ð@^Ñ@^Ô@^Ð_Ñ_Ô_ñ	
ô 	
ð 	
õ 	�˜Ñ$Ô$Ð$Ý�˜Ñ$Ô$Ð$ØˆFˆFðI $Ð#Ð(DÐ(Ds   Ë&=L/Ì/L3Ì6L3c                 óŒ  — |j         j        |j         j        |j         j        }}}|                      d¦  «        }	t          |d|¦  «        dk    rVt          t          d¦  «        rAt          j         	                    ¦   «         �#t          j         	                    ¦   «         j
        }|                      |¦  «                             ¦   «         } |                     |¦  «                             ¦   «         }|dk    r |                      |	|j        dz  d¦  «        } n|                      |	d|j        dz  ¦  «        } t          |¦  «        5  t!          |                      d	d¦  «        |                     d	d¦  «        |¦  «        \  }
}ddd¦  «         n# 1 swxY w Y   |dk    r*t          j        |	|j        |j        dz  g¦  «        |
_        n&t          j        |	|j        |j        g¦  «        |
_        ||j        v r|j        |= t-          |||
¦  «         t-          ||› d
� || | |¦   «         ¬¦  «        ¬¦  «        ¦  «         dS )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ØÔ%Ô-ØÔ%Ô0ð )�W€Oð —K’K ‘N”N€Må�˜v }Ñ5Ô5¸Ò>Ð>Ý•E˜=Ñ)Ô)ð 	?åÔ×1Ò1Ñ3Ô3Ð?åÔ)×=Ò=Ñ?Ô?ÔDˆà�YŠY�}Ñ%Ô%×0Ò0Ñ2Ô2€FØ�YŠY�}Ñ%Ô%×0Ò0Ñ2Ô2€Fàˆ~ÒÐØ—’ ¨vÔ/GÈ!Ñ/KÈRÑPÔPˆˆà—’ ¨r°6Ô3KÈqÑ3PÑQÔQˆå	�=Ñ	!Ô	!ð 
ð 
Ý-:Ø×Ò˜R Ñ$Ô$ f×&6Ò&6°r¸2Ñ&>Ô&>Ð@Rñ.
ô .
Ñ*Ð˜lð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð
 ˆ~ÒÐÝ%*¤Z°ÀÔ@RÐTZÔTlÐopÑTpÐ0qÑ%rÔ%rÐÔ"Ð"å%*¤Z°ÀÔ@XÐZ`ÔZlÐ0mÑ%nÔ%nÐÔ"ð ˆvÔ!Ð!Ð!àÔ˜tÐ$ÝˆF�DÐ.Ñ/Ô/Ð/ÝØØÐ"Ð"Ð"Øˆ \¸G¸GÈZÈZÉ\Ì\Ð<ZÑ<ZÔ<ZÐ[Ñ[Ô[ñô ð ð ð s   Å=FÆFÆFÚmodules_to_not_convertc                 ó  — |j         r| S ddlm}  |dd¬¦  «        ad}|                      ¦   «         D ]¶\  }}t          ||¦  «        sŒ|j        j        dk    r]|j         sVt          j	        d¦  «        5  |  
                    |t          | j        ¦  «        ¦  «         d}d	d	d	¦  «         n# 1 swxY w Y   |j        j        d
k    r#|j         sddlm}  |t          |¦  «        |_        Œ·|st"                               d¦  «         | S )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ÑZÔZÐàÐØ$×2Ò2Ñ4Ô4ð 
=ð 
=Ñˆ�VÝ$ [Ð2HÑIÔIð 	ØØÔÔ$¨Ò7Ð7Ð@SÔ@^Ð7Ý”˜fÑ%Ô%ð )ð )Ø×#Ò# KÕ1CÀEÄLÑ1QÔ1QÑRÔRÐRØ$(Ð!ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð ÔÔ$¨Ò3Ð3Ð<OÔ<ZÐ3Ø(Ð(Ð(Ð(Ð(Ð(à'˜Z­°VÑ<Ô<ˆFŒNøàð 
Ý�Šðñ	
ô 	
ð 	
ð €Ls   Á4+B+Â+B/	Â2B/	)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Ð /Ð /Ð /Ð /Ð /Ð /Ð /ð ÐÑÔð Ø€L€L€LØÐÐÐÐÐà ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `Ð `ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð €
ð(-ð -ð -ð -ð -�Mñ -ô -ð -ð`ð ð ð ð �mñ ô ð ðD-:ð -:ð -:ð -:ð -:�}ñ -:ô -:ð -:ð`0ð 0ð 0ð 0ð 0˜mñ 0ô 0ð 0ðhð ð ðð ð ð0 œØ&ð3,ð 3,ð 3,ð Œ;ð	3,ð
 ð3,ð „\ð3,ð 3,ð 3,ð 3,ðt œØ&ðgð gð gð Œ;ð	gð
 ðgð „\ðgð gð gð gð2>#ð >#ð >#ð >#ð >#˜œñ >#ô >#ð >#ðFAlð Alð AlðH%ð %ð %ð(-ð -ð -ðB+ð +ð +ð
Dð Dð DðN.ð .ð .ðb)ð )ÐW[Ð\_ÔW`ÐcgÑWgð )ð )ð )ð )ð )ð )r   