ó
    ïŽ¡j¥=  ã                   óf  • S SK r S SKrS SKJrJr  S SKJr  S SKJrJ	r	  S SK
r
S SKrS SKJrJrJr  S SKJr  S SKJrJr  S SKJrJrJrJr  S S	KJr  \" S
S9 " S S5      5       r\" SS9S 5       rS rS rS r S\!S\S   4S jr"S-S\!S\#S\!4S jjr$    S.S\!S\#S\#S\#S\#S\!4S jjr%S-S\!S\!S\S    S!\#S\#4
S" jjr&S\!S\S   S\S    S\!4S# jr'S-S\!S\S   S\S    S$\#S\!4
S% jjr( S-S\!S\S   S\S    S!\#S\!4
S& jjr)S/S\!S'\	\   S(\*4S) jjr+S/S\!S'\	\   S(\*4S* jjr, S0S\!S'\	\   S(\*S+\#4S, jjr-g)1é    N)Ú	dataclassÚreplace)Ú	lru_cache)ÚLiteralÚOptional)ÚNormalizationCandidateÚNormalizationMappingÚNormalizationResult)ÚNormalizerConfig)ÚFSTSÚ	FST_PATHS)ÚUniqueOutputPathStreamÚcompose_inputÚtrace_input_spansÚtransduce_with_spans)ÚTokenParserT)Úfrozenc                   ól   • \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   \\S'   \\S'   \S	 5       r	S
r
g)Ú_NormalizationCandidateé$   ÚtaggedÚoutputÚtagger_weightÚverbalizer_weightÚbest_verbalizer_weightÚtagger_rankÚverbalizer_rankc                 óN   • U R                   U R                  -   U R                  -
  $ ©N)r   r   r   )Úselfs    ÚšC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\wetext/utils.pyÚweightÚ_NormalizationCandidate.weight.   s$   € à×!Ñ! D×$:Ñ$:Ñ:¸T×=XÑ=XÑXÐXó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstrÚ__annotations__ÚfloatÚintÚpropertyr"   Ú__static_attributes__r%   r$   r!   r   r   $   s>   ‡ àƒKØƒKØÓØÓØ!Ó!ØÓØÓàñYó óYr$   r   )Úmaxsizec                 ó@   • [         R                  R                  U 5      $ r   )ÚkaldifstÚStdVectorFstÚread)Úpaths    r!   Ú	_read_fstr6   3   s   € ä× Ñ ×%Ñ% dÓ+Ð+r$   c                 óª  • SnU R                   (       a  US:w  a  U R                  S:X  a  SnSnU R                  (       a  US:X  a  U R                  S:X  a  Sn[        [        U   U R                     U   5      R                  5       n[        [        U   U R                     U   5      R                  5       nU R                  S	4U R                  S
4U R                  S4U R                  S4U R                  S44nU HR  u  nu  p‰U(       d  M  [        R                  " US5        [        R                  " U[        [        U   U	   5      5      nMT     XE4$ )NÚtaggerÚenÚitnÚtagger_enable_0_to_9Ú
verbalizerÚzhÚtnÚverbalizer_remove_erhua)Ú
preprocessÚtraditional_to_simple)ÚpostprocessÚfull_to_half)rB   Úremove_interjections)rB   Úremove_puncts)rB   Útag_oovÚolabel)Úenable_0_to_9ÚoperatorÚremove_erhuar6   r   ÚcopyrA   rC   rD   rE   rF   r2   ÚarcsortÚcompose)
ÚconfigÚlangÚtagger_nameÚverbalizer_namer8   r<   ÚpostprocessorsÚenabledÚgroupÚnames
             r!   Ú_graphsrV   8   s9  € Ø€KØ×× ¨£°·±ÀEÓ1IØ,ˆØ"€OØ××˜t t›|°·±À4Ó0GØ3ˆä”y ‘ v§¡Ñ7¸ÑDÓE×JÑJÓL€FÜœ9 T™?¨6¯?©?Ñ;¸OÑLÓM×RÑRÓT€Jà	×	%Ñ	%Ð'NÐOØ	×	Ñ	Ð=Ð>Ø	×	$Ñ	$Ð&MÐNØ	×	Ñ	Ð?Ð@Ø	�‰Ð3Ð4ð€Nó #1Ñˆ‘�%ßˆ7Ü×Ò˜Z¨Ô2Ü!×)Ò)¨*´iÄ	È%Ñ@PÐQUÑ@VÓ6WÓXŠJñ #1ð ÐÐr$   c                 óz   • [        U [        5      (       d  [        U [        5      (       a  U S:  a  [        S5      eg )Né   z nbest must be a positive integer)Ú
isinstanceÚboolr-   Ú
ValueError)Únbests    r!   Ú_validate_nbestr]   P   s4   € Ü�%œ×Ñ¤j°¼×&<Ñ&<ÀÈÃ	ÜÐ;Ó<Ð<ð AJr$   c           	      ó|  ^^^^^^• [        [        X5      5      m/ mSm/ n[        5       nUUUUUU4S jn[        U5      U:  Gad  TR	                  5       n	T(       d  U" 5       (       d  GO?M7  U	b,  U	R
                  U	R                  S4TS   S S :  a	  U" 5         Mf  [        R                  " T5      u      p«pÍUR                  5       nUb’  [        UR                  UR                  UR                  UR
                  UR                  UR                  UR                  5      n[        R                   " TUR
                  UR                  UR"                  UUU45        UR$                  U;  a,  UR'                  UR$                  5        UR)                  U5        [        U5      U:  a  GMd  U(       d  [+        S5      eU$ )Nr   c            	      óü  >• T
R                  5       n U c  g[        TT	5      R                  U R                  5      n[	        [        UT5      5      nUR                  5       nU R                  nTS-  mUc  g[        U R                  UR                  U R                  UR                  UR                  UUR                  5      n[        R                  " TUR                  UR                  UR                  TUU45        g)NFrX   T)Úpopr   ÚreorderÚtextr   r   Úrankr   r"   ÚheapqÚheappushr   r   )Útagged_pathÚ	reorderedÚverbalizer_streamÚverbalized_pathr   Ú	candidateÚ	activatedÚfrontierrO   rI   Útagger_streamr<   s         €€€€€€r!   Úactivate_next_tagÚ4_normalization_candidates.<locals>.activate_next_tag\   sö   ø€ à#×'Ñ'Ó)ˆØÑØÜ  hÓ/×7Ñ7¸×8HÑ8HÓIˆ	Ü2´=ÀÈJÓ3WÓXÐØ+×/Ñ/Ó1ˆØ!×&Ñ&ˆØ�Q‰ˆ	ØÑ"ØÜ+Ø×ÑØ× Ñ Ø×ÑØ×"Ñ"Ø×"Ñ"ØØ× Ñ ó
ˆ	ô 	�ŠØà× Ñ Ø×%Ñ%Ø×)Ñ)ØØØ!ðô
	
ð r$   é   z-no normalization path for the requested input)r   r   ÚsetÚlenÚpeekr"   rc   rd   Úheappopr`   r   r   rb   r   r   r   re   r   r   ÚaddÚappendÚRuntimeError)rb   rO   rI   r8   r<   r\   Ú
candidatesÚseen_outputsrn   Únext_tagÚ_Úserialrj   rh   Únext_verbalizedÚnext_candidaterk   rl   rm   s    `` `           @@@r!   Ú_normalization_candidatesr   U   sš  ý€ Ü*¬=¸Ó+FÓG€MØ€HØ€IØ€JÜ“5€L÷ ò  ôD ˆj‹/˜EÔ
!Ø ×%Ñ%Ó'ˆÞÙ$×&Ñ&ÙÙØÑ X§_¡_°h·m±mÀQÐ$GÈ(ÐSTÉ+ÐVXÐWXÈ/Ó$YÙÔÙÜ8=¿ºÀhÓ8OÑ5ˆˆ1ˆa˜Ø+×/Ñ/Ó1ˆØÑ&Ü4Ø× Ñ Ø×$Ñ$Ø×'Ñ'Ø×&Ñ&Ø×0Ñ0Ø×%Ñ%Ø×$Ñ$óˆNô �NŠNØà"×)Ñ)Ø"×.Ñ.Ø"×2Ñ2ØØ"Ø%ðô
ð ×Ñ <Ó/Ø×Ñ˜Y×-Ñ-Ô.Ø×Ñ˜iÔ(ôE ˆj‹/˜EÖ
!öF ÜÐJÓKÐKØÐr$   rb   Úreturn)r9   r=   Újac                 ó‚   • SnU  H  nSUs=::  a  S::  d  M  O  M  SnM     U(       d  U R                  5       (       a  S$ S$ )zx
Get the language of the text.

Args:
    text: The text to get the language of.
Returns:
    The language of the text.
Fu   ä¸€u   é¿¿Tr=   r9   )Úisdigit)rb   Úcontains_chineseÚchs      r!   Úget_langr†   ¦   sC   € ð ÐÛˆØ�rÕ%˜X×%Ñ%Ø#Òñ ö $ t§|¡|§~¡~ˆ4Ð?¸4Ð?r$   rA   c                 óT   • U(       a  [         S   S   " U 5      n U R                  5       $ )zÑ
Preprocess the text before normalization.

Args:
    text: The text to preprocess.
    traditional_to_simple: Whether to convert traditional Chinese to simplified Chinese.
Returns:
    The preprocessed text.
r@   rA   ©r   Ústrip)rb   rA   s     r!   r@   r@   ¶   s(   € ö Ü�LÑ!Ð"9Ò:¸4Ó@ˆØ�:‰:‹<Ðr$   rC   rD   rE   rF   c                 óê   • U(       a  [         S   S   " U 5      n U(       a  [         S   S   " U 5      n U(       a  [         S   S   " U 5      n U(       a  [         S   S   " U 5      n U R                  5       $ )ag  
Postprocess the text after normalization.

Args:
    text: The text to postprocess.
    full_to_half: Whether to convert full-width characters to half-width.
    remove_interjections: Whether to remove interjections.
    remove_puncts: Whether to remove punctuations.
    tag_oov: Whether to tag out-of-vocabulary words.
Returns:
    The postprocessed text.
rB   rC   rD   rE   rF   rˆ   )rb   rC   rD   rE   rF   s        r!   rB   rB   Å   sm   € ö& Ü�MÑ" >Ò2°4Ó8ˆÞÜ�MÑ"Ð#9Ò:¸4Ó@ˆÞÜ�MÑ" ?Ò3°DÓ9ˆÞÜ�MÑ" 9Ò-¨dÓ3ˆØ�:‰:‹<Ðr$   rO   rI   )r>   r:   rJ   c                 óÌ   • US:X  aQ  US:w  aK  [        [        R                  " SU 5      5      (       a  gU(       a  [        R                  " SU 5      (       a  gg[        U 5      S:„  $ )a  
Check if the text should be normalized.

Args:
    text: The text to check.
    lang: The language of the text.
    operator: The operator to use.
    remove_erhua: Whether to remove erhua for TN.
Returns:
    True if the text should be normalized, False otherwise.
r>   r9   z\dTu   å„¿|å…’Fr   )rZ   ÚreÚsearchrr   )rb   rO   rI   rJ   s       r!   Úshould_normalizerŽ   ã   sR   € ð �4Ó˜D D›LÜ”—	’	˜% Ó&×'Ñ'ØÞœBŸIšI j°$×7Ñ7ØØÜˆt‹9�q‰=Ðr$   c                 ó6   • [        X5      R                  U 5      $ )z~
Reorder the text.

Args:
    text: The text to reorder.
    lang: The language of the text.
Returns:
    The reordered text.
)r   ra   )rb   rO   rI   s      r!   ra   ra   ø   s   € ô �tÓ&×.Ñ.¨tÓ4Ð4r$   rH   c                 ó�   • [         U   U   S   nU(       a  US:w  a  US:X  a  [         U   S   S   nU" U 5      R                  5       $ )zÖ
Tag the text.

Args:
    text: The text to tag.
    lang: The language of the text.
    operator: The operator to use.
    enable_0_to_9: Whether to enable 0-to-9 conversion for ITN.
Returns:
    The tagged text.
r8   r9   r:   r;   rˆ   )rb   rO   rI   rH   r8   s        r!   Útagr‘     sN   € ô �$‰Z˜Ñ! (Ñ+€FÞ˜ ›¨(°eÓ*;Ü�d‘˜EÑ"Ð#9Ñ:ˆÙ�$‹<×ÑÓÐr$   c                 ó�   • [         U   U   S   nU(       a  US:X  a  US:X  a  [         S   S   S   nU" U 5      R                  5       $ )zØ
Verbalize the text.

Args:
    text: The text to verbalize.
    lang: The language of the text.
    operator: The operator to use.
    remove_erhua: Whether to remove erhua for TN.
Returns:
    The verbalized text.
r<   r=   r>   r?   rˆ   )rb   rO   rI   rJ   r<   s        r!   Ú	verbalizer“     sO   € ô �d‘˜HÑ% lÑ3€JÞ˜ ›¨°TÓ)9Ü˜$‘Z Ñ%Ð&?Ñ@ˆ
Ù�dÓ×!Ñ!Ó#Ð#r$   rN   r\   c                 ó4  • [        U5        [        U=(       d
    [        5       40 UD6nUR                  (       a  SU ;   a  [        R
                  " U 5      n U R                  5       nUR                  nUS:X  a  [        U5      nUS:X  aÊ  [        XAR                  5      n[        XeUR                  UR                  5      (       aX  [        XeUR                  UR                  5      n[!        XeUR                  5      n[#        XeUR                  UR                  5      n[%        UUR&                  UR(                  UR*                  UR,                  5      $ [        XEUR                  UR                  5      (       a@  [/        X5      u  px[1        XEUR                  XxU5       V	s/ s H  n	U	R2                  PM     n
n	OO[        XAR                  5      n[%        UUR&                  UR(                  UR*                  UR,                  5      nU/n
US:X  a  U
S   $ U
$ s  sn	f )z‘
Normalize the text.

Args:
    text: The text to normalize.
    config: Optional normalization config object.
Returns:
    The normalized text.
Ú'ÚautorX   r   )r]   r   r   Úfix_contractionsÚcontractionsÚfixr‰   rO   r†   r@   rA   rŽ   rI   rJ   r‘   rH   ra   r“   rB   rC   rD   rE   rF   rV   r   r   )rb   rN   r\   ÚkwargsÚpreparedrO   r   r8   r<   rj   Úoutputss              r!   Ú	normalizer�   +  sÑ  € ô �EÔÜ�V×1Ô/Ó1Ñ<°VÑ<€Fà×× 3¨$£;Ü×Ò Ó%ˆØ�z‰z‹|€HØ�;‰;€DØˆvƒ~Ü˜Ó!ˆØ�ƒzÜ˜H×&BÑ&BÓCˆÜ˜F¨&¯/©/¸6×;NÑ;N×OÑOÜ˜ v§¡¸×8LÑ8LÓMˆFÜ˜V¨6¯?©?Ó;ˆFÜ˜v¨V¯_©_¸f×>QÑ>QÓRˆFÜØØ×ÑØ×'Ñ'Ø× Ñ Ø�N‰Nó
ð 	
ô ˜¨¯©¸×9LÑ9L×MÑMÜ$ VÓ2Ñˆô 7°xÀvÇÁÐX^ÐlqÔró
âr�	ð ×ÔÙrð 	ð 
ˆô
 ˜H×&BÑ&BÓCˆÜØØ×ÑØ×'Ñ'Ø× Ñ Ø�N‰Nó
ˆð �(ˆØ !›ˆ7�1‰:Ð0¨Ð0ùò
s   Æ Hc                 ó  • [        U5        [        U=(       d
    [        5       40 UD6nUR                  (       a  SU ;   a  [        R
                  " U 5      n U R                  5       nUR                  nUS:X  a  [        U5      n[        XEUR                  UR                  5      (       d]  [        XAR                  5      n[        UUR                  UR                   UR"                  UR$                  5      n['        USSSSS5      /$ [)        X5      u  px[+        XEUR                  XxU5      n	U	 V
s/ s HM  n
['        U
R,                  U
R.                  U
R0                  U
R2                  U
R4                  U
R6                  S9PMO     sn
$ s  sn
f )z²Return distinct outputs together with their WFST ranking costs.

Costs are tropical weights: lower values rank first. They are not
probabilities or calibrated confidence scores.
r•   r–   g        r   )rb   ÚcostÚtagger_costÚverbalizer_costr   r   )r]   r   r   r—   r˜   r™   r‰   rO   r†   rŽ   rI   rJ   r@   rA   rB   rC   rD   rE   rF   r   rV   r   r   r"   r   r   r   r   )rb   rN   r\   rš   r›   rO   r   r8   r<   rx   rj   s              r!   Únormalize_candidatesr¢   ^  sb  € ô �EÔÜ�V×1Ô/Ó1Ñ<°VÑ<€FØ×× 3¨$£;Ü×Ò Ó%ˆØ�z‰z‹|€HØ�;‰;€DØˆvƒ~Ü˜Ó!ˆÜ˜H¨F¯O©O¸V×=PÑ=P×QÑQÜ˜H×&BÑ&BÓCˆÜØØ×ÑØ×'Ñ'Ø× Ñ Ø�N‰Nó
ˆô ' v¨s°C¸¸aÀÓCÐDÐDä  Ó.Ñ€FÜ*¨8¸6¿?¹?ÈFÐ`eÓf€Jñ $ó
ò $ˆIô 	Ø×!Ñ!Ø×!Ñ!Ø!×/Ñ/Ø%×7Ñ7Ø!×-Ñ-Ø%×5Ñ5ô	
ñ $ñ
ð 
ùò 
s   Ä/AFÚinclude_identityc                 óö  • [        U5        [        U=(       d
    [        5       40 UD6nUR                  (       a  [	        S5      eU R                  5       n[        U 5      [        U R                  5       5      -
  nUR                  nUS:X  a  [        U5      n[        XWUR                  UR                  5      (       d_  [        XS9nSn	U(       a6  U(       a/  [        XX:X  a  SOSSUU[        U5      -   S[        U5      UU5      4n	[        XU	5      n
US	:X  a  U
$ U
/$ [!        X5      u  p¼[#        XWUR                  X¼U5      n/ nU GH$  n[%        XqR                  5      nUR'                  UR(                  5      u  nn[+        UUUUR,                  S
9u  nn[/        UUR(                  US UR0                   5       5      n/ n	[3        UR0                  UU5       Hj  u  nu  nnu  nnUUU nUUU nUU:X  a  SO
U(       d  SOSnU(       d  US:w  d  M9  U	R5                  [        UUR6                  UU-   UU-   UUUU5      5        Ml     UR5                  [        X[9        U	5      5      5        GM'     US	:X  a  US   $ U$ )NzAnormalize_with_mapping is incompatible with fix_contractions=Truer–   )rN   r%   Úequalr   Úrawr   rX   )Úoutput_textc              3   óP   #   • U  H  oR                   UR                  4v •  M     g 7fr   )ÚstartÚend)Ú.0Útokens     r!   Ú	<genexpr>Ú)normalize_with_mapping.<locals>.<genexpr>·  s   é € ÐA²=¨%�k‰k˜5Ÿ9™9Õ%²=ùs   ‚$&Údelete)r]   r   r   r—   r[   r‰   rr   ÚlstriprO   r†   rŽ   rI   rJ   r�   r	   r
   rV   r   r   Úreorder_with_spansr   r   r   r   ÚtokensÚziprv   rU   Útuple)rb   rN   r\   r£   rš   r›   Úleading_offsetrO   r   ÚmappingsÚresultr8   r<   rx   Úresultsrj   Úparserrg   Útoken_spansÚoutput_spansÚinput_spansr¬   Úinput_startÚ	input_endÚoutput_startÚ
output_endÚsourceÚspokenÚkinds                                r!   Únormalize_with_mappingrÄ   ‡  sy  € ô �EÔÜ�V×1Ô/Ó1Ñ<°VÑ<€FØ××ÜÐ\Ó]Ð]à�z‰z‹|€HÜ˜“Y¤ T§[¡[£]Ó!3Ñ3€NØ�;‰;€DØˆvƒ~Ü˜Ó!ˆÜ˜H¨F¯O©O¸V×=PÑ=P×QÑQÜ˜4Ñ/ˆØˆÞ¦ä$Ø'Ó1‘G°yØØ"Ø"¤S¨£]Ñ2ØÜ˜“KØØó	ðˆHô % T°8Ó<ˆØ !›ˆvÐ1¨&¨Ð1ä  Ó.Ñ€FÜ*¨8¸6¿?¹?ÈFÐ`eÓf€JØ€GÜˆ	Ü˜T§?¡?Ó3ˆØ!'×!:Ñ!:¸9×;KÑ;KÓ!LÑˆ	�;Ü3ØØØØ!×(Ñ(ñ	 
Ñˆ�ô (ØØ×ÑØÙA°6·=²=ÓAó	
ˆð ˆÜKNØ�M‰M˜;¨öL
ÑGˆEÑ+�K Ñ-G¨l¸Jð ˜k¨)Ð4ˆFØ˜L¨Ð4ˆFØ$¨Ó.‘7ÆV±XÐQZˆDÞ 4¨7¥?Ø—‘Ü(ØØŸ
™
Ø# nÑ4Ø! NÑ2Ø$Ø"ØØó	öñL
ð& 	�‰Ô*¨4¼¸x»ÓI×JñG  ðH  !›ˆ7�1‰:Ð0¨Ð0r$   )F)FFFF)NrX   )NrX   F).rd   rŒ   Údataclassesr   r   Ú	functoolsr   Útypingr   r   r˜   r2   Úwetext.alignmentr   r	   r
   Úwetext.configr   Úwetext.constantsr   r   Úwetext.fst_utilsr   r   r   r   Úwetext.token_parserr   r   r6   rV   r]   r   r*   r†   rZ   r@   rB   rŽ   ra   r‘   r“   r-   r�   r¢   rÄ   r%   r$   r!   Ú<module>rÍ      sM  ðó Û 	ß *Ý ß $ã Û ç ^Ñ ^Ý *ß ,÷ó õ ,ñ �$Ñ÷Yð Yó ðYñ �4Ññ,ó ð,òò0=ò
Nðb@�3ð @˜7Ð#3Ñ4ô @ñ �Sð °ð À#õ ð" Ø!&ØØñØ
ðàðð ðð ð	ð
 ðð 	õñ<˜3ð  cð °W¸[Ñ5Ið ÐY]ð Ðjnõ ð*
5�#ð 
5˜WÐ%5Ñ6ð 
5À'È+ÑBVð 
5Ð[^ô 
5ñ ˆcð  ˜Ð!1Ñ2ð  ¸gÀkÑ>Rð  Ðcgð  Ðtwõ  ð& fkñ$Ø
ð$ØÐ-Ñ.ð$Ø:AÀ+Ñ:Nð$Ø^bð$àõ$ñ(01�Cð 01 Ð*:Ñ!;ð 01È3õ 01ñf&˜sð &¨HÐ5EÑ,Fð &ÐVYõ &ðT diñG1Ø
ðG1ØÐ 0Ñ1ðG1ØADðG1Ø\`öG1r$   