
    L^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dddd	d
ddd	dddd	dddd	dddd	dddd	gZ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.jsonFacebooku
   phây búcF)sourcespokenrequiredYouTubeu   diu túpaudiou	   au đi ôTvideou	   vi đi ôradiou	   ra đi ôvalizva li	narrationzstory/spoken-narration.txtzstory/tts-pronunciation.txtzlog/tts-pronunciation.json)kindr   outputreceiptrequired_only_if_presentintrozaudio/intro-voice-source.txtz#audio/intro-voice-pronunciation.txtz log/intro-tts-pronunciation.jsonc                 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>2   s    c#h-.@.@ r   T)keyreversec                 D    i | ]}|d                                           |S )r   casefold.0r-   s     r   
<dictcomp>zproject.<locals>.<dictcomp>3   s*    BBB3X''))3BBBr   |c              3   J   K   | ]}t          j        |d                    V  dS )r   N)r$   r&   r4   s     r   	<genexpr>zproject.<locals>.<genexpr>4   s0      HHBIc(m44HHHHHHr   u   (?<![0-9A-Za-zÀ-ỹĐđ])(?:u   )(?![0-9A-Za-zÀ-ỹĐđ])r   r	   r   )r   lexicon_sourcer	   source_start
source_endoutput_start
output_end )sortedLEXICONjoinr$   r%   r'   finditerstartappendr,   groupr3   end)source_textordered	by_sourcealternativesrxpartsreplacementssource_cursoroutput_cursormatch	unchangedoriginalitemr	   s                 r   projectrU   1   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 )Nr=   r>   r	   z$reverse verification offset mismatchr   )reversedRuntimeError)output_textrN   textr-   rD   rG   s         r   reverse_projectionr[   T   s    D%% 9 9N#,c	?c(m++EFFFFUF|c(m+d344j8Kr   c            	      2   t                                           st          d          t          j        t                               d                    } |                     d          }|                     d          dus|st          d          g }t          D ]R}|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t/          |                    t2                              dt+          |          dt/          |                    t2                              dt+          |          d|dt          |	          d|	d |d!dd"d#d$|d%t5          j        t8          j                                                  }|j                            dd           |                    t          j        |d#d&'          d(z   d           |st          d)|d          d*|           |                    |d         t          |	          |d         d+           TtA          t          j        d|d,d#-                     dS ).Nzpromotion report missingzutf-8)encodingspoken_sha256verifiedTzpromotion authority invalidr   r   r   zmissing TTS source: zempty TTS source: c              3      K   | ]<}|d                                           d                                          k    8dV  =dS )r:   r   r   Nr2   )r5   r-   rT   s     r   r9   zmain.<locals>.<genexpr>v   sR      ###EUAVA_A_AaAaeijrese|e|e~e~A~A~AA~A~A~A~##r   r
   r   r   )r
   source_countreplacement_countc                 R    g | ]$}|d          
|d         |d         k    |d         %S )r
   ra   rb   r    r4   s     r   
<listcomp>zmain.<locals>.<listcomp>y   s<    }}}Z}SQ_M`dgh{d|M|M|c(mM|M|M|r   )parentsexist_okz'pronunciation output read-back mismatchversionr   r   source_canon_sha256source_pathsource_sha256projection_pathprojection_sha256lexiconrb   rN   reverse_verifiednon_lexicon_changessemantic_content_changedFunresolved_required
checked_at   )ensure_asciiindent
zpronunciation gate failed for z: )r   rN   rm   )r_   sources)ru   )!	PROMOTIONis_filerX   jsonloads	read_textgetSOURCESstriprU   r[   encoderA   r,   r)   findallsumrE   parentmkdir
write_textr"   r   strrelative_toPROJECTr   nowr   utc	isoformatdumpsprint)	promotioncanonresultsspecr   r   receipt_pathrH   	projectedrN   reconstructedro   countsra   rb   r
   
unresolvedr_   r   rT   s                      @r   mainr   _   s    75666
9...@@AAIMM/**E}}Z  ,,E,8999G .E .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}~~~}}v}}}
#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
 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__resolverf   r   ry   rA   r   r   r"   r)   rU   r[   r   __name__exit	Exceptionexcr   stderrrd   r   r   <module>r      s&     				 



 ' ' ' ' ' ' ' '      
$x..
 
 
"
"
*1
-33	\uEEJEBB+4@@+5AA+5AAe<< 889999$(  ::AA??$) $, , ,( ( (v v v (  (  (F  8 8 8v z   2S22DDDD s   'C C6%C11C6