+
    QV-j`l  ã                   ó®  € ^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	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]P,                  RR!/R R lltR]P,                  RR!/R R llt ! R R]P2                  4      tR tR tR tR tR tR t R"R R llt!R# )#é   )Úis_torch_availableÚloggingN)Únn)ÚConversionOpsÚ_IdentityOp)Úget_module_from_nameÚ	on_deviceÚshould_convert_modulec                   ó<   a € ] tR t^0t 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   &&Úp/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/transformers/integrations/mxfp4.pyÚ__init__ÚMxfp4Quantize.__init__1   ó   € Ø(Öó    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__4   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_tensorr1   r>   r?   r@   Úprojs   &&&&&,         r   ÚconvertÚMxfp4Quantize.convert4   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   rL   Ú__static_attributes__Ú__classdictcell__©r&   s   @r   r   r   0   s   ø‡ € ò)÷)÷ )ð )r   r   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# )	ÚMxfp4Dequantizec                ó   € Wn         R # r   r   r   s   &&r   r   ÚMxfp4Dequantize.__init__a   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__d   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)Úkeysr7   r$   Údequantize_convertops)	r   r   r   r   r   rF   Ú
param_datarK   Údequantizeds	   &&&&&,   r   rL   ÚMxfp4Dequantize.convertd   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   rN   ©
rP   rQ   rR   rS   r   rL   Úpropertyrj   rT   rU   rV   s   @r   rX   rX   `   s(   ø‡ € ò)÷.ò .ð2 ÷ó ör   rX   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_   r`   T)	ra   r7   r$   r   Úswizzle_mxfp4_convertopsr8   r<   rD   rE   )
r   r   r   r   r   rF   rc   rK   rI   rG   s
   &&&&&,    r   rL   Ú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'   rs   ®   s   ø€ ÷ :ñ :™Mñ :r   c                ó,   € \        V P                  4      # r   )ÚMxfp4ReverseDeserializer   ri   s   &r   rj   ÚMxfp4Deserialize.reverse_op­   s   € ä& t×'8Ñ'8Ó9Ð9r   r   rN   rl   rV   s   @r   ro   ro   ‚   s)   ø‡ € ò)÷%ò %ðN ÷:ó ö:r   ro   c                   ó<   a € ] tR t^²t o R tRV 3R lR lltRtV tR# )ry   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,   rG   Úbiasr_   Ú Ú_biasr`   r3   r4   )ÚgetattrÚconfigÚrsplitr   r7   r9   Úreplacer+   ÚstorageÚlayoutÚunswizzle_dataÚdatar;   ÚreshapeÚgate_up_proj_precision_configr1   r,   Údown_proj_precision_config)r   r   r   r   r   rF   r�   r‚   rK   ÚnamerI   rG   Ú
state_dicts   &&&&&,       r   rL   Ú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   rN   rO   rV   s   @r   ry   ry   ²   s   ø‡ € ò)÷,÷ ,ð ,r   ry   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   rA   rA   ì   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   € ÷ 3,ñ 3,ô �;‰;ð	3,ô
 ð3,ô ‡\�\ñ3,r   c               ón  € ^ 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                  \        P                  4      pVV,          VR&   ?V^,	          P                  \        P                  4      pVV,          VR&   ?\        P                  ! WþVR7       ???K¤  	  V
P                  ! . VOVNV^,          N5!  P                   ! . VOWx,          ^,          N5!  p
V
P#                  ^^4      P%                  4       # )	ú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¢   r8   )Úoutr3   )ºNNN:r*   Nr   )r´   :r•   Nr   )Úmathrš   r!   rœ   Úint32Úshaper£   Ú
FP4_VALUESr8   ÚprodrŽ   ÚemptyÚrangeÚminr°   Ú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ˆð ˜•*—‘¤§¡Ó+ˆØ˜6•{ˆˆG‰Øð ˜•(—‘œuŸy™yÓ)ˆØ˜6•{ˆˆG‰Øô 	�Š�C #Õ&Ø�’cñ' 3ð* �+Š+Ð
.�|Ð
. QÐ
.¨¨A­Ó
.×
3Ò
3Ð
M°\Ð
MÀ1Å5È1Å9Ó
M€Cà�=‰=˜˜AÓ×)Ñ)Ó+Ð+r   c                ód   € V ^8„  d   QhR\         P                  R\        R\         P                  /# r®   r¯   )r%   s   "r   r'   r'   6  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Ó   6  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# )r9   iO  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__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   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__n  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	   r8   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.forwardn  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Ú   )	rP   rQ   rR   rS   r   rù   rT   rU   Ú__classcell__)rã   r&   s   @@r   r9   r9   O  s   ù‡ € õ:÷<#÷ #ð #r   r9   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_indxr3   )Úosr<   ÚroutingÚ
GatherIndxÚRoutingDataÚScatterIndxÚcompute_expt_data_torchr	   r8   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                 óü  € ^ RI Hp VP                  4       '       d0   VP                  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! WPP                  P&                  4      w  rgp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)r*   NÚ
_is_hooked)rõ   r3   )Útorch.distributedr  Úis_availableÚis_initializedÚhasattrr3  r<   r  r·   rŽ   ÚrouterÚ
hidden_dimr   Ú
functionalÚlinearÚweightrƒ   r	   r8   Útop_kÚexperts)
r   ræ   Údistr  Ú
batch_sizeÚrouter_logitsró   rô   rõ   Ú
routed_outs
   &&        r   Úmlp_forwardrE  Ö  s  € Ý$à×Ñ×Ò˜t×2Ñ2×4Ò4¼ÀÀ|×9TÒ9TÜ$‰ä$×,Ñ,×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                 ó¤  € ^RI Hp VP                  R4      pVP                  R4      pVP                  R4      p	VP                  R4      p
VP                  R4      pVP                  R4      pR FÝ  pWÑ9   g   K  Ve   V! VVVVV	V
VV4      pV R	2pV R
2p\        WP	                  R^4      ^,          V4       \        W4      '       g   K^  \        W4      '       g   Kq  \        \        W4      \        W4      4      p\        W\        P                  P                  VP                  V4      4      4       \        W4       \        W4       Kß  	  R# )r   ©Úshard_and_distribute_moduler   Úempty_paramÚcasting_dtypeÚto_contiguousr"  Údevice_meshNr_   r`   Ú.)r+   r,   )Úintegrations.tensor_parallelrH  r  rC   rˆ   r9  rÓ   r†   r!   r   rÜ   rš   Údelattr)rI   Ú
param_nameÚparam_valueÚtarget_deviceÚdq_param_namerF   rH  r   rI  rJ  rK  r"  rL  rK   Úblocks_attrÚscales_attrrd   s   &&&&&,           r   Ú
dequantizerV  ê  s&  € ÝJà�J‰J�wÓ€EØ—*‘*˜]Ó+€KØ—J‘J˜Ó/€MØ—J‘J˜Ó/€MØ�:‰:�fÓ€DØ—*‘*˜]Ó+€Kã-ˆØÖØÒ&Ù9ØØØØ!Ø!Ø!ØØó	�ð "˜F 'Ð*ˆKØ!˜F 'Ð*ˆKÜ�F×-Ñ-¨c°1Ó5°aÕ8¸+ÔFÜ�v×+Ô+´¸×0LÔ0LÜ8¼ÀÓ9UÔW^Ð_eÓWsÓt�Ü˜¤e§h¡h×&8Ñ&8¸¿¹ÈÓ9VÓ&WÔXÜ˜Ô,Ü˜Ö,ó) .r   c                 óV   € \        W4      p\        P                  P                  V4      # r   )rÓ   r!   r   rÜ   )rÀ   rÁ   rd   s   && r   rb   rb     s!   € Ü,¨VÓ<€KÜ�8‰8×Ñ˜kÓ*Ð*r   c                óê  € VP                   P                  VP                   P                  VP                   P                  r‡p^RIHp	 VP                  R4      p
VP                  R4      pVP                  R4      pVP                  R4      pVP                  R4      pVP                  R4      pRV9   d/   VP                  R	4      R,          P                  R
4      ^ ,          pRV9   d/   VP                  R	4      R,          P                  R4      ^ ,          pVe   V	! W¢W±WÍWï4       MB\        WP                  R	^4      ^,          \        P                  P                  VRR7      4       X R
2pV R2p\        V V4      p\        V V4      pVP                  P                  R8w  Ed9   VP                  P                  R8w  Ed   VP!                  ^ 4      pVR8X  d&   VP#                  VV P$                  ^,          R4      pM$VP#                  VR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\1        V4      ;_uu_ 4        \3        VP5                  RR4      VP5                  RR4      V4      w  ppRRR4       VR8X  d;   \        P6                  ! VV P8                  V P$                  ^,          .4      Xn        M2\        P6                  ! VV P$                  V P8                  .4      Xn        \        V VV4       \        V V R2V! XV! V! 4       R7      R7      4       \=        V V4       \=        V V4       ?R# R# R#   + '       g   i     LÓ; i)úi
This transforms the weights obtained using `convert_gpt_oss.py` to load them into `Mxfp4GptOssExperts`.
rG  r   rI  rJ  rK  r"  rL  rÀ   rM  r_   rÁ   r`   NFrÖ   Úmetar+   ÚtyperÑ   Úacceleratorr-   r.   r0   r3   r4   )r=   r>   r?   r@   rN  rH  r  ÚsplitrC   rˆ   r!   r   rÜ   r†   r8   r[  ÚsizerŽ   rÛ   r9  r\  Úcurrent_acceleratorrš   r¿   r	   rA   r;   ÚSizer‚   r·   rO  )rI   rP  rQ  rR  r<   rF   r>   r?   r@   rH  r   rI  rJ  rK  r"  rL  rK   rT  rU  rÀ   rÁ   Úlocal_expertsrJ   r1   s   &&&&&,                  r   Úload_and_swizzle_mxfp4rb    sX  € ð
 	×%Ñ%×5Ñ5Ø×%Ñ%×-Ñ-Ø×%Ñ%×0Ñ0ð )€Oõ
 Kà�J‰J�wÓ€EØ—*‘*˜]Ó+€KØ—J‘J˜Ó/€MØ—J‘J˜Ó/€MØ�:‰:�fÓ€DØ—*‘*˜]Ó+€KØ�:ÔØ×Ñ Ó$ RÕ(×.Ñ.¨yÓ9¸!Õ<ˆØ�:ÔØ×Ñ Ó$ RÕ(×.Ñ.¨yÓ9¸!Õ<ˆØÒÙ#Ø ¸ÐW[õ	
ô 	�×)Ñ)¨#¨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   Ë&1O"Ï"O2	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)rY  r[  rÑ   r\  Nr+   r-   r.   r0   r3   r4   )r=   r>   r?   r@   r^  r†   r9  r!   r\  r_  r[  rš   r¿   rŽ   rÛ   r	   rA   r;   r`  r‚   r·   rB   rC   )rÀ   rÁ   rI   rK   rR  r<   r>   r?   r@   ra  rJ   r1   s   &&&&&&      r   ru   ru   W  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4      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-kernelsFÚGptOssExpertsrZ  TNÚ	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.)rV  Úhub_kernelsrg  r<   Únamed_modulesr
   rã   rP   r!   r8   Úset_submoduler9   r‡   Útypesrj  rE  rù   ÚloggerÚwarning)r   Úquantization_configre  rg  Úhas_been_replacedÚmodule_namerI   rj  s   &&&     r   Úreplace_with_mxfp4_linearrt  ˆ  sý   € ð ×%×%Ð%Øˆå'ñ $Ð$NÓOÐàÐØ$×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   Â(D4Ä4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   Úquantizers.quantizers_utilsr   r	   r
   Ú
get_loggerrP   ro  r¸   r   rX   ro   ry   r:   rA   r›   rÎ   rÓ   r#   r9   r3  rE  rV  rb   rb  ru   rt  rg   r   r   Ú<module>ry     sù   ð÷ 0ñ ×ÒÛÝç ;ß `Ñ `ð 
×	Ò	˜HÓ	%€ò€
ô(-�Mô -ô`�mô ôD-:�}ô -:ô`0˜mô 0òhòð(3,ð Ÿ™ð	3,ð
 '÷3,ðlgð Ÿ™ð	gð
 '÷gô2>#˜Ÿ™ô >#òFAlòH%ò(-òB+ò
DòN.÷b)ñ )r   