+
    œ°³jú[  ã                   ó®  € ^RI HtHt ]! 4       '       d   ^ RIt^ RIHt ^RIHtHt ^RIH	t	 ^RI
HtHtHt ]P                  ! ]4      t. ROt ! R R]4      t ! R	 R
]4      t ! R R]4      t ! R R]4      tR tR tR]P0                  RR /R R lltR]P0                  RR /R R llt ! R R]P6                  4      tR tR tR tR t R!R R llt!R# )"é   )Úis_torch_availableÚloggingN)Únn)ÚConversionOpsÚ_IdentityOp)Ú!_is_torch_distributed_initialized)Úget_module_from_nameÚ	on_deviceÚshould_convert_modulec                   ó<   a € ] tR t^1t o R tRV 3R lR lltRtV tR# )ÚMxfp4Quantizec                ó   € Wn         R # ©N©Úhf_quantizer©Úselfr   s   &&Ú`/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/integrations/mxfp4.pyÚ__init__ÚMxfp4Quantize.__init__2   ó   € Ø(Öó    Nc                óî   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[P                  P
                  R,          RS[S[,          R,          RS[R,          RS[ S[S[P                  3,          /# )r   Ú
input_dictÚmodelNÚmissing_keysÚfull_layer_nameÚreturn©ÚdictÚstrÚtorchÚTensorr   ÚModuleÚlist)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚMxfp4Quantize.__annotate__5   ss   ø€ ÷ )ñ )á™™eŸl™lÐ*Õ+ð)ñ �x‰x�‰ Õ%ð)ñ ™3•i $Õ&ð	)ñ
 ˜t�ð)ñ 
‰c‘5—<‘<ÐÕ	 ñ)r   c                óX  € \        VP                  4       4      ^ ,          w  rg\        V\        4      '       d
   V^ ,          MTp\	        W$4      w  r†\
        P                  ! VP                  4      ;_uu_ 4        \        V\        4      '       dþ   \        VP                  RR	4      \        4      w  rš\        P                  P                  \        P                  P                  \        P                  P                  rÜp\        Wš\        4      w  ršRV9   d   RMRpWèP                   9   d   VP                   V \#        WŽV	4       \#        VV R2V! W¬! V! 4       R7      R7      4       VP%                  V 4       RVn        / uuRRR4       #  RRR4       R#   + '       g   i     R# ; i)
é    Úgate_up_projÚ	down_projÚ_precision_config©Úrhs_data©Úweight_scaleÚflex_ctxTNéÿÿÿÿéþÿÿÿ)ÚtupleÚitemsÚ
isinstancer%   r	   r"   Ú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_tensorr2   r?   r@   rA   Úprojs   &&&&&,         r   ÚconvertÚMxfp4Quantize.convert5   sb  € ô ˜×)Ñ)Ó+Ó,¨QÕ/‰ˆÜ& u¬d×3Ò3��a–¸ˆä(¨Ó@‰	ˆä�\Š\˜%Ÿ,™,×'Õ'Ü˜&Ô"4×5Ò5Ü5FÀuÇÁÐWYÐ[]ÓG^Ô`rÓ5sÑ2Ð$ä&×1Ñ1×AÑAÜ&×1Ñ1×9Ñ9Ü&×1Ñ1×<Ñ<ð +5�ô
 6CØ(Ô8Jó6Ñ2Ð$ð *8¸?Ô)J‘~ÐP[�à×-Ñ-Ô-à×*Ñ*¨4Ð0ä˜Ð&:Ô;ÜØØ�fÐ-Ð.Ù#°ÈÑYcÓYeÔHfÔgôð ×$Ñ$¨Ð'8Ô:Ø,0�Ô)à÷9 (Ò'Ø5÷ (×'×'Ò'ús   Á9D	FÆF)	r   ©NNN©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   rM   Ú__static_attributes__Ú__classdictcell__©r'   s   @r   r   r   1   s   ø‡ € ò)÷)÷ )ð )r   r   c                   óX   a € ] tR t^at o R tRV 3R lR llt]V 3R lR l4       tRtV t	R# )	ÚMxfp4Dequantizec                ó   € Wn         R # r   r   r   s   &&r   r   ÚMxfp4Dequantize.__init__b   r   r   Nc                óî   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[P                  P
                  R,          RS[R,          RS[S[,          R,          RS[ S[S[P                  3,          /# ©r   r   r   Nr   r   r   r   )r&   r'   s   "€r   r(   ÚMxfp4Dequantize.__annotate__e   ss   ø€ ÷ .ñ .á™™eŸl™lÐ*Õ+ð.ñ �x‰x�‰ Õ%ð.ñ ˜t�ð	.ñ
 ™3•i $Õ&ð.ñ 
‰c‘5—<‘<ÐÕ	 ñ.r   c                óÚ  € / pR V9   d   R MRpV R2VP                  4       9   dH   \        W R2,          \        4      '       d   W R2,          ^ ,          Wg R2&   MW R2,          Wg R2&   V R2VP                  4       9   dH   \        W R2,          \        4      '       d   W R2,          ^ ,          Wg R2&   MW R2,          Wg R2&   \        Wg R2,          Wg R2,          4      pW8/# )r,   r-   Ú_blocksÚ_scales)Úkeysr8   r%   Údequantize_convertops)	r   r   r   r   r   rG   Ú
param_datarL   Údequantizeds	   &&&&&,   r   rM   ÚMxfp4Dequantize.converte   s  € ð ˆ
Ø!/°?Ô!B‰~ÈˆØˆV�7Ð˜zŸ™Ó0Ô0Ü˜* v¨WÐ%5Õ6¼×=Ò=Ø/9¸FÀ'Ð:JÕ/KÈAÕ/N�
˜V 7Ð+Ò,à/9¸FÀ'Ð:JÕ/K�
˜V 7Ð+Ñ,ØˆV�7Ð˜zŸ™Ó0Ô0Ü˜* v¨WÐ%5Õ6¼×=Ò=Ø/9¸FÀ'Ð:JÕ/KÈAÕ/N�
˜V 7Ð+Ò,à/9¸FÀ'Ð:JÕ/K�
˜V 7Ð+Ñ,ô ,¨J¸¸wÐ7GÕ,HÈ*ÐW]Ð]dÐUeÕJfÓgˆØÐ-Ð-r   c                ó   <€ V ^8„  d   QhRR/# )r   r   r   © )r&   r'   s   "€r   r(   r^      s   ø€ ÷ ñ ˜Oñ r   c                ó   € \        4       # r   )r   ©r   s   &r   Ú
reverse_opÚMxfp4Dequantize.reverse_op~   s
   € ä‹}Ðr   r   rO   ©
rQ   rR   rS   rT   r   rM   Úpropertyrk   rU   rV   rW   s   @r   rY   rY   a   s(   ø‡ € ò)÷.ò .ð2 ÷ó ör   rY   c                   óX   a € ] tR t^ƒt o R tRV 3R lR llt]V 3R lR l4       tRtV t	R# )	ÚMxfp4Deserializec                ó   € Wn         R # r   r   r   s   &&r   r   ÚMxfp4Deserialize.__init__„   r   r   Nc                óî   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[P                  P
                  R,          RS[R,          RS[S[,          R,          RS[ S[S[P                  3,          /# r]   r   )r&   r'   s   "€r   r(   ÚMxfp4Deserialize.__annotate__‡   ss   ø€ ÷ %ñ %á™™eŸl™lÐ*Õ+ð%ñ �x‰x�‰ Õ%ð%ñ ˜t�ð	%ñ
 ™3•i $Õ&ð%ñ 
‰c‘5—<‘<ÐÕ	 ñ%r   c           	     óZ  € / pR V9   d   R MRpV R2VP                  4       9   dH   \        W R2,          \        4      '       d   W R2,          ^ ,          Wg R2&   MW R2,          Wg R2&   V R2VP                  4       9   dH   \        W R2,          \        4      '       d   W R2,          ^ ,          Wg R2&   MW R2,          Wg R2&   \        W#4      w  r‰\	        Wg R2,          Wg R2,          VVWg R2,          P
                  \        4       VP                  V 4       RVn        / # )r,   r-   r`   ra   T)	rb   r8   r%   r	   Úswizzle_mxfp4_convertopsr9   r=   rE   rF   )
r   r   r   r   r   rG   rd   rL   rJ   rH   s
   &&&&&,    r   rM   ÚMxfp4Deserialize.convert‡   sM  € ð ˆ
Ø!/°?Ô!B‰~ÈˆàˆV�7Ð˜zŸ™Ó0Ô0Ü˜* v¨WÐ%5Õ6¼×=Ò=Ø/9¸FÀ'Ð:JÕ/KÈAÕ/N�
˜V 7Ð+Ò,à/9¸FÀ'Ð:JÕ/K�
˜V 7Ð+Ñ,ØˆV�7Ð˜zŸ™Ó0Ô0Ü˜* v¨WÐ%5Õ6¼×=Ò=Ø/9¸FÀ'Ð:JÕ/KÈAÕ/N�
˜V 7Ð+Ò,à/9¸FÀ'Ð:JÕ/K�
˜V 7Ð+Ñ,ô )¨Ó@‰	ˆÜ Ø˜˜wÐ'Õ(Ø˜˜wÐ'Õ(ØØØ˜˜wÐ'Õ(×/Ñ/Üô	
ð 	×Ñ Ð0Ô2Ø$(ˆÔ!ð ˆ	r   c                ó    <€ V ^8„  d   QhRS[ /# )r   r   )r   )r&   r'   s   "€r   r(   rt   ¯   s   ø€ ÷ :ñ :™Mñ :r   c                ó,   € \        V P                  4      # r   )ÚMxfp4ReverseDeserializer   rj   s   &r   rk   ÚMxfp4Deserialize.reverse_op®   s   € ä& t×'8Ñ'8Ó9Ð9r   r   rO   rm   rW   s   @r   rp   rp   ƒ   s)   ø‡ € ò)÷%ò %ðN ÷:ó ö:r   rp   c                   ó<   a € ] tR t^³t o R tRV 3R lR lltRtV tR# )rz   c                ó   € Wn         R # r   r   r   s   &&r   r   Ú Mxfp4ReverseDeserialize.__init__´   r   r   Nc                óî   <€ V ^8„  d   QhRS[ S[S[P                  3,          RS[P                  P
                  R,          RS[R,          RS[S[,          R,          RS[ S[S[P                  3,          /# r]   r   )r&   r'   s   "€r   r(   Ú$Mxfp4ReverseDeserialize.__annotate__·   ss   ø€ ÷ ,ñ ,á™™eŸl™lÐ*Õ+ð,ñ �x‰x�‰ Õ%ð,ñ ˜t�ð	,ñ
 ™3•i $Õ&ð,ñ 
‰c‘5—<‘<ÐÕ	 ñ,r   c                ó  € \        VP                  R ^ 4      p\        VP                  RR4      pRV9   d   RMRpVP                  R^4      ^ ,          p	\        W#4      w  r«/ p\	        V
\
        4      '       Ed   RV9   d)   VP                  RR4      p	\        W¨R	,           4      WÉ&   V# RV9   dí   V
P                  P                  P                  P                  V
P                  P                  P                  4      P                  RR4      P                  VR^Z^4      WÉ R2&   V
P                  P                  P                  P                  P                  V
P                  P                  P                  P                  4      P                  RR4      WÉ R
2&   V# V
P                   P                  P                  P                  V
P                   P                  P                  4      P                  RR4      P                  Wg^ZR4      WÉ R2&   V
P"                  P                  P                  P                  P                  V
P"                  P                  P                  P                  4      P                  RR4      WÉ R
2&   V# )Únum_local_expertsÚhidden_sizei@  r,   r-   rH   Úbiasr`   Ú Ú_biasra   r4   r5   )ÚgetattrÚconfigÚrsplitr	   r8   r:   Úreplacer,   ÚstorageÚlayoutÚunswizzle_dataÚdatar<   ÚreshapeÚgate_up_proj_precision_configr2   r-   Údown_proj_precision_config)r   r   r   r   r   rG   r‚   rƒ   rL   ÚnamerJ   rH   Ú
state_dicts   &&&&&,       r   rM   ÚMxfp4ReverseDeserialize.convert·   s/  € ô $ E§L¡LÐ2EÀrÓJÐÜ˜eŸl™l¨M¸4Ó@ˆà!/°?Ô!B‰~Èˆà×%Ñ% c¨1Ó-¨aÕ0ˆÜ(¨Ó@‰	ˆØˆ
Ü�fÔ0×1Ó1Ø˜Ô(Ø&×.Ñ.¨y¸"Ó=�Ü#*¨6¸'µ>Ó#B�
Ñ Ø!Ð!Ø Ô0à×'Ñ'×/Ñ/×6Ñ6×EÑEÀf×FYÑFY×FaÑFa×FfÑFfÓgß‘Y˜r 2Ó&ß‘WÐ.°°B¸Ó;ð ˜V 7Ð+Ñ,ð ×8Ñ8×EÑE×MÑM×TÑT×cÑcØ×<Ñ<×IÑI×QÑQ×VÑVóç‘i  BÓ'ð ˜V 7Ð+Ñ,ð" Ðð ×$Ñ$×,Ñ,×3Ñ3×BÑBÀ6×CSÑCS×C[ÑC[×C`ÑC`Óaß‘Y˜r 2Ó&ß‘WÐ.¸RÀÓDð ˜V 7Ð+Ñ,ð ×5Ñ5×BÑB×JÑJ×QÑQ×`Ñ`Ø×9Ñ9×FÑF×NÑN×SÑSóç‘i  BÓ'ð ˜V 7Ð+Ñ,ð Ðr   r   rO   rP   rW   s   @r   rz   rz   ³   s   ø‡ € ò)÷,÷ ,ð ,r   rz   c                 ó¸   € VP                   P                  P                  pV! V P                  \        P
                  4      \        P                  ^R7      w  rW3# )é   )Úaxis)Únumerics_detailsÚmxfpÚdowncast_to_mxfp_torchÚtor"   Úbfloat16Úuint8)Úwr=   rš   Úw_scales   &&  r   r;   r;   ç   sD   € Ø/×@Ñ@×EÑE×\Ñ\ÐÙ'¨¯©¬U¯^©^Ó(<¼e¿k¹kÐPQÔR�J€AØˆ:Ðr   c                ó^  € VP                   P                  VP                   P                  VP                   P                  rTpVP                  P
                  pVP                  P
                  P                  pVP                  ^R7      w  r‰V! V! WR7      V3/ V	B p V! V! V4      V4      pW3# )z=
Changes the layout of the tensors depending on the hardware
)Úmx_axis©Údtype)ÚtensorÚFP4Úconvert_layoutÚwrap_torch_tensorÚtensor_detailsrŒ   ÚStridedLayoutÚ"make_default_matmul_mxfp4_w_layout)
rž   rŸ   r=   r¥   r¦   r§   rŒ   r©   Úvalue_layoutÚvalue_layout_optss
   &&&       r   rB   rB   í   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Øˆ:Ðr   r£   Úrows_per_chunkc                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# ©r   r£   r­   r   ©r"   r£   Úintr#   )r&   s   "r   r(   r(     s2   € ÷ 8,ñ 8,ô �;‰;ð	8,ô
 ð8,ô ‡\�\ñ8,r   c          	     óà  € ^ RI pV P                  \        P                  4      p VP                  \        P                  4      ^,
          pV P
                  RR VP
                  8X  g'   Q RV P
                  RR : RVP
                  : 24       h\        P                  ! \        W P                  R7      pV P
                  Ev rgpVP                  V4      V,          p	V P                  W˜4      p VP                  V	^4      p\        P                  ! W˜^,          W P                  R7      p
\        ^ W“4       FÈ  p\        W³,           V	4      pWV pWV pW«V p\        VP                  4      ;_uu_ 4        V^,          P                  \        P                  4      pVV,          VR&   ?V^,	          P                  \        P                  4      pVV,          VR&   ?\        P                   ! WþVR7       RRR4       ???KÊ  	  V
P                  ! . VOVNV^,          N5!  P"                  ! . VOWx,          ^,          N5!  p
V
P%                  ^^4      P'                  4       #   + '       g   i     Lu; i)	úk
Convert the mxfp4 weights again, dequantizing and makes them compatible with the forward
pass of GPT_OSS.
Nzblocks.shape[:-1]=z does not match scales.shape=)r£   r9   )Úoutr4   )ºNNN:r+   Nr   )rµ   :r–   Nr   )Úmathr›   r"   r�   Úint32Úshaper¤   Ú
FP4_VALUESr9   Úprodr�   ÚemptyÚrangeÚminr
   r±   ÚldexpÚviewr<   Ú
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¨·}±}Ô
E€Cà Ÿ,™,Ñ€\�aØ—‘˜<Ó(¨1Õ,€Jà�^‰^˜JÓ*€FØ�^‰^˜J¨Ó*€Fä
�+Š+�j a¥%¨u¿]¹]Ô
K€Cä�A�zÖ2ˆÜ�Õ$ jÓ1ˆà˜ˆmˆØ˜ˆmˆØ�Rˆjˆô �s—z‘z×"Õ"à˜D•j—_‘_¤U§Y¡YÓ/ˆFØ˜v�;ˆC�‰LØð ˜Q•h—]‘]¤5§9¡9Ó-ˆFØ˜v�;ˆC�‰LØô �KŠK˜ cÕ*÷ #ð �’cñ1 3ð4 �+Š+Ð
.�|Ð
. QÐ
.¨¨A­Ó
.×
3Ò
3Ð
M°\Ð
MÀ1Å5È1Å9Ó
M€Cà�=‰=˜˜AÓ×)Ñ)Ó+Ð+÷# #×"ús   Å1A?IÉI-c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# r¯   r°   )r&   s   "r   r(   r(   <  s7   € ÷ gñ gô �;‰;ð	gô
 ðgô ‡\�\ñgr   c               ó²   €  \        WW#R7      #   \        P                   d3    T P                  R4      p TP                  R4      p\        YY#R7      u # i ; i)r³   )r£   r­   Úcpu)rÏ   r"   ÚOutOfMemoryErrorr›   )rÁ   rÂ   r£   r­   s   &&$$r   Úconvert_moe_packed_tensorsrÔ   <  sW   € ðgÜ*¨6ÀÔfÐføô ×!Ñ!ô gØ—‘˜5Ó!ˆØ—‘˜5Ó!ˆÜ*¨6ÀÔfÒfðgús   ‚ �AAÁAc                   óD   a a€ ] tR tRt oV 3R ltV3R lR ltRtVtV ;t# )r:   iU  c           
     ó  <€ \         SV `  4        VP                  V n        VP                  V n        VP
                  V n        \        P                  ! \        P                  ! V P                  ^V P                  ,          V P
                  ^ ,          ^\        P                  R7      RR7      V n        \        P                  ! \        P                  ! V P                  ^V P                  ,          \        P                  R7      RR7      V n        \        P                  ! \        P                  ! V P                  V P
                  V P                  ^ ,          ^3\        P                  R7      RR7      V n        \        P                  ! \        P                  ! V P                  V P
                  \        P                  R7      RR7      V n        RV n        \#        VRR4      V n        RV n        RV n        \#        VRR4      V n        R# )r   r¢   F)Úrequires_gradg¬Zd;û?Úswiglu_limitg      @N)Úsuperr   r‚   Únum_expertsÚintermediate_sizerƒ   r   Ú	Parameterr"   Úzerosr�   r,   Úfloat32Úgate_up_proj_biasr-   Údown_proj_biasÚalphar‡   Úlimitr�   r‘   )r   rˆ   Ú	__class__s   &&€r   r   ÚMxfp4GptOssExperts.__init__V  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   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   Úhidden_statesr   )r"   r#   )r&   r'   s   "€r   r(   ÚMxfp4GptOssExperts.__annotate__t  s&   ø€ ÷ #ñ #¡U§\¡\ð #Ñ]b×]iÑ]iñ #r   c                óÖ  € \         P                  P                  \         P                  P                  \         P                  P                  rvp\         P                  P
                  p\        VP                  4      ;_uu_ 4        V! V! R VR4      V P                  V P                  3^4      p	V! VV P                  V P                  P                  \        P                  4      VVV P                  RV	R7      p
V! V
V P                   V P"                  P                  \        P                  4      VVV P$                  VP&                  R7      pRRR4       V#   + '       g   i     X# ; i)ÚswigluN)Úgather_indxÚprecision_configÚgammasÚfused_activation)Úscatter_indxrë   rì   )rá   râ   )r=   r>   ÚFnSpecsÚFusedActivationré   Ú	swiglu_fnr
   r9   rá   râ   r,   rß   r›   r"   rÞ   r�   r-   rà   r‘   Ú	gate_scal)r   ræ   Úrouting_dataÚ
gather_idxÚscatter_idxrï   rð   r>   rñ   ÚactÚintermediate_cache1Úintermediate_cache3s   &&&&&       r   ÚforwardÚMxfp4GptOssExperts.forwardt  s/  € ä×)Ñ)×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(	)rá   r-   rà   r‘   r,   rß   r�   rƒ   rÛ   râ   rÚ   )	rQ   rR   rS   rT   r   rù   rU   rV   Ú__classcell__)rã   r'   s   @@r   r:   r:   U  s   ù‡ € õ:÷<#÷ #ð #r   r:   c                 ó´  € ^ RI p\        P                  P                  \        P                  P                  \        P                  P
                  \        P                  P                  3w  r4rV\        V P                  4      ;_uu_ 4        \        P                  P                  4       p\        VP                  P                  RR4      4      pRp	V P                  ^ ,          p
V P                  ^,          pW·,          pWŒ,          pV^,           V,          pW¡,          pR pV! W4      w  pp\        P                   ! VRR7      p\        P"                  ! V^R7      w  pp\        P$                  ! V^V4      pVP'                  R4      p\        P(                  ! VW»^,
          R7      WÞ pVP+                  R4      P-                  \        P.                  4      pRp\        P0                  ! VV8  VV4      p\        P2                  ! VRR	7      P-                  \        P.                  4      p\        P2                  ! V4      P-                  \        P.                  4      p\        P0                  ! VV8  VV	4      p\        P0                  ! VV8*  VV	4      p\        P0                  ! VV	8H  V	V4      pVV,          p\        P0                  ! VV,          V	8H  V	V4      pV! VP                  4       VP                  4       R
7      pV! VP                  4       VP                  4       R
7      pV! VWÏ4      pTpRRR4       V! XXXXX4      XX3#   + '       g   i     L; i)r+   NÚ
LOCAL_RANKÚ0c                 ó¾   € \         P                  ! V ) ^RR7      RRV13,          pVP                  4       p\         P                  ! W^R7      pW2P	                  4       3# )r–   T)ÚdimÚstablerµ   N©r   )r"   ÚargsortÚlongÚtake_along_dimr±   )ÚvalsÚkÚtk_indxÚtk_vals   &&  r   ÚtopkÚ routing_torch_dist.<locals>.topk³  sO   € Ü—m’m T E¨q¸Ô>¸qÀ"À1À"¸uÕEˆGØ—l‘l“nˆGÜ×)Ò)¨$¸QÔ?ˆFØŸ;™;›=Ð(Ð(r   r  )ÚbinsÚmaxiè  T)r  )Úsrc_indxÚdst_indxr4   )Úosr=   ÚroutingÚ
GatherIndxÚRoutingDataÚScatterIndxÚcompute_expt_data_torchr
   r9   r"   ÚdistributedÚget_world_sizer±   ÚenvironÚgetr¸   ÚsoftmaxÚsortÚgatherr�   Ú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_distr3  ˜  s¨  € ó ô 	×"Ñ"×-Ñ-Ü×"Ñ"×.Ñ.Ü×"Ñ"×.Ñ.Ü×"Ñ"×:Ñ:ð	EÑA€J˜[ô 
�6—=‘=×	!Õ	!Ü×&Ñ&×5Ñ5Ó7ˆ
Ü�2—:‘:—>‘> ,°Ó4Ó5ˆØˆà—<‘< •?ˆØ—l‘l 1•oˆà%Õ3ˆØ!Õ3ÐØ  1�H¨Õ7ÐàÕ,ˆò	)ñ  $ FÓ8Ñˆ	�9Ü—M’M )°Ô4ˆ	Ü"'§*¢*¨Y¸AÔ">Ñˆ	�<Ü—L’L ¨A¨|Ó<ˆ	ð ×%Ñ% bÓ)ˆ	ä�{Š{˜9¨;È!½OÔLÐM_Ð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 
"ñh �y $¨¸ÀiÓPÐR]Ð_kÐkÐk÷i 
"×	!ús   ÂJ%MÍM	c                 ó¸  € \        4       '       d   \        V R 4      '       d   \        pM\        P                  P                  pVP
                  ^ ,          pVP                  RV P                  P                  4      p\        P                  P                  WP                  P                  V P                  P                  4      p\        VP                  4      ;_uu_ 4        V! W@P                  P                   4      w  rVpRRR4       V P#                  VXXXR7      pVP                  VRV P                  P                  4      pW„3#   + '       g   i     LO; i)Ú
_is_hookedN)rõ   r4   )r   Úhasattrr3  r=   r  r¸   r�   ÚrouterÚ
hidden_dimr   Ú
functionalÚlinearÚweightr„   r
   r9   Útop_kÚexperts)	r   ræ   r  Ú
batch_sizeÚrouter_logitsró   rô   rõ   Ú
routed_outs	   &&       r   Úmlp_forwardrA  Ü  sû   € Ü(×*Ò*¬w°t¸\×/JÒ/JÜ$‰ä$×,Ñ,×4Ñ4ˆà×$Ñ$ QÕ'€JØ!×)Ñ)¨"¨d¯k©k×.DÑ.DÓE€MÜ—M‘M×(Ñ(¨¿¹×8JÑ8JÈDÏKÉK×L\ÑL\Ó]€Mä	�=×'Ñ'×	(Õ	(Ù07¸Ç{Á{×GXÑGXÓ0YÑ-ˆ +÷ 
)ð —‘˜m¨\¸:ÐS^�Ó_€JØ×#Ñ# J°°D·K±K×4JÑ4JÓK€JØÐ$Ð$÷ 
)×	(ús   Ã" E	Å	E	c                 óV   € \        W4      p\        P                  P                  V4      # r   )rÔ   r"   r   rÜ   )rÁ   rÂ   re   s   && r   rc   rc   î  s!   € Ü,¨VÓ<€KÜ�8‰8×Ñ˜kÓ*Ð*r   c                óÜ  € VP                   P                  VP                   P                  VP                   P                  r‡pV P	                  ^ 4      p	\        VRV4      R8X  d_   \        \        R4      '       dI   \        P                  P                  4       e)   \        P                  P                  4       P                  pV P                  V4      P                  4       p VP                  V4      P                  4       pVR8X  d%   V P                  W’P                  ^,          R	4      p M$V P                  V	R	VP                  ^,          4      p \        V4      ;_uu_ 4        \!        V P#                  R
R	4      VP#                  R
R	4      V4      w  r«RRR4       VR8X  d:   \        P$                  ! W’P&                  VP                  ^,          .4      X
n        M1\        P$                  ! W’P                  VP&                  .4      X
n        W2P*                  9   d   VP*                  V \-        W#V
4       \-        VV R2V! XV! V! 4       R7      R7      4       R#   + '       g   i     LÐ; i)zi
This transforms the weights obtained using `convert_gpt_oss.py` to load them into `Mxfp4GptOssExperts`.
ÚtyperÒ   ÚacceleratorNr,   r.   r/   r1   r4   r5   )r>   r?   r@   rA   Úsizer‡   r6  r"   rE  Úcurrent_acceleratorrD  r›   rÀ   r�   rÛ   r
   rB   r<   ÚSizerƒ   r¸   rC   rD   )rÁ   rÂ   rJ   rL   Útarget_devicer=   r?   r@   rA   Úlocal_expertsrK   r2   s   &&&&&&      r   rv   rv   ó  sñ  € ð
 	×%Ñ%×5Ñ5Ø×%Ñ%×-Ñ-Ø×%Ñ%×0Ñ0ð )€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àˆ~ÔØ—‘ ×/GÑ/GÈ!Õ/KÈRÓP‰à—‘ ¨r°6×3KÑ3KÈqÕ3PÓQˆä	�=×	!Õ	!Ü-:Ø×Ñ˜R Ó$ f×&6Ñ&6°r¸2Ó&>Ð@Ró.
Ñ*Ð÷ 
"ð
 ˆ~ÔÜ%*§Z¢Z°×@RÑ@RÐTZ×TlÑTlÐopÕTpÐ0qÓ%rÐÕ"ä%*§Z¢Z°×@XÑ@XÐZ`×ZlÑZlÐ0mÓ%nÐÔ"ð ×!Ñ!Ô!à×Ñ˜tÐ$ÜˆFÐ.Ô/ÜØØˆ&Ð!Ð"Ù \¹GÉZË\Ô<ZÔ[ö÷! 
"×	!ús   Å#0IÉI+	c                óH   € V ^8„  d   QhR\         \        ,          R,          /# )r   Úmodules_to_not_convertN)r%   r!   )r&   s   "r   r(   r(   $  s    € ÷ )ñ )ÔW[Ô\_ÕW`ÐcgÕWgñ )r   c           	     ó’  € VP                   '       d   V # ^RIHp V! R^R7      sRpV P	                  4        FÜ  w  rV\        WR4      '       g   K  VP                  P                  R8X  da   VP                   '       gO   \        P                  ! R4      ;_uu_ 4        V P                  V\        V P                  4      4       RpRRR4       VP                  P                  R	8X  g   K°  VP                   '       d   KÄ  ^ R
IHp V! \        V4      Vn        KÞ  	  V'       g   \"        P%                  R4       V #   + '       g   i     L|; i)a  
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.
)Ú
get_kernelz(kernels-community/gpt-oss-triton-kernels)ÚversionFÚGptOssExpertsÚmetaTNÚ	GptOssMLP)Ú
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.)Ú
dequantizeÚhub_kernelsrN  r=   Únamed_modulesr   rã   rQ   r"   r9   Úset_submoduler:   rˆ   ÚtypesrS  rA  rù   ÚloggerÚwarning)r   Úquantization_configrL  rN  Úhas_been_replacedÚmodule_namerJ   rS  s   &&&     r   Úreplace_with_mxfp4_linearr^  $  s   € ð ×%×%Ð%Øˆå'ñ $Ð$NÐXYÔZÐàÐØ$×2Ñ2Ö4ÑˆÜ$ [×IÒIÙØ×Ñ×$Ñ$¨Ô7Ð@S×@^×@^Ð@^Ü—’˜f×%Õ%Ø×#Ñ# KÔ1CÀEÇLÁLÓ1QÔRØ$(Ð!÷ &ð ×Ñ×$Ñ$¨Ö3Ð<O×<Z×<ZÒ<ZÝ(á'¬°VÓ<ˆFŽNñ  5÷ Ü�‰ðô	
ð €L÷ &×%ús   Â(D6Ä6E)g        g      à?g      ð?g      ø?g       @g      @g      @g      @g       €g      à¿g      ð¿g      ø¿g       Àg      Àg      Àg      Ài   )NN)"Úutilsr   r   r"   r   Úcore_model_loadingr   r   Údistributed.utilsr   Úquantizers.quantizers_utilsr	   r
   r   Ú
get_loggerrQ   rY  r¹   r   rY   rp   rz   r;   rB   rœ   rÏ   rÔ   r$   r:   r3  rA  rc   rv   r^  rh   r   r   Ú<module>rd     sï   ð÷ 0ñ ×ÒÛÝç ;Ý Aß `Ñ `ð 
×	Ò	˜HÓ	%€ò€
ô(-�Mô -ô`�mô ôD-:�}ô -:ô`0˜mô 0òhòð(8,ð Ÿ™ð	8,ð
 '÷8,ðvgð Ÿ™ð	gð
 '÷gô2>#˜Ÿ™ô >#òFAlòH%ò$+ò
.÷b)ñ )r   