
    pqjA                     "   S r SSKrSSKrSSKrSSKrS\R
                  S'   SSKrSSKrS\R                  R                  R                  l        S\R                  R                  l        S\R                  R                  R                  l        S\R                  R                  R                  l        \R                   " S5        Sr\R$                  R'                  S\5         " S S	5      r " S
 S5      r\R,                  " S5      r\R$                  R1                  \S5      /\l        \\R4                  S'   \R,                  " S5      r\R$                  R1                  \SS5      /\l        \\R4                  S'   SSKJr  SSKJr  \\l         \\l!        \\l        \\l        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.  \.R^                  " 5         SS0r0S r1Sr2/ SQr3\Rh                  " S5      r5\Rh                  " S5      r6\Rh                  " S5      r7\Rh                  " S5      r8\Rr                  " S5      r:S r;S  r<S! r=S4S" jr>S/r?S#/r@S/rAS$ rBS% rCS5S& jrDS' rES( rFS) rGS* rHS+ rIS6S, jrJS7S- jrKS. rLS/ rMS0 rNS1 rO\P" SSS2S39rQg)8a  Shared helpers for the qwentts.cpp cossim debug scripts.

Provides Philox uniform stream, dump load and save, install_hooks for the
talker submodel, the standard stage list and the metric helpers used by
debug-base / debug-tts / debug-customvoice / debug-clone cossim scripts.

Importing this module patches sys.path so qwen_tts upstream loads without
the V1 25Hz tokenizer (sox dependency stubbed out), and forces TF32 off on
every torch CUDA matmul path so Python results stay bit comparable across
runs and across machines.
    N0NVIDIA_TF32_OVERRIDEFhighestz../../Qwen3-TTSc                       \ rS rSrSrg)_StubV1Config!    N__name__
__module____qualname____firstlineno____static_attributes__r	       cossim_common.pyr   r   !       r   r   c                       \ rS rSrSrg)_StubV1Model$   r	   Nr
   r	   r   r   r   r   $   r   r   r   qwen_ttszqwen_tts.corecore)Qwen3TTSTokenizerV2Config)Qwen3TTSTokenizerV2Model) Qwen3TTSForConditionalGeneration)Qwen3TTSConfig)Qwen3TTSProcessor)
AutoConfig	AutoModelAutoProcessor)loggingdonec                      [         S   (       a  g [        R                  " S[        5        [        R                  " [        [
        5        [        R                  " [        [        5        S[         S'   g )Nr!   	qwen3_ttsT)_REGISTEREDr   registerr   r   r   r   r   r	   r   r   register_qwen3_ttsr&   H   sI    6^4~'GH>+<=Kr   z../build/qwen-tts))Embedtalker-input-embed.bin)TrailingTexttrailing-text-hidden.bin)TTSPadEmbedtts-pad-embed.bin)L0ztalker-hidden-prefill-l0.bin)L7ztalker-hidden-prefill-l7.bin)L14ztalker-hidden-prefill-l14.bin)L21ztalker-hidden-prefill-l21.bin)L27ztalker-hidden-prefill-l27.bin)Finaltalker-hidden-prefill-final.bin)Logitstalker-logits-prefill.bin)NextEmbStep0next-emb-step0.bin)TalkerHiddenStep1talker-hidden-step1.binl   S$ l   W= l   yn< l   .v g      =c                    [         R                  " U 5      [         R                  " U5      -  n[         R                  " U[         R                  " S5      -  5      n[         R                  " U[         R                  " S5      -	  5      nXC4$ )N        )npuint64uint32)abplohis        r   
_mulhilo32rE   l   sZ    	1		!	$A	1ryy,,	-B	1		"%	&B6Mr   c                 "   [        [        U S   5      u  p4[        [        U S   5      u  pV[        R                  " XPS   -  U-  5      [        R                  " U5      [        R                  " X0S   -  U-  5      [        R                  " U5      4$ )Nr            )rE   	PHILOX_M0	PHILOX_M1r=   r?   )ctrk0k1hi0lo0hi1lo1s          r   _philox_roundrS   r   st    )SV,HC)SV,HCIIcFlR'(IIcNIIcFlR'(IIcN r   c                    [         R                  " S5      n[        S5       H  n[        XU5      n [         R                  " [         R                  " U5      [         R                  " [
        5      -   U-  5      n[         R                  " [         R                  " U5      [         R                  " [        5      -   U-  5      nM     [        XU5      n U $ )Nr;   	   )r=   r>   rangerS   r?   	PHILOX_W0	PHILOX_W1)rL   rM   rN   mask_s        r   _philox4x32_10r[   z   s    99Z D1XCR(ii29)==EFii29)==EF  
$CJr   c           	         [         R                  " [         R                  " U 5      [         R                  " S5      -  5      n[         R                  " [         R                  " U 5      [         R                  " S5      -	  5      n[         R                  " U5      [         R                  " S5      [         R                  " [         R                  " U5      [         R                  " S5      -  5      [         R                  " [         R                  " U5      [         R                  " S5      -	  5      4n[        XSU5      n[         R                  " US   5      [         R                  " S5      -   [
        -  $ )Nr;   r<   r   g      ?)r=   r?   r>   r[   float32TWO_POW32_INV)seedsubseqctr_losloshirL   rs          r   philox_uniformre      s    
))BIIdObii
&;;
<C
))BIIdOryy}4
5C99V99Q<99RYYv&:)>>?99RYYv&"))B-78:C 	s%AJJqtrzz#.-??r   *   c                 :    S[         S'   [        U 5      [        S'   g Nr   )_subseq_counterint_seed)r_   s    r   reset_philoxrl      s    OATE!Hr   c                 (    [        U 5      [        S'   g rh   )bool_trace_samples)flags    r   	set_tracerq      s    T
N1r   c                    US:X  d   S5       eU nUR                  5       S:X  a  UR                  S5      nUR                  u  pg[        R                  " US4[        R
                  UR                  S9n[        U5       GH'  n	[        [        S   [        S   S5      n
[        S   n[        S==   S-  ss'   XY   R                  [        R                  5      R                  5       R                  5       n[        UR!                  5       5      n[        U
5      U-  nSnUS-
  n[        U5       H  nU[        UU   5      -  nX:  d  M  Un  O   UXS4'   ["        S   (       d  M  US:  d  M  [%        SU S[        U
5      S	 S
U S[        UR'                  5       5      S 35        GM*     U R                  5       S:X  a  UR)                  S5      $ U$ )zDrop in replacement for torch.multinomial(num_samples=1) that pulls
the uniform draw from our Philox stream and walks the F32 cumulative
sum the same way src/sampling.h does.rH   z.patched_multinomial only handles num_samples=1r   )dtypedevice        r<   z[Sample-PY] subseq=z u=z.10fz idx=z
 top_prob=.6f)dim	unsqueezeshapetorchzeroslongrt   rV   re   rk   ri   tor]   cpunumpyfloatsumro   printmaxsqueeze)inputnum_samplesreplacement	generatoroutprobsbszvocabout_idsrA   useqrowstargetaccidxis                     r   patched_multinomialr      s    !MMMEyy{a"JCkk3(%**U\\JG3ZU1Xq'91=a ahkk%--(,,.446CGGI qAuA5Q= C}	 
 1!r'uCaeC5
SXY\Y`Y`YbScdgRhij% & yy{aq!!Nr   c                 .    [         R                  " U SS9  g )NT)exist_ok)osmakedirs)paths    r   
ensure_dirr      s    KKt$r   c           	         [        U[        R                  5      (       aI  UR                  5       R	                  [        R
                  5      R                  5       R                  5       n[        R                  " UR                  [        R
                  5      5      nUR                  n[        U S5       nUR                  [        R                  " S[!        U5      5      5        U H)  nUR                  [        R                  " SU5      5        M+     UR                  UR#                  5       5        S S S 5        g ! , (       d  f       g = fNwbr   )
isinstancerz   Tensordetachr}   r]   r~   r   r=   ascontiguousarrayastypery   openwritestructpacklentobytes)r   datary   fr   s        r   	save_dumpr      s    $%%{{}.224::<  RZZ!89DJJE	dD	Q	CU,-AGGFKKQ'( 		 
		s   4A>D;;
E	c           	         [        U[        R                  5      (       aI  UR                  5       R	                  [        R
                  5      R                  5       R                  5       n[        R                  " UR                  [        R
                  5      5      nUR                  nUR                  [        R                  5      n[        U S5       nUR                  [        R                   " S[#        U5      5      5        U H)  nUR                  [        R                   " SU5      5        M+     UR                  UR%                  5       5        S S S 5        g ! , (       d  f       g = fr   )r   rz   r   r   r}   int64r~   r   r=   r   r   ry   r]   r   r   r   r   r   r   )r   r   ry   fdatar   r   s         r   save_dump_i32r      s    $%%{{},00288:  RXX!67DJJEKK

#E	dD	Q	CU,-AGGFKKQ'( 	 	 
		s   A>E
E(c           
         [         R                  " U [         R                  S9n[        [         R                  " USS [         R
                  S9S   5      n[        S [         R                  " USSSU-  -    [         R
                  S9 5       5      n[         R                  " USSU-  -   S  [         R                  S9nUR                  U5      U4$ )N)rs   r      c              3   8   #    U  H  n[        U5      v   M     g 7fN)rj   ).0xs     r   	<genexpr>load_dump.<locals>.<genexpr>   s     U"TQ#a&&"Ts   )	r=   fromfileuint8rj   
frombufferint32tupler]   reshape)r   rawndimry   bodys        r   	load_dumpr      s    KKBHH-Cc!Ahbhh7:;DU"--Aa!d(l0C288"TUUEMM#a!d(lm,BJJ?D<<%%r   c                    U R                  [        R                  5      R                  5       n UR                  [        R                  5      R                  5       n[	        [        U 5      [        U5      5      nU S U US U p[        [        R                  R                  U 5      [        R                  R                  U5      -  5      nUS:  a"  [        [        R                  " X5      U-  5      $ S$ Ng|=ru   )
r   r=   float64ravelminr   r   linalgnormdot)r@   rA   nds       r   cosr      s    	""$A	""$ACFCFARa5!BQ%qbiinnQ")).."334A&'%i5!"8S8r   c           	      2   U R                  [        R                  5      R                  5       n UR                  [        R                  5      R                  5       n[	        [        U 5      [        U5      5      nU S U US U p[        R                  " U5      nXB-
  U-  S-   nUS::  a  g[        R                  " XbS-  S-   45      n[        R                  " XbS-  S-   45      n[        U5       H  n	X-  n
[        R                  " [        R                  R                  X
X-    U-  5      5      Xy'   [        R                  " [        R                  R                  XX-    U-  5      5      X'   M     [        UR                  5       UR                  5       5      $ )NrH   r   ru   rG   )r   r=   r   r   r   r   hanningr{   rV   absfftrfftr   )r@   rA   winhopr   windowframessasbr   r   s              r   stft_cosr      s9   	""$A	""$ACFCFARa5!BQ%qZZ_Fg#!F{	6!8a<(	)B	6!8a<(	)B6]Grvv{{1qw<&#89:rvv{{1qw<&#89:  rxxz288:&&r   c                   ^^^^^^^^^ SS0mSS0mSS0mU R                   R                  nU R                   nU Vs0 s H  oUS_M     snmUU4S jnU H'  nUR                  U   R                  U" U5      5        M)     SS0mUU4S jnUR                  R                  U5        UU4S jn	UR                  U	SS	9  SS0mUU4S
 jn
UR                  U
5        SS0mUR                  mUUUUU4S jnXl        gs  snf )a  Capture every intermediate tensor we can pin against the C++ side.
Layout : bisection layers, final norm, prefill logits, the input embed
fed to the talker and the trailing-text overlay tensors that drive the
next-token embedding sums during generation. Counters track how many
times the talker submodel has run so step 1 (first single-token forward
after prefill) gets its own dump.r!   Fr   r   c                    >^  UU U4S jnU$ )Nc                    > TT   (       a  g [        U[        5      (       a  US   OUnUR                  5       S:X  a7  [        [        R
                  R                  TST S35      US   5        STT'   g g )Nr   rI   ztalker-hidden-prefill-lz.binT)r   r   rw   r   r   r   join)moduleinputsoutputhdump_dir	layer_idxseen_layerss       r   hook4install_hooks.<locals>.make_layer_hook.<locals>.hook	  sl    9%'66q	FAuuw!|"'',,x3J9+UY1Z[]^_`]ab)-I& r   r	   )r   r   r   r   s   ` r   make_layer_hook&install_hooks.<locals>.make_layer_hook  s    	. r   c                    > TS   (       a  g UR                  5       S:X  aG  UR                  S   S:  a3  [        [        R                  R                  TS5      US   5        STS'   g g g )Nr!   rI   rH   r3   r   T)rw   ry   r   r   r   r   )r   r   r   r   	seen_norms      r   	norm_hook install_hooks.<locals>.norm_hook  s^    V::<1a1!4bggll8-NOQWXYQZ[ $If "5r   c                 
  > UR                  SS 5      nUc  g UR                  5       S:w  a  g UR                  S   S:  a  g TS   S:X  a-  [        [        R
                  R                  TS5      US   5        TS==   S-  ss'   g )Ninputs_embedsrI   rH   r   r   r7   r   r   )getrw   ry   r   r   r   r   )r   argskwargsier   talker_steps       r   talker_model_pre_hook,install_hooks.<locals>.talker_model_pre_hook!  sx    ZZ.:668q=88A;?sq bggll8-ABBtHMCAr   T)with_kwargsc                    > [        US5      (       a  UR                  OUS   nUR                  5       S:w  d  UR                  S   S:w  a  g TS   S:X  a-  [	        [
        R                  R                  TS5      US   5        TS==   S-  ss'   g )Nlast_hidden_stater   rI   rH   r   r9   r   )hasattrr   rw   ry   r   r   r   r   )r   r   r   lastr   talker_post_steps       r   talker_model_post_hook-install_hooks.<locals>.talker_model_post_hook3  s~    +26;N+O+Ov''U[\]U^88:?djjmq0C A%bggll8-FGeU"r   c                    > UR                  SS 5      nUbc  UR                  5       S:X  aO  UR                  S   S:  a<  TS   (       d2  [        [        R
                  R                  TS5      US   5        STS'   T" U 0 UD6nUb}  [        USS 5      bo  T	S   (       de  UR                  nUR                  5       S:X  aE  UR                  S   S:  a2  [        [        R
                  R                  TS	5      US
   5        ST	S'   Ub  T
S   (       d  [        USS 5      b  [        USS 5      b  UR                  nUR                  nUR                  5       S:X  as  UR                  5       S:X  a_  [        [        R
                  R                  TS5      US   5        [        [        R
                  R                  TS5      US   5        ST
S'   U$ )Nr   rI   rH   r!   r(   r   Tlogitsr5   r   trailing_text_hiddentts_pad_embedr*   r,   r   )r   rw   ry   r   r   r   r   getattrr  r  r  )r   r   r   r   r  tthtper   orig_talker_forward
seen_codesseen_overlayseen_prefills          r   hooked_talker_forward,install_hooks.<locals>.hooked_talker_forwardC  s   

?D9%-*;*;*=*B!''*Q.|F7Kbggll8-EFVWHXY#'L !4262OXt < H"6*ZZFzz|q V\\!_q%8"'',,x1LMvV[}]%)
6"OL$8C!7>JC$7C**C##CwwyA~#'')q."'',,x1KLcRSfU"'',,x1DEs4yQ'+V$
r   N)talkermodellayersregister_forward_hookr   register_forward_pre_hookforward)r  r   bisect_layerstalker_model	talker_lmr   r   r   r   r   r   r  r	  r
  r   r   r  r  r   r   s    `          @@@@@@@@r   install_hooksr     s    E?LE?J
 8K<<%%L<<I)67#:7K #	I&<<_Y=WX # I% ++I6
 **+@d*S Qx# &&'=> E?L#++ . .g 8s   C9c                     [        [        R                  R                  X5      5      u  p4[        [        R                  R                  X 5      5      u  pTX54$ r   )r   r   r   r   )namedump_cppdump_ptr@   rZ   rA   s         r   pairr  \  s;    RWW\\(12DARWW\\'12DA4Kr   c                    [        U R                  UR                  5      nU R                  [        R                  5      R                  5       S U nUR                  [        R                  5      R                  5       S U n[        R                  " X4-
  5      n[        [        R                  R                  U5      5      n[        [        R                  R                  U5      5      nUS:  a*  US:  a$  [        [        R                  " X45      Xg-  -  5      OSnU[        UR                  5       5      [        UR                  5       5      4$ r   )r   sizer   r=   r   r   r   r   r   r   r   r   mean)	r@   rA   r   afbfr   nrm_anrm_bcs	            r   metricr&  a  s    AHHRZZ &&(!,BHHRZZ &&(!,BFF27OA"))..$%E"))..$%E7<u}QVE"&&.EM23\_AeAEEGneAFFHo--r   c                     U  H<  u  p4 [        XAU5      u  pV[        XV5      u  pxn	[        SU SUS SUS SU	S 35        M>     g! [         a    [        SU S35         M]  f = f)	zIterate the stages list and print one line per pair. Skips silently
when a dump file is missing (eg. a mode that does not produce a given
intermediate).	[Cossim] z skipped (missing dump)z cos: rv   z max: z.4ez mean: N)r  FileNotFoundErrorr   r&  )
stagesr  r  labelr  r@   rA   r%  mxmns
             r   compare_stagesr.  k  s     	0DA 1L	r	%qgVBs872c(KL  ! 	IeW$;<=	s   AA! A!c           	         [        XU5      u  pEUR                  [        R                  5      R	                  5       nUR                  [        R                  5      R	                  5       n[        UR                  UR                  5      nS[        [        R                  " USU USU :H  5      5      -  n	[        SU SU	S SU S35        U	$ )zCompare two int dumps stored as f32 (the encoding path used by both
save_dump_i32 in Python and debug_dump_i32_as_f32 in C++). Prints an
exact match percentage. Returns the percentage as a float.g      Y@Nr(  z exact: z.2fz% (z values))
r  r   r=   r   r   r   r  r   r   r   )
r  r  r  r+  r@   rA   aibir   pcts
             r   compare_exact_i32r3  x  s     (DA88BHH##%B88BHH##%Brww A5BQ2bq6!1233C	IeWHSIS8
<=Jr   g      ?)	do_samplesubtalker_dosamplerepetition_penalty)r   )FNN)i   i   ))r               )R__doc__r   r   systypesenvironr   r=   rz   backendscudamatmul
allow_tf32cudnn&allow_fp16_reduced_precision_reduction&allow_bf16_reduced_precision_reductionset_float32_matmul_precisionUPSTREAM_ROOTr   insertr   r   
ModuleType	_qwen_pkgr   __path__modules	_core_pkgAqwen_tts.core.tokenizer_12hz.configuration_qwen3_tts_tokenizer_v2r   <qwen_tts.core.tokenizer_12hz.modeling_qwen3_tts_tokenizer_v2r   Qwen3TTSTokenizerV1ConfigQwen3TTSTokenizerV1Model'qwen_tts.core.models.modeling_qwen3_ttsr   ,qwen_tts.core.models.configuration_qwen3_ttsr   )qwen_tts.core.models.processing_qwen3_ttsr   transformersr   r   r   transformers.utilsr    
hf_loggingset_verbosity_errorr$   r&   BINSTAGES_STANDARDr?   rJ   rK   rW   rX   r]   r^   rE   rS   r[   re   ri   rk   ro   rl   rq   r   r   r   r   r   r   r   r  r  r&  r.  r3  dictGEN_KWARGS_GREEDYr	   r   r   <module>r]     sq  
 
  
 %(

! "  DI     %DI   DI     ADI     A  " "9 - " = !	 		 	 %%j1	ggll=*=>	 #J %%o6	ggll=*fEF	   )O  g d&3	 #&2	 "&?	 #&>	 " Y G J = = 4      uo " 		*%			*%			*%			*%	

12@ #$'##B%	 
!&9'"e.N
.M
" !! r   