
    :}j                    Z   d Z ddlmZ ddlZddlmZmZ ddlmZ  ej	        d          Z
 ed           G d	 d
                      Z ed           G d d                      Z ed           G d d                      Zd)dZd*dZd+dZd,dZddd-d#Zd.d$Zd.d%Zd/d(ZdS )0z3Deterministic renderer-owned subtitle cue planning.    )annotationsN)	dataclassreplace)ValidationResultz![A-Za-z0-9]+(?:['-][A-Za-z0-9]+)?T)frozenc                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   dZded<   dZded<   edd            Zedd            ZdS )SubtitleStylestrnameprimary_coloraccent_colorstroke_colorshadow_color	placementint	max_linesmin_words_per_cuemax_words_per_cuesafe_zone_bottom_percentfont_weightV   	font_sizei  margin_vreturn'SubtitleStyle'c                .     | dddddddddd	d
          S )zWReturn the TrueTrace kinetic-caption baseline: inspired mechanics, original brand skin.truetrace_hormozi_inspired#FFFFFF#22D3EE#050816#000000lower_middle_above_ui_safe_zone         800)r   r   r   r   r   r   r   r   r   r   r    clss    T/home/agent/jarvis_runtime/autoshortsbot/AutoShortsBot/autoshorts/audio/subtitles.pyhormozi_inspiredzSubtitleStyle.hormozi_inspired   s>     s-#"""7%'
 
 
 	
    c                2     | ddddddddd	d
ddd          S )zRReturn a compact final-motion style that leaves mechanism diagrams breathing room.truetrace_final_motion_compactr   r   r    r!   r"   r#            r&   H   i@  )r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r(   s    r*   final_motion_compactz"SubtitleStyle.final_motion_compact0   sD     s1#"""7%'
 
 
 	
r,   N)r   r   )	__name__
__module____qualname____annotations__r   r   classmethodr+   r3   r'   r,   r*   r	   r	      s         IIINNNNNN!!!!IH
 
 
 [
" 
 
 
 [
 
 
r,   r	   c                  b    e Zd ZU ded<   ded<   ded<   ded<   dZded	<   d
Zded<   dZded<   dS )SubtitleCuer
   textr   start_msend_msactive_wordTboolrenderer_ownedr#   r   r   emphasis_colorN)r4   r5   r6   r7   r@   r   rA   r'   r,   r*   r:   r:   E   sl         IIIMMMKKKNI#N######r,   r:   c                  V    e Zd ZU ded<   ded<   dZded<   dZd	ed
<   dZd	ed<   ddZdS )SubtitleTracktuple[SubtitleCue, ...]cuesr	   styleTr?   r@   r'   ztuple[str, ...]side_effectsexternal_callsr   'SubtitleTrack'c                $    t          | |          S )N)rE   )r   )selfrE   s     r*   	with_cueszSubtitleTrack.with_cuesX   s    t$''''r,   N)rE   rD   r   rI   )r4   r5   r6   r7   r@   rG   rH   rL   r'   r,   r*   rC   rC   P   su         !!!!N$&L&&&&&(N((((( ( ( ( ( (r,   rC   r;   r
   r   	list[str]c                6    t                               |           S N)_WORD_REfindall)r;   s    r*   _wordsrR   \   s    D!!!r,   words	min_wordsr   	max_wordslist[list[str]]c               j   g }d}|t          |           k     rt          |           |z
  }t          ||          }d|cxk     r|k     r)n n&|r$|d                             | |d                     nC||dz   k    r|}|                    | |||z                       ||z  }|t          |           k     |S )Nr   r/   )lenminextendappend)rS   rT   rU   chunksindex	remainingtakes          r*   _chunk_wordsra   `   s     FE
#e**

JJ&	9i((y$$$$9$$$$$$2JeEFFm,,,	A%%DeEEDL01222 #e**

 Mr,   c                   g }t          j        d|           D ]9}t          |          }|s|                    t	          |||                     :|S )Nz	[.,:;!?]+rT   rU   )resplitrR   r[   ra   )r;   rT   rU   r]   segmentrS   s         r*   _semantic_word_chunksrg   p   sc     F8L$// U Uw 	l5ISSSTTTTMr,   chunkc                :    t          d | D             d           S )Nc              3  >   K   | ]}|                                 V  d S rO   upper.0words     r*   	<genexpr>z_active_word.<locals>.<genexpr>|   s*      //

//////r,   c                $    t          |           | fS rO   )rY   )ro   s    r*   <lambda>z_active_word.<locals>.<lambda>|   s    3t99dBS r,   )key)max)rh   s    r*   _active_wordru   z   s(    /////5S5STTTTr,   F)preserve_phrase_boundariestotal_duration_secondsrF   rv   r?   c                  |                                  st          d          |dk    rt          d          t          |           }t          |          |j        k     rt          d          |rt          | |j        |j                  }nt          ||j        |j                  }|dz  }g }t          |          D ]\  }}	t          ||z  t          |          z            }
t          |dz   |z  t          |          z            }|
                    t          d                    d	 |	D                       |
|t          |	          d
|j        |j                             t!          t#          |          |          }t%          |          }|j        s't          d                    |j                            |S )Nzsubtitle text is requiredr   z'total_duration_seconds must be positivez-subtitle text must contain at least two wordsrc   i  r/    c              3  >   K   | ]}|                                 V  d S rO   rk   rm   s     r*   rp   z(_build_subtitle_track.<locals>.<genexpr>   s*      ==tdjjll======r,   T)r;   r<   r=   r>   r@   r   rA   )rE   rF   z; )strip
ValueErrorrR   rY   r   rg   r   ra   	enumerateroundr\   r:   joinru   r   r   rC   tuplevalidate_subtitle_trackis_validerrors)r;   rw   rF   rv   rS   r]   total_msrE   r^   rh   r<   r=   track
validations                 r*   _build_subtitle_trackr      s    ::<< 64555""BCCC4LLE
5zzE+++HIII! k&tu7NZ_Zqrrreu/FRWRijjj%,H D!&)) 
 
u)CKK788	X-F;<<XX==u=====!(//#/$1  
	
 
	
 
	
 
	
 uT{{%888E(//J 7:#455666Lr,   c               T    t          | |t                                                    S )zKCreate continuous 2..5-word renderer-owned subtitle cues for final burn-in.)rw   rF   )r   r	   r+   r;   rw   s     r*   build_hormozi_subtitle_trackr      s0     !5,,..   r,   c               V    t          | |t                                          d          S )z>Create compact 1..3-word cues for final-near mechanism videos.T)rw   rF   rv   )r   r	   r3   r   s     r*   !build_final_motion_subtitle_trackr      s3     !50022#'	   r,   r   r   c                p   g }| j         s|                    d           | j        r|                    d           | j        r|                    d           | j        s|                    d           d }t          | j        d          D ]\  }}|j                                        }|j         s|                    d| d           | j        j	        t          |          cxk    r| j        j        k    sn |                    d| d	           |j        |j        k    r|                    d| d
           |!|j        dk    r|                    d           n$|j        |k    r|                    d| d           |j                                        s|                    d| d           n,|j        d |D             vr|                    d| d           |j        | j        j        k    r|                    d| d           |j        }t#          | t%          |                    S )Nz%subtitle track must be renderer-ownedz)subtitle track must not have side effectsz+subtitle track must not have external callsz%at least one subtitle cue is requiredr/   )startzsubtitle cue z must be renderer-ownedz must contain 2..5 wordsz% end_ms must be greater than start_msr   z$first subtitle cue must start at 0msz& must start when the previous cue endsz active_word is requiredc                6    h | ]}|                                 S r'   rk   rm   s     r*   	<setcomp>z*validate_subtitle_track.<locals>.<setcomp>   s     $H$H$HdTZZ\\$H$H$Hr,   z$ active_word must appear in cue textz exceeds style max lines)r   r   )r@   r\   rG   rH   rE   r}   r;   re   rF   r   rY   r   r=   r<   r>   r{   r   r   r   )r   r   previous_endr^   cue	cue_wordss         r*   r   r      st   F ?=>>> CABBB ECDDD: ?=>>>#L
!444 " "
sHNN$$	! 	JMMH%HHHIII-Y````5;C`````MMI%IIIJJJ:%%MMV%VVVWWW|q  DEEE\\))MMW%WWWXXX$$&& 	WMMI%IIIJJJJ_$H$Hi$H$H$HHHMMU%UUUVVV=5;000MMI%IIIJJJzZfFFFFr,   )r;   r
   r   rM   )rS   rM   rT   r   rU   r   r   rV   )r;   r
   rT   r   rU   r   r   rV   )rh   rM   r   r
   )
r;   r
   rw   r   rF   r	   rv   r?   r   rC   )r;   r
   rw   r   r   rC   )r   rC   r   r   )__doc__
__future__r   rd   dataclassesr   r   autoshorts.ideas.candidater   compilerP   r	   r:   rC   rR   ra   rg   ru   r   r   r   r   r'   r,   r*   <module>r      s   9 9 " " " " " " 				 * * * * * * * * 7 7 7 7 7 7 2::;; $3
 3
 3
 3
 3
 3
 3
 3
l $$ $ $ $ $ $ $ $ $( ( ( ( ( ( ( (" " " "       U U U U (-) ) ) ) ) )X      !G !G !G !G !G !Gr,   