
    aqj                     ~    S r SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
rSrSrSrSrSrS r\S	:X  a  \" 5         gg)
a  Cossim debug : C++ qwen-tts vs Python Qwen3-TTS on the Base 1.7B path.

Inputs (relative to CWD = tests/) :
    ../examples/prompt.txt       target text fed to both pipelines

Default mode is greedy (do_sample=False on both sides). The forward
chain is dumped layer by layer and compared paired with the Python
upstream hooks installed by cossim_common.install_hooks. Both pipelines
run on CUDA by default, the wrapper shell sweeps backends and quants.

Dumps land in cpp/base/ (C++) and python/base/ (Python). The script
compares each matching .bin pair via cosine similarity over the f32
payload, plus exact match rate for tensors that originated as int
(codec codes, prompt ids).
    Nz(../models/qwen-talker-1.7b-base-{q}.ggufz&../models/qwen-tokenizer-12hz-{q}.ggufz'../checkpoints/Qwen3-TTS-12Hz-1.7B-Basezcpp/basezpython/basec                     [         R                  " 5       n U R                  SSS9  U R                  S[        SS9  U R                  SSS9  U R                  S	S
SS9  U R                  S[        R
                  R                  [        S5      S9  U R                  S[        R
                  R                  [        S5      S9  U R                  S[        SS9  U R                  SSSS9  U R                  5       n[        R                  " [        5        [        R                  " [        5        [        R                  " [        R
                  R                  UR                  5      =(       d    SSS9  [        UR                   SSS9 nUR#                  5       R%                  5       nS S S 5        ['        S[)        W5       SUS S  [)        U5      S:  a  S OS! 35        ['        S"UR*                   S#UR,                   S$UR.                   35        ['        S%5        [0        R2                  " UR,                  5        [4        R6                  R-                  UR,                  5        [        R8                  " UR:                  5        [        R<                  " 5         [0        R>                  RA                  5       (       a  S&OS'n['        S(U 35        [        RB                  RE                  [F        U[0        RH                  S)S*9RK                  5       n[        RL                  RE                  [F        SS+9nS,U S-3nU" US.SS/9nUS0   RO                  U5      n	U	RQ                  5       S1:X  a  U	RS                  S25      n	['        S3[U        U	RV                  5       35        [        RX                  " [        R
                  R                  [        S45      U	S2   5        [        RZ                  " U[        5        S5 UR\                  l/        UR`                  " S\U	/UR*                  /SUR.                  S6.[        Rb                  D6u  pU
S2   n['        S7[U        URV                  5       S835        [        RX                  " [        R
                  R                  [        S95      U5        [        RX                  " [        R
                  R                  [        S:5      US2   5        URd                  Rg                  S;U0/5      u  p[4        Rh                  " US2   [4        RH                  S<9n[j        Rl                  " UR                  XS=S>9  [        Rn                  " [        R
                  R                  [        S?5      U5        ['        S@URV                  S2    SAU SBURV                  S2   U-  SC SDUR                   35        [        R
                  Rq                  [        Rr                  5      (       d3  ['        SE[        Rr                   SF35        [t        Rv                  " S15        [x        R{                  UR|                  SG9n[~        R{                  UR|                  SG9nUU4 HM  n[        R
                  Rq                  U5      (       a  M)  ['        SHU 35        [t        Rv                  " S15        MO     ['        SIUR|                   SJU SKU 35        AUS&:X  a  [0        R>                  R                  5         [        Rr                  SLUSMUS[        UR,                  5      SUR*                  SN[        UR.                  5      SO[        SPUR                  SQ/n['        SRSSR                  U5       35        [        R                  " UUSST9nUR                  S2:w  a   [t        Rv                  " UR                  5        [j        R"                  " UR                  5      u  nnUR                  S1:  a	  US S 2S24   nUR                  [4        RH                  5      n['        SUURV                  S2    SAU SBURV                  S2   U-  SC SDUR                   35        [        R                  " S4[        [        SV5        [        R                  " [        R                  [        [        5        [        R                  " S9[        [        SW5        [        R                  " S?[        [        5      u  nn['        SX[        R                  " UU5      SY 35        [        UR                  UR                  5      n['        SZ[        R                  " UR                  5       S U UR                  5       S U 5      SY S[U 35        g ! , (       d  f       GN= f)]Nz--promptz../examples/prompt.txt)defaultz--seed*   )typer   z--langenglishz--quantF32z2GGUF quantization suffix (F32, BF16, Q8_0, Q4_K_M))r   helpz--out-ptzbase-python.wavz	--out-cppzbase-cpp.wavz--max-new-tokens@   z--trace
store_truez3print per sample u and idx for the first 32 samples)actionr	   .T)exist_okrzutf-8)encodingz[Input] Prompt: z chars: <   z... z[Input] Lang: z Seed: z MaxNewTokens: z[Input] Mode: greedycudacpuz[Python] Device: eager)
device_mapdtypeattn_implementation)fix_mistral_regexz<|im_start|>assistant
z!<|im_end|>
<|im_start|>assistant
pt)textreturn_tensorspadding	input_ids   r   z[Python] InputIds shape: zprompt-ids.binc                      g )N )aks     debug-base-cossim.py<lambda>main.<locals>.<lambda>X   s    $    )r   	languagesnon_streaming_modemax_new_tokensz[Python] Codes shape: z (T_frames, num_code_groups)zcodes-full.binzcodes-step0.binaudio_codes)r   FLOAT)subtypezoutput-audio.binz[Python] Audio: z	 samples z Hz z.2fzs -> z[Cossim] FATAL: z  not found, build qwen-tts first)qz [Cossim] FATAL: GGUF not found: z[Quant] z -> z + z--modelz--codecz	--max-newz--dumpz-oz--greedyz[GGML] Cmd:  )inputr   z[GGML] Audio: 	PromptIDs	CodesFullz[Cossim] Audio cos: z.6fz[Cossim] WAV stft_cos: z
 samples: r!   )QargparseArgumentParseradd_argumentintospathjoinDUMP_PTDUMP_CPP
parse_argscc
ensure_dirmakedirsdirnameout_ptopenpromptreadstripprintlenlangseedr*   torchmanual_seednprandom	set_tracetraceregister_qwen3_ttsr   is_available	AutoModelfrom_pretrainedCKPTfloat32evalAutoProcessortodim	unsqueezetupleshapesave_dump_i32install_hookstalker_validate_model_kwargsgenerateGEN_KWARGS_GREEDYspeech_tokenizerdecodeasarraysfwrite	save_dumpisfileBINsysexitMODEL_TformatquantMODEL_CDC_Tempty_cachestrout_cpp
subprocessrun
returncodendimastypecompare_exact_i32compare_stagesSTAGES_STANDARDpaircosminsizestft_cosravel)apargsfr   devicemodel	processorassistant_textinpr   talker_codes_list_codeswavsfsaudio_ptmodel_lm	model_cdcpcmdr   	audio_cppsraaabns                             r$   mainr   #   s=   		 	 	"BOOJ0HOIOOHS"O=OOH	O:OOIM  OOOJWGX0YOZOOKX~0VOWOO&S"O=OOI|N  P==?DMM'MM(KK,3dC	dkk3	1Qvvx~~ 
2	SYKxSb	{CIPRN5XZ:[
\]	N499+WTYYKtGZGZF[
\]	 "	dii IINN499LLzz..00VeF	fX
&'LL((mm#	 ) 
 df 
   000NI.tf4WXN
d
KCK ##F+I}}!''*		%eIOO&<%=
>?RWW\\'+;<ilKUG$
 +?ELL' >> +99+**	
 

 a E	"5#5"66R
STRWW\\'+;<uERWW\\'+<=uQxH%%,,}e.D-EFHDzz$q'4HHHT[[(8LLg'9:HE	X^^A./yDPQARSUAUVY@ZZ_`d`k`k_l
mn77>>"&&!! (HIJ,H""TZZ"0I	"ww~~a  4QC89HHQK # 
HTZZLXJc)
=>

  	XYS^TYYS,,-XT\\
C 
L#
()s$T2A||qGGDLL)MIr~~adO	  ,I	N9??1-.it4	PQ@RSU@UVY?ZZ_`d`l`l_m
no)8WkJb(((G<)8WkJWW'7;FB	 B 4
56
 	BGGRWWA	#BKK
2A
2A$OPS#TT^_`^a
bcO 
2	1s   e((
e7__main__)__doc__r3   r7   rt   rk   numpyrL   	soundfilerf   rJ   cossim_commonr=   rm   rp   rT   r;   r:   r   __name__r!   r'   r$   <module>r      sY      	  
    867ydx zF r'   