
    p/jA                        S r SSKrSSKrSSKrSSKrSSKrSr\R                  R                  SS5      r
\R                  R                  SS5      rSrS	rS
r\R                  R!                  \S5      r\R                  R!                  \S5      rS\4S jrS rS rS rS rS rS r/ SQrS rS rS rS rS r\ S:X  a  \" 5         gg)a  Cossim debug: C++ qwenasr-feat vs the reference, stage by stage.

Stage 1 (mel): generates a deterministic 16 kHz signal, runs the mel frontend
on both sides and compares the [num_mel_bins, n_frames] matrices via cosine
similarity over the f32 payload. The reference is the transformers
WhisperFeatureExtractor with the exact Qwen3-ASR preprocessor config. Later
stages (conv stem, encoder) import the full qwen_asr reference from the sibling
clone at ../../Qwen3-ASR.

Run from tests/ with a python that has numpy + transformers.
    N>  QA_FEATz../build/qwenasr-feat
QA_THINKERz../build/qwenasr-thinkerz ../models/qwenasr-0.6B-BF16.ggufz/../checkpoints/Qwen3-ASR-0.6B/model.safetensorscppzqwenasr-cossim-16k.wavzqwenasr-cossim-long-16k.wavg      @c                    [         R                  R                  S5      n[         R                  " [	        U [
        -  5      5      [
        -  nS[         R                  " S[         R                  -  S-  U-  5      -  S[         R                  " S[         R                  -  SSU-  -   -  U-  5      -  -   SUR                  UR                  S	   5      -  -   nU[         R                  " [         R                  " U5      5      -  S
-  R                  [         R                  5      nUS-  R                  [         R                  5      n[        R                   " ["        SS9  [$        R&                  " US5       nUR)                  S5        UR+                  S5        UR-                  [
        5        UR/                  UR1                  5       5        S S S 5        g ! , (       d  f       g = f)N*         ?      g333333?i,     g?r   g?g    @T)exist_okwb   )nprandomdefault_rngarangeintSRsinpistandard_normalshapemaxabsastypefloat32int16osmakedirsDUMPwaveopensetnchannelssetsampwidthsetframeratewriteframestobytes)secondspathrngtsigpcmws          8/mnt/workspace/git/qwenasr.cpp/tests/debug-asr-cossim.pymake_signalr1      sO   
))


#C
))C"%
&
+ABEE	C!+,,266!bee)sS1W}59::;3&&qwwqz223C s$$s*
2
22::
>C=
 
 
*CKKt$	4	!	q	q	r	ckkm$	 
		s   5AG
G#c                 (   [         R                  " U S5       nUR                  UR                  5       5      nS S S 5        [        R
                  " W[        R                  S9R                  [        R                  5      S-  $ ! , (       d  f       NQ= f)Nrbdtypeg      @)	r"   r#   
readframes
getnframesr   
frombufferr   r   r   )r*   r/   raws      r0   read_wavr:   /   s]    	4	!ll1<<>* 
==BHH-44RZZ@7JJ 
	s    B
Bc                    U R                  S5      UR                  S5      p[        [        R                  " X5      [        R                  R                  U 5      [        R                  R                  U5      -  -  5      $ )N)reshapefloatr   dotlinalgnorm)abs     r0   cossimrD   5   sP    99R=!))B-q!2RYY^^A5F!FGHH    c            	      F   SSK Jn   [        R                  " [        S[
        S[        S/SS9  [        [
        5      nU " SS	S
SSS9nU" U[        SS9R                  S   n[        R                  " [        R                  R                  [        S5      [        R                  S9R!                  UR"                  5      n[%        XC5      n['        [        R(                  " [        R*                  " XC-
  5      5      5      n[-        SUR"                   SUS SUS 35        US:  $ )Nr   )WhisperFeatureExtractor--file--dumpz	--pad-30sTcheck   r         i  )feature_sizesampling_rate
hop_lengthchunk_lengthn_fftr   )rP   return_tensorsmel.binr4   z[Mel] shape  cosine .8f	 max_abs .3eH.?)transformersrG   
subprocessrunFEATWAVr!   r:   r   input_featuresr   fromfiler   r*   joinr   r=   r   rD   r>   r   r   print)rG   xferefr   cosmaxabss          r0   	stage_melri   :   s    4NND(C4ETR
3-A
!s%-0rNB
Qb
6
E
Ea
HC
++bggll432::
F
N
Nsyy
YCCC266"&&+,-F	L8C9IfS\
JK<rE   c            
      >  ^ SS K n SS KJs  Jn  SSKJn  [        R                  " [        S[        S[        S[        /SS9  U" [        SS	9 mU4S
 jnU" S5      U" S5      pTU" S5      U" S5      pvU" S5      U" S5      pU" S5      n
S S S 5        [        R                  " [        R                   R#                  [        S5      [        R$                  S9R'                  SS5      nU R)                  U5      S   nUR+                  UR-                  UWWSSS95      nUR+                  UR-                  UWWSSS95      nUR+                  UR-                  UWW	SSS95      nUR.                  u  pnnUR1                  SSSS5      R'                  UUX-  5      nUW
R3                  5       -  S   R5                  5       R7                  5       n[        R                  " [        R                   R#                  [        S5      [        R$                  S9R'                  UR.                  5      n[9        UU5      n[;        [        R<                  " [        R>                  " UU-
  5      5      5      n[A        SUR.                   SUS SUS  35        US!:  $ ! , (       d  f       GN= f)"Nr   	safe_openrH   rI   --modelTrJ   pt	frameworkc                 H   > TR                  SU -   5      R                  5       $ )Nthinker.audio_tower.
get_tensorr>   )nfs    r0   <lambda>!stage_conv_stem.<locals>.<lambda>T   s    all#9A#=>DDFrE   conv2d1.weightconv2d1.biasconv2d2.weightconv2d2.biasconv2d3.weightconv2d3.biasconv_out.weightrU   r4   rL   r<   NNr
   r   stridepadding   stem.binz[Stem] shape rV   rW   rX   rY   rZ   )!torchtorch.nn.functionalnn
functionalsafetensorsrl   r\   r]   r^   r_   r!   MODELCKPTr   ra   r   r*   rb   r   r=   
from_numpygeluconv2dr   permuter,   detachnumpyrD   r>   r   r   rc   )r   Frl   gw1b1w2b2w3b3womelrd   rC   cfdr,   rf   r   rg   rh   rv   s                        @r0   stage_conv_stemr   L   s   ##%NND(C4EJRVW	44	(AF#$a&7B#$a&7B#$a&7B ! 
) ++bggll432::
F
N
NsTV
WCj)A	qxx2r!Qx78A	qxx2r!Qx78A	qxx2r!Qx78A''KA"a			!Q1%%aAF3Arttv:q/
 
 
"
(
(
*C
++bggll44BJJ
G
O
OPSPYPY
ZC
c
C266"&&s+,-F	M#))HSIYvcl
KL<) 
)	(s   <J
Jc                  ^
  ^#^$^%^&^' SS K n SS KJs  Jm#  SSKJn  [        R                  " [        S[        S[        S[        S/SS9  S	u  m$nT$U-  nS
m%Sm'/ SQnU" [        SS9 m&U&U'4S jn[        S5       VVs/ s H"  od Vs0 s H  owU" SU S3U-   5      _M     snPM$     nnnU" S5      U" S5      pU" S5      U" S5      pU" S5      U" S5      pS S S 5        [        R                  " [         R"                  R%                  [        S5      [        R&                  S9nUR)                  ST$5      nUR*                  S   nU R-                  U5      nT$S-  n[        R.                  " S5      US-
  -  n[        R0                  " U* [        R2                  " U5      -  5      n[        R2                  " U5      S S 2S 4   US S S 24   -  n[        R4                  " [        R6                  " U5      [        R8                  " U5      /SS9R;                  [        R&                  5      nUU R-                  U5      -   nU#U$U%4S  jnW GH  nUnU" UUS!   US"   5      nUUS#   R=                  5       -  US$   -   nUUS%   R=                  5       -  US&   -   nUUS'   R=                  5       -  US(   -   nUR)                  UX#5      R?                  SS5      nUR)                  UX#5      R?                  SS5      nUR)                  UX#5      R?                  SS5      nUUR?                  SS5      -  US)-  -  nURA                  S5      U-  nUR?                  SS5      R)                  UT$5      nUUS*   R=                  5       -  US+   -   nUU-   nUnU" UUS,   US-   5      nUUS.   R=                  5       -  US/   -   nT#RC                  U5      nUUS0   R=                  5       -  US1   -   nUU-   nGM     U" UW	W
5      nUWR=                  5       -  W-   nT#RC                  U5      nUWR=                  5       -  W-   nURE                  5       RG                  5       n[        R                  " [         R"                  R%                  [        S25      [        R&                  S9R)                  UR*                  5      n [I        U U5      n![K        [        RL                  " [        RN                  " U U-
  5      5      5      n"[Q        S3U R*                   S4U!S5 S6U"S7 35        U!S8:  $ s  snf s  snnf ! , (       d  f       GNR= f)9Nr   rk   rH   rI   rm   z	--encoderTrJ   )     h㈵>rr   self_attn.q_proj.weightself_attn.q_proj.biasself_attn.k_proj.weightself_attn.k_proj.biasself_attn.v_proj.weightself_attn.v_proj.biasself_attn.out_proj.weightself_attn.out_proj.biasself_attn_layer_norm.weightself_attn_layer_norm.bias
fc1.weightfc1.bias
fc2.weightfc2.biasfinal_layer_norm.weightfinal_layer_norm.biasrn   ro   c                 H   > TR                  TU -   5      R                  5       $ Nrs   ru   rv   ps    r0   rw   stage_encoder.<locals>.<lambda>~       all1q5)//1rE      layers..ln_post.weightln_post.biasproj1.weight
proj1.biasproj2.weight
proj2.biasr   r4   r<   r
        @r   axisc                 .   > TR                  U T4XT5      $ r   
layer_normr,   r/   rC   r   d_modelepss      r0   lnstage_encoder.<locals>.ln       ||Az155rE   r   r   r   r   r   r   r   r         r   r   r   r   r   r   r   r   zencoder.binz[Enc] shape rV   rW   rX   rY   rZ   ))r   r   r   r   r   rl   r\   r]   r^   r_   r!   r   r   ranger   ra   r   r*   rb   r   r=   r   r   logexpr   concatenater   rg   r   r,   	transposesoftmaxr   r   r   rD   r>   r   r   rc   )(r   rl   n_headhead_dimkeysr   lklayers	ln_post_w	ln_post_bproj1_wproj1_bproj2_wproj2_bstemTrd   halflog_incinvscaledper   r/   rhqvscoresorf   r   rg   rh   r   r   r   rv   r   s(                                      @@@@@r0   stage_encoderr   j   s   ##%NND(C4E!(,. OGV& H
CA@D 
44	(A1DI"INIqT:Ta'!A*++T:IN !12An4E9^,ao^,ao 
) ;;rww||D*5RZZHD<<G$D

1AAa<DffWo*G
&&'BIIdO+
,CYYq\!T'"Sq\1F	8q	A	H	H	TB	ER  A6 q!12A6Q4RS+,..0015L3MM+,..0015L3MM+,..0015L3MMIIa*44Q:IIa*44Q:IIa*44Q:akk!Q''H,<=NN2"KK1%%a1-.0022Q7P5QQEq!-.2I0JK,!!##a
m3FF1I,!!##a
m3E' * 	1i#A	GIIK'!A	q	A	GIIK'!A
((*


C
++bggll47rzz
J
R
RSVS\S\
]C
c
C266"&&s+,-F	L8C9IfS\
JK<g ;N 
)	(s0   #T9	TTT"0TTT
T,c                    ^<^=^>^?^@^A SS K n SS KJs  Jm<  SSKJn  [        S[        S9  [        R                  " [        S[        S[        S[        S/S	S
9  Su  m>p#T>U-  nSm?Su  pVSmA/ SQnU" [        SS9 m@U@UA4S jnU" S5      U" S5      pU" S5      U" S5      pU" S5      U" S5      pU" S5      n[        S5       VVs/ s H$  nU Vs0 s H  nUU" SU S3U-   5      _M     snPM&     nnnU" S5      U" S5      nnU" S5      U" S 5      nnU" S!5      U" S"5      nnS S S 5        [        R                   " ["        R$                  R'                  [        S#5      [        R(                  S$9R+                  US%5      nUR,                  S&   nU R/                  UR1                  5       5      nS' m=/ nSnUU:  a-  [3        UUU-
  5      nUR5                  U5        UU-  nUU:  a  M-  T>S(-  n[        R6                  " S)5      US&-
  -  n [        R8                  " U * [        R:                  " U5      -  5      n![=        U=4S* jU 5       5      n"[        R:                  " U"5      S S 2S 4   U!S S S 24   -  n#U R/                  [        R>                  " [        R@                  " U#5      [        RB                  " U#5      /S&S+9RE                  [        R(                  5      5      n$/ n%SnU H  nUS S 2UUU-   24   S,   n&T<RG                  T<RI                  U&W	W
S(S&S-95      n&T<RG                  T<RI                  U&WWS(S&S-95      n&T<RG                  T<RI                  U&WWS(S&S-95      n&U&R,                  u  n'n(n)n*U&RK                  SS.S&S(5      R+                  U'U*U(U)-  5      n&U&WRM                  5       -  S   n&U&U$S U&R,                  S    -   n&U%R5                  U&5        UU-  nM     U RO                  U%S5      n&U&R,                  S   n+T=" U5      U-  n,U RQ                  U+U+4[S        S/5      5      n-[        SU+U,5       H  n.[3        U.U,-   U+5      n/S0U-U.U/2U.U/24'   M     U<U>U?4S1 jn0W GH  n1U&n2U0" U&U1S2   U1S3   5      n3U3U1S4   RM                  5       -  U1S5   -   n4U3U1S6   RM                  5       -  U1S7   -   nU3U1S8   RM                  5       -  U1S9   -   n5U4R+                  U+X$5      RU                  SS&5      n4UR+                  U+X$5      RU                  SS&5      nU5R+                  U+X$5      RU                  SS&5      n5U4URU                  S&S(5      -  US:-  -  U-S    -   n6U6RW                  S%5      U5-  n7U7RU                  SS&5      R+                  U+T>5      n7U7U1S;   RM                  5       -  U1S<   -   n7U2U7-   n&U&n2U0" U&U1S=   U1S>   5      n3U3U1S?   RM                  5       -  U1S@   -   n3T<RG                  U35      n3U3U1SA   RM                  5       -  U1SB   -   n3U2U3-   n&GM     U0" U&WW5      n&U&WRM                  5       -  W-   n&T<RG                  U&5      n&U&WRM                  5       -  W-   n&U&RY                  5       R[                  5       n8[        R                   " ["        R$                  R'                  [        SC5      [        R(                  S$9R+                  U8R,                  5      n9[]        U9U85      n:[S        [        R<                  " [        R^                  " U9U8-
  5      5      5      n;[a        SDU9R,                   SE[c        U5       SFU:SG SHU;SI 35        U:SJ:  $ s  snf s  snnf ! , (       d  f       GN/= f)KNr   rk   g      "@)r)   r*   rH   rI   rm   z
--windowedTrJ   )r   r   rL   r   )d      rr   r   rn   ro   c                 H   > TR                  TU -   5      R                  5       $ r   rs   r   s    r0   rw    stage_windowed.<locals>.<lambda>   r   rE   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   rU   r4   r<   r   c                 D    U n[        S5       H  nUS-
  S-  S-   nM     U$ )Nr   r   r
   )r   )Lr   _s      r0   conv_out_len$stage_windowed.<locals>.conv_out_len   s,    qAQ1q A rE   r
   r   c              3   4   >#    U  H  nT" U5      v   M     g 7fr    ).0r   r   s     r0   	<genexpr>!stage_windowed.<locals>.<genexpr>   s     9=a,q//=s   r   r   r   r   -infg        c                 .   > TR                  U T4XT5      $ r   r   r   s      r0   r   stage_windowed.<locals>.ln  r   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   windowed.binz[Win] shape z chunks rV   rW   rX   rY   rZ   )2r   r   r   r   r   rl   r1   WAV_LONGr\   r]   r^   r!   r   r   r   r   ra   r   r*   rb   r   r=   r   r   copyminappendr   r   r   r   r   r   rg   r   r   r   r   r,   catfullr>   r   r   r   r   rD   r   rc   len)Br   rl   r   n_melsr   	chunk_melwindow_chunksr   r   c1wc1bc2wc2bc3wc3bcowr   r   r   r   r   r   r   r   r   r   n_framesmel_tchunk_lengthsoffr   r   r   r   pe_rowsscr   segsrd   rC   r   r   r,   Swindow_aftercnnmaskb0r   r   r/   r   r   r   r   r   r   rf   r   rg   rh   r   r   r   r   rv   r   sB                                                               @@@@@@r0   stage_windowedr      s   ##%(+NND(Hhi ")-/ +GV& H
C%IA@D 
44	(A1%&.(9S%&.(9S%&.(9S!"DI"INIqT:T1a'!A*++T:IN !12An4E9	^,ao^,ao 
) ++bggll432::
F
N
NvWY
ZCyy|HSXXZ(E M
C
.	8c>*Qq .
 a<DffWo*G
&&'BIIdO+
,C9=99G	7	AtG	$s47|	3B			
r
BFF2J/a8??

K
MB D
C!Sq[.!*-FF188AsC18=>FF188AsC18=>FF188AsC18=>gg1b!IIaAq!))!QB7[!;AGGAJAq  			$A	
A"9-=O::q!feFm,DAq/*o%q) RUBrE\ +6 q!12A6Q4RS+,..0015L3MM+,..0015L3MM+,..0015L3MMIIa*44Q:IIa*44Q:IIa*44Q:akk!Q''H,<=T
JNN2"KK1%%a1-.0022Q7P5QQEq!-.2I0JK,!!##a
m3FF1I,!!##a
m3E' * 	1i#A	GIIK'!A	q	A	GIIK'!A
((*


C
++bggll48


K
S
STWT]T]
^C
c
C266"&&s+,-F	L8C,>+?xCy QCL" #<o ;N 
)	(s1   6A]
]\<%],3]<]]
])input_layernorm.weightpost_attention_layernorm.weightr   r   r   self_attn.o_proj.weightself_attn.q_norm.weightself_attn.k_norm.weightmlp.gate_proj.weightmlp.up_proj.weightmlp.down_proj.weightc                  4  ^^	 SS K n SSKJn  Sm	U" [        SS9 mUU	4S jnU" S5      nU" S5      n[	        S	5       VVs/ s H'  n[
         Vs0 s H  ofU" S
U S3U-   5      _M     snPM)     nnnS S S 5        WWW4$ s  snf s  snnf ! , (       d  f       N= f)Nr   rk   zthinker.rn   ro   c                 H   > TR                  TU -   5      R                  5       $ r   rs   r   s    r0   rw   _load_thinker.<locals>.<lambda>6  r   rE   zmodel.embed_tokens.weightzmodel.norm.weight   zmodel.layers.r   )r   r   rl   r   r   _THINKER_KEYS)
r   rl   r   embednorm_wr   r   r   rv   r   s
           @@r0   _load_thinkerr0  1  s    %A	44	(A1-.&'SXY[S\]S\a=I=aa-s!,q011=IS\]	 
)
 &&   J]	 
)	(s/   &B	 BA>'B.B	>BB		
Bc                 d  ^^^^^ SS K mSS KJs  Jn  Su  pEnmSu  mnXV-  nU R                  S   n	TR                  U	5      R                  5       n
SUTR                  STS5      R                  5       T-  -  -  nU
S S 2S 4   US S S 24   -  nTR                  UR                  5       UR                  5       /S5      mTR                  UR                  5       UR                  5       /S5      mUU4S jnUUUU4S jnTR                  TR                  X4[        S	5      5      S
S9nU nU GH  nUnU" UUS   5      nUUS   R                  5       -  R                  XT5      nUUS   R                  5       -  R                  XT5      nUUS   R                  5       -  R                  XT5      nU" UUS   5      nU" UUS   5      nU" U5      nU" U5      nUR                  US
S9nUR                  US
S9nUR                  SS
5      nUR                  SS
5      nUR                  SS
5      nUUR                  S
S5      -  TS-  -  US    -   nUR!                  S5      U-  nUR                  SS
5      R#                  XT-  5      nUUS   R                  5       -  nUU-   nUnU" UUS   5      nUUS   R                  5       -  nUUS   R                  5       -  nUUR%                  U5      U-  US   R                  5       -  -   nGM     U" UU5      nUR'                  5       R)                  5       $ )Nr   )      r   rL   )gư>g    .Ag      ?r
   r<   c                 r   > U TR                  U R                  S5      R                  SSS9T-   5      -  U-  $ )Nr
   r<   T)keepdim)rsqrtpowmean)r,   r/   r   r   s     r0   rms_qwen3_decode_ref.<locals>.rmsK  s6    5;;quuQx}}R}>DEEIIrE   c                    > U SS TS-  24   nU STS-  S 24   nTR                  U* U/S5      nU TS S 2S S S 24   -  UTS S 2S S S 24   -  -   $ )N.r
   r<   )r  )r,   z1z2rotrg   r   r   r   s       r0   rope_qwen3_decode_ref.<locals>.ropeN  sn    sNX]N"#sHMN"#ii"b	2&3q$z?"S3q$z?%:::rE   r   r   )diagonalr!  r   r   r   r$  r%  )dimr	   r#  r"  r&  r'  r(  )r   r   r   r   r   r   r>   r  rg   r   triur	  r,   viewrepeat_interleaver   r   r=   silur   r   ) rd   r   r/  r   hiddenn_qn_kvthetarepr   posinv_freqfreqsr9  r?  causalr   r/   r   hnr   r   r   r   r   gateuprg   r   r   r   r   s                               @@@@@r0   _qwen3_decode_refrS  =  s@   ##"2FxJC
+C	
A
,,q/


!CeQ! < B B Dx OPQH4L8D!G,,E
))UYY[%))+.
3C
))UYY[%))+.
3CJ; ; ZZ

A65=9AZFF	AA./0!-.002288J!-.002288(K!-.002288(K1./01./0GG++KK1KK1KK1akk!Q''HO<vd|KNN2"KK1%%ax8+,..00EA789A,-//11!()++--"a(>&?&A&A&CCC1 4 	AvA88:rE   c                     SS K n [        5       u  pn[        R                  R	                  S5      nSnUR                  SUR                  S   US9nXR                  U5         R                  5       nUR                  5       R                  [        R                  5      R                  [        R                  R                  [         S5      5        ["        R$                  " [&        S[(        S[        R                  R                  [         S5      S[+        U5      S	[         S
/
SS9  [-        XsU5      n[        R.                  " [        R                  R                  [         S5      [        R                  S9R1                  UR                  5      n	[3        X5      n
[5        [        R6                  " [        R8                  " X-
  5      5      5      n[;        SU	R                   SU
S SUS 35        U
S:  $ )Nr   i     )sizez
embeds.binrm   z--embeds--tokensrI   --no-faTrJ   
hidden.binr4   z[Dec] shape rV   rW   rX   rY   rZ   )r   r0  r   r   r   integersr   r   
contiguousr   r   r   tofiler   r*   rb   r!   r\   r]   THINKERr   strrS  ra   r=   rD   r>   r   r   rc   )r   r.  r/  r   r+   r   idsrd   rf   r   rg   rh   s               r0   stage_thinkerr`  u  si   )OE6
))


%C
A
,,q%++a.q,
1Cs#$//1AGGIRZZ ''T<(HINNGYzGGLL|4j#a&dI/6:< Av
.C
++bggll46bjj
I
Q
QRUR[R[
\C

C266"&&+,-F	L8C9IfS\
JK<rE   c                  T   SS K n SnSu  p#n[        R                  " [        R                  R                  [        S5      [        R                  S9R                  SU5      nUR                  S   n/ SQnSS	/nXr/-   U/U-  -   U/-   U-   n	[        U	5      n
[        U5      S
-   n[        R                  " U	[        R                  S9R                  [        R                  R                  [        S5      5        [        R                  " [         S["        S[        R                  R                  [        S5      S[        R                  R                  [        S5      S[%        U5      S[%        U
5      S[        S/SS9  ['        5       u  pnXR)                  XR*                  S9   R-                  5       R/                  5       nU R1                  U5      XX-   & [3        XU5      n[        R                  " [        R                  R                  [        S5      [        R                  S9R                  UR                  5      n[5        UU5      n[-        [        R6                  " [        R8                  " UU-
  5      5      5      n[;        SUR                   SU SUS SUS 35        US:  $ )Nr   r2  )iuP ivP i|P r  r4   r<   )   i  c   r      r   zids.binrm   z--idsz--audioz--audio-posrW  rI   rX  TrJ   rY  z[Pre] shape z S rV   rW   rX   rY   rZ   )r   r   ra   r   r*   rb   r!   r   r=   r   r
  arrayint32r\  r\   r]   r]  r   r^  r0  tensorlongr>   r[  r   rS  rD   r   r   rc   )r   rG  AUDIO_START	AUDIO_ENDAUDIO_PHaudior  presufr_  r   	audio_posr.  r/  r   rd   rf   r   rg   rh   s                       r0   stage_prefixrp    s   F'=$KHKKT>:"**MUUVXZ`aEAA
Cq'C


Q
.)
<s
BCCAC1IHHS!((dI)FGNNGYwT98Urww||D.A=	NJA$	S 
 *OE6ll3jjl1288:EEGA!&!1!1%!8A	
Av
.C
++bggll46bjj
I
Q
QRUR[R[
\C
c
C266"&&s+,-F	L3qc#c)F3<
PQ<rE   c                  2   [        5         [        5       n [        5       =(       a    U n [        5       =(       a    U n [	        5       =(       a    U n [        5       =(       a    U n [        5       =(       a    U n [        R                  " U (       a  S5        g S5        g )Nr   r   )	r1   ri   r   r   r   r`  rp  sysexit)oks    r0   mainru    s_    M	B			!rB		RB			 bB		RB		BBHH"Q!rE   __main__)!__doc__r   r\   rr  r"   r   r   r   environgetr^   r]  r   r   r!   r*   rb   r_   r  r1   r:   rD   ri   r   r   r   r-  r0  rS  r`  rp  ru  __name__r   rE   r0   <module>r{     s   
 
  
  


y"9:
**..'A
B*9	ww||D2377<<;< # % KI
$<HVrjW	!5p*> zF rE   