}L i ddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZddlmZmZddlZddlZddlZddlmZddlmZdd lmZd ZGd d ej>Z e jBZ"Gd dZ#dDdZ$dZ%GddejLZ'da(da)GddejTZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dDdZ3dZ4dZ5d Z6dEd!Z7d"Z8dFd#ee9d$e9d%eee9d&ee9fd'Z:d(Z;d)Zd,Z?d-Z@d.ZAd/ZBd0ZCd1ZDd2ZEdGd3ZFd4ZGd5ZHd6e9d&eIfd7ZJdHd9ZKGd:d;ZLdZOdId?eMd@eIdAe9d&e9fdBZPd8dgfd?eMd@eIdAe9d&e9fdCZQy)J)print_functionNwraps) getmembers) FunctionType)ListOptional) relativedelta)UnknownTimeZoneError)constctt|Dchc]\}}t|tr|}}}t |Dcic]'}|ddk7r||vrt ||r |t ||)c}Scc}}wcc}w)Nr_)rtype isinstancerdirhasattrgetattr)objnamevaluedisallowed_namess T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/yfinance/utils.py attributesr,s *49 5,u e\ * ,,.1X S%) 7c>d*::wsD?Q gc4   SS, Ss A3,A9ceZdZdZy)IndentLoggerAdapterctjtjr^d|jdz}t |t s t |}dj|jdDcgc]}||z c}}||fScc}w)N indent ) get_yf_logger isEnabledForloggingDEBUGextrarstrjoinsplit)selfmsgkwargsims rprocesszIndentLoggerAdapter.process9sp ? ' ' 6djj**Ac3'#h))CIIdO!$Lt~~$]!r2cJtxj|jzc_yr6)r;rr7)r(exc_typeexc_valexc_tbs r__exit__zIndentationContext.__exit__Ls!!T^^3!r2N))r.r/r0r8r=rBr1r2rr4r4Es#^4r2r4c bttj|dttddiSr:)rr" getLoggerrr;)rs rget_indented_loggerrFPs+ w0067K]_gijCk8l mmr2c.tfd}|S)Nctd}|jdjdt5|i|}ddd|jdjdS#1swY*xYw)Nyfinancez Entering z()zExiting )rFdebugr.r4)argsr*loggerresultfuncs rwrapperz%log_indent_decorator..wrapperVsp$Z0 yr23  ! +4*6*F +  x b12  + +s A((A1r)rNrOs` rlog_indent_decoratorrPUs  4[ Nr2c(eZdZfdZfdZxZS)MultiLineFormatterct||tjd|}|r t |j d|_yd|_y)Nz%\(levelname\)-(\d+)srCr)superr8_researchintgroup level_length)r(fmtmatch __class__s rr8zMultiLineFormatter.__init__hs?  3S938C A/ar2c`t||}|jd}|djdd}t|dkr|S|dg}|jdk(rdt|znd|jzdz |j fd|ddDdj |S)NrrrrCc3(K|] }|z ywr6r1).0linepaddings r z,MultiLineFormatter.format..|sBWt^Bs)rTformatr'lenrYextendr&)r(recordoriginallines levelname formattedrar\s @rrczMultiLineFormatter.formatns7>&)t$!HNN3'* u:?Oq I  A%I. 1 11 sNG   Bab B B99Y' 'r2)r.r/r0r8rc __classcell__)r\s@rrRrRds@ ((r2rRFceZdZdZy)YFLogFormatterc|j}t|dr|jd|}t|dr|jd|}t|dr|jd|}||_y)Nyf_cat: yf_interval yf_symbolT)r)rrorqrr)r(rfr)s rfilterzYFLogFormatter.filtersujj 68 $]]O2cU+C 6= )''(3%0C 6; '%%&b.C r2N)r.r/r0rsr1r2rrmrms r2rmctrtdatSt2tjdatj t tS)NrI)yf_log_indentedrF yf_loggerr"rE addFilterrmr1r2rr r sH' 3    %%j1 N,- r2c~tstjdatj tj tj ttj dk(rFtj}td}|j|tj|tadayy)NrIrz%(levelname)-8s %(message)s)rZT) rur"rErvsetLevelr#handlersrd StreamHandlerrR setFormatter addHandlerrF)h formatters renable_debug_moders %%j1 7==)    %Y-?-?)@A)E%%'A*/LMI NN9 %   #')  r2c@ttjd|S)Nz ^([A-Z]{2})([A-Z0-9]{9})([0-9])$)boolrUr[)strings ris_isinrs  .traverses 19 !!HT%[M":;$$vd5k]%;<e /E"  j) + * + r2templaterr1)rrrrrrrs @@@@@rbuild_templatersWNL++$Ja 4nl RRr2chg}g}|jdijD]d\}} |r\d|i}|D](}|s|jd||jd<*d|vr|j|nd|vr|j|f||fS#t$r}t d|Yd}~d}~wwxYw) a  retrieve_financial_details returns all of the available financial details under the "QuoteTimeSeriesStore" for any of the following three yahoo finance webpages: "/financials", "/cash-flow" and "/balance-sheet". Returns: - TTM_dicts: A dictionary full of all of the available Trailing Twelve Month figures, this can easily be converted to a pandas dataframe. - Annual_dicts: A dictionary full of all of the available Annual figures, this can easily be converted to a pandas dataframe. timeSeriesr reportedValueasOfDaterrz,An error occurred while processing the key: N)ritemsrKeyErrorprint)r TTM_dicts Annual_dictsr timeseriestime_series_dicteaches rretrieve_financial_detailsrsIL88L"5;;= FZ F$+S> &WD =AXXo=V$TXXj%9:W$$$%56_ ''(89 F l "" F @D E E FsAB B1B,,B1c$tjj|jd}|j |}|j j jdd|_|r|rtjj|jdj |}|jDcgc]}dt |zc}|_|j j jdd|_|j|dd}n|}t|jj |_||d<|j|j dg}|t|jd }|jd }|Scc}w) z format_annual_financial_statement formats any annual financial statement Returns: - _statement: A fully formatted annual financial statement in pandas dataframe. rrrzTTM rT) left_index right_indexrreverseallhow)rr from_dict set_indexreindexrr%replacermerge camel2titleTsorteddropna) r annual_dicts annual_order ttm_dicts ttm_orderAnnualTTMcol _statements r!format_annual_financial_statementr0sH]] $ $\ 2 < r-z' cannot be special characterz([a-z])([A-Z])z\g<1>z\g<2>z=camel2title() 'acronyms' argument must be iterable of stringsz^[A-Z]+$zEcamel2title() 'acronyms' argument must only contain upper-case, but 'z ' detected(z )([A-Z][a-z])) rr%r TypeErrorrdrrUr[escapesubtitler'r&)rrrpatrepsajs rrr_s|'3ww 'CVWW 7|q gaj# &VWW c3 3s8q=;C5@Z[\\ yy$;C5@YZ[[ zz###Z"7;C5@]^__se5!6=>S!$**,>>(C *(EZX`abXcehMiWXX tyyQ'defdggqrs st C 3%u C-45swwsC#5G5:!M"se5!189A3773Q'99: &--qwws|-G-KRSaqA!Qh. A5ASGS$+,qsxx{,G, N3?6 :.AS,s6!,I I7II< I#I "I#.I)I#c|jdddjd|jdddDz}|S)Nrrrc3<K|]}|jywr6)r)r_xs rrbz)snake_case_2_camelCase..s"G1779"GsrC)r'r&)rscs rsnake_case_2_camelCaser s; a277"Gaggcl126F"GG GB Ir2ct|trtj|d|}|St|tr)t j jt |d}t|t jrMt|t j s3t j j|t jd}t|t j rX|j&tj|j|}|Stj|j|}|Std|dt|)Nr)unittzz%Y-%m-%drzUnable to parse input dt z of type )rrWr Timestampr% _datetimedatetimestrptimercombinetimetzinfo tz_localize tz_convertrr)dt exchange_tzs r_parse_user_dtrs"c ]]2CK 8 I b# ##,,SWjAB b).. )*RASAS2T##++B q0ABB b),, -yy ]]2&22;? I]]2&11+> I8Id2hZPQ Qr2c,|ddk(rtt|ddS|dddk(rtt|ddS|dddk(rtt|ddS|dd k(rtt|dd Stj|S) Nddayswk)weeksmo)monthsy)years)r rWr Timedelta)intervals r_interval_to_timedeltar(s|s#hsm"455 "#$ 3x}#566 "#$ C" $677 " 3x}#566}}X&&r2cJ|yd}ttj||S)z0Check if the provided period has a valid format.Fz^[1-9]\d*(d|wk|mo|y)$)rrer[)period valid_patterns ris_valid_period_formatr-s' ~-M / 00r2cX|j}|j}|d|dz j}|d|z|d<|d|z|d<|d|z|d<|jgd d d |j ddddd d ||Dcgc]}||jvs|c}Scc}w)NrrrAdj OpenrAdj HighrAdj Low)rrrrrCTaxisinplace)r/r0r1rrr4)rcopyto_numpydroprenamer col_orderdfratiocs r auto_adjustr?s I B  _r'{ * 4 4 6EZ%'BzNZ%'BzNuI%ByMGG(  IIw )7QqBJJq7 887s B'B'c:|j}|j}|d|dz }|d|z|d<|d|z|d<|d|z|d<|jgd d d |jdddd d ||Dcgc]}||jvs|c}Scc}w)z4 back-adjusted data to mimic true historical prices rrrr/rr0rr1)rrrrrCTr2)r/r0r1r5)rr6r8r9r:s r back_adjustrAs I B {Obk )EZ%'BzNZ%'BzNuI%ByMGG,  II )7QqBJJq7 887s ;BBc |d}|ddd}|d}|d}|d}|d}|d }|}d |dvr|dd dd }tj||||||d } tj|d | _| j d| S)N timestamp indicatorsquotervolumeopencloselowhighadjcloserrr Tr4)rrrr sort_index) r timestampsohlcvolumesopenscloseslowshighsrKrs r parse_quotesrVsk"J  g &q )D8nG LE ']F ;D LEHT,'' %j1!4Z@ ]]E$)#'%+)1&- /0F??:C8FL d# Mr2cd}d}d}d|vr2d|dvrt|dddkDrtjt|ddj }|j ddtj |jd |_|jdd |jvr)|d d k(jr|jd d }|jddi}d|dvrt|dddkDrtjt|ddj }|j ddtj |jd |_|jddg|_ d|dvrt|dddkDrtjt|ddj }|j ddtj |jd |_|jd|d|dz |d<|dg}|+tjdgtjg}|+tjdgtjg}|+tjdgtjg}|||fS)Nevents dividendsr)rrTrMrrLcurrencyrrCr3amount Dividendsr capitalGains Capital Gainssplits numerator denominator Stock Splits)rr)rdrrlistvaluesrrrrNrrr8r9 DatetimeIndex)rrY capital_gainsr`s r parse_actionsrhsIM F4 $x. (Sh 1L-MPQ-Q $x.5<<>?AI     5!ooiooCHIO   .Y...Ij4IR4O3T3T3V%NN:AN> !(((K1H(II T(^ +DN>4R0SVW0WMM$x.8??ABDM  # #FD # 9"%//-2E2EC"PM   $ $T $ 2%4$5M ! tH~ %#d8nX.F*G!*K]]$x.299;<>F   VT  2??6< "^,-FMM M):):2)>@  $%S->->r-BD  ~#$C,=,=b,AC fm ++r2c|jj |jjd|_|jj||_|S)NUTC)rr rr)r<r'r s r set_df_tzrk0sA xx{{88''.xx""2&BH Ir2c|j}|jj|d<|jj|d<|jj}|j|d}||_|j|dk\}||j|dkz}|j r||}|j gdd}|S) N_dateleftrendstart)rmrprorCr[)r6rrranyr8)rr'tradingPeriodstps_dfidxf_drops r'fix_Yahoo_returning_prepost_unrequestedrv7s  "Fll''F7Oll''F7O ,,   C \\&f\ -FFL \\VE] *F v||fWo5 6F zz| [[2[ ;F Mr2c|dk(r#|j|jk(}|S|dk(r||z jdk}|S|dk(r|j|jk(}|S|dk(rm|jdzdz }|j|z dz dzdz}|j|z dz dzdz}|j|jz }||z d|zz}|d k(}|S||z t j |k}|S) N1d1wk1mo3morCr)rrmonthyearrr&) dt1dt2r'last_rows_same_intervalshiftq1q2 year_diff quarter_diffs r_dts_in_same_intervalrSs$4"%((* ": #" U #&9"2"2Q"6 #" U "%))syy"8 #" U Q!#ii%!# )A -ii%!# )A -HHsxx' Bw9, ".!"3 #"$'9 h0G"G ""r2c\ |ddvrd}d}t|dkDr|jd}|jd}|jj"|jd}|jd}|j |}|j |}|dk(re|j |j k(r@|j d}tj|j dd|j ddg}||fSt|||r|jd} |jd} | | k(r|dfS|r|jdk(r|dfS|d j ddjddj} |r|d k(rd } nd } t| | z dz d kDr|j| tj f|j| tj fz } | | z dz jdkj#r/tj D]}|j| |fxxd zcc<nU| | zdz jdkj#r.tj D]}|j| |fxxdzcc<t%j&|j| dfr!|dj d|j| df<t%j&|dj dst%j(|dj d|dj dg|j| df<d|j*vrFt%j(|dj d|dj dg|j| df<t%j&|dj dst%j,|dj d|dj dg|j| df<d|j*vrFt%j,|dj d|dj dg|j| df<|dj d|j| df<d|j*vr!|dj d|j| df<|j| dfxx|dj dz cc<|j| dfxx|dj dz cc<| dk7r| |j| d f<|j d}|j/|jd}||fS)Nr)r,r~FrCrrjrxrrcKWFidg?g?g{Gz?rrr0rr1rrrr]g?)rdrr rrrilocrconcatrsecondrprodabslocr _PRICE_COLNAMES_rrisnannanmaxrnanminr8)rr' tz_exchangeprepostrepairrZ dropped_rowrridx1idx2sscurrency_divider=r>s r!fix_Yahoo_returning_live_separaterhs |:%K 6{Qll2ll2 <;N;Nr;RTZ[aTbTgTghjTk:l/mFJJtV|,!V^^37:zz6*CUCZCZ[]C^`fgq`r`w`wxz`{B|7} 4#34yy!3!3B!78.1jj&-:L:LR:PRXY^R_RdRdegRh9i.jFJJtU{+ FNN269jj&BSBXBXY[B\^den^o^t^tuw^xAy6z 4?3,27O,@,@,D 4=)&..04:;4G4L4LR4PFJJt[01 4>*fX.>.C.CB.GG* 4,- 1D1I1I"1MM-979FJJt^34$kk"o V\\"%56 ; r2c < |jr td|jr|S|jDcgc] }||vs| }}t|dkDr td|d}|j }|j dxs|j d}t |}|r|jj|d<|jj|d<tjtj|d|djd|zg|dd }|jdd }|jdd }nUtjtj|j|jd|z|jd }|dz}|rtt|jD]|} |j| j} | |jdjks8| |jdjtj d zk\sxd|| <~n_tt|jD]>} |j| } | |jdks| |jd|zk\s:d|| <@|dk(} | j#r|r|| }|jrd|d<|S|jj|d<|jj|d<tjtj|d|djd|zg|dd }|jdd }|jdd }n=it$j&Dcic]}|tj(gc}ddgi} |dk(rtj*| dD]p} |j| } t-j/d|d| jdt1j2| | g} t1j4|| gd}rn|jd}||z}||z}tj*| dD]} |j| } || cxkr|ksn!t-j/d|d| jdt1j2| | g} t1j4|| gd}|j }tjtj|j|jd|z|jd }|dz}tt|jD]>} |j| } | |jdks| |jd|zk\s:d|| <@|dk(} | j#rp|s|dvr!td|d|d|j| t-j/d|ddzt7|| z|| j9}|| }d}|j|}||||}|j;|}||j=}t?||j@dk}|r td |Scc}wcc}w)!NzNo data to mergerCzExpected 1 data colrr,rrmrrn)sider[rightrgr]rrxzAdding out-of-range z @ z in new prices row of NaNs)rrT)sort)rxryzThe following 'z8' events are out-of-range, did not expect with interval rpzDiscarding these z events:rct|tt|k(r ||_|S||d<|dvr1|jdj }d|j_nE|dk(r1|jdj }d|j_ntd|dd|jvr|jdd}|S)N _NewIndex)r]r_rcz?New index contains duplicates but unsure how to aggregate for ''rCr[) rdsetrgroupbysumrr Exceptionrr8)r< new_index data_col_names r_reindex_eventsz'safe_merge_dfs.._reindex_events!s y>SY0 0 BHI#; : :K(,,.B BHHM n ,K(--/B BHHM]^k]llmno o "** $1-B r2z#Data was lost in merge, investigate)!rrrrdrNendswithr(rrr searchsortedrrr8ranger timedeltarqr rrwherer rJrrrr%r6r&isnarshape)df_maindf_subr'r> data_colsdata_colintradaytdindicesr+r f_outOfRangeempty_row_data empty_rowlast_dtnext_interval_start_dtnext_interval_end_dtrrr<f_na data_losts rsafe_merge_dfsrsx ||*++}}"NN?qaw.>?I? 9~-..|H  "G  %?):):3)?H  )B#==-- ,,++w""3::gg.>AQAVAVWYAZ[]A]@^#_aghoapw}~,,wQ,/W1-""3::gmmW]]2=NQS=S#TV\VbVbipq1 s6<<() Aa%%'BGMM!$))++rW]]25F5K5K5MPYPcPcijPk5k/k  s6<<() AaBGMM!$$gmmB.?".D(D  b=L \M*F||'* $ '}}11GG $ll//F7O&&szz''2BWWEUEZEZ[]E^_aEaDb'ceklset|BCGll7l3G[[q[1F\e6L6L MCGG9 M\xYZX[\N4<03JAaB!O)),@ #bggi[Xr*st # >" NI!jj'9)=DIG J"--+)02&'='B$<03NAaB-J6JJ%--0DXJcRTRYRYR[Q\\v.wx$'MM~bT$R "%**gy-A"M N ((*G&&szz'--rARUWAW'XZ`ZfZfmtuG qLG3v||,- $\\!_ a((B'--2Cb2H,H!#GAJ  $ b=L x=0ohZ7opxoyy{}C}I}IJV}W|XYZ Z 1(8DtKcRXYeRfNggh &++-<-(, g&I VY 9F f B h<   DTE V\\!_,I=>> Iu@f!Ns ZZ:Zcl|dvr|jjdk(|jjjddgz}t j dg|j dz}d|j|jz ||<|xjtj|dz c_|S)N)rx1wryrr~) rminutehourrrarrayrr to_timedelta)r<r'f_pre_midnightdst_error_hourss rfix_Yahoo_dst_issuerCs&& ((//Q.288==3E3Er2h3OP))QC"((1+$56*,rxx/G/L/L*L' C$$_c:: Ir2r cN tj|y#t$rYywxYw)NFT)_tztimezoner )r s ris_valid_timezonerPs, R  s  $$Tct|ts|St|dk(r|S|d}|sdD]N}||vs||t||ts"t j ||ddj |||<Pd|vr{dD]v}||dvs t|d|d ts%d D];}t j |d||ddj ||d||<=|d|d =|d|d =xd |vr|d }|ggdk(r |St|ttfrt|trtjjtj|}|jd d gd}t j |d ddjj ||d <t j |dddjj ||d<n|t|trktjjtj|d}tjjtj|d} tjjtj|d} |jddd jd d gd}| jddd jd d gd} | jd d gd} gd} | j|j| }| D]9} t j || ddjj ||| <;|| }t j d jj |_|j"j%||_d|j"_||d <|S)NrexchangeTimezoneName)firstTradeDateregularMarketTimerT)r utccurrentTradingPeriod)regularprepostrp)rpro gmtoffsetrrr)rrrCr[rorrr pre_startpre_endr post_startpost_end)rrrprorrr)rdictrdrWrrrrdr from_recordsrhstackr8rr9r&rrrr) mdtradingPeriodsOnlyr kr,ttpsr<pre_dfpost_df regular_dfcolsr>s rformat_history_metadatarXs b$   2w!| " #B 8 VABw2a5,beS)OOBqEFQQRTUBqE V "R '/ B122z"E[B\]^B_`gBhjm7n-qOOB/E,Fq,I!,LSV\`allmop1215a8q1215kB1215jA  B2!" "b) ) < I;dD\ *#t$]]// 3@WWj+6QW?!oobkNQQ\\]_`7 OOBuICTJMMXXY[\5 C&33CJJs5z4JK--44SZZF 5LM ]]77 3y>8RS Y/WX]]_ikv^w~]A!..? ::> u 4@AB dnnz99C8jCX.decoratorsW << I*002 C U%--3%rlEB  C$DL r2r1)rr#s` rdynamic_docstringr$s r2c@ddl}|d}|jd|d}|S)NrzPermitted Keys/Valuesz .. list-table:: zT :widths: 25 75 :header-rows: 1 * - Key - Values )textwrapdedent)rr&tables r_generate_table_configurationsr)s8 }' OO!G E Lr2rbulletsrc vt|}t|jD]}||}|dd|dzz }|Dcgc]}tt |}}|r0t |dkDr"|dz }t|D]}|dd|dzz }gdj t|} |d d| dzz }|Scc}w) P Generate a list-table for the docstring showing permitted keys/values.  * - rr -  - ,  )r)rkeysrdr%maxr&) rr*rr(rrevlengthsr value_strs rgenerate_list_table_from_dictr9s +5 1E DIIK 0a 4s"%%(./13s1v;// s7|a' ] "E 02eWB// 0 &.1I Ur)B// /E 0 L0sB6c t|}|jD]}||}|dd|dzz }t|tr d}||v}|rt t |j} d} d| v} t t| D]} | | } || }d}t|tr t |}n t|trt|dk(rg}t|t r?t |}td|D}|r tjd dt|}| t|}t| dkDr$t| t|zd kDr || dzz }d} |r2| dk(r| d z } | dk(r| d z } n| d z } | dz } n| dz } | | d|zz } |d z }| dk(r|d z }n|d z }d|vr]|d| dzdzz }|jd}t t|D]&}||}|d|zz }|t|dz ks"|dz }(n| r|dz }n|dz }|| d|zz }|dz }| dk7r|| dzz }n |d d |dzz }||z }0|Dcgc]}tt|}}|r1t|dkDr#|dz }t |D]}|dd |dzz }djt |}|d d |dzz }|Scc}w)r,r-r.rrrNrc3RK|]}t|tttf!ywr6)rrWr r%)r_k2vs rrbz:generate_list_table_from_dict_universal..!s(aPSC#uc9J)K(as%'z [{}\[\]'](r3r1r z| z. rpz | rCz* rr/r0r2)r)r4rrrrdrrdrrrUrr%r'r5r&)rr*r concat_keysr(rre table_addconcat_short_linesk_keys current_line block_formatr+k2 k2_values k2_values_str all_scalark2_values_str_linesrr`r6r7rr8s r'generate_list_table_from_dict_universalrIsv +5 1E YY[X4a 4s"%% fd #I!"k!1 V[[] 34! &&0 s6{+;*AB &r I$(M!)S1$(O #It4Y19L$& !)T2$*9$5 %((aW`(a%a %,/GGL"c)n,UM$,(+I <(1,#l2Cc-FX2X[]2]!\D%88 ') )'2-(E1L Av , 4 , 4 (D0L(E1L$2$b M(AA !U* 6%-I%-I=0%2$b )9D)@@I2?2E2Ed2K/%*3/B+C%D6':1'= )-@4-G G #$s+>'?'A#A$-$5I 6 , )T 1 )T 1 %B4r])BBI!T) w;*x 2%!44IUr&_44 Y E-33qs3q6{3G33wrYs,& !0%S'//%Y__&44n (**(8   W^^   G24 "  %SP#<<"+c++htCy>Q+]abe]f+\ ( '19(9,4,,^8#*Up@F #$9x,","\D" C tVYFGKW[ik_$__SV_ps_r2