Ë
    xWjR  ã                  óx   — d Z ddlmZ ddlmZmZ ddlmZmZ ddl	Z
ddlmZ ddlmZ dd	„Z	 	 d	 	 	 	 	 	 	 dd
„Zy)z>Screening engine: run all strategies across a list of tickers.é    )Úannotations)ÚThreadPoolExecutorÚas_completed)ÚCallableÚOptionalNé   )Údata)Ú
STRATEGIESc                óâ  — t        j                  | «      }|j                  sy | |j                  |j                  |j
                  dœ}t        j                  «       D ]'  \  }}	  ||«      }t        |j                  d«      ||<   Œ) t        D �cg c]  }|j                  |«      €Œ||   ‘Œ }}|r!t        t        |«      t        |«      z  d«      nd |d<   |S # t        $ r d ||<   Y ŒŒw xY wc c}w )N)ÚTickerÚNameÚSectorÚPricer   Ú	Composite)Údata_modÚfetchÚokÚnameÚsectorÚpricer
   ÚitemsÚroundÚscoreÚ	ExceptionÚgetÚsumÚlen)ÚtickerÚsdÚrowr   ÚevaluateÚresÚnÚscoress           ú-/var/www/html/finance-tool/screener/engine.pyÚ
screen_oner&      sâ   € Ü	�‰˜Ó	€BØ�5Š5ØàØ—‘Ø—)‘)Ø—‘ñ	€Cô %×*Ñ*Ó,ò ‰ˆˆhð	Ù˜2“,ˆCÜ˜cŸi™i¨Ó+ˆC�ŠIðô )ÖC˜¨C¯G©G°A«JÑ,Bˆc�!‹fÐC€FÐCÙ>D”uœS ›[¬3¨v«;Ñ6¸Ô:È$€CˆÑØ€Jøô	 ò 	ØˆC�‹Ið	üâCs   Á#!CÂC,Â%C,ÃC)Ã(C)c                ó2  — g }d}t        | «      }t        |¬«      5 }| D �ci c]  }|j                  t        |«      |“Œ }}t	        |«      D ]6  }	|	j                  «       }
|
r|j                  |
«       |dz  }|sŒ. |||«       Œ8 	 ddd«       |st        j                  «       S t        j                  |«      }g d¢}||D �cg c]  }||j                  v sŒ|‘Œ c}   }|j                  ddd¬	«      j                  d
¬«      S c c}w # 1 sw Y   ŒƒxY wc c}w )zBScreen a list of tickers concurrently. Returns a scored DataFrame.r   )Úmax_workersr   N)	r   r   r   r   ÚBuffettÚBurryzRoaring KittyÚSimonsr   r   FÚlast)Ú	ascendingÚna_positionT)Údrop)r   r   Úsubmitr&   r   ÚresultÚappendÚpdÚ	DataFrameÚcolumnsÚsort_valuesÚreset_index)Útickersr(   ÚprogressÚrowsÚdoneÚtotalÚpoolÚtÚfuturesÚfutr"   ÚdfÚcolsÚcs                 r%   ÚscreenrD   "   s  € ð €DØ€DÜ�‹L€EÜ	¨Ô	4ð &¸Ø:AÖB°Q�4—;‘;œz¨1Ó-¨qÑ0ÐBˆÐBÜ Ó(ò 	&ˆCØ—*‘*“,ˆCÙØ—‘˜CÔ Ø�A‰IˆDÚÙ˜˜uÕ%ñ	&÷&ñ Ü�|‰|‹~ÐÜ	�‰�dÓ	€BòH€Dà	˜Ö0�1  R§Z¡Z¢ŠQÒ0Ñ	1€BØ�>‰>˜+°ÀFˆ>ÓK×WÑWÐ]aÐWÓbÐbùò C÷&ð &üò 1s-   œD¡D¿:DÁ:DÃDÃDÄDÄD)r   ÚstrÚreturnzOptional[dict])é   N)r8   z	list[str]r(   Úintr9   z$Optional[Callable[[int, int], None]]rF   zpd.DataFrame)Ú__doc__Ú
__future__r   Úconcurrent.futuresr   r   Útypingr   r   Úpandasr3   Ú r	   r   Ú
strategiesr
   r&   rD   © ó    r%   ú<module>rR      sU   ðÙ DÝ "ç ?ß %ã å Ý "óð. Ø59ðcØðcàðcð 3ðcð ô	crQ   