
    oi'                     $   S SK r S SKJr  S SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJrJrJr  S SKJr  SS	KJrJrJrJrJrJr   \R0                  S
\R2                  S\R4                  S0r\R8                  " SS9S 5       r\R8                  " SS9S\4S j5       r\S8S j5       r Sr!S/r"\R0                  /r#Sr$\RJ                  RM                  SS/S S9\RJ                  RM                  SS/S S9\RJ                  RM                  SS/S S9\RJ                  RM                  S\"S S9\RJ                  RM                  S \#\S9S!\S\'S \RP                  S\)S\)S\)4S" j5       5       5       5       5       r*\+S#:X  Ga  \ RX                  " 5       r-\-R]                  S$\'SS%9  \-R]                  S&\S'S(/S'S)9  \-R]                  S*S+S,9  \-R]                  S-S+S,9  \-R]                  S.S+S,9  \-R_                  5       r0\1" \\0RP                  5      \0l(        \2" \05      r3S/r\Rh                  " \5      r\\0RP                     u  r5r6\7" S0\ S1\0Rp                   S2\0RP                   S3\0Rr                   S4\0Rt                   S5\0Rv                   S6\5 S7\6 35        \*" \40 \3D6  gg)9    N)contextmanager)
AutoConfig)Qwen3MoeConfig)Qwen3MoeSparseMoeBlock)KernelConfigBackward_dWKernelConfigBackward_dXKernelConfigForward)Qwen3MoeGroupedGEMMBlock   )Qwen3MoeFusedGroupedGEMMBlock	check_fwdcheck_gradscheck_grouped_gemm_resultsrun_backwardrun_forward){Gz?r   )MbP?r   )h㈵>r   module)scopec                      g)NQwen/Qwen3-30B-A3B r       b/home/james-whalen/.local/lib/python3.13/site-packages/unsloth/kernels/moe/tests/test_qwen3_moe.pymodel_idr   G   s    r   r   c                 .    [         R                  " U 5      $ N)r   from_pretrained)r   s    r   configr    L   s    %%h//r   c              #   t   #    [        X#-  5        [        U 5        S v   [        U5        [        X#-  5        g 7fr   )print)preludeepiloguechar	num_charss       r   annotated_contextr'   Q   s,     	$
	'N		(O	$
s   68*   i   2   	permute_yTc                     U (       a  S$ S$ )Nr*   no_permute_yr   xs    r   <lambda>r/   c       )M~)Mr   )ids	permute_xc                     U (       a  S$ S$ )Nr2   no_permute_xr   r-   s    r   r/   r/   f   r0   r   autotunec                     U (       a  S$ S$ )Nr5   manualr   r-   s    r   r/   r/   i   s    a
(EX(Er   seqlenc                     SU  3$ )Nzseqlen=r   r-   s    r   r/   r/   k   s
    wqc]r   dtyper    c                    [         R                  " [        5        SnU R                  nSn[        U   u  p[        U 5      R                  Xb5      n[        R                  " U5      R                  Xb5      nUR                  U5        U(       d  [        5       n[        5       n[        5       nO\SSKJnJn  SSKJn  UR$                  S [&         Ul        UR$                  S [&         Ul        UR$                  S [&         Ul        S nS nS n[(        R                  " UUUUUUUS9R                  Xb5      nUR                  U5        [         R*                  " XXrUSS9n[-        UUS	S
9n[-        UUSS
9n[-        UUSS
9n[/        SSSSS9   [/        S5         [1        UUXS	S9  S S S 5        [/        S5         [3        UR4                  UR4                  UU	U
S	S9  S S S 5        [/        S5         [1        UUXSS9  S S S 5        S S S 5        [         R6                  " UR8                  5      n[;        UUUR8                  UR<                  S9n[;        UUUR8                  UR<                  S9n[;        UUUR8                  UR<                  S9n[/        SSSSS9   [/        S5         [?        UUXS	S9  S S S 5        [/        S5         [?        UUU	U
S	S9  S S S 5        [/        S5         [?        UUXSS9  S S S 5        S S S 5        g ! , (       d  f       GNd= f! , (       d  f       GN@= f! , (       d  f       GN2= f! , (       d  f       GN<= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Ncudar   r   )!_autotuned_grouped_gemm_dW_kernel!_autotuned_grouped_gemm_dX_kernel)&_autotuned_grouped_gemm_forward_kernel)r2   r*   r5   kernel_config_fwdkernel_config_bwd_dWkernel_config_bwd_dXT)r:   devicerequires_gradF)is_grouped_gemmzTesting forward passzPassed forward tests!=d   )r$   r%   r&   z8Checking HF vs torch grouped gemm MoE forward outputs...)verbosezLChecking torch grouped gemm MoE vs fused grouped gemm MoE forward outputs...)r*   atolrtolrH   z8Checking HF vs fused grouped gemm MoE forward outputs...)outputXzTesting backward passzPassed backward tests!z.Checking HF vs torch grouped gemm MoE grads...zBChecking torch grouped gemm MoE vs fused grouped gemm MoE grads...z.Checking HF vs fused grouped gemm MoE grads...) torchmanual_seedSEEDhidden_size
TOLERANCESr   tor
   from_hfcheck_weightsr	   r   r   grouped_gemm.kernels.backwardr=   r>   grouped_gemm.kernels.forwardr?   configsNUM_AUTOTUNE_CONFIGSr   randnr   r'   r   r   grouped_gemm_result
randn_likerK   r   rL   r   )r    r8   r:   r2   r*   r5   rC   rP   bsrI   rJ   	moe_blockgrouped_gemm_blockr@   rA   rB   r=   r>   r?   fused_gemm_blockrL   
ref_resultgrouped_resultfused_resultgrad_outputref_backward_resultgrouped_backward_resultfused_backward_results                               r   test_qwen3_moerg   b   s   & 
 F$$K	
BE"JD&v.11&@I 299)DGGV$$Y//16868	
 	X 3::;P<PQ 	/6 .556K7KL 	*1 .556K7KL 	*1 !## 5<<-33 	b  ""9-
KQU	A
 YUCJ !3Q$ON/dKL	*	
 F
 j.$N

 Z
 '2200%	
 F
 j,dK
5
@ "":#4#45K&;):):
 +&&	 )+0C0C 
+	
 OP#%<dTY Q P
 '%
 OP#%:DRV Q/
 
M
 


 

 
5
 
j QP
 
 QP/
 
s   L2K<L22#LL2(L 5L2M7M*M7=MM7M&+M7<
L	L2
L	L2 
L/	*L22
M
M	M7
M#	M7&
M4	0M77
N__main__z--seqlen)typedefaultz--dtypebfloat16float16)ri   choicesrj   z--permute_x
store_true)actionz--permute_yz
--autotuner   zTesting z with seqlen=z, dtype=z, permute_x=z, permute_y=z, autotune=z, atol=z, rtol=)zPassed!-P   )<argparse
contextlibr   pytestrM   transformersr   transformers.models.qwen3_moer   0transformers.models.qwen3_moe.modeling_qwen3_moer   grouped_gemm.kernels.tuningr   r   r	   'grouped_gemm.reference.layers.qwen3_moer
   	moe_utilsr   r   r   r   r   r   rk   rl   floatrQ   fixturer   strr    r'   rO   SEQ_LENSDTYPESrX   markparametrizeintr:   boolrg   __name__ArgumentParserparseradd_argument
parse_argsargsgetattrvars	args_dictr   rI   rJ   r"   r8   r2   r*   r5   r   r   r   <module>r      sj    %   # 8 S 
 M !H 
NNL	MM<	KK
 !  "  !0S 0 "0   
6
..	   $M   $M   E   83JK&4MMM ;;M 	M
 M M 5 LM` z$$&F

3$?
#*i)@J   =
=
|<D

+DJT
I#H''1FDJJ'JD$	
8*M$++htzzl,W[WeWeVffrsw  tB  tB  sC  CN  OS  O\  O\  N]  ]d  ei  dj  jq  rv  qw  	x 6'Y') r   