Ë
    ˆrƒj§	  ã                  ó   — d Z ddlmZ ddlZddlZddlZddlmZmZ ddlZ	ddl
Z
ej                  j                  ej                  j                  e«      d«      Zej                  j                  ed«      ZdZg d¢Zdd	„Zdd
„Zddd„Zd„ edœZy)z¾Stock universe helpers.

Provides ticker lists to screen. Uses the S&P 500 pulled from Wikipedia
(free, no key) with an on-disk cache and a bundled fallback so the tool
still works offline.
é    )ÚannotationsN)ÚdatetimeÚ	timedeltaz.cachez
sp500.jsoné   )'ÚAAPLÚMSFTÚGOOGLÚAMZNÚMETAzBRK-BÚJPMÚVÚJNJÚPGÚKOÚPEPÚWMTÚHDÚBACÚXOMÚCVXÚUNHÚPFEÚTÚVZÚINTCÚCSCOÚORCLÚIBMÚGMEÚAMCÚFÚGMÚDISÚNKEÚMCDÚCOSTÚTGTÚLOWÚCATÚDEÚMMMÚGEc                 ó:   — t        j                  t        d¬«       y )NT)Úexist_ok)ÚosÚmakedirsÚ
_CACHE_DIR© ó    ú//var/www/html/finance-tool/screener/universe.pyÚ_ensure_cache_dirr5      s   € Ü‡K�K”
 TÖ*r3   c                óö   — t         j                  j                  | «      syt        j                  t         j                  j                  | «      «      }t        j                  «       |z
  t        t        ¬«      k  S )NF)Údays)	r/   ÚpathÚexistsr   ÚfromtimestampÚgetmtimeÚnowr   Ú_CACHE_TTL_DAYS)r8   Úmtimes     r4   Ú_cache_freshr?   #   sO   € Ü�7‰7�>‰>˜$ÔØÜ×"Ñ"¤2§7¡7×#3Ñ#3°DÓ#9Ó:€EÜ�<‰<‹>˜EÑ!¤I´?Ô$CÑCÐCr3   c                óô  — t        «        | sAt        t        «      r2	 t        t        dd¬«      5 }t	        j
                  |«      cddd«       S 	 d}t        j                  |ddid¬	«      j                  }t        j                  t        j                  |«      «      }|d
   d   j                  t         «      j#                  «       }|D �cg c]"  }|j%                  dd«      j'                  «       ‘Œ$ }}t        t        dd¬«      5 }t	        j(                  ||«       ddd«       |S # 1 sw Y   nxY wŒå# t        j                  t        f$ r Y �Œw xY wc c}w # 1 sw Y   |S xY w# t*        $ r	 t,        cY S w xY w)zAReturn S&P 500 tickers, normalised for yfinance (dots -> dashes).Úrzutf-8)ÚencodingNz9https://en.wikipedia.org/wiki/List_of_S%26P_500_companiesz
User-AgentzMozilla/5.0é   )ÚheadersÚtimeoutr   ÚSymbolú.Ú-Úw)r5   r?   Ú_SP500_CACHEÚopenÚjsonÚloadÚJSONDecodeErrorÚOSErrorÚrequestsÚgetÚtextÚpdÚ	read_htmlÚioÚStringIOÚastypeÚstrÚtolistÚreplaceÚstripÚdumpÚ	ExceptionÚFALLBACK_TICKERS)Úforce_refreshÚfhÚurlÚhtmlÚtablesÚtickersÚts          r4   Ú	get_sp500rf   *   sC  € äÔÙœ\¬,Ô7ð	Ü”l C°'Ô:ð %¸bÜ—y‘y “}÷%ñ %ð
 ØIˆä�|‰|˜C¨,¸Ð)FÐPRÔS×XÑXˆÜ—‘œbŸk™k¨$Ó/Ó0ˆØ˜‘)˜HÑ%×,Ñ,¬SÓ1×8Ñ8Ó:ˆà8?Ö@°1�1—9‘9˜S #Ó&×,Ñ,Õ.Ð@ˆÐ@Ü”, ¨gÔ6ð 	#¸"Ü�I‰I�g˜rÔ"÷	#àˆ÷%ð %úð %øä×$Ñ$¤gÐ.ò 	Úð	üò A÷	#àˆûÜò  äÒð úsk   �D3 ¯D&Á	D3 ÁA;E% Ã
'EÃ1E% ÄEÄ	E% Ä&D/Ä+D3 Ä3EÅEÅE% ÅE"ÅE% Å"E% Å%E7Å6E7c                 ó   — t         S )N)r^   r2   r3   r4   ú<lambda>rh   E   s   € Ô*:€ r3   )zFallback (40 liquid names)zS&P 500)ÚreturnÚNone)r8   rX   ri   Úbool)F)r_   rk   ri   z	list[str])Ú__doc__Ú
__future__r   rU   rL   r/   r   r   ÚpandasrS   rP   r8   ÚjoinÚdirnameÚ__file__r1   rJ   r=   r^   r5   r?   rf   Ú	UNIVERSESr2   r3   r4   ú<module>rs      s‚   ðñõ #ã 	Û Û 	ß (ã Û à�W‰W�\‰\˜"Ÿ'™'Ÿ/™/¨(Ó3°XÓ>€
Ø�w‰w�|‰|˜J¨Ó5€Ø€òÐ ó+óDô ñ6 #;Øñ�	r3   