
    Wg'                     X   d dl mZ d dl mZ d dl mZmZmZ ddlmZ ddlm	Z	 ddl
mZmZ dd	lmZ dd
lZe dZe dZdddddZdd ed edg d       edddg      g      ddd ed edddg       eddd g       ed!d"d#g       ed!d$d%g       edd&d'g      g      ddd( ed eddd)g       eddd g       ed!d"d#g       ed!d$d%g       edd&d*g      g      ddd ed ed!d+dg       ed!ddg       edd,d-g       edg d      g      dd&d ed eddd g       ed!d"d#g       edd&d.g      g      dddd/d ed eddd g       edd$d g       edd0d1g      g      d2dd ed edd"d#g       edg d      g      ddd ed ed3g d4       edd5d g       ed!ddg       edg d      g      d6dd ed ed3g d4       edd5d g       ed3g d7       edg d      g      ddd8 ed edg d9       edg d:       edd;d<g       edd=d>g       edg d?       edd@dAg      g      d6dd8 ed edg d:       edd;d<g       edd=d>g       edg d?       eddBdCg       edd@dAg      g      d6dd8 ed eddBdDg       edg d:       edd;d<g       edd=d>g       edd@dAg      g      d6dd8 ed eddBdEg       edg d:       edd;d<g       edd=d>g       edd@dAg      g      d6dd8 ed eddBdFg       edg d:       edd;d<g       edd=d>g       edd@dAg      g      d6dd ed edd$dg       edg d:       edd;dGg       edd@dAg      g      d6dHZ edI eedJdKL      i      	 	 	 	 	 	 	 dUdMeeeef   dNedOedPedQedRedSefdT       Zy
)V   )EquityQuery)	FundQuery)	QueryBaser   r       )
_BASE_URL_)YfData   )dynamic_docstring'generate_list_table_from_dict_universal)UnionNz/v1/finance/screenerz/predefined/saved    guid)offsetsizeuserId
userIdType	eodvolumedescandzis-in)exchangeNMSNYQltzepsgrowth.lasttwelvemonths   )	sortFieldsortTypequerypercentchangeDESCgt   eqregionusgteintradaymarketcapi 5wintradayprice   	dayvolumei:  ASCg      i N  z quarterlyrevenuegrowth.quarterlysector
Technologyi@KL z,short_percentage_of_shares_outstanding.valueavgdailyvol3mi@ )r   r   r   r   r   btwn)zperatio.lasttwelvemonthsr      pegratio_5y)r   r   r   )r'   l    d(	 l    h] fundnetassets)categorynamezForeign Large ValuezForeign Large BlendzForeign Large GrowthzForeign Small/Mid GrowthzForeign Small/Mid BlendzForeign Small/Mid Value)performanceratingoverall   r)   initialinvestmenti annualreturnnavy1categoryrank2   )riskratingoverallr   r	   r"   r   NASr3   zHigh Yield BondzLarge BlendzLarge GrowthzMid-Cap Growthi  )aggressive_small_capsday_gainers
day_losersgrowth_technology_stocksmost_activesmost_shorted_stockssmall_cap_gainersundervalued_growth_stocksundervalued_large_capsconservative_foreign_fundshigh_yield_bondportfolio_anchorssolid_large_growth_fundssolid_midcap_growth_fundstop_mutual_fundspredefined_screenersTzPredefined queries (Dec-2024))bulletstitler   r   r   r   sortAscr   r   c	                    ddddddd}	||d	kD  rt        d
      t        t                     }
dD ]
  }||
v s|
|=  ddddd}d}t        | t              rst        |      }| |d<   |
j                         D ]  \  }}|	|||<    |j                  t        ||      }	 |j                          |j                         d   d   d   S t        | t               r0|	D ]  }||
vs|
|   |	|   |
|<    |
d   rdnd|
d<   |
d= |
}| |d<   nt        dt#        |        d      | t        d      t        |d   t$              rd |d!<   nt        |d   t&              rd"|d!<   |d   j)                         |d<   t        |      }|j+                  t,        ||j.                  ||#      }|j                          |j                         d   d   d   S # t        j                  j                  $ r | t        vrt        d|  d        w xY w)$a  
    Run a screen: predefined query, or custom query.

    :Parameters:
        * Defaults only apply if query = EquityQuery or FundQuery
        query : str | Query:
            The query to execute, either name of predefined or custom query.
            For predefined list run yf.PREDEFINED_SCREENER_QUERIES.keys()
        offset : int
            The offset for the results. Default 0.
        size : int
            number of results to return. Default 100, maximum 250 (Yahoo)
        sortField : str
            field to sort by. Default "ticker"
        sortAsc : bool
            Sort ascending? Default False
        userId : str
            The user ID. Default empty.
        userIdType : str
            Type of user ID (e.g., "guid"). Default "guid".

    Example: predefined query
        .. code-block:: python

            import yfinance as yf
            response = yf.screen("aggressive_small_caps")

    Example: custom query
        .. code-block:: python

            import yfinance as yf
            from yfinance import EquityQuery
            q = EquityQuery('and', [
                   EquityQuery('gt', ['percentchange', 3]), 
                   EquityQuery('eq', ['region', 'us'])
            ])
            response = yf.screen(q, sortField = 'percentchange', sortAsc = True)

    To access predefineds query code
        .. code-block:: python

            import yfinance as yf
            query = yf.PREDEFINED_SCREENER_QUERIES['aggressive_small_caps']

    {predefined_screeners}
    r   r   tickerFr   r   )r   r   r   rM   r   r   N   z,Yahoo limits query size to 250, reduce size.)r   sessionproxyzfinance.yahoo.comfalsezen-USUS)
corsDomain	formattedlangr$   )rQ   scrIds)urlparamsrR   zyfinance.screen: 'z%' is probably not a predefined query.financeresultrM   r+   r    r   r   z*Query must be type str or QueryBase, not ""zNo query providedEQUITY	quoteType
MUTUALFUND)bodyuser_agent_headersrZ   rR   )
ValueErrordictlocals
isinstancestrr   itemsget_PREDEFINED_URL_raise_for_statusrequests
exceptions	HTTPErrorPREDEFINED_SCREENER_QUERIESprintjsonr   typeEqyQyFndQyto_dictpost_SCREENER_URL_rb   )r   r   r   r   rM   r   r   rQ   rR   defaultsfieldskparams_dict
post_query_datavrespresponses                     M/var/www/html/venv/lib/python3.12/site-packages/yfinance/screener/screener.pyscreenr   5   su   x H D3JGHH&(^F* ;q	 "57T[gklKJ% w' %H<<> 	#CAa}!"A	# yy-kyO	!!#
 yy{9%h/22	E9	% 	(A&)"3$QKq		( '-Y&7UVz9
#
7 Ed5k]RSTUU},--*W%u-"*
;	Jw'	/".
;$W-557Jw 7#Ezz.!+/4/G/G#."'	  )H
 ==?9%h/22K "",, 	77*5'1VWX	s   !G 6H)NNNNNNNN)r   r   rs   r   rt   r   yfinance.constr   yfinance.datar   utilsr
   r   typingr   rl   rw   rj   !PREDEFINED_SCREENER_BODY_DEFAULTSro   rg   intboolr        r   <module>r      s	   ' % 4 4 %   N  <34$%%67  rBF% !
 +6&%*55B\3]_dei  mI  KM  lN  `O  3P  &QR /F"557K+LeTX[ceiZjNkmrsx  |O  Q[  {\  n]  _d  ej  m|  ~  l@  _A  CH  IM  P[  ]b  Oc  Cd  +e  fg.5"557N+OQVW[^fhl]mQnpuv{  R  T^  ~_  q`  bg  hm  p  AB  oC  bD  FK  LP  S^  `e  Rf  Fg  +h  ij-8V).uuUEgikDl7motuz  ~Z  \^  }_  p`  bg  hl  ow  yE  nF  bG  IN  OV  Xr  Is  7t  *u!v!,"55$7G+H%PUXkmwWxJy  |A  BF  IT  V]  H^  |_  +`  ab#%?m  {A%*55$?O3PRWX\_npq^rRsuz{  CR  TZ  B[  v\  3]  &^_&1f!&uuT<OPZ;[/\^cdk  nH  _I  /J  "KL-3).uuVEh7ikpqu  yF  HI  xJ  lK  MR  SX  [w  y{  Z|  M}  D  EL  Nh  i  7j  *k"l+66%*55Ad3eglmq  uB  DE  tF  hG  IN  OU  WG  IH  JO  PW  Ys  Jt  3u  &vw.4/).uuW  Go  8p  rw  x  Ac  rd  fk  lp  sF  HN  rO  fP  RW  X\  _~  @B  ^C  RD  FK  LS  Us  Ft  v{  |@  CM  OT  BU  vV  7W  *X#Y#)!&uuW>`/achim  qD  FL  pM  dN  PU  VZ  ]|  ~@  \A  PB  DI  JQ  Sq  Dr  ty  z~  AO  Qb  @c  td  fk  lp  s}  D  rE  fF  /G  "HI%+!&uuTNM;Z/[]bcj  mO  ^P  RW  X\  _r  tz  ^{  R|  ~C  DH  Kj  ln  Jo  ~p  rw  x|  I  KP  ~Q  rR  /S  "TU,2).uuTNTbCc7dfkls  vX  gY  [`  ae  h{  }C  gD  [E  GL  MQ  Ts  uw  Sx  Gy  {@  AE  HR  TY  GZ  {[  7\  *]!^-3).uuTNTdCe7fhmnu  xZ  i[  ]b  cg  j}  E  iF  ]G  IN  OS  Vu  wy  Uz  I{  }B  CG  JT  V[  I\  }]  7^  *_"`$*!&uuTOR;P/QSXY`  cE  TF  HM  NR  Uh  jn  To  Hp  rw  x|  I  KP  ~Q  rR  /S  "TU; B *,SToy}  Fe  -f  g  h! "$(~3%[)34 ~3~3~3 ~3 	~3
 ~3 ~3 h~3r   