
    Ej0                     6   d dl Z d dlmZ d dlZd dl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mZ ddlmZ ddlmZmZmZmZ e dZe dZd ddddZi ddd ed edg d           edddg          g          d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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d0dd ed ed%d1dg           ed%ddg           ed"d2d3g           edg d          g          dd4d*d ed ed"d#d$g           ed%d&d'g           ed d*d5g          g          dd6dd d7d ed ed"d#d$g           ed d(dg           ed d8d9g          g          d:d;dd ed edd&d'g           edg d          g          dd<dd ed ed=g d>           edd?dg           ed%ddg           edg d          g          d@dAdd ed ed=g d>           edd?dg           ed=g dB           edg d          g          ddCddD ed edg dE           edg dF           eddGdHg           eddIdJg           edg dK           ed"dLdMg          g          d@dNddD ed edg dF           eddGdHg           eddIdJg           edg dK           ed"dOdPg           ed"dLdMg          g          d@dQddD ed ed"dOdRg           edg dF           eddGdHg           eddIdJg           ed"dLdMg          g          d@dSddD ed ed"dOdTg           edg dF           eddGdHg           eddIdJg           ed"dLdMg          g          d@dUddD ed ed"dOdVg           edg dF           eddGdHg           eddIdJg           ed"dLdMg          g          d@dWdd ed ed d(dg           edg dF           ed dGdXg           ed"dLdMg          g          d@dYdd ed ed d(dZg           edg dF           ed"d#d$g          g          dd[d\d- ed ed"d#d$g           edg dF           ed d(dZg          g          dd\d- ed ed"d#d$g           ed"dOd3g          g          dd\d- ed ed"d#d$g           edg d]          g          dd^Z ed_ eed`dab          i          	 	 	 	 	 	 	 	 dldceeeeef         ddedeedfedgedhediedjefdk            ZdS )m    N)Union)dumps)_QUERY1_URL_)YfData   )dynamic_docstring'generate_list_table_from_dict_universal   )EquityQuery)	FundQuery)ETFQuery)	QueryBaser   r   r   z/v1/finance/screenerz/predefined/saved    guid)offsetcountuserId
userIdTypeaggressive_small_caps	eodvolumedescandzis-in)exchangeNMSNYQltzepsgrowth.lasttwelvemonths   )	sortFieldsortTypequeryday_gainerspercentchangeDESCgt   eqregionusgteintradaymarketcapi 5wintradayprice   	dayvolumei:  
day_losersASCg      i N  growth_technology_stocksz quarterlyrevenuegrowth.quarterlysector
Technologymost_activesi@KL most_shorted_stocksz,short_percentage_of_shares_outstanding.valueavgdailyvol3mi@ )r   r   r   r    r!   small_cap_gainersundervalued_growth_stocksbtwn)zperatio.lasttwelvemonthsr      pegratio_5y)r    r   r!   undervalued_large_caps)r+   l    d(	 l    h] conservative_foreign_funds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   NAShigh_yield_bondr?   High Yield Bondportfolio_anchorszLarge Blendsolid_large_growth_fundszLarge Growthsolid_midcap_growth_fundszMid-Cap Growthtop_mutual_fundsi  top_etfs_us
   top_performing_etfsannualreportnetexpenseratio)r?   zCorporate BondzEmerging Markets Bondz$Emerging-Markets Local-Currency BondrH   zIntermediate-Term BondzLong-Term BondzInflation-Protected BondzMultisector BondzNontraditional BondzShort-Term BondzUltrashort Bondz
World Bond)technology_etfs	bond_etfspredefined_screenersTzPredefined queries (Dec-2024))bulletstitler!   r   sizer   r   sortAscr   r   c	                 (   t          |          }	ddddddd}
||d
k    rt          d          ||d
k    rt          d          |Vt          | t                    rAt          |          }|d         } ||d         }||d                                         dk    }i }
|||||||d}ddddd}d	}t          | t                    r|.t          j        dt          d           |}d	}|d         |d<   |d= | |d<   |	                                D ]\  }}||||<   |	
                    t          |          }	 |                                 n:# t          j        j        j        $ r | t          vrt#          d|  d            w xY w|                                d          d!         d         S t          | t&                    r6|
D ]}||vs||         |
|         ||<   |d"         rd#nd$|d<   |d"= |}| |d<   n t          d%t)          |            d&          | t          d'          t          |d         t*                    rd(|d)<   nAt          |d         t,                    rd*|d)<   n t          |d         t.                    rd+|d)<   |d                                         |d<   t3          |d,d-          }|	                    t6          ||.          }|                                 |                                d          d!         d         S )/a  
    Run a screen: predefined query, or custom query.

    :Parameters:
        * Defaults only apply if query = EquityQuery, FundQuery, or ETFQuery
        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)
            Use count instead for predefined queries.
        count : int
            number of results to return. Default 25, maximum 250 (Yahoo)
            Use size instead for custom queries.
        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}
    )sessionr   r   tickerFr   r   )r   r   r   rW   r   r   N   z.Yahoo limits query count to 250, reduce count.z,Yahoo limits query size to 250, reduce size.r!   r   r    asc)r   r   rV   r   rW   r   r   zfinance.yahoo.comfalsezen-USUS)
corsDomain	formattedlangr(   zQScreen 'size' argument is deprecated for predefined screens, set 'count' instead.r   )
stacklevelrV   r   scrIds)urlparamszyfinance.screen: 'z%' is probably not a predefined query.financeresultrW   r0   r$   z*Query must be type str or QueryBase, not ""zNo query providedEQUITY	quoteType
MUTUALFUNDETF),:)
separatorsensure_ascii)datare   )r   
ValueError
isinstancestrPREDEFINED_SCREENER_QUERIESlowerwarningswarnDeprecationWarningitemsget_PREDEFINED_URL_raise_for_status	curl_cffirequests
exceptions	HTTPErrorprintjsonr   typeEqyQyFndQyEtfQyto_dictr   post_SCREENER_URL_)r!   r   rV   r   r   rW   r   r   rY   _datadefaults
post_queryfieldsparams_dictkvresprq   responses                      V/var/www/html/bolsaweb/venv/lib/python3.11/site-packages/yfinance/screener/screener.pyscreenr   ?   s   z 7###E  H US[[IJJJD3JJGHHHj4407
7#";/I? ,2244=G9ahtz  KU  V  VF!47T[gkllKJ% $V Mm  pB  OP  Q  Q  Q  QED$VnF7Ov %H<<>> 	# 	#CAa}!"Ayy-kyBB	!!####!,6 	 	 	777W5WWWXXX	 yy{{9%h/22	E9	%	% V 	( 	(A&)"3$QKq	&,Y&7CUUVz9
#
7 Td5kkTTTUUU},---*W%u-- ("*
;	Jw'	/	/ (".
;	Jw'	/	/ ("'
;$W-5577Jw
GGGD zz.!%#.  0 0H ==??9%h/22s   ;E 7F)NNNNNNNN)r~   typingr   rw   r   r   yfinance.constr   yfinance.datar   utilsr   r	   r!   r   r   r   r   r   r   r   r   r|   !PREDEFINED_SCREENER_BODY_DEFAULTSru   rt   intboolr        r   <module>r      s                    ' ' ' ' ' '             N N N N N N N N ' ' ' ' ' ' % % % % % % $ $ $ $ $ $ > > > > > > > > > > > > 666$777  RV% % !'+&%*U555B\B\B\3]3]_d_dei  mI  KM  lN  `O  `O  3P  &Q  &QR R' F"U5557K+L+LeeTX[ceiZjNkNkmrmrsx  |O  Q[  {\  n]  n]  _d  _d  ej  m|  ~  l@  _A  _A  CH  CH  IM  P[  ]b  Oc  Cd  Cd  +e  f  fg g'
 5"U5557N+O+OQVQVW[^fhl]mQnQnpupuv{  R  T^  ~_  q`  q`  bg  bg  hm  p  AB  oC  bD  bD  FK  FK  LP  S^  `e  Rf  Fg  Fg  +h  i  ij j' [V).uuuUEgikDl7m7mototuz  ~Z  \^  }_  p`  p`  bg  bg  hl  ow  yE  nF  bG  bG  IN  IN  OV  Xr  Xr  Xr  Is  Is  7t  *u  *u!v !v' "U555$7G+H+H%%PUXkmwWxJyJy  |A  |A  BF  IT  V]  H^  |_  |_  +`  a  ab b' B@n  |B%*U555$?O3P3PRWRWX\_npq^rRsRsuzuz{  CR  TZ  B[  v\  v\  3]  &^  &^_ _' kf!&uuuT<OPZ;[/\/\^c^cdk  nH  nH  nH  _I  _I  /J  "K  "KL L'  V).uuuVEhEhEh7i7ikpkpqu  yF  HI  xJ  lK  lK  MR  MR  SX  [w  y{  Z|  M}  M}  D  D  EL  Nh  Nh  Nh  i  i  7j  *k  *k"l "l'" ;6%*U555AdAdAd3e3eglglmq  uB  DE  tF  hG  hG  IN  IN  OU  WG  WG  WG  IH  IH  JO  JO  PW  Ys  Ys  Ys  Jt  Jt  3u  &v  &vw w#'& !f/).uuuW  Go  Go  Go  8p  8p  rw  rw  x  Ac  Ac  Ac  rd  rd  fk  fk  lp  sF  HN  rO  fP  fP  RW  RW  X\  _~  @B  ^C  RD  RD  FK  FK  LS  Us  Us  Us  Ft  Ft  v{  v{  |@  CM  OT  BU  vV  vV  7W  *X  *X#Y #Y''* 6!&uuuW>`>`>`/a/achchim  qD  FL  pM  dN  dN  PU  PU  VZ  ]|  ~@  \A  PB  PB  DI  DI  JQ  Sq  Sq  Sq  Dr  Dr  ty  ty  z~  AO  Qb  @c  td  td  fk  fk  lp  s}  D  rE  fF  fF  /G  "H  "HI I+'. V!&uuuTNM;Z/[/[]b]bcj  mO  mO  mO  ^P  ^P  RW  RW  X\  _r  tz  ^{  R|  R|  ~C  ~C  DH  Kj  ln  Jo  ~p  ~p  rw  rw  x|  I  KP  ~Q  rR  rR  /S  "T  "TU U/'2 F).uuuTNTbCc7d7dfkfkls  vX  vX  vX  gY  gY  [`  [`  ae  h{  }C  gD  [E  [E  GL  GL  MQ  Ts  uw  Sx  Gy  Gy  {@  {@  AE  HR  TY  GZ  {[  {[  7\  *]  *]!^ !^3'6  V).uuuTNTdCe7f7fhmhmnu  xZ  xZ  xZ  i[  i[  ]b  ]b  cg  j}  E  iF  ]G  ]G  IN  IN  OS  Vu  wy  Uz  I{  I{  }B  }B  CG  JT  V[  I\  }]  }]  7^  *_  *_"` "`7': F!&uuuTOR;P/Q/QSXSXY`  cE  cE  cE  TF  TF  HM  HM  NR  Uh  jn  To  Hp  Hp  rw  rw  x|  I  KP  ~Q  rR  rR  /S  "T  "TU U;'> F"U5557L+M+MuuU\  _A  _A  _A  PB  PB  DI  DI  JN  QY  [_  P`  Da  Da  +b  c  cd d?'B (ERW%*U555$?O3P3PRWRWX_  bD  bD  bD  SE  SE  GL  GL  MQ  Tc  eg  Sh  Gi  Gi  3j  &k  &kl lC'F %Be!&uuuTHd;K/L/LeeTX[ikwZxNyNy.z!{!{} };uuuTHd3C'D'DeeG  Vs  Vs  Vs  Gt  Gt  'u  v  vw wK' ' ' R *,S,SToy}  Fe  -f  -f  -f  g  h  h! "X3 X3%[)X=> X3X3X3 X3 	X3
 X3 X3 X3 X3 X3 h  hX3 X3 X3r   