
    sh	-              	          S SK r S SKrS SKrS SKrS SKrS SKJrJrJrJ	r	  \R                  " 5       r\S:w  a  S rOS rS rS rS rS	 rS
\4S jr S$S\S\S\4S jjrS\\   S
\\   4S jrS\\   S
\\   4S jr " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      rS!\S"\S
\\\	\/S4   4S# jr g)%    N)CallableListOptionalTextIOutf-8c                 P    U R                  [        SS9R                  [        5      $ )Nreplace)errors)encodesystem_encodingdecodestrings    a/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/whisper/utils.py	make_safer      s"     }}_Y}?FFWW    c                     U $ N r   s    r   r   r      s    r   c                     X-  S:X  d   eX-  $ )Nr   r   )xys     r   	exact_divr      s    5A::6Mr   c                 n    SSS.nX;   a  X   $ [        S[        UR                  5       5       SU  35      e)NTF)TrueFalsezExpected one of z, got )
ValueErrorsetkeys)r   str2vals     r   str2boolr!      s?    e,G+C,?+@vhOPPr   c                 (    U S:X  a  S $ [        U 5      $ NNone)intr   s    r   optional_intr&   %   s    V#44V4r   c                 (    U S:X  a  S $ [        U 5      $ r#   )floatr   s    r   optional_floatr)   )   s    V#46v6r   returnc                 z    U R                  S5      n[        U5      [        [        R                  " U5      5      -  $ )Nr   )r   lenzlibcompress)text
text_bytess     r   compression_ratior1   -   s-    W%Jz?Sz!:;;;r   secondsalways_include_hoursdecimal_markerc                     U S:  d   S5       e[        U S-  5      nUS-  nX4S-  -  nUS-  nX5S-  -  nUS-  n X0S-  -  nU(       d  US:  a  US S3OS	nU US SU S U US
 3$ )Nr   znon-negative timestamp expectedg     @@i6 i`    02d: 03d)round)r2   r3   r4   millisecondshoursminuteshours_markers          r   format_timestampr@   2   s     a<:::<6)*LI%EI%%Lf$Gf$$Le#GeO#L&:eaieC[?RL.QwsmN3CLQTCUVr   segmentsc                 N    [        S U  5       U (       a  U S   S   5      $ S 5      $ )Nc              3   B   #    U  H  oS      H	  o"S   v   M     M     g7f)wordsstartNr   .0sws      r   	<genexpr>get_start.<locals>.<genexpr>I   s     :Xz!7zXs   r   rE   )nextrA   s    r   	get_startrN   G   s2    :X: (G .2 r   c                 `    [        S [        U 5       5       U (       a  U S   S   5      $ S 5      $ )Nc              3   V   #    U  H  n[        US    5        H	  o"S   v   M     M!     g7f)rD   endN)reversedrF   s      r   rJ   get_end.<locals>.<genexpr>P   s&     L-ax'
7K!57K-s   ')rQ   )rL   rR   rM   s    r   get_endrU   N   s7    L8H-L'U -1 r   c                   r    \ rS rSr% \\S'   S\4S jr SS\S\S\\   4S	 jjr	 SS\S
\
S\\   4S jjrSrg)ResultWriterU   	extension
output_dirc                     Xl         g r   rZ   )selfrZ   s     r   __init__ResultWriter.__init__X   s    $r   Nresult
audio_pathoptionsc                 n   [         R                  R                  U5      n[         R                  R                  U5      S   n[         R                  R	                  U R
                  US-   U R                  -   5      n[        USSS9 nU R                  " U4XsS.UD6  S S S 5        g ! , (       d  f       g = f)Nr   .rI   r   )encoding)filerb   )	ospathbasenamesplitextjoinrZ   rY   openwrite_result)r]   r`   ra   rb   kwargsaudio_basenameoutput_pathfs           r   __call__ResultWriter.__call__[   s     ))*5)).9!<ggllOO^c1DNNB
 +sW5fH1HH 655s   B&&
B4rf   c                     [         er   )NotImplementedErrorr]   r`   rf   rb   rn   s        r   rm   ResultWriter.write_resultg   s
     "!r   r\   r   )__name__
__module____qualname____firstlineno__str__annotations__r^   dictr   rr   r   rm   __static_attributes__r   r   r   rW   rW   U   sl    N%3 % HL
I
I(+
I6>tn
I EI"""("3;D>" "r   rW   c                   F    \ rS rSr% Sr\\S'    S
S\S\S\	\   4S jjr
S	rg)WriteTXTm   txtrY   Nr`   rf   rb   c                 T    US    H  n[        US   R                  5       USS9  M!     g )NrA   r/   Trf   flush)printstripr]   r`   rf   rb   rn   segments         r   rm   WriteTXT.write_resultp   s,     j)G'&/'')DA *r   r   r   rx   ry   rz   r{   rY   r|   r}   r~   r   r   rm   r   r   r   r   r   r   m   s>    Is EIBB"(B3;D>B Br   r   c                       \ rS rSr% \\S'   \\S'    SSSSSS.S\S\\   S	\\	   S
\\	   S\S\\	   4S jjjr
S\4S jrSrg)SubtitlesWriterw   r3   r4   NF)max_line_widthmax_line_counthighlight_wordsmax_words_per_liner`   rb   r   r   r   r   c             #     ^^^^^#    U=(       d    0 nT=(       d    UR                  S5      mT=(       d    UR                  S5      mU=(       d    UR                  SS5      nT=(       d    UR                  S5      mTS L =(       d    TS L mT=(       d    SmT=(       d    SmUUUUU4S jn[        TS   5      S	:  Ga5  S
TS   S	   ;   Ga(  U" 5        GH  nU R                  US	   S   5      n	U R                  US   S   5      n
SR                  U Vs/ s H  oS   PM	     sn5      nU(       a  U	nU Vs/ s H  oS   PM	     nn[	        U5       H  u  nnU R                  US   5      nU R                  US   5      nUU:w  a  UUU4v   UUSR                  [	        U5       VVs/ s H&  u  nnUU:X  a  [
        R                  " SSU5      OUPM(     snn5      4v   UnM     GM  XU4v   GM     g TS    HU  nU R                  US   5      nU R                  US   5      nUS   R                  5       R                  SS5      nUUU4v   MW     g s  snf s  snf s  snnf 7f)Nr   r   r   Fr   r6   c               3     >#    Sn Sn/ n[        TS   5      =(       d    SnTS    GH  nSnTnU[        US   5      :  d  M  [        US   5      U-
  nT[        US   5      U-
  :  a  Un[        US   XUU-    5       GH   u  pU	R                  5       n
T(       + =(       a    U
S   U-
  S:  nU [        U
S   5      -   T:*  nUS:H  =(       a    [        U5      S:  =(       a    TnU S:  a'  U(       a   U(       d  U(       d  U [        U
S   5      -  n OwU
S   R	                  5       U
S'   [        U5      S:  a  Tb  U(       d  UT:  d  U(       a	  Uv   / nSnOU S:  a  US-  nS	U
S   -   U
S'   [        U
S   R	                  5       5      n UR                  U
5        U
S   nGM#     UT-  nU[        US   5      :  a  GMz  GM     [        U5      S:  a  Uv   g g 7f)
Nr      rA   g        rD   rE   g      @word
)rN   r,   	enumeratecopyr   append)line_len
line_countsubtitlelastr   chunk_indexwords_countremaining_wordsioriginal_timingtiming
long_pausehas_room	seg_breakr   r   r   preserve_segmentsr`   s                 r   iterate_subtitles9SubtitlesWriter.iterate_result.<locals>.iterate_subtitles   s    HJ#%H#F:$67>3D!*-0!C(8$99&)''*:&;k&IO)C0@,AK,OO&5.7([7PQ/* "1!5!5!7 11RfWo6Ls6R # $,c&..A#A^#S$%F$Vs8}q/@$VEV	$qL ($.$- %F6N(;;H .4F^-A-A-CF6N #H 1$2$>%/:3O#, '/+--.
!)A *a
15v1Fv'*6&>+?+?+A'BH /%gI/J  #55KS "C(8$999 .Z 8}q  !s   ;GE7G<GrA   r   rD   rE   rT   rQ   r9   r   z^(\s*)(.*)$z\1<u>\2</u>r/   z-->z->)	getr,   r@   rk   r   resubr   r	   )r]   r`   rb   r   r   r   r   r   r   subtitle_startsubtitle_endr   subtitle_textr   r   	all_wordsr   	this_wordrE   rQ   jr   segment_startsegment_endsegment_textr   s    ` `` `                  @r   iterate_resultSubtitlesWriter.iterate_result{   sz     -R'H7;;7G+H'H7;;7G+H)RW[[9JE-R/T7;;?S3T*d2Ln6L'/4/744	 4	l vj!"Q&7fZ6H6K+K-/!%!6!6x{77K!L#44Xb\%5HI "((K($f((K L")D>F GhFhI G(1((;9 $ 5 5i6H I"33Ie4DE5="&}"<<#S"'' 09/C 0DGAt ()Av %'FF>>4$P)-%. 0D	+ 	 	  #! )<$ )EE3 06 "*- $ 5 5gg6F G"33GENC&v446>>udK#[,>>	 .1 )L !Hs,   DI"I
!I"5IA#I"&-IBI"r2   c                 @    [        UU R                  U R                  S9$ )N)r2   r3   r4   )r@   r3   r4   )r]   r2   s     r   r@    SubtitlesWriter.format_timestamp   s$    !%!:!:..
 	
r   r   r   )rx   ry   rz   r{   boolr}   r|   r~   r   r%   r   r(   r@   r   r   r   r   r   r   w   s    
 #'i?
 )-(, %,0i?i? $i?
 !i? !i? i? %SMi?V
 
r   r   c                   b    \ rS rSr% Sr\\S'   Sr\\S'   Sr	\\S'    SS	\
S
\S\\
   4S jjrSrg)WriteVTT   vttrY   Fr3   rd   r4   Nr`   rf   rb   c           	      z    [        SUS9  U R                  " X40 UD6 H  u  pVn[        U SU SU S3USS9  M     g )NzWEBVTT
)rf    --> r   Tr   )r   r   )r]   r`   rf   rb   rn   rE   rQ   r/   s           r   rm   WriteVTT.write_result   sM     	jt$ $ 3 3F Nv NEUG5RvR0t4H !Or   r   r   rx   ry   rz   r{   rY   r|   r}   r3   r   r4   r~   r   r   rm   r   r   r   r   r   r      sS    Is!&$&NC EIII"(I3;D>I Ir   r   c                   b    \ rS rSr% Sr\\S'   Sr\\S'   Sr	\\S'    SS	\
S
\S\\
   4S jjrSrg)WriteSRT   srtrY   Tr3   ,r4   Nr`   rf   rb   c                     [        U R                  " X40 UD6SS9 H   u  nu  pgn[        U SU SU SU S3USS9  M"     g )Nr   )rE   r   r   Tr   )r   r   r   )	r]   r`   rf   rb   rn   r   rE   rQ   r/   s	            r   rm   WriteSRT.write_result   sY     &/:6:!&
!A!D QCr%cU"TF"5DM&
r   r   r   r   r   r   r   r   r      sS    Is!%$%NC EINN"(N3;D>N Nr   r   c                   J    \ rS rSr% SrSr\\S'    SS\S\	S\
\   4S	 jjrS
rg)WriteTSVi	  a  
Write a transcript to a file in TSV (tab-separated values) format containing lines like:
<start time in integer milliseconds>        <end time in integer milliseconds>      <transcript text>

Using integer milliseconds as start and end times means there's no chance of interference from
an environment setting a language encoding that causes the decimal in a floating point number
to appear as a comma; also is faster and more efficient to parse & store, e.g., in C++.
tsvrY   Nr`   rf   rb   c                     [        SSSSUS9  US    Hc  n[        [        SUS   -  5      USS9  [        [        SUS   -  5      USS9  [        US   R                  5       R                  SS	5      US
S9  Me     g )NrE   rQ   r/   	)seprf   rA   r6   )rf   rQ    Tr   )r   r;   r   r	   r   s         r   rm   WriteTSV.write_result  s~     	guf$T:j)G%ww//0tF%wu~-.TtD'&/'')11$<4tT *r   r   r   )rx   ry   rz   r{   __doc__rY   r|   r}   r~   r   r   rm   r   r   r   r   r   r   	  sE     Is EIUU"(U3;D>U Ur   r   c                   F    \ rS rSr% Sr\\S'    S
S\S\S\	\   4S jjr
S	rg)	WriteJSONi  jsonrY   Nr`   rf   rb   c                 0    [         R                  " X5        g r   )r   dumprv   s        r   rm   WriteJSON.write_result"  s     			&r   r   r   r   r   r   r   r   r     s9    Is EI  "( 3;D>   r   r   output_formatrZ   c                    ^ [         [        [        [        [        S.nU S:X  aL  UR                  5        Vs/ s H
  o3" U5      PM     snm SS[        S[        S[        [           4U4S jjjnU$ X    " U5      $ s  snf )N)r   r   r   r   r   allr`   rf   rb   c                 ,   > T H  nU" XU40 UD6  M     g r   r   )r`   rf   rb   rn   writerall_writerss        r   	write_allget_writer.<locals>.write_all6  s     &vW77 &r   r   )	r   r   r   r   r   valuesr~   r   r   )r   rZ   writersr   r   r   s        @r   
get_writerr   (  s     G 8?8HI8Hfvj)8HI CG	8	8 &	819$	8 	8 !*-- Js   A:)Frd   )!r   rg   r   sysr-   typingr   r   r   r   getdefaultencodingr   r   r   r!   r&   r)   r(   r1   r   r|   r@   r~   rN   rU   rW   r   r   r   r   r   r   r   r   r   r   <module>r      sA    	 	 
  3 3((*gX

Q57<u < OR*.HK*T
 x d4j Xe_ " "0B| Bt
l t
n
I 
IN NU| U,   ..$'.tVT"D().r   