
    h(M                        S SK r S SKrS SKJs  Jr  S SKrS SKJr  S SK	J
r
Jr  S SKJr  S SKJr  S SKJr  0 SS1_S	S
1_SS1_SS1_SS1_SS1_SS1_SS1_SS1_SS1_SS1_SS1_SS 1_S!1 S"k_S#S$1_S%S&1_S'S(1_S)S*10ErS+S,S-S.S.S/S0S1S2S3SS4S5S6S7S8.rSLS9 jrSLS: jrS; rS< rS= rS> rS? rS@ rSA rSB rSC rSD rSE r SF r!SG r"SH r#SIr$SJ r%\&SK:X  a  \%" 5         gg)M    N)Path)defaultdictCounter)normalize_name)data_filenameparse_registryFM057ZA018003021005419019USgswzde-CHCDCGHaniHanbtlfililohiltzmzghznds-NLndscmnzhzfa-AF>   fagbzprsKoreHangmszsmlvltLVLTBreatannaisTagaloga
FilipineraDargwau   интерлингваzSamaritan HebrewzMongol (New Guinea)Romangz	Kalam-Taiu   ምዕራባዊ አፍሪካu   ምስራቃዊ አፍሪካu   ምዕራባዊ አውሮፓu   ምስራቃዊ አውሮፓ))gdbr)eur   )r4   r   )afdar)zaf-NAr6   )zaz-Cyrlia)ensmp)r8   mgt)r8   rmm)r8   taw)furlad)am011)r?   014)r?   155)r?   151c           	         [        U Vs/ s H  o3S   PM	     sn5      n[        U Vs/ s H  o3S   U:X  d  M  US   PM     sn5      n[        U5      S:X  a  UR                  S5      nUS   S   $ U H_  nU[        ;   d  M  [        U5      nUR                  U5        X[        U   -  :X  d  M<  U(       a  [        SR                  X5      5        Us  $    U(       a  US:  a  [        [        5      n	U H   u  pnX:X  d  M  X   R                  U
5        M"     [        SR                  U 5      5        [        U	R                  5       5       H/  u  p<[        SR                  USR                  U5      5      5        M1     gs  snf s  snf )	a  
Given a name, and a number of possible values it could resolve to,
find the single value it should resolve to, in the following way:

- Apply the priority order
- If names with the highest priority all agree, use that name
- If there is disagreement that can be resolved by AMBIGUOUS_PREFERENCES,
  use that
- Otherwise, don't resolve the name (and possibly show a debugging message
  when building the data)
      r   zResolved: {} -> {}z{}:z	{}: {} N)maxr   lenmost_commonAMBIGUOUS_PREFERENCESsetremoveprintformatr   listappendsorteditemsjoin)keyvalsdebugvalmax_priority	val_count	unanimouspkeyothersvotesvoterpriovoterss                R/home/james-whalen/.local/lib/python3.13/site-packages/language_data/build_data.pyresolve_namerc      sV    $/$3A$/0L4J4Cq6\3IQ4JKI
9~))!,	|A((^FMM$"7"===.55c@A  "D! $E#
!!%( !% 	ell3 !%++-0KC*##C&)9:; 1 7 0Js   E>F	Fc                 t    0 n[        U R                  5       5       H  u  p4[        X4US9nUc  M  XRU'   M     U$ )NrW   )rR   rS   rc   )	name_dictrW   resolvedrU   rV   resolved_names         rb   resolve_namesri      s?    HIOO-.	$Se<$)SM / O    c                     [        SR                  X5      5      n[        R                  " [	        USS95      nUS   U    S   U   nU$ )z8
Read CLDR's names for things in a particular language.
z9cldr-json/cldr-json/cldr-localenames-full/main/{}/{}.jsonutf-8encodingmainlocaleDisplayNames)r   rO   jsonloadopen)languagecategoryfilenamefulldatadatas        rb   read_cldr_namesry      sR     CJJ8^H yyh9:HFH%&:;HEDKrj   c                 x   [        X5      n/ n[        UR                  5       5       H  u  pEX4[        ;   a  [        X4   nUc  M  XE:X  a  M&  SnUR	                  S5      (       a  US:X  a  MF  SU;   a  UR                  SS5      u  pGSn[        U5      [        U5      :X  a  M|  UR                  XXV45        M     U$ )N   z	-alt-menumandarinz-alt-rF   )ry   rR   rS   	OVERRIDESendswithsplitr   rQ   )langcoderu   rx   
name_quadssubtagnamepriority_s           rb   read_cldr_name_filer      s    8.DJtzz|,*X-.D|> ??;''DJ,>
 
 fWa0IFH$>&#998T<== -> rj   c                  B   / n / n/ n[        5        H  nS nUS   S:X  a  U nOUS   S:X  a  UnOUS   S:X  a  UnUc  M-  US   nSnSU;   a  SnS	U4[        ;   a   UR                  S	U[        S	U4   U45        Mh  US
    H  nUR                  S	XWU45        M     M     XU4$ )NTypert   scriptregionSubtagrE   
Deprecatedr   r8   Description)r	   r}   rQ   )language_quadsscript_quadsterritory_quadsentrytargetr   r   descs           rb   read_iana_registry_namesr      s    NLO!=J&#F6]h&!F6]h&$F8_FHu$f~*tVYtV|-DhOP!-0DMM4x"@A 1# "& 88rj   c                  f    0 n [        5        H   nUS   S:X  d  M  SU;   d  M  US   XS   '   M"     U $ )Nr   rt   Macrolanguager   r   )macrosr   s     rb   !read_iana_registry_macrolanguagesr     s?    F!=J&?e+C&+O&<F?# " Mrj   c                      0 n [        5        HF  nUS   S:X  a  SU;   a  US   XS   '   M  SU;   d  M&  SU;   d  M.  US   XS   R                  5       '   MH     U $ )Nr   rt   zPreferred-Valuer   Tag)r	   lower)replacementsr   s     rb   read_iana_registry_replacementsr     sl    L!=J&+<+E,12C,DLx)e^ 1U :167H1ILu++-. " rj   c                     [        U SS9n/ nU HA  nUR                  5       R                  SS5      S/-   nUR                  [	        U5      5        MC     U$ )Nrl   rm   ,r{   T)rs   rstripr   rQ   tuple)rv   rx   quadslinequads        rb   read_csv_namesr     sS    7+DE{{}""3*dV3U4[!  Lrj   c                 N   [        U SS9n/ nU H  nUR                  5       R                  S5      nUS   nUR                  XUS   S45        US   /n[	        U5      S:  d  MU  US   (       d  Ma  US   R                  S5      nU H  nUR                  XUS	45        M     M     U$ )
Nrl   rm   	r   rF      z, )rs   r   r   rQ   rI   )	rv   rt   rx   r   r   partscodenamesr   s	            rb   read_wiktionary_namesr   (  s    7+DE##D)QxheAh34q
u:>eAhh!HNN4(EhdB78   Lrj   c                 2   U H  u  p4pVUR                  S5      S   nUR                  S0 5      nUR                  U0 5      n	X4 H/  n
U
R                  [        U5      / 5      R                  X4U45        M1     U R                  U0 5      nX;;  d  M  X[U'   M     g )N-r   und)r   
setdefaultr   rQ   )	names_fwd	names_revr   name_languagereferentr   r   short_languagerev_allrev_languagerev_dictnames_for_referents               rb   update_namesr   7  s    3=/&,,S1!4&&ub1 ++NB? /Ht 4b9@@(3 0
 '11(B?204}- 4>rj   c                     [         R                  " S [        U R                  5       5       5       5      nUR	                  U5        g )Nc              3   J   #    U  H  u  pXR                  S 5      4v   M     g7f)rl   N)encode).0rU   values      rb   	<genexpr>save_trie.<locals>.<genexpr>H  s"      !9P#ll7#$9Ps   !#)marisa_trie	BytesTrierR   rS   save)mappingrv   tries      rb   	save_trier   G  s8       !9?9P! D 	IIhrj   c                     UR                  5        HJ  u  p#[        R                  " [        SU 35      SS9  [	        [        USS9[        SU SU  S35      5        ML     g )Nztrie/T)exist_okre   z	/name_to_z.marisa)rS   osmakedirsr   r   ri   )ru   r   rt   	lang_dicts       rb   save_reverse_name_tablesr   N  sY    '~~/
ME("45E)40E(9XJgFG	
  0rj   c                  N   [        [        S5      5      n [        U R                  5       5       Vs/ s H;  nUR                  S:w  d  M  US-  R                  5       (       d  M/  UR                  PM=     nnU Vs/ s H  nSUS   s=::  a  S::  d  M  O  M  UPM     sn$ s  snf s  snf )Nz.cldr-json/cldr-json/cldr-localenames-full/mainrootzlanguages.jsonar   z)r   r   rR   iterdirr   exists)cldr_main_pathsubpath	languagesrt   s       rb   get_name_languagesr   W  s    -(XYZN n44677G<<6! 	'.1A'A&I&I&K 	7  
 &/MY#"2L2LH2LHYMM
 Ns#   BB"B8B"B"B"c                     SS K n [        S5      n[        R                  " [	        U5      R                  5       5      nUR                  S5      n[        [        5      n[        [        5      nU GH  nUR                  S   n[        UR                  S   5      n[        UR                  S   5      S-  n	U GH  n
U
R                  nUS   R                  SS	5      n[        UR                  S
S5      5      S-  nSU;   a  [        US   5      S-  nOSU;   a  [        US   5      S-  nOU	nX-  nX-  U-  nU R                  U5      R                  5       R                  SS/5      nUR                  SU05      nUR                  SS/5      nUR                  S/5      nUR                  SS/5      nUR                  S/5      n[!        UU/5       H+  nU[#        U5      ==   [        [%        U5      5      -  ss'   M-     [!        UUUU/5       H+  nU[#        U5      ==   [        [%        U5      5      -  ss'   M-     GM     GM     XE4$ )Nr   zsupplementalData.xmlz./territoryInfo/territorytype
populationliteracyPercentd   r   r   populationPercentwritingPercentrt   r   	territory)	langcodesr   ET
fromstringrs   readfindallr   intattribfloatreplacegetmaximize_filter_attributesupdate_dictrL   strround)r   rv   r   territorieslanguage_populationlanguage_writing_populationr   t_codet_populationt_literacy_ratert   attrsl_codel_proportionwriting_propl_population	l_writing
written_lswritten_lst	spoken_ltspoken_l
written_lt	written_llangs                           rb   get_population_datar  a  s<   34H==h,,./D,,:;K%c*"-c"2 	!!&)Y--l;<	 0 01B CDsJ!HOOE6]**34F +>!BCcIL5($U+;%<=C"e+$U+<%=>D.'6L$3lBI f%..0CCZQYDZ[  %00+v1FGK#66
K7PQI"55zlCH$77[8QRJ#66
|DIY12#CI.#eL6I2JJ. 3 [*j)LM+CI6#eI>N:OO6 NG " !V ;;rj   c                     [        U S3U S9  [        UR                  5       5       H  u  p4[        SU< SU< S3U S9  M     [        SU S9  g)zU
Write Python code that initializes a given dictionary, with one value on
each line.
 = {file    z: r   }N)rN   rR   rS   )outfiler   drU   r   s        rb   write_python_dictr    sN    
 
TF%.w'QWWY'
SG2eYa(w7 (	#Grj   c                     [        U S3U S9  [        [        U5      5       H  n[        SU< S3U S9  M     [        SU S9  g )Nr  r  r	  r   r
  )rN   rR   rL   )r  r   srU   s       rb   write_python_setr    s@    	TF%.w'c!f~SG1oG, 	#Grj   z*# This file is generated by build_data.py.c            
         0 n 0 n0 n0 n[        [        S5      5      n[        X0U5        [        5        HM  n[	        US5      n[        X0U5         [	        US5      n[        X2U5         [	        US5      n[        X1U5        MO     [        5       u  pn[        X0U	5        [        X2U
5        [        X1U5        [        [        S5      S5      n[        X0U5        [        [        S5      5      n[        X0U5        [        SU 5        [        S	U5        [        S
U5        [        5        Vs/ s H  nSU;  d  M  XS;   d  M  XSU   ;   d  M  UPM      nnX VVVs/ s H  u  nn  nUU:X  d  M  UPM     snnn-  n[        SSSS9 n[        [        US9  [        USU5        [        US9  [        USU5        S S S 5        [        5       u  nn[        SSSS9 n[        [        US9  [        USU5        [        USU5        S S S 5        g ! [
         a     GNf = f! [
         a     GM  f = fs  snf s  snnnf ! , (       d  f       N= f! , (       d  f       g = f)Nzoverride_language_names.csvr   scriptsr   zwiktionary/codes-en.csvr8   zextra_language_names.csvrt   r   r   r   zname_data.pywrl   rm   r  LANGUAGES_WITH_NAME_DATACODE_TO_NAMESzpopulation_data.pyLANGUAGE_SPEAKING_POPULATIONLANGUAGE_WRITING_POPULATION)r   r   r   r   r   FileNotFoundErrorr   r   r   rs   rN   GENERATED_HEADERr  r  r  )language_names_revterritory_names_revscript_names_revr   override_language_datar   language_datascript_dataterritory_dataiana_languagesiana_scriptsiana_territorieswiktionary_dataextra_language_dataname_languageslang1lang2r   r  r   r   s                        rb   
build_datar)    sf   I+M:W,XY0FG&(+HkBYMB	-h	BKkB	0=INH )  6N5O2N"2?l;1AB+M:S,TVZ[O@(7Q)RS0CDZ);<X'78[*=> +,,Hh 	#+#8 	=ES[I\=\ 	,   9L_9L!5%1PUY^P^u9L__N 
ncG	4W-"<nM7'?I>	 
5 8K7L44	"C'	:gW-'#ACVW'#@B]^ 
;	:[ ! 		 ! 		* ` 
5	4 
;	:s`   H(H&
H%4H%;H%H%H*
&H*
>2H1)I
HH
H"!H"1
H?
I__main__)F)'r   rq   xml.etree.ElementTreeetreeElementTreer   r   pathlibr   collectionsr   r   language_data.namesr   language_data.utilr   language_data.registry_parserr	   rK   r}   rc   ri   ry   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r)  __name__ rj   rb   <module>r5     s     " " 	  , . , 8^- 	5'	- 	5'- 
E7- 
E7-  
D6!-$ 
G9%-( 	4&)-, VH--2 	5'3-6 
E77-: 
E7;-> ug?-B 
D6C-F !G-J VHK-P 	5'Q-V 	4&W-X 	4&Y- h  /%( 
  2111C"	J'T	"J94	5 
N5<p @ @_F zL rj   