
     ^j/                        d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ  ee          	                                j
        d         Zedz  Zedz  Zg adedz  ed	z  ed
z  dddedz  edz  edz  ddgZd Zd Zd Zd Zd Zd Zedk    rS	  ej         e                       dS # e$ r0Z ede ej                    ej        d           Y dZ[dS dZ[ww xY wdS )    N)datetimetimezone)Path   zstory/promotion-report.jsonz!script/pronunciation-lexicon.json	narrationzstory/spoken-narration.txtzstory/tts-pronunciation.txtzlog/tts-pronunciation.jsonT)kindsourceoutputreceiptrequired_only_if_presentintrozaudio/intro-voice-source.txtz#audio/intro-voice-pronunciation.txtz log/intro-tts-pronunciation.jsonFc                 N    t          j        |                                           S N)hashlibsha256	hexdigest)datas    script/prepare-pronunciation.py	sha_bytesr      s    >$))+++    c                 D    t          |                                           S r   )r   
read_bytes)paths    r   sha_filer   #   s    T__&&'''r   c                 p    t          j        dt          j        |           z   dz   t           j                  S )Nu   (?<![0-9A-Za-zÀ-ỹĐđ])u   (?![0-9A-Za-zÀ-ỹĐđ]))recompileescape
IGNORECASE)tokens    r   patternr!   '   s.    :3bi6F6FFIeegigtuuur   c                    t          t          d d          }d |D             }d                    d |D                       }t          j        d|z   dz   t          j                  }g }g }d	}d	}|                    |           D ]}	| ||	                                         }
|                    |
           |t          |
          z  }|	
                    d	          }||                                         }|d
         }|                    |           |                    ||d         ||	                                |	                                ||t          |          z   d           |t          |          z  }|	                                }|                    | |d                     d                    |          |fS )Nc                 ,    t          | d                   S )Nr	   )len)rows    r   <lambda>zproject.<locals>.<lambda>,   s    c#h-.@.@ r   T)keyreversec                 D    i | ]}|d                                           |S )r	   casefold.0r%   s     r   
<dictcomp>zproject.<locals>.<dictcomp>-   s*    BBB3X''))3BBBr   |c              3   J   K   | ]}t          j        |d                    V  dS )r	   N)r   r   r,   s     r   	<genexpr>zproject.<locals>.<genexpr>.   s0      HHBIc(m44HHHHHHr   u   (?<![0-9A-Za-zÀ-ỹĐđ])(?:u   )(?![0-9A-Za-zÀ-ỹĐđ])r   spokenr	   )r	   lexicon_sourcer2   source_start
source_endoutput_start
output_end )sortedLEXICONjoinr   r   r   finditerstartappendr$   groupr+   end)source_textordered	by_sourcealternativesrxpartsreplacementssource_cursoroutput_cursormatch	unchangedoriginalitemr2   s                 r   projectrN   +   s   W"@"@$OOOGBB'BBBI88HHHHHHHL	(<7:WW

 
B ELMM[)) $ $ekkmm ;<	YY';;q>>**,,-hV"8n!KKMM))++)'#f++5
 
 	 	 	 	V$			LL]^^,---775>><''r   c                     | }t          |          D ]S}|d         }|d         }|||         |d         k    rt          d          |d |         |d         z   ||d          z   }T|S )Nr6   r7   r2   z$reverse verification offset mismatchr	   )reversedRuntimeError)output_textrG   textr%   r=   r@   s         r   reverse_projectionrT   N   s    D%% 9 9N#,c	?c(m++EFFFFUF|c(m+d344j8Kr   c            	      L
   t                                           st          d          t                                          st          d          t	          j        t                              d                    } |                     d          dus|                     d          dk    rt          d	          d
 |                     dg           D             at          st          d          t	          j        t                               d                    }|                    d          }|                    d          dus|st          d          g }t          D ]}|d         }|d         }|d         }|                                st          d|           |                    d          }|
                                st          d|           t          |          \  }	}
t          |	|
          }|                    d          |                    d          k    }g }t          D ]t          t          d                                       |                    }t#          fd|
D                       }d         o|d          p|dk    }|                    i |||d           d |D             }|o| }|j                            dd           |                    |	d           t-          |          t/          |	                    d                    k    rt          d          i ddd|d|d         d|d t1          |                    t4                              d!t-          |          d"t1          |                    t4                              d#t-          |          d$t1          t                              t4                              d%t-          t                    d&|d't          |
          d(|
d)|d*dd+d,d-|d.t7          j        t:          j                                                  i}|j                            dd           |                    t	          j         |d,d/0          d1z   d           |st          d2|d          d3|           |                    |d         t          |
          |d#         d4           tC          t	          j         d|d5d,6                     dS )7Nzpromotion report missingz%project pronunciation lexicon missingzutf-8)encodingverifiedTvoicezngoc-huyen-vbeez%project pronunciation lexicon invalidc                 \    g | ])}|d          |d         |                     d          du d*S )r	   r2   required_for_introT)r	   r2   required)getr,   s     r   
<listcomp>zmain.<locals>.<listcomp>b   sT        	 (m(m 455=	
 	
  r   entriesz#project pronunciation lexicon emptyspoken_sha256zpromotion authority invalidr	   r
   r   zmissing TTS source: zempty TTS source: c              3      K   | ]<}|d                                           d                                          k    8dV  =dS )r3   r	   r   Nr*   )r-   r%   rM   s     r   r1   zmain.<locals>.<genexpr>   sR      ###EUAVA_A_AaAaeijrese|e|e~e~A~A~AA~A~A~A~##r   r[   r   r   )r[   source_countreplacement_countc                 j    g | ]0}|d          |d         k    s|d         r|d          dk    (|d         1S )ra   rb   r[   r   r	    r,   s     r   r]   zmain.<locals>.<listcomp>   sX     
 
 
!>"c*=&>>>J ?$'$71$<$< M$<$<$<r   )parentsexist_okz'pronunciation output read-back mismatchversionr   r   source_canon_sha256source_pathsource_sha256projection_pathprojection_sha256lexicon_pathlexicon_sha256lexiconrb   rG   reverse_verifiednon_lexicon_changessemantic_content_changedFunresolved_required
checked_at   )ensure_asciiindent
zpronunciation gate failed for z: )r   rG   rl   )rW   sources)rv   )"	PROMOTIONis_filerQ   LEXICON_PATHjsonloads	read_textr\   r:   SOURCESstriprN   rT   encoder$   r!   findallsumr>   parentmkdir
write_textr   r   strrelative_toPROJECTr   nowr   utc	isoformatdumpsprint)lexicon_doc	promotioncanonresultsspecr	   r
   receipt_pathrA   	projectedrG   reconstructedrp   countsra   rb   r[   
unresolvedrW   r   rM   s                       @r   mainr   Y   s    75666!! DBCCC*\33W3EEFFKz""$..+//'2J2JN_2_2_BCCC  ??9b11  G  B@AAA
9...@@AAIMM/**E}}Z  ,,E,8999G 4E 4EhhI~~ 	@>f>>???&&&88  "" 	><F<<===")+"6"6	<*9lCC(//88K<N<Nw<W<WW 	@ 	@DwtH~66>>{KKLLL ########  J'f6P1Q-Q-eUadeUeHMM~T~xl}~~~
 
%+
 
 


 $6JD4888)g666Fy)9)9')B)BCCCCHIII
q

 DL
 "5	

 3v11'::;;
 Xf--
 s6#5#5g#>#>??
  &!1!1
 C 8 8 A ABB
 h|44
 v
  \!2!2
 L
  0
 "1
  '!
" ":#
$ (,x|44>>@@%
 
( 	!!$!>>>
7q Q Q QTX Xcjkkk 	^\V\\PZ\\]]]Vc,>O>Ofm  oB  gC  D  D  	E  	E  	E  	E	$*$7;;%
P
P
PQQQ1r   __main__zPronunciation gate blocked: )file)r   r}   r   sysr   r   pathlibr   __file__resolvere   r   rz   r|   r:   r   r   r   r!   rN   rT   r   __name__exit	Exceptionexcr   stderrrd   r   r   <module>r      s     				 



 ' ' ' ' ' ' ' '      
$x..
 
 
"
"
*1
-33	<<
 889999$(  ::AA??$) $, , ,( ( (v v v (  (  (F  N N Nb z   2S22DDDD s   B( (C-%CC