ó
    Ž
(j­  ã                   ó4  • S r SSKrSSKrSSKJr  \" S5      r\" S5      r0 q0 q0 q	SSS.r
S rS	 rS
 rS rS rS rS rSS jrS rS rS rS rS rS r\" 5         \R3                  5       R4                  \
S'   \R3                  5       R4                  \
S'   g)a/  
Shared loader for league_map.json and team_map.json.
Single source of truth for team/league name translations across:
  - API-Football (signals, live scores)
  - football-data.co.uk (bet resolution)
  - Kalshi (exchange prices)

Hot-reload: call reload() to pick up changes without restarting scripts.
é    N)ÚPathz-/media/sf_e_drive/soccer/data/league_map.jsonz+/media/sf_e_drive/soccer/data/team_map.jsong        )ÚleagueÚteamc                 ó¨   • U (       d  g[         R                  " SU 5      nSR                  S U 5       5      R                  5       R	                  5       $ )u'  Lowercase + strip accents/diacritics for accent-insensitive matching.

API-Football sends accented names (e.g. 'CastellÃ³n', 'AlmerÃ­a') while
team_map keys are plain ASCII ('Castellon', 'Almeria'); folding both sides
makes the lookup accent-insensitive so the Kalshi leg doesn't silently miss.
Ú ÚNFKDc              3   ó`   #   • U  H$  n[         R                  " U5      (       a  M   Uv •  M&     g 7f©N)ÚunicodedataÚ	combining)Ú.0Úcs     Ú%/media/sf_e_drive/soccer/main/maps.pyÚ	<genexpr>Ú_fold.<locals>.<genexpr>"   s   é € ÐCšd˜¬+×*?Ò*?À×*B—1‘1šdùs   ‚.¥	.)r   Ú	normalizeÚjoinÚlowerÚstrip)ÚsÚnfkds     r   Ú_foldr      sC   € ö ØÜ× Ò  ¨Ó+€DØ�7‰7ÑC™dÓCÓC×IÑIÓK×QÑQÓSÐSó    c                  ó’  • [        [        SS9 n [        R                  " U 5      qS S S 5        [        [
        SS9 n [        R                  " U 5      nS S S 5        WR                  5        VVs0 s H  u  p#UR                  S5      (       a  M  X#_M!     snnq0 q	[        R                  5        Hm  u  pEU[        [        U5      '   UR                  S5      (       a  U[        [        US   5      '   UR                  S/ 5       H  nU[        [        U5      '   M     Mo     g ! , (       d  f       GN= f! , (       d  f       Nå= fs  snnf )Nzutf-8)ÚencodingÚ_ÚfdcoÚaliases)ÚopenÚLEAGUE_MAP_FILEÚjsonÚloadÚ_league_mapÚTEAM_MAP_FILEÚitemsÚ
startswithÚ	_team_mapÚ
_alias_idxr   Úget)ÚfÚrawÚkÚvÚkeyÚinfoÚas          r   Ú_loadr1   %   sí   € ä	Œo¨Ò	0°AÜ—i’i “lˆ÷ 
1ä	Œm gÒ	.°!Ü�iŠi˜‹lˆ÷ 
/ð #&§)¡)¤+ÔG¢+™$˜!°Q·\±\À#×5F“�’¡+ÒG€Ið €JÜ—_‘_Ö&‰	ˆØ!$Œ
”5˜“:ÑØ�8‰8�F×ÑØ.1ŒJ”u˜T &™\Ó*Ñ+Ø—‘˜) RÖ(ˆAØ#&ŒJ”u˜Q“xÓ ó )ò	 '÷ 
1Ö	0úç	.Õ	.üó Hs"   �D ¼D2Á.EÂEÄ 
D/Ä2
E c                  óê   • [         R                  5       R                  n [        R                  5       R                  nU [        S   :w  d  U[        S   :w  a  [        5         U [        S'   U[        S'   gg)z/Re-read JSON files. Call from hot-reload loops.r   r   TF)r    ÚstatÚst_mtimer$   Ú_mtimesr1   ©ÚlmÚtms     r   Úreloadr9   9   s`   € ä	×	Ñ	Ó	×	(Ñ	(€BÜ	×	Ñ	Ó	×	&Ñ	&€BØ	ŒW�XÑÓ "¬°©Ó"7ÜŒØŒ�ÑØŒ�‰ØØr   c                  óÈ   •  [         R                  5       R                  n [        R                  5       R                  nU [        S   :g  =(       d    U[        S   :g  $ !    g= f)zBReturn True if either JSON file has been modified since last load.r   r   F)r    r3   r4   r$   r5   r6   s     r   Úchangedr;   E   sW   € ðÜ×!Ñ!Ó#×,Ñ,ˆÜ×ÑÓ!×*Ñ*ˆØ”W˜XÑ&Ñ&×?¨"´¸±Ñ*?Ð?øðÙús   ‚AA ÁA!c                 óL   • [         R                  U 0 5      R                  S5      $ )z&API-Football league ID for a div code.Úapi_football_id©r#   r)   ©Údivs    r   Úleague_api_idrA   Q   s   € ä�?‰?˜3 Ó#×'Ñ'Ð(9Ó:Ð:r   c                 óN   • [         R                  U 0 5      R                  SU 5      $ )zDisplay name for a div code.Únamer>   r?   s    r   Úleague_namerD   U   s    € ä�?‰?˜3 Ó#×'Ñ'¨°Ó4Ð4r   c                 óL   • [         R                  U 0 5      R                  S5      $ )z-Kalshi series ticker for a div code, or None.Úkalshi_seriesr>   r?   s    r   Úleague_kalshi_seriesrG   Y   s   € ä�?‰?˜3 Ó#×'Ñ'¨Ó8Ð8r   c                 óN   • [         R                  U 0 5      R                  SU5      $ )zYAPI-Football season for a div code. Returns the per-league override if set, else default.Úseasonr>   )r@   Údefaults     r   Úleague_seasonrK   ]   s    € ä�?‰?˜3 Ó#×'Ñ'¨°'Ó:Ð:r   c                  ó<   • [        [        R                  5       5      $ )zAll div codes in order.)Úlistr#   Úkeys© r   r   Úall_divsrP   a   s   € ä”× Ñ Ó"Ó#Ð#r   c                  ó    • [        [        5      $ )zFull league map dict.)Údictr#   rO   r   r   Úleague_map_fullrS   e   s   € ä”ÓÐr   c                 óÐ   • [        U 5      n[        R                  U5      nU(       a  U[        U   4$ [        R	                  5        H  u  p4X1;   d  X;   d  M  U[        U   4s  $    g)zBFind team entry by any known name (exact, then alias, then fuzzy).)NN)r   r(   r)   r'   r%   )rC   Únr.   Úaliasr,   s        r   Ú_lookuprW   l   s\   € äˆd‹€Aä
�.‰.˜Ó
€CÞ
Ø”I˜c‘NÐ"Ð"ä×$Ñ$Ö&‰ˆØ‹:˜�Ø”i ‘l�?Ò"ñ 'ð r   c                 ód   • [        U 5      u  pU(       a  UR                  S5      (       a  US   $ U $ )z=Translate API-Football team name to football-data.co.uk name.r   ©rW   r)   )Úapi_namer   r/   s      r   Ú	fdco_namer[   z   s.   € ä�hÓ�G€AÞ�—‘˜× Ñ Ø�F‰|ÐØ€Or   c                 óN   • [        U 5      u  pU(       a  UR                  S5      $ g)z:Get Kalshi abbreviation for a team name (from any system).ÚkalshiNrY   ©rC   r   r/   s      r   Ú
kalshi_abrr_   ‚   s"   € ä�d‹m�G€AÞØ�x‰x˜Ó!Ð!Ør   c                 ó    • [        U 5      u  pU$ )zFull team entry dict, or None.)rW   r^   s      r   Ú	team_infora   Š   s   € ä�d‹m�G€AØ€Kr   r   r   r
   )Ú__doc__r!   r   Úpathlibr   r    r$   r#   r'   r(   r5   r   r1   r9   r;   rA   rD   rG   rK   rP   rS   rW   r[   r_   ra   r3   r4   rO   r   r   Ú<module>rd      sÅ   ðñó Û Ý áÐFÓG€ÙÐDÓE€ð €Ø€	Ø€
Ø cÑ*€ò
Tò'ò(	òò;ò5ò9ô;ò$òòòòòñ „Ø#×(Ñ(Ó*×3Ñ3€ˆÑ Ø!×&Ñ&Ó(×1Ñ1€ˆ‚r   