
    U>qj0                        d dl m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+d0g      g      dd1dd ed ed&d2dg       ed&ddg       ed#d3d4g       edg d      g      dd5d+d  ed ed#d$d%g       ed&d'd(g       ed!d+d6g      g      dd7dd d8d  ed ed#d$d%g       ed!d)d	g       ed!d9d:g      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      dAdBdd ed ed>g d?       edd@d	g       ed>g dC       edg d      g      ddDd dE ed edg dF       edg dG       eddHdIg       eddJdKg       edg dL       ed#dMdNg      g      dAdOd dE ed edg dG       eddHdIg       eddJdKg       edg dL       ed#dPdQg       ed#dMdNg      g      dAdRd dE ed ed#dPdSg       edg dG       eddHdIg       eddJdKg       ed#dMdNg      g      dAdTd dE ed ed#dPdUg       edg dG       eddHdIg       eddJdKg       ed#dMdNg      g      dAdVd dE ed ed#dPdWg       edg dG       eddHdIg       eddJdKg       ed#dMdNg      g      dAdXd d ed ed!d)dg       edg dG       ed!dHdYg       ed#dMdNg      g      dAdZdd  ed ed!d)d[g       edg dG       ed#d$d%g      g      dd\d]d. ed ed#d$d%g       edg dG       ed!d)d[g      g      dd]d. ed ed#d$d%g       ed#dPd4g      g      dd]d. ed ed#d$d%g       edg d^      g      dd_Z ed` eedadbc      i      	 	 	 	 	 	 	 	 dmddeeeeef   deedfedgedhediedjedkefdl       Zy)n    )	HTTPError)UnionN)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 BondrI   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
kD  rt        d      ||d
kD  rt        d      |?t        | t              r/t        |    }|d   } ||d   }||d   j                         dk(  }i }
|||||||d}ddddd}d	}t        | t              r|+t        j                  dt        d       |}d	}|d   |d<   |d= | |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)<   n1t        |d   t&              rd*|d)<   nt        |d   t(              rd+|d)<   |d   j+                         |d<   t-        |d,d-      }|	j/                  t0        ||.      }|j                          |j                         d    d!   d   S # t        $ 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, 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    rX   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   rW   r    rX   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   )
stacklevelrW   r   scrIds)urlparamszyfinance.screen: 'z%' is probably not a predefined query.financeresultrX   r1   r%   z*Query must be type str or QueryBase, not ""zNo query providedEQUITY	quoteType
MUTUALFUNDETF),:)
separatorsensure_ascii)datarf   )r   
ValueError
isinstancestrPREDEFINED_SCREENER_QUERIESlowerwarningswarnDeprecationWarningitemsget_PREDEFINED_URL_raise_for_statusr   printjsonr   typeEqyQyFndQyEtfQyto_dictr   post_SCREENER_URL_)r"   r   rW   r   r    rX   r   r   rZ   _datadefaults
post_queryfieldsparams_dictkvresprr   responses                      Y/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/yfinance/screener/screener.pyscreenr   ?   s   z 7#E H US[IJJD3JGHHj407
7#";/I? ,224=G9ahtz  KU  VF!47T[gklKJ% MMm  pB  OP  QED$VnF7Ov %H<<> 	#CAa}!"A	# yy-kyB	!!#
 yy{9%h/22	E9	% 	(A&)"3$QKq		( '-Y&7UVz9
#
7 Ed5k]RSTUU},--*W%u-"*
;	Jw'	/".
;	Jw'	/"'
;$W-557Jw
GD zz.!%#.  0H ==?9%h/22K  	77*5'1VWX	s   I "I')NNNNNNNN)yfinance._httpr   typingr   rx   r   r   yfinance.constr   yfinance.datar   utilsr	   r
   r"   r   r   r   r   r   r   r   r   r}   !PREDEFINED_SCREENER_BODY_DEFAULTSrv   ru   intboolr        r   <module>r      s   $    '   N ' % $ > > >!56$%%67  RV% !'+&%*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' [V).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' B@n  |B%*55$?O3PRWX\_npq^rRsuz{  CR  TZ  B[  v\  3]  &^_' kf!&uuT<OPZ;[/\^cdk  nH  _I  /J  "KL'  V).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'" ;6%*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#'& !f/).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''* 6!&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+'. V!&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 F).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'6  V).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^  *_"`7': F!&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;'> F"557L+MuU\  _A  PB  DI  JN  QY  [_  P`  Da  +b  cd?'B (ERW%*55$?O3PRWX_  bD  SE  GL  MQ  Tc  eg  Sh  Gi  3j  &klC'F %Be!&uuTHd;K/LeTX[ikwZxNy.z!{};uuTHd3C'DeG  Vs  Gt  'u  vwK' R *,SToy}  Fe  -f  g  h! "X3%[)X=> X3X3X3 X3 	X3
 X3 X3 X3 hX3r   