Ë
    îÍ:jH  ã                   ór  — d dl mZmZmZ  e«       r
ddlZddlmZ  e«       rddlmZ ddlZddl	m
Z
  ej                  e«      Zg d¢Ze
d„ «       Zd	„ Z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d„Z	 	 	 	 dd„Zy)é   )Úis_accelerate_availableÚis_torch_availableÚloggingé    N)Únn)Úinit_empty_weights)Úcontextmanager)g        g      à?g      ð?g      ø?g       @g      @g      @g      @g       €g      à¿g      ð¿g      ø¿g       Àg      Àg      Àg      Àc              #   óØ  K  — t        «       rÀdd l}t        | |j                  «      r| j                  } n"t        | t
        «      r |j                  | «      } t        | dd «      }|dk(  r*|j                  j	                  | «      5  d –— 	 d d d «       y |dk(  r6t        |d«      r*|j                  j	                  | «      5  d –— 	 d d d «       y d –— y # 1 sw Y   ŒIxY w# 1 sw Y   ŒxY w­w)Nr   ÚtypeÚcudaÚxpu)
r   ÚtorchÚ
isinstanceÚTensorÚdeviceÚstrÚgetattrr   Úhasattrr   )Údevr   Údev_types      út/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/transformers/integrations/mxfp4.pyÚ	on_devicer   3   sÑ   è ø€ äÔÛä�c˜5Ÿ<™<Ô(Ø—*‘*‰CÜ˜œSÔ!Ø�%—,‘,˜sÓ#ˆCÜ˜3 ¨Ó-ˆØ�vÒØ—‘×"Ñ" 3Ó'ñ ÛØ÷ð ð �uÒ¤¨°Ô!6Ø—‘×!Ñ! #Ó&ñ ÛØ÷ð ô 
÷ð ú÷ð üs6   ‚BC*ÂCÂ	5C*Â>CÃC*ÃCÃC*ÃC'Ã#C*c                 ó¼   — |j                   j                  j                  } || j                  t        j
                  «      t        j                  d¬«      \  } }| |fS )Né   )Úaxis)Únumerics_detailsÚmxfpÚdowncast_to_mxfp_torchÚtor   Úbfloat16Úuint8)ÚwÚtriton_kernels_hubr   Úw_scales       r   Úquantize_to_mxfp4r%   J   sH   € Ø/×@Ñ@×EÑE×\Ñ\ÐÙ'¨¯©¬U¯^©^Ó(<¼e¿k¹kÐPQÔR�J€A€wØˆgˆ:Ðó    c                 óf  — |j                   j                  |j                   j                  |j                   j                  }}}|j                  j
                  }|j                  j
                  j                  }|j                  d¬«      \  }}	 | || |¬«      |fi |	¤Ž}  | ||«      |«      }| |fS )zE
    Changes the layout of the tensors depending on the hardware
    r   )Úmx_axis©Údtype)ÚtensorÚFP4Úconvert_layoutÚwrap_torch_tensorÚtensor_detailsÚlayoutÚStridedLayoutÚ"make_default_matmul_mxfp4_w_layout)
r"   r$   r#   r,   r-   r.   r0   r1   Úvalue_layoutÚvalue_layout_optss
             r   Úswizzle_mxfp4r5   P   s´   € ð
 	×!Ñ!×%Ñ%Ø×!Ñ!×0Ñ0Ø×!Ñ!×3Ñ3ð +ˆ€Cð
  ×.Ñ.×5Ñ5€FØ&×5Ñ5×<Ñ<×JÑJ€Mà&,×&OÑ&OÐXYÐ&OÓ&ZÑ#€LÐ#ÙÑ(¨°#Ô6¸ÑZÐHYÑZ€AÙÑ.¨wÓ7¸ÓG€GØˆgˆ:Ðr&   i   )r*   Úrows_per_chunkr*   r6   Úreturnc                ó�  — ddl }| j                  s>t        j                  j	                  «       r | j                  «       } |j                  «       }|j                  t        j                  «      dz
  }| j                  dd |j                  k(  s$J d| j                  dd ›d|j                  ›�«       ‚t        j                  t        || j                  ¬«      }| j                  �^ }}}|j                  |«      |z  }	| j                  |	|«      } |j                  |	d«      }t        j                  |	|d	z  || j                  ¬«      }
t        d|	|«      D ]Ÿ  }t        ||z   |	«      }| || }||| }|d
z  j                  t        j                   «      }|dz	  j                  t        j                   «      }|
|| }||   |dd…ddd	…f<   ||   |dd…ddd	…f<   t        j"                  |||¬«       ~~~~~Œ¡   |
j                  g |¢|‘|d	z  ‘­Ž j$                  g |¢||z  d	z  ‘­Ž }
~ ~~|
j'                  dd	«      j)                  «       S )zw
    Convert the mxfp4 weights again, dequantizing and makes them compatible with the forward
    pass of GPT_OSS.
    r   Né   éÿÿÿÿzblocks.shape[:-1]=z does not match scales.shape=)r*   r   r   r   é   é   )Úout)ÚmathÚis_cudar   r   Úis_availabler   Úint32Úshaper+   Ú
FP4_VALUESr   ÚprodÚreshapeÚemptyÚrangeÚminÚlongÚldexpÚviewÚ	transposeÚ
contiguous)ÚblocksÚscalesr*   r6   r>   ÚlutÚprefix_shapeÚGÚBÚ
rows_totalr=   Úr0Úr1ÚblkÚexpÚidx_loÚidx_hiÚsubs                     r   Úconvert_moe_packed_tensorsr\   d   s(  € ó ð �>Š>œeŸj™j×5Ñ5Ô7Ø—‘“ˆØ—‘“ˆà�Y‰Y”u—{‘{Ó# cÑ)€Fà�<‰<˜˜Ð §¡Ò,ÐdÐ1C°·±¸c¸rÐ1BÐ0DÐDbÐU[×UaÑUaÐTcÐ.dÓdÐ,ä
�,‰,”z¨°v·}±}Ô
E€Cà Ÿ,™,Ñ€\�1�aØ—‘˜<Ó(¨1Ñ,€Jà�^‰^˜J¨Ó*€FØ�^‰^˜J¨Ó*€Fä
�+‰+�j ! a¡%¨u¸V¿]¹]Ô
K€Cä�A�z >Ó2ò *ˆÜ��nÑ$ jÓ1ˆà�R˜ˆmˆØ�R˜ˆmˆð ˜‘*—‘¤§¡Ó,ˆØ˜‘(—‘œuŸz™zÓ*ˆà�"�RˆjˆØ˜6‘{ˆŠAˆqˆt�!ˆtˆG‰Ø˜6‘{ˆŠAˆqˆt�!ˆtˆG‰ä�‰�C˜ #Õ&Ø�F˜C ¡cð*ð" 4ˆ+ˆ#�+‰+Ð
.�|Ð
. QÐ
.¨¨A©Ò
.×
3Ñ
3Ð
M°\Ð
MÀ1ÀqÁ5È1Á9Ò
M€CØ�˜Ø�=‰=˜˜AÓ×)Ñ)Ó+Ð+r&   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚMxfp4GptOssExpertsc           	      ór  •— 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  | j
                  dz  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
                  | j                  dz  t        j                  ¬«      d¬«      | _        t        j                  t        j                  | j                  | j
                  t        j                  ¬«      d¬«      | _        d| _        t'        |dd	«      | _        d | _        d | _        t'        |dd	«      | _        y )
Nr   é    é   r)   F©Úrequires_gradg¬Zd;û?Úswiglu_limitg      @)ÚsuperÚ__init__Únum_local_expertsÚnum_expertsÚintermediate_sizeÚhidden_sizer   Ú	Parameterr   Úzerosr!   Úgate_up_proj_blocksÚgate_up_proj_scalesÚfloat32Úgate_up_proj_biasÚdown_proj_blocksÚdown_proj_scalesÚdown_proj_biasÚalphar   ÚlimitÚgate_up_proj_precision_configÚdown_proj_precision_config)ÚselfÚconfigÚ	__class__s     €r   rf   zMxfp4GptOssExperts.__init__›   s  ø€ Ü‰ÑÔà!×3Ñ3ˆÔØ!'×!9Ñ!9ˆÔØ!×-Ñ-ˆÔä#%§<¡<Ü�K‰K˜×(Ñ(¨!¨d×.DÑ.DÑ*DÀd×FVÑFVÐZ\ÑF\Ð^`Ôhm×hsÑhsÔtØô$
ˆÔ ô $&§<¡<Ü�K‰K˜×(Ñ(¨!¨d×.DÑ.DÑ*DÀd×FVÑFVÐZ\ÑF\Ôdi×doÑdoÔpØô$
ˆÔ ô "$§¡Ü�K‰K˜×(Ñ(¨!¨d×.DÑ.DÑ*DÌEÏMÉMÔZÐjoô"
ˆÔô !#§¡Ü�K‰K˜×)Ñ)¨4×+;Ñ+;¸T×=SÑ=SÐWYÑ=YÐ[]Ð^Ôfk×fqÑfqÔrØô!
ˆÔô !#§¡Ü�K‰K˜×(Ñ(¨$×*:Ñ*:¸D×<RÑ<RÐVXÑ<XÔ`e×`kÑ`kÔlØô!
ˆÔô !Ÿl™lÜ�K‰K˜×(Ñ(¨$×*:Ñ*:Ä%Ç-Á-ÔPÐ`eô
ˆÔð ˆŒ
Ü˜V ^°SÓ9ˆŒ
Ø-1ˆÔ*Ø*.ˆÔ'Ü˜V ^°SÓ9ˆ�
r&   Úhidden_statesr7   c                 óº  — t         j                  j                  t         j                  j                  t         j                  j                  }}}t         j                  j
                  }t        |j                  «      5   | |d|d«      | j                  | j                  fd«      }	 ||| j                  | j                  j                  t        j                  «      ||| j                  d |	¬«      }
 ||
| j                   | j"                  j                  t        j                  «      ||| j$                  |j&                  ¬«      }d d d «       |S # 1 sw Y   S xY w)NÚswiglu)rt   ru   r   )Úgather_indxÚprecision_configÚgammasÚfused_activation)Úscatter_indxr   r€   )r#   Ú
matmul_ogsÚFnSpecsÚFusedActivationr}   Ú	swiglu_fnr   r   rt   ru   Úgate_up_projrp   r   r   ro   rv   Ú	down_projrs   rw   Ú	gate_scal)rx   r{   Úrouting_dataÚ
gather_idxÚscatter_idxr„   r…   rƒ   r†   ÚactÚintermediate_cache1Úintermediate_cache3s               r   ÚforwardzMxfp4GptOssExperts.forward¿   s0  € ä×)Ñ)×1Ñ1Ü×)Ñ)×9Ñ9Ü×)Ñ)×4Ñ4ð #-�ˆô
 '×-Ñ-×7Ñ7ˆ	ä�}×+Ñ+Ó,ñ 	Ù!¡'¨(°IÐ?QÓ"RÐUY×U_ÑU_Ðae×akÑakÐTlÐnoÓpˆCá",ØØ×!Ñ!Ø×&Ñ&×)Ñ)¬%¯-©-Ó8ØØ&Ø!%×!CÑ!CØØ!$ô	#Ðñ #-Ø#Ø—‘Ø×#Ñ#×&Ñ&¤u§}¡}Ó5ØØ(Ø!%×!@Ñ!@Ø#×-Ñ-ô#Ð÷	ð. #Ð"÷/	ð. #Ð"ús   Á>CEÅE)Ú__name__Ú
__module__Ú__qualname__rf   r   r   r�   Ú__classcell__)rz   s   @r   r^   r^   š   s'   ø„ ô":ðH# U§\¡\ð #Ð]b×]iÑ]i÷ #r&   r^   c                 óB  — dd l }t        j                  j                  t        j                  j                  t        j                  j
                  t        j                  j                  f\  }}}}t        | j                  «      5  t        j                  j                  «       }t        |j                  j                  dd«      «      }d}	| j                  d   }
| j                  d   }||z  }||z  }|dz   |z  }|
|z  }d„ } || |«      \  }}t        j                   |d¬«      }t        j"                  |d¬«      \  }}t        j$                  |d|«      }|j'                  d«      }t        j(                  |||dz
  ¬«      || }|j+                  d«      j-                  t        j.                  «      }d	}t        j0                  ||k  ||«      }t        j2                  |d
¬«      j-                  t        j.                  «      }t        j2                  |«      j-                  t        j.                  «      }t        j0                  ||k  ||	«      }t        j0                  ||k  ||	«      }t        j0                  ||	k(  |	|«      }||   }t        j0                  ||   |	k(  |	|«      } ||j                  «       |j                  «       ¬«      } ||j                  «       |j                  «       ¬«      } ||||«      }|}d d d «        |«      fS # 1 sw Y   ŒxY w)Nr   Ú
LOCAL_RANKÚ0r:   r   c                 óº   — t        j                  |  dd¬«      d d …d |…f   }|j                  «       }t        j                  | |d¬«      }||j	                  «       fS )Nr   T)ÚdimÚstable©r™   )r   ÚargsortrI   Útake_along_dimÚint)ÚvalsÚkÚtk_indxÚtk_vals       r   Útopkz routing_torch_dist.<locals>.topkþ   sS   € Ü—m‘m T E¨q¸Ô>ºqÀ"À1À"¸uÑEˆGØ—l‘l“nˆGÜ×)Ñ)¨$°¸QÔ?ˆFØ˜7Ÿ;™;›=Ð(Ð(r&   r›   )ÚbinsÚmaxiè  T)rš   )Úsrc_indxÚdst_indx)Úosr#   ÚroutingÚ
GatherIndxÚRoutingDataÚScatterIndxÚcompute_expt_data_torchr   r   r   ÚdistributedÚget_world_sizerž   ÚenvironÚgetrB   ÚsoftmaxÚsortÚgatherrE   ÚhistcrK   r   rA   Úwhererœ   )ÚlogitsÚn_expts_actr¨   rª   r«   r¬   r­   Ú
world_sizeÚrankÚreplace_valueÚn_tokensÚn_expts_totÚn_local_expertsÚlocal_expert_startÚlocal_expert_endÚn_gates_padr£   Ú	expt_scalÚ	expt_indxÚsort_indicesÚhistÚvarÚ	topk_indxÚ	gate_indxr‰   r~   r‚   Ú	expt_dataÚhit_expertss                                r   Úrouting_torch_distrË   ã   sÀ  € ó ô 	×"Ñ"×-Ñ-Ü×"Ñ"×.Ñ.Ü×"Ñ"×.Ñ.Ü×"Ñ"×:Ñ:ð	EÑA€J�˜[Ð*Aô 
�6—=‘=Ó	!ñ 3"Ü×&Ñ&×5Ñ5Ó7ˆ
Ü�2—:‘:—>‘> ,°Ó4Ó5ˆØˆà—<‘< ‘?ˆØ—l‘l 1‘oˆà%¨Ñ3ˆØ! OÑ3ÐØ  1™H¨Ñ7Ðà Ñ,ˆò	)ñ  $ F¨KÓ8Ñˆ	�9Ü—M‘M )°Ô4ˆ	Ü"'§*¡*¨Y¸AÔ">Ñˆ	�<Ü—L‘L ¨A¨|Ó<ˆ	ð ×%Ñ% bÓ)ˆ	ä�{‰{˜9¨;¸KÈ!¹OÔLÐM_Ð`pÐqˆà—N‘N 2Ó&×)Ñ)¬%¯+©+Ó6ˆ	ð ˆÜ—K‘K 	Ð,>Ñ >ÀÀYÓOˆ	Ü—M‘M )°DÔ9×<Ñ<¼U¿[¹[ÓIˆ	Ü—M‘M )Ó,×/Ñ/´·±Ó<ˆ	Ü—K‘K 	Ð,<Ñ <¸iÈÓWˆ	Ü—K‘KÐ 2°iÑ ?ÀÈMÓZˆ	ä—K‘K 	¨]Ñ :¸MÈ9ÓUˆ	Ø˜iÑ(ˆ	ä—K‘K 	¨)Ñ 4¸Ñ EÀ}ÐV_Ó`ˆ	ñ !¨)¯-©-«/ÀIÇMÁMÃOÔTˆÙ"¨I¯M©M«OÀiÇmÁmÃoÔVˆá+¨D°/À;ÓOˆ	à!ˆ÷g3"ñh �y $¨¸ÀiÓPÐR]Ð_kÐkÐk÷i3"ð 3"ús   ÂI9LÌLc                 ó¸  — dd l m} |j                  «       r#|j                  «       rt	        | d«      rt
        }nt        j                  j                  }|j                  d   }|j                  d| j                  j                  «      }t        j                  j                  || j                  j                  | j                  j                   «      }t#        |j$                  «      5   ||| j                  j&                  «      \  }}}d d d «       | j)                  |«      }	|	j                  |d| j                  j                  «      }	|	|fS # 1 sw Y   ŒHxY w)Nr   Ú
_is_hookedr:   )Útorch.distributedr®   r@   Úis_initializedr   rË   r#   r©   rB   rE   ÚrouterÚ
hidden_dimr   Ú
functionalÚlinearÚweightÚbiasr   r   Útop_kÚexperts)
rx   r{   Údistr©   Ú
batch_sizeÚrouter_logitsrŠ   r‹   rŒ   Ú
routed_outs
             r   Úmlp_forwardrÜ   '  s  € Ý$à×ÑÔ˜t×2Ñ2Ô4¼ÀÀ|Ô9TÜ$‰ä$×,Ñ,×4Ñ4ˆà×$Ñ$ QÑ'€JØ!×)Ñ)¨"¨d¯k©k×.DÑ.DÓE€MÜ—M‘M×(Ñ(¨¸¿¹×8JÑ8JÈDÏKÉK×L\ÑL\Ó]€Mä	�=×'Ñ'Ó	(ñ ZÙ07¸ÀtÇ{Á{×GXÑGXÓ0YÑ-ˆ�j +÷Zð —‘˜m¨\¸:À{ÓS€JØ×#Ñ# J°°D·K±K×4JÑ4JÓK€JØ�}Ð$Ð$÷Zð Zús   Ã'"EÅEc                 óR   ‡— dj                  | «      Št        ˆfd„|D «       «      syy)Nú.c              3   ó‚   •K  — | ]6  }t        j                  |› d �‰«      xs t        j                  |› ‰«      –— Œ8 y­w)z\.N)ÚreÚmatch)Ú.0ÚkeyÚcurrent_key_name_strs     €r   ú	<genexpr>z(should_convert_module.<locals>.<genexpr>=  s>   øè ø€ ò ØdgŒ�‰�C�5˜�Ð2Ó3Ò_´r·x±xÀ3À%ÐJ^Ó7_Ó_ñùs   ƒ<?TF)ÚjoinÚany)Úcurrent_key_nameÚpatternsrä   s     @r   Úshould_convert_modulerê   ;  s0   ø€ ØŸ8™8Ð$4Ó5ÐÜó Øksôô ð Ør&   c                 ó  — ddl m} |j                  d«      }|j                  d«      }|j                  d«      }	|j                  d«      }
|j                  d«      }|j                  d«      }d	D �]  }||v sŒ	|� ||||||	|
||«      }|› d
�}|› d�}t        | |j	                  dd«      d   |«       t        | |«      sŒQt        | |«      sŒ^t        t        | |«      t        | |«      «      }|dk(  r<t        j                  j                  «       rt        j                  j                  «        t        | |t        j                  j                  |j                  |«      «      «       t        | |«       t        | |«       �Œ y )Nr   ©Úshard_and_distribute_moduleÚmodelÚempty_paramÚcasting_dtypeÚto_contiguousrº   Údevice_mesh)r‡   rˆ   Ú_blocksÚ_scalesrÞ   r   Úcpu)Úintegrations.tensor_parallelrí   r±   ÚsetattrÚrsplitr   r\   r   r   r   r@   Úempty_cacher   rk   r   Údelattr)ÚmoduleÚ
param_nameÚparam_valueÚtarget_deviceÚdq_param_nameÚkwargsrí   rî   rï   rð   rñ   rº   rò   ÚprojÚblocks_attrÚscales_attrÚdequantizeds                    r   Ú
dequantizer  D  s_  € ÝJà�J‰J�wÓ€EØ—*‘*˜]Ó+€KØ—J‘J˜Ó/€MØ—J‘J˜Ó/€MØ�:‰:�fÓ€DØ—*‘*˜]Ó+€Kà-ó -ˆØ�:ÒØÐ&Ù9ØØØØ!Ø!Ø!ØØó	�ð "˜F 'Ð*ˆKØ!˜F 'Ð*ˆKÜ�F˜J×-Ñ-¨c°1Ó5°aÑ8¸+ÔFÜ�v˜{Õ+´¸ÀÕ0LÜ8¼ÀÈÓ9UÔW^Ð_eÐgrÓWsÓt�Ø  EÒ)¬e¯j©j×.EÑ.EÔ.GÜ—J‘J×*Ñ*Ô,Ü˜ ¤e§h¡h×&8Ñ&8¸¿¹ÈÓ9VÓ&WÔXÜ˜ Ô,Ü˜ Ö,ñ--r&   c                 ó²  — |j                   j                  |j                   j                  |j                   j                  }}}ddlm}	 |j                  d«      }
|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }d	|v r&|j                  d
«      d   j                  d«      d   }d|v r&|j                  d
«      d   j                  d«      d   }|� |	|
|||||||«       n?t        | |j                  d
d«      d   t        j                  j                  |d¬«      «       › d�}|› d�}t        | |«      }t        | |«      }|j                  j                  dk7  �r¼|j                  j                  dk7  �r¡|j!                  d«      }|dk(  r!|j#                  || j$                  dz  d«      }n |j#                  |d| j$                  dz  «      }t        |d|«      dk(  rd}|j'                  |«      j)                  «       }|j'                  |«      j)                  «       }t+        |«      5  t-        |j/                  dd«      |j/                  dd«      |«      \  }}ddd«       |dk(  r5t        j0                  || j2                  | j$                  dz  g«      _        n1t        j0                  || j$                  | j2                  g«      _        t        | ||«       t        | |› d� | | |«       ¬«      ¬«      «       t7        | |«       t7        | |«       ~yyy# 1 sw Y   ŒÁxY w)zq
    This transforms the weights obtained using `convert_gpt_oss.py` to load them into `Mxfp4GptOssExperts`.
    r   rì   rî   rï   rð   rñ   rº   rò   rN   rÞ   r:   ró   r   rO   rô   Nr   Frb   Úmetar‡   r   rõ   r   éþÿÿÿÚ_precision_config)Úrhs_data)Úweight_scaleÚflex_ctx)rƒ   ÚPrecisionConfigÚFlexCtxÚ
InFlexDatarö   rí   r±   Úsplitr÷   rø   r   r   rk   r   r   r   ÚsizerE   ri   r   rM   r   r5   rL   ÚSizerj   rB   rú   )rû   rü   rý   rþ   r#   r   r  r  r  rí   rî   rï   rð   rñ   rº   rò   r  r  r  rN   rO   Úlocal_expertsÚtriton_weight_tensorr  s                           r   Úload_and_swizzle_mxfp4r  g  s2  € ð
 	×%Ñ%×5Ñ5Ø×%Ñ%×-Ñ-Ø×%Ñ%×0Ñ0ð )�W€Oõ
 Kà�J‰J�wÓ€EØ—*‘*˜]Ó+€KØ—J‘J˜Ó/€MØ—J‘J˜Ó/€MØ�:‰:�fÓ€DØ—*‘*˜]Ó+€KØ�:ÑØ×Ñ Ó$ RÑ(×.Ñ.¨yÓ9¸!Ñ<ˆØ�:ÑØ×Ñ Ó$ RÑ(×.Ñ.¨yÓ9¸!Ñ<ˆØÐÙ#Ø�; ¨Z¸ÈÐW[Ð]hõ	
ô 	�˜
×)Ñ)¨#¨qÓ1°!Ñ4´e·h±h×6HÑ6HÈÐdiÐ6HÓ6jÔkØ�F˜'Ð"€KØ�F˜'Ð"€KÜ�V˜[Ó)€FÜ�V˜[Ó)€Fà‡}�}×Ñ˜VÓ#¨¯©×(:Ñ(:¸fÓ(DØŸ™ A›ˆØ�>Ò!Ø—^‘^ M°6×3KÑ3KÈaÑ3OÐQSÓT‰Fà—^‘^ M°2°v×7OÑ7OÐSTÑ7TÓUˆFÜ�= &¨-Ó8¸EÒAØ"ˆ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]Ô@^Ô_ô	
ô 	�˜Ô$Ü�˜Ô$ÙðA )EÐ#÷	ð 	ús   É1MÍMc           	      ón  — |€g }| j                  «       D �]  \  }}|j                  |«       t        ||«      s|j                  d«       Œ6|j                  j
                  dk(  r9|j                  s-t        «       5  t        |«      | j                  |<   d}d d d «       |j                  j
                  dk(  r$|j                  sddl
m}  |t        |«      |_        t        t        |j!                  «       «      «      dkD  rt#        ||||||¬«      \  }	}|j                  d«       �Œ | |fS # 1 sw Y   Œ—xY w)Nr:   ÚGptOssExpertsTÚ	GptOssMLPr   )Ú
MethodType)Úhas_been_replacedry   )Únamed_childrenÚappendrê   Úpoprz   r‘   r  r   r^   Ú_modulesÚtypesr  rÜ   r�   ÚlenÚlistÚchildrenÚ_replace_with_mxfp4_linear)
rî   Úmodules_to_not_convertrè   Úquantization_configr  ry   Únamerû   r  Ú_s
             r   r#  r#  ª  s1  € ð ÐØÐà×,Ñ,Ó.ó !‰ˆˆfØ×Ñ Ô%Ü$Ð%5Ð7MÔNØ× Ñ  Ô$ØØ×Ñ×$Ñ$¨Ò7Ð@S×@^Ò@^Ü#Ó%ñ )Ü'9¸&Ó'A�—‘˜tÑ$Ø$(Ð!÷)ð ×Ñ×$Ñ$¨Ò3Ð<O×<ZÒ<ZÝ(á'¬°VÓ<ˆFŒNÜŒt�F—O‘OÓ%Ó&Ó'¨!Ò+Ü#=ØØ&Ø Ø#Ø"3Øô$Ñ ˆAÐ ð 	×Ñ˜RÖ ð-!ð. Ð#Ð#Ð#÷#)ð )ús   Á:D+Ä+D4	c                 ó  — |j                   r| S ddlm}  |d«      a|€dgn|}|j                  �|j                  |j                  «       t        t        |«      «      }t        | ||||¬«      \  } }|st        j                  d«       | S )Nr   )Ú
get_kernelz kernels-community/triton_kernelsÚlm_head)ry   z×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.)r  Úkernelsr)  r#   r$  Úextendr!  Úsetr#  ÚloggerÚwarning)rî   r$  rè   r%  ry   r)  r  s          r   Úreplace_with_mxfp4_linearr0  Ï  s¡   € ð ×%Ò%Øˆå&ñ (Ð(JÓKÐà,BÐ,J˜i™[ÐPfÐà×1Ñ1Ð=Ø×%Ñ%Ð&9×&PÑ&PÔQÜ!¤#Ð&<Ó"=Ó>ÐÜ9ØØØØØô Ñ€EÐñ Ü�‰ðô	
ð €Lr&   )NNNFN)NNNN) Úutilsr   r   r   r   r   Ú
accelerater   rà   Ú
contextlibr	   Ú
get_loggerr‘   r.  rC   r   r%   r5   r    r*   rž   r   r\   ÚModuler^   rË   rÜ   rê   r  r  r#  r0  © r&   r   ú<module>r7     sø   ð÷ IÑ Hñ ÔÛÝáÔÝ-ã 	Ý %ð 
ˆ×	Ñ	˜HÓ	%€ò€
ð( ñ
ó ð
ò,òð0 Ÿ™Ø&ò3,ð �;‰;ð	3,ð
 ð3,ð ‡\�\ó3,ôlD#˜Ÿ™ô D#òRAlòH%ò(ò -òF@ðJ  ØØØØó"$ðN  ØØØô"r&   