
    Sܶi	-              	          d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	  ej
                    Zedk    rd Znd Zd Zd Zd Zd	 Zd
efdZ	 d&dededefdZdee         d
ee         fdZdee         d
ee         fdZ G d d          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d e          Z G d! d"e          Zd#ed$ed
eee	egdf         fd%Z dS )'    N)CallableListOptionalTextIOutf-8c                 j    |                      t          d                              t                    S )Nreplace)errors)encodesystem_encodingdecodestrings    P/root/projects/openclaw-proxy/venv/lib/python3.11/site-packages/whisper/utils.py	make_safer      s(     }}_Y}??FFWWW    c                     | S N r   s    r   r   r      s    r   c                 "    | |z  dk    sJ | |z  S )Nr   r   )xys     r   	exact_divr      s    q5A::::6Mr   c                     ddd}| |v r||          S t          dt          |                                           d|            )NTF)TrueFalsezExpected one of z, got )
ValueErrorsetkeys)r   str2vals     r   str2boolr!      sS    e,,GvOC,?,?OOvOOPPPr   c                 0    | dk    rd nt          |           S NNone)intr   s    r   optional_intr&   %   s    V##44V4r   c                 0    | dk    rd nt          |           S r#   )floatr   s    r   optional_floatr)   )   s    V##44v6r   returnc                     |                      d          }t          |          t          t          j        |                    z  S )Nr   )r   lenzlibcompress)text
text_bytess     r   compression_ratior1   -   s6    W%%Jz??Sz!:!:;;;;r   F.secondsalways_include_hoursdecimal_markerc                     | dk    s
J d            t          | dz            }|dz  }||dz  z  }|dz  }||dz  z  }|dz  } || dz  z  }|s|dk    r|ddnd	}| |dd| d| |d
S )Nr   znon-negative timestamp expectedg     @@i6 i`    02d: 03d)round)r3   r4   r5   millisecondshoursminuteshours_markers          r   format_timestamprA   2   s     a<<<:<<<6)**LI%EEI%%Lf$GGf$$Le#GGeO#L&:Oeaiie?????RLVVVVwVVNVLVVVr   segmentsc                 V    t          d | D             | r| d         d         nd           S )Nc              3   <   K   | ]}|d          D ]}|d         V  dS )wordsstartNr   .0sws      r   	<genexpr>zget_start.<locals>.<genexpr>I   s7      ::qz::!7:::::::r   r   rF   )nextrB   s    r   	get_startrN   G   s;    ::X::: (2Gd  r   c                 p    t          d t          |           D             | r| d         d         nd           S )Nc              3   V   K   | ]$}t          |d                    D ]}|d         V  %dS )rE   endN)reversedrG   s      r   rK   zget_end.<locals>.<genexpr>P   s?      LLax'
7K7KLL!5LLLLLLLr   rQ   )rL   rR   rM   s    r   get_endrT   N   sC    LL8H--LLL'1UT  r   c                   n    e Zd ZU eed<   defdZ	 ddededee         fdZ	 dded	e	dee         fd
Z
dS )ResultWriter	extension
output_dirc                     || _         d S r   )rX   )selfrX   s     r   __init__zResultWriter.__init__X   s    $r   Nresult
audio_pathoptionsc                 f   t           j                            |          }t           j                            |          d         }t           j                            | j        |dz   | j        z             }t          |dd          5 } | j        |f||d| d d d            d S # 1 swxY w Y   d S )Nr   r2   rJ   r   )encoding)filer^   )	ospathbasenamesplitextjoinrX   rW   openwrite_result)rZ   r\   r]   r^   kwargsaudio_basenameoutput_pathfs           r   __call__zResultWriter.__call__[   s    ))*55)).99!<gllO^c1DNB
 
 +sW555 	IDfH1gHHHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   B&&B*-B*ra   c                     t           r   )NotImplementedErrorrZ   r\   ra   r^   ri   s        r   rh   zResultWriter.write_resultg   s
     "!r   r   )__name__
__module____qualname__str__annotations__r[   dictr   rm   r   rh   r   r   r   rV   rV   U   s         NNN%3 % % % % HL
I 
I
I(+
I6>tn
I 
I 
I 
I EI" """("3;D>" " " " " "r   rV   c                   B    e Zd ZU dZeed<   	 ddededee         fdZ	dS )	WriteTXTtxtrW   Nr\   ra   r^   c                 p    |d         D ],}t          |d                                         |d           -d S )NrB   r/   Tra   flush)printstriprZ   r\   ra   r^   ri   segments         r   rh   zWriteTXT.write_resultp   sN     j) 	B 	BG'&/''))DAAAAA	B 	Br   r   
rq   rr   rs   rW   rt   ru   rv   r   r   rh   r   r   r   rx   rx   m   sl         Is EIB BB"(B3;D>B B B B B Br   rx   c                       e Zd ZU eed<   eed<   	 dddddddedee         dee         d	ee         d
edee         fdZ	de
fdZdS )SubtitlesWriterr4   r5   NF)max_line_widthmax_line_counthighlight_wordsmax_words_per_liner\   r^   r   r   r   r   c          
   #   |  K   |pi }p|                     d          p|                     d          |p|                     dd          }p|                     d          d u pd u pdpdfd}t          d                   d	k    r)d
d         d	         v r |            D ]
}|                     |d	         d                   }	|                     |d         d                   }
d                    d |D                       }|r|	}d |D             }t	          |          D ]}\  }|                     |d                   }|                     |d                   }||k    r|||fV  ||d                    fdt	          |          D                       fV  |}~|	|
|fV  d S d         D ]m}|                     |d                   }|                     |d                   }|d                                                             dd          }|||fV  nd S )Nr   r   r   Fr   r7   c               3     K   d} d}g }t          d                   pd}d         D ]}d}}|t          |d                   k     rt          |d                   |z
  }t          |d                   |z
  k    r|}t          |d         |||z                      D ]*\  }}	|	                                }
 o|
d         |z
  dk    }| t          |
d                   z   k    }|dk    ot          |          dk    o}| dk    r|r|s|s| t          |
d                   z  } n|
d                                         |
d<   t          |          dk    r
|s|k    s|r	|V  g }d}n| dk    r|dz  }d	|
d         z   |
d<   t          |
d                                                   } |                    |
           |
d         },|z  }|t          |d                   k     t          |          dk    r|V  d S d S )
Nr      rB   g        rE   rF   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_subtitlesz9SubtitlesWriter.iterate_result.<locals>.iterate_subtitles   s     HJ#%H#F:$677>3D!*- ,6 ,60!C(8$9$999&)''*:&;&;k&IO)C0@,A,AK,OOO&5.7({[7P)PQ/ / $/ $/*? "1!5!5!7!7 11RfWo6Ls6R # $,c&..A.A#A^#S$%F$Vs8}}q/@$VEV	$qLL ( )$. ) %. ) %F6N(;(;;HH .4F^-A-A-C-CF6N #H 1 1$2$>%/ %?3=3O3O#, 4P '/+--.

!)A *a
15v1Fv'*6&>+?+?+A+A'B'BH ///%g#55KS "C(8$9$999T 8}}q   ! r   rB   r   rE   rF   rS   rQ   r:   c                     g | ]
}|d          S r   r   )rH   r   s     r   
<listcomp>z2SubtitlesWriter.iterate_result.<locals>.<listcomp>   s    (K(K(K$f(K(K(Kr   c                     g | ]
}|d          S r   r   )rH   r   s     r   r   z2SubtitlesWriter.iterate_result.<locals>.<listcomp>   s     G G GF G G Gr   c                 R    g | ]#\  }}|k    rt          j        d d|          n|$S )z^(\s*)(.*)$z\1<u>\2</u>)resub)rH   jr   r   s      r   r   z2SubtitlesWriter.iterate_result.<locals>.<listcomp>   sN        %,At ()Avv %'F>>4$P$P$P)-	  r   r/   z-->z->)getr,   rA   rf   r   r~   r	   )rZ   r\   r^   r   r   r   r   r   r   subtitle_startsubtitle_endsubtitle_textr   	all_words	this_wordrF   rQ   r   segment_startsegment_endsegment_textr   r   s    ` `` `              @@r   iterate_resultzSubtitlesWriter.iterate_result{   s      -R'H7;;7G+H+H'H7;;7G+H+H)RW[[9JE-R-R/T7;;?S3T3T*d2Ln6L'/4/744	 4	 4	 4	 4	 4	 4	 4	 4	l vj!""Q&&7fZ6H6K+K+K--// F F!%!6!6x{77K!L!L#44Xb\%5HII "(K(K((K(K(K L L" F)D G Gh G G GI(1((;(; # #9 $ 5 5i6H I I"33Ie4DEE5=="&}"<<<<#S"''    09/C/C  	+ 	+ 	 	 	 	  #!#$ ),EEEEE3F F6 "*- ? ? $ 5 5gg6F G G"33GENCC&v4466>>udKK#[,>>>>>	? ?r   r3   c                 :    t          || j        | j                  S )N)r3   r4   r5   )rA   r4   r5   )rZ   r3   s     r   rA   z SubtitlesWriter.format_timestamp   s(    !%!:.
 
 
 	
r   r   )rq   rr   rs   boolru   rt   rv   r   r%   r   r(   rA   r   r   r   r   r   w   s         
 #'i?
 )-(, %,0i? i? i?i? $i?
 !i? !i? i? %SMi? i? i? i?V
 
 
 
 
 
 
r   r   c                   ^    e Zd ZU dZeed<   dZeed<   dZeed<   	 dde	d	e
d
ee	         fdZdS )WriteVTTvttrW   Fr4   r2   r5   Nr\   ra   r^   c           	          t          d|            | j        ||fi |D ]!\  }}}t          | d| d| d|d           "d S )NzWEBVTT
)ra    --> r   Tr{   )r}   r   )rZ   r\   ra   r^   ri   rF   rQ   r/   s           r   rh   zWriteVTT.write_result   s     	jt$$$$ 3 3FG N Nv N N 	I 	IE3U0000000t4HHHHH	I 	Ir   r   rq   rr   rs   rW   rt   ru   r4   r   r5   rv   r   r   rh   r   r   r   r   r      s         Is!&$&&&NC EII II"(I3;D>I I I I I Ir   r   c                   ^    e Zd ZU dZeed<   dZeed<   dZeed<   	 dde	d	e
d
ee	         fdZdS )WriteSRTsrtrW   Tr4   ,r5   Nr\   ra   r^   c                     t           | j        ||fi |d          D ]'\  }\  }}}t          | d| d| d| d|d           (d S )Nr   )rF   r   r   Tr{   )r   r   r}   )	rZ   r\   ra   r^   ri   r   rF   rQ   r/   s	            r   rh   zWriteSRT.write_result   s     &/D::6::!&
 &
 &
 	N 	N!A!sD Q55%55c55T555DMMMMM	N 	Nr   r   r   r   r   r   r   r      s         Is!%$%%%NC EIN NN"(N3;D>N N N N N Nr   r   c                   F    e Zd ZU dZdZeed<   	 d	dedede	e         fdZ
dS )
WriteTSVa  
    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++.
    tsvrW   Nr\   ra   r^   c                 `   t          dddd|           |d         D ]}t          t          d|d         z            |d           t          t          d|d         z            |d           t          |d                                                             dd	          |d
           d S )NrF   rQ   r/   	)sepra   rB   r7   )ra   rQ    Tr{   )r}   r<   r~   r	   r   s         r   rh   zWriteTSV.write_result  s     	guf$T::::j) 	U 	UG%ww//00tFFFF%wu~-..TtDDDD'&/''))11$<<4tTTTTT	U 	Ur   r   )rq   rr   rs   __doc__rW   rt   ru   rv   r   r   rh   r   r   r   r   r   	  sx           Is EIU UU"(U3;D>U U U U U Ur   r   c                   B    e Zd ZU dZeed<   	 ddededee         fdZ	dS )		WriteJSONjsonrW   Nr\   ra   r^   c                 0    t          j        ||           d S r   )r   dumprp   s        r   rh   zWriteJSON.write_result"  s     		&$r   r   r   r   r   r   r   r     sb         Is EI    "( 3;D>           r   r   output_formatrX   c                 
   t           t          t          t          t          d}| dk    rJfd|                                D             	 ddt          dt          dt          t                   ffd}|S  ||                    S )	N)ry   r   r   r   r   allc                 &    g | ]} |          S r   r   )rH   writerrX   s     r   r   zget_writer.<locals>.<listcomp>4  s#    IIIfvvj))IIIr   r\   ra   r^   c                 (    D ]} || ||fi | d S r   r   )r\   ra   r^   ri   r   all_writerss        r   	write_allzget_writer.<locals>.write_all6  s=     & 8 8vtW7777778 8r   r   )	rx   r   r   r   r   valuesrv   r   r   )r   rX   writersr   r   s    `  @r   
get_writerr   (  s      G IIII8H8HIII CG	8 	8	8 &	819$	8 	8 	8 	8 	8 	8 !7=!*---r   )Fr2   )!r   rb   r   sysr-   typingr   r   r   r   getdefaultencodingr   r   r   r!   r&   r)   r(   r1   r   rt   rA   rv   rN   rT   rV   rx   r   r   r   r   r   r   r   r   r   <module>r      s    				 				 



  3 3 3 3 3 3 3 3 3 3 3 3(#(**gX X X X  
  
Q Q Q5 5 57 7 7<u < < < < OR *.HK   *T
 x    d4j Xe_    " " " " " " " "0B B B B B| B B Bt
 t
 t
 t
 t
l t
 t
 t
n
I 
I 
I 
I 
I 
I 
I 
IN N N N N N N NU U U U U| U U U,               ..$'.tVT"D(). . . . . .r   