ó
    ö“,j:  ã                   ó¾   • S r SSKrSSKJrJrJr  SSKrSSKrSSKrSSK	r	SSK
Jr  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  \\\R.                  4   r " S S	5      rg)
z
Orthography profiles.
é    N)ÚUnionÚOptionalÚAny)Ú	Generator)Ú
TableGroupÚColumn)ÚTree)Úgrapheme_patternc                   ó"  • \ rS rSrSrSrSrSSSSS	.\S
SS./\S.S./0r\SS\	\
   S\\\4   4S jj5       rS\4S jrS\\\\4   SS4   4S jr\SS\
S\	\   SS 4S jj5       r\SS\S\SS 4S jj5       r\SS\
S\SS 4S jj5       rS rSrg)ÚProfileé   z?
An Orthography Profile as specified by Moran and Cysouw 2018.
ÚGraphemeÚNULLÚtablesÚ	Túutf-8)Ú	delimiterÚheaderÚencodingÚstring)ÚnameÚdatatypeÚrequired)ÚcolumnsÚ
primaryKey)ÚdialectÚtableSchemaNÚfnameÚreturnc                 ó€   • [         R                   " U R                  5      n[        U=(       d    S5      US   S   S'   U$ )zPThe default CSVW metadata to interpret a tab-separated values file as a Profile.Ú r   r   Úurl)ÚcopyÚMDÚstr)Úclsr   Úmds      ÚžC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\segments/profile.pyÚdefault_metadataÚProfile.default_metadata2   s6   € ô �YŠY�s—v‘vÓˆÜ!$ U§[¨bÓ!1ˆˆ8‰�Q‰˜ÑØˆ	ó    Úspecsc           
      óÖ  • [         R                  " 5       U l        [        5       U l        UR                  SS5      U l        UR                  SS5      U l        X l        [        R                  " [        5      n[        U5       GH+  u  pEU R                  U;  a  [        S5      eU R                  (       ah  UR                  5        VVs0 s HK  u  pg[         R"                  " U R                  U5      Uc  SO [         R"                  " U R                  U5      _MM     nnnUR                  U R                  5      nU(       d  [        S5      eU R                  R%                  UR'                  5       5      U l        X€R                  ;  a  XPR                  U'   GM  UR)                  SUS-   U5        GM.     [+        [-        U R                  R'                  5       5      5      U l        gs  snnf )ac  

Parameters
----------
specs : list of dict
    A list of grapheme specifications.
kw :
    The following keyword arguments are recognized:
    - fname: Path of the profile or profile metadata.
    - form: Unicode normalization to apply to the data in the profile before use.
    - remaining keyword arguments are assigned as dict to `Profile.metadata`.
r   NÚformzinvalid grapheme specificationzGrapheme must not be emptyz)line %s:duplicate grapheme in profile: %sé   )ÚcollectionsÚOrderedDictÚ	graphemesÚsetÚcolumn_labelsÚpopr   r.   ÚmetadataÚloggingÚ	getLoggerÚ__name__Ú	enumerateÚGRAPHEME_COLÚ
ValueErrorÚitemsÚunicodedataÚ	normalizeÚunionÚkeysÚwarningr	   ÚlistÚtree)	Úselfr,   ÚkwÚlogÚiÚspecÚkÚvÚgraphemes	            r(   Ú__init__ÚProfile.__init__9   s~  € ô %×0Ò0Ó2ˆŒÜ ›UˆÔØ—V‘V˜G TÓ*ˆŒ
Ø—F‘F˜6 4Ó(ˆŒ	ØŒä×Ò¤Ó)ˆÜ  ×'‰GˆAØ× Ñ ¨Ó,Ü Ð!AÓBÐBà�y�yð !%§
¡
¤ô.ò !-™˜ô  ×)Ò)¨$¯)©)°QÓ7Ø !¡	™¬{×/DÒ/DÀTÇYÁYÐPQÓ/RòSá ,ð ñ .ð
 —x‘x × 1Ñ 1Ó2ˆHÞÜ Ð!=Ó>Ð>à!%×!3Ñ!3×!9Ñ!9¸$¿)¹)»+Ó!FˆDÔð Ÿ~™~Ó-Ø+/—‘˜xÔ(à—‘ÐGÈÈQÉÐPX×Yñ) (ô* œ˜dŸn™n×1Ñ1Ó3Ó4Ó5ˆ�	ùó!.s   ÃAG%c              #   ó  #   • U R                   R                  5        Hb  u  pU R                  U0nUR                  U R                   Vs0 s H  oDS_M     sn5        UR                  UR                  5       5        Uv •  Md     gs  snf 7f)z&Yield grapheme specs from the Profile.N)r2   r=   r;   Úupdater4   )rE   rL   rI   ÚresrJ   s        r(   Ú	iteritemsÚProfile.iteritemsd   sm   é € à"Ÿn™n×2Ñ2Ö4‰NˆHØ×$Ñ$ hÐ/ˆCØ�J‰J¨×);Ò);Ó<Ò); A˜4šÑ);Ñ<Ô=Ø�J‰J�t—z‘z“|Ô$ØŒIò	 5ùâ<ùs   ‚AB	Á	B
Á4B	r.   c                 ó  •  [         R                  " U5      nSn[        UR                  5      S:w  a  [        S5      eUR                  nUR                  [        R                  " U5      US9  [        R                  " 5          [        R                   " S5        U " UR                  S   R#                  US9 VVVs/ s HI  nUR%                  5        VVs0 s H(  u  pxXwU R&                  :w  a  X€R(                  :X  a  SOU_M*     snnPMK     snnn0 UD6n	SSS5        U	$ ! [        R                  R                   a+    [         R
                  " U R                  U5      5      nUn GNMf = fs  snnf s  snnnf ! , (       d  f       W	$ = f)z[
Read an orthography profile from a metadata file or a default tab-separated profile file.
Né   z2profile description must contain exactly one table)r   r.   Úignorer   ©r   )r   Ú	from_fileÚjsonÚdecoderÚJSONDecodeErrorÚ	fromvaluer)   Úlenr   r<   Úcommon_propsrP   ÚpathlibÚPathÚwarningsÚcatch_warningsÚsimplefilterÚ	iterdictsr=   r;   r   )
r&   r   r.   ÚtgÚopfnamer6   ÚdrJ   rK   rQ   s
             r(   rX   ÚProfile.from_filel   sZ  € ð
	Ü×%Ò% eÓ,ˆBØˆGô ˆr�y‰y‹>˜QÓÜÐQÓRÐRØ—?‘?ˆØ�‰œgŸlšl¨5Ó1¸ˆÑ=Ü×$Ò$Õ&Ü×!Ò! (Ô+Ùð Ÿ9™9 Q™<×1Ñ1¸Ð1Ñ@õBâ@�að  !Ÿw™wœyô*Ú(‘t�qð  C×$4Ñ$4Ó4¸¿h¹h»‘dÈQÒNÙ(õ*á@óBðð ñ	ˆC÷ 'ð ˆ
øô �|‰|×+Ñ+ó 	Ü×%Ò% c×&:Ñ&:¸5Ó&AÓBˆBØ‹Gð	üó*ùô B÷ 'Ô&ð ˆ
úsB   ‚D Â9E8Â<E1Ã/E+ÄE1Ä	E8ÄAE(Å'E(Å+E1Å1E8Å8
FÚmappingÚtextc           
      ó   • [         R                  " [        R                  " U5      5      nUR	                  5        VVs/ s H-  u  pE[         R
                  " U R                  U4SU4X$4/5      PM/     nnnU " U6 $ s  snnf )z‘
Create a Profile instance from the Unicode graphemes found in `text`.

Parameters
----------
text
mapping

Returns
-------
A Profile instance.

Ú	frequency)r0   ÚCounterr
   ÚfindallÚmost_commonr1   r;   )r&   rj   ri   r2   rL   rl   r,   s          r(   Ú	from_textÚProfile.from_text„   s’   € ô  ×'Ò'Ô(8×(@Ò(@ÀÓ(FÓGˆ	ð (1×'<Ñ'<Ô'>ô@ò
 (?Ñ#�ô	 ×#Ò#Ø×!Ñ! 8Ð,Ø˜iÐ(ØÐ#ð%%ö &ñ (?ð 	ñ @ñ �Eˆ{Ðùó@s   ¾4A:c                 óÜ   • [         R                  " U5      R                  SS9 nUR                  5       nU R	                  SR                  U5      US9sSSS5        $ ! , (       d  f       g= f)z=Initialize a Profile from the graphemes found in a text file.r   )r   Ú ©ri   N)r_   r`   ÚopenÚ	readlinesrp   Újoin)r&   r   ri   ÚfpÚliness        r(   Úfrom_textfileÚProfile.from_textfileœ   sO   € ô �\Š\˜%Ó ×%Ñ%¨wÐ%Ñ7¸2Ø—L‘L“NˆEØ—=‘= §¡¨%£¸'�=ÐB÷ 8×7×7ús   ¤/AÁ
A+c                 óÆ  • [         R                  " U R                  5       5      nU R                   Hf  nX R                  :w  d  M  UR
                  S   R                  R                  R                  [        R                  " X R                  S.5      5        Mh     UR
                  S   R                  U R                  5       SS9R                  S5      R                  5       $ )zM
A Profile is represented as tab-separated lines of grapheme specifications.
r   )r   ÚnullNrW   Úutf8)r   r\   r)   r4   r;   r   r   r   Úappendr   r   ÚwriterR   ÚdecodeÚstrip)rE   re   Úcols      r(   Ú__str__ÚProfile.__str__£   s¬   € ô ×!Ò! $×"7Ñ"7Ó"9Ó:ˆØ×%Ô%ˆCØ×'Ñ'Õ'Ø—	‘	˜!‘×(Ñ(×0Ñ0×7Ñ7Ü×$Ò$¨c¿9¹9Ñ%EÓFöHñ &ð
 �y‰y˜‰|×!Ñ! $§.¡.Ó"2¸$Ð!Ð?×FÑFÀvÓN×TÑTÓVÐVr+   )r4   r   r.   r2   r6   rD   )Nrt   )r9   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r;   r   r$   Úclassmethodr   ÚPathTypeÚdictr%   r   r)   rM   r   rR   rX   rp   rz   r„   Ú__static_attributes__© r+   r(   r   r      s<  † ñð €LØ€Dàð "&Ø"Ø 'ñð %1Ø(0Ø(,ñð ð #/ñ	 ñð
ð
€Bð, ñ X¨hÑ%7ð À4ÈÈSÈÁ>ô ó ðð)6˜tô )6ðV˜9 T¨#¨s¨(¡^°T¸4Ð%?Ñ@ô ð ñ˜hð ¨h°s©mð Àyô ó ðð. ñ˜Sð ¨3ð ¸yô ó ðð. ñC (ð C°Sð CÈô Có ðCõ
Wr+   r   )r‰   r#   Útypingr   r   r   r7   r_   ra   r0   Úcollections.abcr   r>   Újson.decoderrY   Úcsvwr   r   Úsegments.treer	   Úsegments.utilr
   r%   r`   r‹   r   rŽ   r+   r(   Ú<module>r•      sT   ðñó ß 'Ñ 'Û Û Û Û Ý %Û Û ç #å Ý *à��g—l‘lÐ"Ñ#€÷WWò WWr+   