o
    UjR  ã                   @  sn   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d„Z		dddd„ZdS )z>Screening engine: run all strategies across a list of tickers.é    )Úannotations)ÚThreadPoolExecutorÚas_completed)ÚCallableÚOptionalNé   )Údata)Ú
STRATEGIESÚtickerÚstrÚreturnúOptional[dict]c              	     s¨   t  | ¡}|js
d S | |j|j|jdœ‰ t ¡ D ]\}}z||ƒ}t|j	dƒˆ |< W q t
y7   d ˆ |< Y qw ‡ fdd„tD ƒ}|rNtt|ƒt|ƒ dƒnd ˆ d< ˆ S )N)ÚTickerÚNameÚSectorÚPricer   c                   s"   g | ]}ˆ   |¡d urˆ | ‘qS )N)Úget)Ú.0Ún©Zrow© úKC:\Users\cheed\OneDrive\Desktop\Claude work\finance-tool\screener\engine.pyÚ
<listcomp>   s   " zscreen_one.<locals>.<listcomp>Ú	Composite)Údata_modZfetchZokÚnameZsectorZpricer	   ÚitemsÚroundZscoreÚ	ExceptionÚsumÚlen)r
   Zsdr   ZevaluateÚresZscoresr   r   r   Ú
screen_one   s$   
üÿ"r"   é   Útickersú	list[str]Úmax_workersÚintÚprogressú$Optional[Callable[[int, int], None]]úpd.DataFramec           
        sÒ   g }d}t | ƒ}t|d��.‰‡fdd„| D ƒ}t|ƒD ]}| ¡ }|r(| |¡ |d7 }|r3|||ƒ qW d  ƒ n1 s>w   Y  |sIt ¡ S t |¡‰ g d¢}	ˆ ‡ fdd	„|	D ƒ ‰ ˆ jd
ddd�jdd�S )zBScreen a list of tickers concurrently. Returns a scored DataFrame.r   )r&   c                   s   i | ]	}ˆ   t|¡|“qS r   )Zsubmitr"   )r   Út)Úpoolr   r   Ú
<dictcomp>,   ó    zscreen.<locals>.<dictcomp>r   N)	r   r   r   r   ZBuffettZBurryzRoaring KittyZSimonsr   c                   s   g | ]	}|ˆ j v r|‘qS r   )Úcolumns)r   Úc)Údfr   r   r   9   r.   zscreen.<locals>.<listcomp>r   FZlast)Z	ascendingZna_positionT)Zdrop)	r    r   r   ÚresultÚappendÚpdZ	DataFrameZsort_valuesZreset_index)
r$   r&   r(   ZrowsZdoneZtotalZfuturesZfutr!   Zcolsr   )r1   r,   r   Úscreen"   s*   

€úþ	
r5   )r
   r   r   r   )r#   N)r$   r%   r&   r'   r(   r)   r   r*   )Ú__doc__Z
__future__r   Zconcurrent.futuresr   r   Útypingr   r   Úpandasr4   Ú r   r   Z
strategiesr	   r"   r5   r   r   r   r   Ú<module>   s    
ý