
    N j}                        S SK Jr  S SKJr  S SKrS SKrS SKrS SK	r	S SK
rS SKrS SKrS SKrS SKJrJr  S SKJr  S SKJrJrJr  S SKJrJrJrJrJr   " S S	5      r g)
    )requests)iscloseN)sharedutils)YfConfig)
_BASE_URL__PRICE_COLNAMES_period_default)YFDataExceptionYFInvalidPeriodErrorYFPricesMissingErrorYFRateLimitErrorYFTzMissingErrorc                      \ rS rSrSS jr\R                  \SSSSSSSSSSSS4S\R                  4S	 jj5       r
SS\R                  4S
 jjrS\4S jrSS\R                  4S jjrSS\R                  4S jjrSS\R                  4S jjrS S\R                  4S jjrSS\R                  4S jjr\R                  S!S j5       rS rS"S jr\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S#S j5       rSrg)$PriceHistory   Nc                     Xl         UR                  5       U l        X0l        U=(       d    [        R
                  " SS9U l        0 U l        S U l        SU l	        S U l
        g )Nchrome)impersonateF)_datauppertickertzr   Sessionsession_history_cache_history_metadata_history_metadata_formatted_reconstruct_start_interval)selfdatar   r   r   s        j/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/yfinance/scrapers/history.py__init__PriceHistory.__init__   sR    
llnH("2"2x"H !%+0( ,0(    1dFT
   returnc           
      2   [         R                  " 5       nU(       a  [        R                  " S[        SS9  UnU[
        :X  a  SnU(       d  U(       a  SnOSnOUnU	(       Ga  US;   Ga  US:X  a  [        S5      eUGc  UGc  UGb  U R                  nUc  [        U R                  5      n[        U5      n[         R                  " 5       [        R                  U R                  '   UR                  S	S
5      S
   [        R                  U R                  '   U(       d  [         R"                  R$                  (       d  UeUR'                  U5        [         R                  " 5       $ US:X  aO  [(        R*                  " [,        R.                  R1                  S5      R3                  U5      R4                  S
S
5      nOl[,        R.                  R1                  S5      R3                  U5      R+                  5       nU[         R6                  " U5      -  nU[(        R8                  " SS9-  nUnSnSnUnUnU(       d"  U(       d  U(       a  UR;                  5       S:X  a  U R                  nUc  [        U R                  5      n[        U5      n[         R                  " 5       [        R                  U R                  '   UR                  S	S
5      S
   [        R                  U R                  '   U(       d  [         R"                  R$                  (       d  UeUR'                  U5        [         R                  " 5       $ U(       a0  [         R<                  " UW5      n[?        URA                  5       5      nU(       a0  [         R<                  " UW5      n[?        URA                  5       5      nUc  U(       d  U(       d  SnGOrU(       d4  W[         R6                  " S5      -
  n[?        URA                  5       5      nGO7U(       dG  [,        R.                  R1                  S5      R3                  W5      n[?        URA                  5       5      nOUR;                  5       S:X  aS  Uc  [?        [B        RD                  " 5       5      nUc.  US:X  a  US-
  nOUS;   a  US-
  nOUS;   a  US-
  nOUS-
  nUS-  nOU(       a  U(       a  [        S5      eU(       d  U(       aZ  [         R6                  " U5      nUc  WU-   n[?        URA                  5       5      nUc  WU-
  n[?        URA                  5       5      nSnU(       d  U(       a  X4S.nOUR;                  5       nSU0nUR;                  5       US'   UUS'   US   S:X  a  SUS'   SUS '   [G        U5      nU R                  nS HM  nUU;   d  M  [        [,        R.                  " UU   S!S"9RI                  S5      R3                  U5      5      UU'   MO     UR#                  U R                   S#[        U5       35        [J         S$U R                   3nSnU RL                  RN                  nUbv  [,        R.                  " US!S"9RI                  S5      n[,        R.                  R1                  S5      n[(        R8                  " S%S&9n UU -   U::  a  U RL                  RP                  n U" UUUS'9nS(URR                  ;   d  Uc  [U        S)5      eURW                  5       nU=(       d    0 RO                  S*5      =(       d    0 n!U!RO                  S+5      n"[]        U"[^        5      (       a8  [a        U"5      S,:  a)  U"S,   =(       d    0 n#U#RO                  S-5      =(       d    0 n$O0 n$U$U l1        US   S.   S/;   n%S0n&U(       d  Ub  UR;                  5       S:X  Ga4  U&S1US    S23-  n&Ub  U&U -  n&OU%(       dF  U&[,        R.                  " US!S"9RI                  S5      R3                  U5      R+                  5        -  n&O7U&[,        R.                  " US!S"9RI                  S5      R3                  U5       -  n&U&S3-  n&Ub	  U&U S43-  n&OU%(       dH  U&[,        R.                  " US!S"9RI                  S5      R3                  U5      R+                  5        S43-  n&OCU&[,        R.                  " US!S"9RI                  S5      R3                  U5       S43-  n&O	U&S5U S43-  n&S6n'Ub  []        U[F        5      (       d  [e        U R                  U&5      nS7n'GO7[]        U[F        5      (       a+  S8U;   a%  U&S9US8    S43-  n&[e        U R                  U&5      nS7n'OS*U;   a:  US*   S:   (       a-  U&S;US*   S:   S<   -   S=-   -  n&[e        U R                  U&5      nS7n'OS*U;  d/  US*   S+   b&  US*   S+   (       a  US*   S+   S,   S>   S?   S,   (       d  [e        U R                  U&5      nS7n'OiU(       ab  XRb                  S@   ;  aP  [         Rf                  " U5      (       d5  [i        U R                  USARk                  U Rb                  S@   5      5      nS7n'U'(       a  [        W5      n[         R                  " 5       [        R                  U R                  '   UR                  S	S
5      S
   [        R                  U R                  '   U(       d  [         R"                  R$                  (       d  UeUR'                  U5        U Rl                  b  U Rl                  U:X  a  SU l6        [         R                  " 5       $ U Rb                  SB   n(U(SC;   n)U Rb                  SD   n*U Rb                  SE   n+U(       a  XRb                  RO                  S@/ 5      ;  a  [?        [B        RD                  " 5       5      n[,        R.                  " US!S"9RI                  S5      n[(        R*                  Ro                  U5      nU[         R6                  " U5      -  nU[(        R8                  " SS9-  n[         Rp                  " US*   S+   S,   5      n,U(       a`  U,Rr                  (       dO  U,Rt                  S.   WR3                  S5      RI                  S5      :  a  U,Rw                  U,Rt                  S.   5      n,U,Rr                  (       a  U R                   SF3n-O][a        U,5      S
:X  a   U R                   SGU,Rt                  S,    SH3n-O.U R                   SGU,Rt                  S,    S3U,Rt                  S.    3n-UR#                  U-5        UR;                  5       S:X  a  UR#                  U R                   SI35        U,Ry                  SJ5      n.[,        Rz                  " U.R}                  5       Rt                  U.SK   R                  5       U.SL   R                  5       U.SM   R                  5       U.SN   R}                  5       U.SO   R}                  5       U.SP   R                  5       SQ.SR9n,[         R                  " U,UU*5      n,[         R                  " U,U5      n,US   S.   S/;   n%U(       d  U%(       a  SSU Rb                  ;   a  U Rb                  SS   n/[]        U/[,        Rz                  5      (       d:  [         R                  " U Rb                  S7ST9U l1        S7U lF        U Rb                  SS   n/[         R                  " U,UU/5      n,U,Rr                  (       a  U R                   SU3n-O][a        U,5      S
:X  a   U R                   SVU,Rt                  S,    SH3n-O.U R                   SVU,Rt                  S,    S3U,Rt                  S.    3n-UR#                  U-5        [         R                  " US*   S+   S,   5      u  n0n1n2U)(       d  Sn2U1b2  [         R                  " U1UU*5      n1U1SW   R                  SX5      U lJ        O[,        R                  " 5       U lJ        U0b  [         R                  " U0UU*5      n0SEU0R                  ;   ax  U0R                  SX5      U lM        U Rb                  SE   n3U3c  S0n3U0SE   U3:g  n4U4R                  5       (       a   U	(       a  U3S0:w  a  U R                  U0U3U	5      n0U0Rw                  SES
SY9n0O4U0SZ   R                  SX5      U lM        O[,        R                  " 5       U lM        U2b2  [         R                  " U2UU*5      n2U2S[   R                  SX5      U lP        O[,        R                  " 5       U lP        Ube  U,Rr                  (       dT  U,Rt                  S,   R                  S\5      n5U0b  U0R                  U5S n0U2b  U2R                  U5S n2U1b  U1R                  U5S n1Ub1  W[,        R                  " S
5      -
  n6U0b  U0SU6 n0U2b  U2SU6 n2U1b  U1SU6 n1US   S.   S/;   n%U%(       d  [,        R                  " U,Rt                  R*                  5      RI                  U*S7S]S^9U,l:        U0R                  S,   S,:  a>  [,        R                  " U0Rt                  R*                  5      RI                  U*S7S]S^9U0l:        U1R                  S,   S,:  a>  [,        R                  " U1Rt                  R*                  5      RI                  U*S7S]S^9U1l:        U,R                  5       n7U0R                  S,   S,:  a  [         R                  " U7U0U5      n7SZU7R                  ;   a#  S,U7R                  U7SZ   R                  5       SZ4'   OS_U7SZ'   U1R                  S,   S,:  a  [         R                  " U7U1U5      n7SWU7R                  ;   a#  S,U7R                  U7SW   R                  5       SW4'   OS_U7SW'   U)(       ac  U2R                  S,   S,:  a  [         R                  " U7U2U5      n7S[U7R                  ;   a#  S,U7R                  U7S[   R                  5       S[4'   OS_U7S['   U7Rr                  (       a  U R                   S`3n-O][a        U75      S
:X  a   U R                   SaU7Rt                  S,    SH3n-O.U R                   SaU7Rt                  S,    S3U7Rt                  S.    3n-UR#                  U-5        [         R                  " U7US   U*XYU+Sb9u  n7n8U8b  U8SN   U8R                  Sc.U Rb                  Sd'   U7U7Rt                  R                  SeSf9)    n7U	(       Ga<  UR#                  U R                   Sg35        U7R                  5       n7U R                  U7U+5      u  n7n+U+U Rb                  SE'   U R                  U7UU+5      n7U7Rr                  (       dj  U R                  U7R                  S.S UU*U5      n9ShU7R                  ;  a  S6U7Sh'   [,        R                  " U7Rw                  U7Rt                  S.   5      U9/5      n7U R                  U7UU*U5      n7U R                  U7UU*5      n7U R                  U7UU*U5      n7U R                  U75      n7U7R                  5       n7 U(       a  [         R                  " U75      n7OU(       a  [         R                  " U75      n7U(       a&  [        R                  " U7US*   S+   S,   S-   Sk   5      n7U7SP   R                  S,5      R                  [        R                  5      U7SP'   U%(       a  SlU7Rt                  lZ        OSXU7Rt                  lZ        U(       d  U7Rw                  / SmQSnSo9n7U
(       dz  [        SP/-   / SmQ-   n;U; V<s/ s H  n<U<U7R                  ;   d  M  U<PM     n;n<U7U;   R                  5       U7U;   S,:H  -  R                  S
SY9n=U7Rw                  U=Rt                  U=   5      n7X/:w  a  U R                  U7X/U5      n7U7Rr                  (       a  U R                   Sp3n-O][a        U75      S
:X  a   U R                   SqU7Rt                  S,    SH3n-O.U R                   SqU7Rt                  S,    S3U7Rt                  S.    3n-UR#                  U-5        U7R                  5       n7U Rl                  b  U Rl                  U:X  a  SU l6        U7$ ! [X         a    e [Z         a+    U(       d  [         R"                  R$                  (       d  e  GNf = f! [Z         a  n:U(       d  [         R"                  R$                  (       d  e U(       a  SiU:-  nOSjU:-  n[         R                  " 5       [        R                  U R                  '   U[        R                  U R                  '   UR'                  U R                  < S	U< 35         Sn:A:GNSn:A:ff = fs  sn<f )ra
  
:Parameters:
    period : str
      | Valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
      | Default: '1mo' if start & end None
      | Can combine with start/end e.g. end = start + period
    interval : str
      | Valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
      | Intraday data cannot extend last 60 days
    start : str
      | Download start date string (YYYY-MM-DD) or _datetime, inclusive.
      | Default: 99 years ago
      | E.g. for start="2020-01-01", first data point = "2020-01-01"
    end : str
      | Download end date string (YYYY-MM-DD) or _datetime, exclusive.
      | Default: now
      | E.g. for end="2023-01-01", last data point = "2022-12-31"
    prepost : bool
      | Include Pre and Post market data in results?
      | Default: False
    auto_adjust : bool
      | Adjust all OHLC automatically?
      | Default: True
    back_adjust : bool
      | Back-adjusted data to mimic true historical prices
    repair : bool
      | Fixes price errors in Yahoo data: 100x, missing, bad dividend adjust.
      | Default: False
      | Full details at: :doc:`../advanced/price_repair`.
    keepna : bool
      | Keep NaN rows returned by Yahoo?
      | Default: False
    rounding : bool
      | Optional: Round values to 2 decimal places?
      | Default: False = use precision suggested by Yahoo!
    timeout : None or float
      | Optional: timeout fetches after N seconds
      | Default: 10 seconds
    raise_errors : bool
        If True, then raise errors as Exceptions instead of logging.
zF'raise_errors' deprecated, do: yf.config.debug.hide_exceptions = False   )
stacklevelN1mo)5d1wkr,   3mor-   z<Yahoo's interval '5d' is nonsense, not supported with repair:    ytdUTC   daysr&   max1mi 
 )2m5m15m30m90mi O )1h60mi gl   j-t zASetting period, start and end is nonsense. Set maximum 2 of them.)period1period2rangeintervalincludePrePostr<   r;   zdiv,splits,capitalGainseventss)unitz: Yahoo GET parameters: z/v8/finance/chart/   )minutes)urlparamstimeoutzWill be right backz)*** YAHOO! FINANCE IS CURRENTLY DOWN! ***chartresultr   metamh  (  -> )z	 (period=FTstatus_codez(Yahoo status_code = errorz (Yahoo error = "descriptionz")
indicatorsquotevalidRanges, instrumentType)
MUTUALFUNDETFexchangeTimezoneNamecurrencyz$: yfinance received OHLC data: EMPTYz: yfinance received OHLC data: z onlyz: resampling 30m OHLC from 15m30minOpenHighLowClose	Adj CloseVolume)rf   rg   rh   ri   rj   rk   )indexr!   tradingPeriods)tradingPeriodsOnlyz: OHLC after cleaning: EMPTYz: OHLC after cleaning: Stock SplitsDateaxis	DividendsCapital GainsDshift_forward)	ambiguousnonexistent        z$: OHLC after combining events: EMPTYz: OHLC after combining events: )repairrd   )PriceTime	lastTradefirst)keepz: checking OHLC for repairs ...	Repaired?zauto_adjust failed with %szback_adjust failed with %s	priceHintDatetimers   ro   rt   ignore)columnserrorsz : yfinance returning OHLC: EMPTYz: yfinance returning OHLC: )or   get_yf_loggerwarningswarnDeprecationWarningr
   
ValueErrorr   r   r   strempty_dfr   _DFSsplit_ERRORSr   debughide_exceptionsrZ   	_datetimedatepd	Timestampnow
tz_convertyear_interval_to_timedelta	timedeltalower_parse_user_dtint	timestamp_timetimedicttz_localizer   r   get	cache_gettextr   jsonr   	Exception
isinstancelistlenr   r   is_valid_period_formatr   joinr   fromtimestampparse_quotesemptyrl   dropresample	DataFramelastr~   r7   minsum	set_df_tzfix_Yahoo_dst_issueformat_history_metadatar   'fix_Yahoo_returning_prepost_unrequestedparse_actionsrename_axis_splitsSeriesr   
_dividendsany_dividends_convert_fx_capital_gainsfloorloc	Timedeltato_datetimeshape
sort_indexsafe_merge_dfsisna!fix_Yahoo_returning_live_separatename
duplicated_standardise_currency_fix_bad_div_adjust_fix_zeroesilocconcat_fix_unit_mixups_fix_bad_stock_splits_repair_capital_gainsauto_adjustback_adjustnproundfillnaastypeint64r	   all	_resample_consolidate)>r    periodrC   startendprepostactionsr   r   rz   keepnaroundingrL   raise_errorsloggerinterval_userperiod_userr   
_exceptionerr_msg
start_userend_userstart_dtend_dt	period_tdrK   params_prettykrJ   r!   get_fndt_now
data_delay
safe_chartresult_list
first_itemrO   intraday_price_data_debugfail
quote_typeexpect_capital_gainstz_exchangerd   quotesmsgquotes2tps	dividendssplitscapital_gainsprice_currencyf_currency_mismatchstart_dend_dt_sub1df
last_tradedf_lastedata_colnamescmask_nan_or_zeros>                                                                 r"   historyPriceHistory.history   sO   ^ $$&MMbdv  DE  F ^#K Kh"== 4 !_``}1CWW:!1$++!>J!*oG/4~~/?FKK,29--a2H2KFNN4;;/#HNN,J,J((W- >>++U?%NN2<<+;+;E+B+M+Mb+Q+V+VXY[\]ELL,,U3>>rBGGIEU99&AAEY00a88E$H
CFv||~'>Bz-dkk:
j/+0>>+;DKK(.5mmD!.DQ.Gt{{+(F(F$$LL)~~''++E26H**,-E))#r2Ff&&()C>S!E$@$@$GGH..01))%0;;B?&**,-||~&;ejjl+C=4' #f!%FF #g!]2 #h #j 0QJE3 !dee#!88@	;%	1Ff..01C=%	1H 2 2 45EC!&7F\\^Fv&F%^^-z#*  *&!&F: 5xVWW'AM!#&r||F1IC'H'T'TUZ'['f'fgi'j#ka  ( 	}$<S=O<PQR .t{{m<?\\#C0<<UCF\\%%e,F",,R8J
"f,--	D
 $tyy0DL%&QRR99;D zr&&w/52
 nnX.k4((S-=-A$Q-2J>>&)/RDD!%*%b)Z7FNflln&=2fZ&8%9!;;%!
|4!!U(E(Q(QRW(X(c(cdf(g(l(l(n'op!!U(E(Q(QRW(X(c(cdf(g'hi!'#!z^3!!Ss(C(O(OPU(V(a(abd(e(j(j(l'mmn%oo!!Ss(C(O(OPU(V(a(abd(e'ffg%hh!9VHA!66<z$55-dkk;LMJDd##(=#8m9L8MQ!OO-dkk;LMJD_gw!7!4tG}W7Mm7\!\_c!cc-dkk;LMJDD DM($;$C4PW=YaKbjnovjw  yA  kB  CD  kE  FR  kS  T[  k\  ]^  k_-dkk;LMJD&<&<]&KKTYTpTpqwTxTx-dkk6499TMcMcdqMrCstJD*oG',~~'7FKK$*1--a*@*CFNN4;;'HNN$B$B  W%//;@`@`dl@l370>>## ++,<=
)-BB,,-CD))*5 f$:$:$>$>}b$QQejjl#C\\#C0<<UCFNN005EU11&99EY((a00E ##DM($;A$>?v||||B6#4#4U#;#G#G#MMV\\"%56<<[[M!EFC[A[[M!@a@QQVWC[[M!@a@QQUV\VbVbceVfUghCS >>u$LLDKK=(FGHoog.G\\(<(<--/++-u~))+ )..0$[1668!(+//1D F ;?**68<*%b)Z78(8D<R<R(R(()9:Cc2<<00).)F)FtG]G]rv)w&370,,-=>BB68UXYF<<[[M!=>C[A[[M!8a8IOC[[M!8a8Ifll[]N^M_`CS ,1+>+>tG}X?VWX?Y+Z(	6=# M__VX{CF!.1==fEDL99;DL 	8[IIY... #,"7"7"?!%!7!7
!C!)%'N&/
&;~&M#&**,,.B"6$($>$>y.Z`$a	%NN:AN>	"+K"8"D"DV"L iikDO$!OOM8[QM"/"@"L"LV"TD"$))+D<< ,,q///4( )gh 7I ,$1$5$5gh$?M%#ZZ1F? 2<<?2K$%l{3	( -l{ ;!- *%b)Z7 >>&,,*;*;<HH`d  sBH  CFLq!A%"$..1E1E"F"R"RS^jn  }L"R  #M	||A"!~~fll.?.?@LL[dh  wFL   G  ??1!%%b)X>B"**$:;BFF2k?'');67!B{O<<?Q%%b&(;BRZZ'@ABFF2n%**,n<=!$B~""1%)))"mXF"**,FGr/*//1?BC&)?#88[[M!EFCW\[[M!@!USC[[M!@!TRTRZRZ[]R^Q_`CS@@VJEWYdfm  HP  QJ!;Eg;NWaWfWf2gD"";/$$'$223LLDKK=(GHIB
  55b(CLB19D"":.))"hAB 88**27723<;PWXbjj0&+B{OYY 5w?@&&r8['JB++B+FB!!"hWEB ++B/BB	<&&r*&&r* "d7mH5a8@MNB(|**1-44RXX>8&BHHM"BHHM !OX`aB,z9<jjM(5I1bjjQMI "= 1 6 6 8B}<MQR<R SXX^_X`)//0@ABB$H[IB88[[M!ABCW\[[M!<RXXa[MOC[[M!<RXXa[MbhhWYl^\CS __++7D<\<\`h<h/3D,	q	   	 	HNN$B$B %C	R  		<HNN$B$B6:6:',~~'7FKK$*1FNN4;;'LLT[[':;;		<2 JsP   66Aa XAb X.Ab \	Ae\!Aea;AbbAbb
AebB(AeeAec                     X!U4nX@R                   R                  5       ;  aB  U R                  XUSS9nXPR                  U R                  U R
                  S.U R                   U'   U R                   U   $ )NT)r   rC   rz   r   )pricesr  r  capital gains)r   keysr  r   r   r   )r    r   rC   rz   	cache_keyr  s         r"   _get_history_cachePriceHistory._get_history_cache  ss    v.	//4466VvW[\B8::>,,AEATAT.VD	* ""9--r%   c                     U R                   b  SU R                   ;  a  U R                  SSS9S     U R                  SL a,  [        R                  " U R                   5      U l         SU l        U R                   $ )Nrm   r-   r>   )r   rC   r  FT)r   r  r   r   r   )r    s    r"   get_history_metadata!PriceHistory.get_history_metadata$  so    !!)-=TE[E[-[##4$#?I++u4%*%B%B4CYCY%ZD"/3D,%%%r%   c                 (    U R                  SXS9S   $ )Nr&   rC   r   rz   r  r  r    r   rz   s      r"   get_dividendsPriceHistory.get_dividends/  s    &&V&ST_``r%   c                 (    U R                  SXS9S   $ )Nr&   r  r  r   r!  s      r"   get_capital_gainsPriceHistory.get_capital_gains2  s    &&V&STcddr%   c                 (    U R                  SXS9S   $ )Nr&   r  r  r   r!  s      r"   
get_splitsPriceHistory.get_splits5  s    &&V&ST\]]r%   c                    U R                  US9nUS   nUS   nUb  [        U[        R                  5      (       au  SUR                  ;   ae  [
        R                  " UR                  SSS9US5      nUS   R                  S	5      US'   US   R                  S
5      US'   UR                  SS0S9n/ SQnX5 Vs/ s H  ofUR                  ;   d  M  UPM     sn   n/ SQnU Vs/ s H  ofUR                  ;   d  M  UPM     nnXwU   S:g  R                  SS9   nU H/  nXv   S
:H  R                  5       (       d  M  UR                  USS9nM1     U$ s  snf s  snf )N)r   r  r  rd   rs   r1   rq   r&   rT   ry   Dividends FXr   )rs   r+  ro   rt   r   r   )r  r   r   r   r   r   r   r   r   renamer   r   )	r    r   r!   r  divscolsr  r   cols_numerics	            r"   get_actionsPriceHistory.get_actions8  s^   &&f&5(^K 
4 > >:QUQ]Q]C]%%bggkg&BD$OB
^2226BzN o44S9B{OJ#?@BM9Abjja9:E#/H<a3G<H<0!388a8@AA
c!&&((!,,qq,1   : Is   9EE#E:Ec                 D   X#:X  a  U$ S nSnUS:X  ap  US:X  ag  Sn[         R                  " [        R                  R	                  5       R
                   S35      nUR                  UR                  R                  5      nOSnOUS:X  am  SnUS:X  ad  [         R                  " [        R                  R	                  5       R
                   S35      nUR                  UR                  R                  5      nOhUS	:X  a  S
nO_US:X  aJ  US:X  a  Sn	O;[        R                  R	                  5       R                  S5      R                  5       n	SU	 3nO[        SU S35      eSSSSSSSS.n
SUR                  ;   a  SU
S'   SUR                  ;   a  U
S   U
S'   SUR                  ;   a  SU
S'   SUR                  US   S:H  S4'   US:w  a"  UR                  US S US!9R                  U
5      nO!UR                  US S US"9R                  U
5      nSUR                  US   S:H  S4'   U$ )#Nepochr.   r2   7Dz-01-01zW-MONr-   5Dr,   MSr/   JANz%bzQS-z(Not implemented resampling to interval ''r~   r   r7   r   r   prod)rf   rh   rg   ri   rk   rs   ro   r   r   rj   ri   rt         ?ro   ry   left)labelclosedorigin)r=  r>  offset)r   r   r   datetimer   r   r   rl   r   strftimer   r   r   r   r   agg)r    r  df_intervaltarget_intervalr   r@  r?  resample_period
year_startalign_monthresample_mapdf2s               r"   r   PriceHistory._resampleP  s&   )Ie#"&\\Y-?-?-C-C-E-J-J,K6*RS
#//<")$"O\\Y-?-?-C-C-E-J-J,K6*RS
#//<%"O%#'00446??EKKM #K=1OGGXXYZ[[ E56% "**$(-L%"**$(4W(=L%bjj(,1L):=r.!3&67W++oVFSY+Z^^_klC++oVFSY+Z^^_klC<?N#S(.89
r%   c                 *   [         R                  " 5       nSX R                  S.n[        U[        R
                  5      (       d  [        S[        U5      5      eUS:X  a  U$ USS  S;   a  SnSnOSn[         Vs/ s H  oU;   d  M
  UPM     n	nU	S	/-   n
/ S
QnU Vs0 s H  o[         R                  " U5      _M     nn[        [        U5      S-
  5       Vs0 s H  oU   XS-      _M     nnS S [        R                  " SS9S.nS H  n[        R                  " SS9X'   M     [        R                  " SS9US'   X.;   a	  X   nX   nO,UR                  SU S35        SUR                  ;  a  SUS'   U$ U R                   c  X l        X R                   :w  aM  X.U R                      :w  a;  SR#                  U R                   XR                      U5      nUR%                  UUS9  U$ UR'                  5       nX   R)                  5       U:H  nUR+                  SS9nUU   nUc  S nOmU[        R                  " SS9-  n[        R,                  R/                  S5      U-
  nUR1                  UR2                  R4                  5      R7                  S5      nUR9                  SU SU SU 3US9  Ubw  UR2                  U:  nUU-  nUR+                  5       (       dN  S[:        R<                  " UR+                  SS95       S3nUR%                  UUS9  SUR                  ;  a  SUS'   U$ UR2                  U   n[        U5      S:X  a'  UR9                  SUS9  SUR                  ;  a  SUS'   U$ UR?                  5       nSUR                  ;  a  SUS'   X   RA                  5       R+                  SS9) nUX   R)                  5       U:g  RC                  SS9-  nUU   nUS   //nUS :X  a  [D        RF                  RG                  S!S"9nOUS#:X  a  [D        RF                  RG                  S!S"9nOwUS$:X  a  [D        RF                  RG                  S!S"9nOSUS%:X  a  [D        RF                  RG                  SS"9nO/US:X  a  [        R                  " S&S9nO[        R                  " SS9nUR9                  S'U 3US9  [        S[        U5      5       H[  nUU   nURI                  5       US(   S   RI                  5       U-   :  a  US(   RK                  U5        MI  URK                  U/5        M]     UR9                  S)US9  U H   nUR9                  S*US    S+US(    35        M"     [        [        U5      5       GH<  nUU   nUS   n UR2                  RM                  U /S,S-9S   n!U!S:  aW  Ub  UR2                  U!S-
     U:  a>  U(       a2  UR2                  U!S-
     RI                  5       U RI                  5       :X  a  U!S-  n!US(   n"UR2                  RM                  U"/S,S-9S   n#U#[        U5      S-
  :  a>  U(       a2  UR2                  U#S-      RI                  5       U"RI                  5       :X  a  U#S-  n#UR2                  U!U#S-    n$UU==   U$RO                  5       -  ss'   UU   RQ                  5         GM?     Sn%U GHC  nXR2                  RS                  U5         n&UR9                  S.[U        U&5      -   5        US   n'U'RI                  5       n(Sn)US%:X  a:  [        RH                  RW                  5       U(-
  [        R                  " S/S9:  a  Sn)O?US0;   a9  [        RH                  RW                  5       U(-
  [        R                  " S1S9:  a  Sn)U)(       a!  S2U(       a  U'OU( S33nUR%                  UUS9  M  [        R                  " SS9n*US#;   a  U(U-
  n+US(   RI                  5       U-   n,O,US$:X  a  U(n+US(   RI                  5       U-   n,OUS   n+US(   U-   n,U+U*-  n+U,U*-  n,U(       a#  U+RI                  5       n+U,RI                  5       U*-   n,Ub  [Y        URI                  5       U+5      n+UR9                  S4U S5U S6U+ S7U, 3US9  [         R                  " 5       n[[        US85      (       a+  UR\                  n-UR_                  [`        Rb                  5        U Re                  U+U,USSUSSS99n.[[        US85      (       a  UR_                  W-5        U.b  U.Rf                  (       a"  S2U(       a  U'OU( S33nUR%                  UUS9  GM  U.Rh                  US   US(   UU   -   [        R                  " SS:9-
   R?                  5       n.U.Rf                  (       a%  S;U S<U(       a  U'OU( S=3nUR%                  UUS9  GM  SU.S>'   US#:X  aj  / S?Qn/U/U&R2                  S   Rk                  5       S@-   S-
  S@-     n0U.R2                  Rm                  S 5      Ro                  SAU0-   5      Rp                  U.SB'   SBn1OUS$:X  a0  [        Rr                  " U.R2                  RH                  5      U.SC'   SCn1O\SU.Rh                  U.R2                  RS                  U&R2                  5      S>4'   U.S>   Ru                  5       U.SD'   U.Rw                  S>SS9n.SDn1U.U.U	SE/-      RA                  5       RC                  SS9)    n.U.Ry                  U15      n2U2R{                  SFSGSHSISJSKSLSM9R}                  SNSO0SP9n3U1SQ;   a5  U3R2                  Rm                  U.R2                  R4                  5      U3l        OcU.SD   R                  5       U.SR'   [:        RJ                  " U.R2                  S   /U.R2                  U.SD   R                  5       S:     5      n4U4U3l        UR9                  SS[U        U35      -   5        [:        R                  " U&R2                  U3R2                  5      n5[        U55      S:X  a  STU SUU( SV3nUR%                  UUS9  GMs  US$:X  Ga  U3U3R2                  RS                  U55         n6U&U&R2                  RS                  U55         n7U7SO   U:H  n8U8R+                  5       (       Ga  U7SO   U7SW   -  n9[:        R                  U9U8'   U9RA                  5       RC                  5       (       Gd  U9R                  5       R                  5       n9[:        R                  " U85      S    GHN  n:U6R2                  U:   n[        U95      n;U3Rh                  USE4   S:w  ay  U:U;S-
  :  a!  U9R                  U:S-      U9R                  U:'   M]  SXU6SE   R                  U:   U6SW   R                  U:S-
     -  -
  n<U9R                  U:S-
     U<-  U9R                  U:'   M  U:S:  a!  U9R                  U:S-
     U9R                  U:'   M  U9R                  U:S-      U9R                  U:'   U6SE   R                  U:S-      S:w  d  GM  U9R                  U:==   SXU6SE   R                  U:S-      U6SW   R                  U:   -  -
  -  ss'   GMQ     U7SW   U:H  n=U9R                  U&R2                  [:        R                  SY9R                  5       R                  5       n9U&SW   U9-  U3SO'   U=R+                  5       (       a  U=R                  U3R2                  SSY9n>U9R                  U3R2                  [:        R                  SY9R                  5       R                  5       n?U>R)                  5       n@U3SW   U@   U?U@   -  U3Rh                  U@SO4'   SZSW/nAU3U3R2                  RS                  U55         UA   R)                  5       n6U&U&R2                  RS                  U55         UA   R)                  5       n7U7U:g  nBUB[:        R                  " U65      ) -  nBUBR+                  5       (       d  UR%                  S[U( SV3US9  G	MD  [        [        WA5      5       H  nCWBS S 2UC4   ) nDUDR+                  5       (       d  M$  U7R                  R                  (       d  U7R?                  5       n7U6R                  R                  (       d  U6R?                  5       n6SU7WDWC4'   SU6UDUC4'   M     U7WB   U6UB   -  nEU2R                  5       nFU3R2                  UFl        UFUFR2                  RS                  U55         R)                  5       R                  [        5      nFUFR                  R                  (       d  WFR?                  5       nFWFS S 2S 4   nF[:        R                  " UF[        WA5      5      nFUFWB   nF[:        R                  " WESXS\S]9) nG[:        R<                  " UG5      [        UA5      :X  a  SXnHO[:        R                  " WEWFS^9nH[        WHS_-  S-
  5      S`:  aA  U&R?                  5       n&[         H"  nURh                  UU   U:g  U4==   Sa-  ss'   M$     WHSa-  nHUR9                  SbWHSc 3US9  [        SXUH-  S5      nI[        UHS5      nHUHS:X  a  WIS:X  a  ODWHS:  a  U3U	==   WH-  ss'   U3S	==   UH-  ss'   O#WIS:  a  U3U	==   SXWI-  -  ss'   U3S	==   UI-  ss'   U&R2                  U&U	S	/-      U:H  R)                  5       R+                  SS9   nJ/ nKUJ H&  n:U:U3R2                  ;  d  M  WKRK                  U:5        M(     [        WK5      S:  a  UR9                  Sd[U        WK5      -   US9  WJ GH  n:U:U3R2                  ;  a  M  U3Rh                  U:   nLUS#:X  a:  U3R                  U3R2                  R                  U:5      S-
     nMU.Rh                  U:S  n.URh                  U:   nNUNR2                  UNU:H     R)                  5       nOSeUO;   a  WLSe   URh                  U:Se4'   SfWO;   a  WLSf   URh                  U:Sf4'   SZWO;   a{  US#:X  aa  U:U.R2                  S   :w  aN  WMSW   URh                  U:SZ4'   [        URh                  U:SZ4   URh                  U:Sf4   5      URh                  U:Sf4'   OWLSZ   URh                  U:SZ4'   SWWO;   a)  WLSW   URh                  U:SW4'   ULSO   URh                  U:SO4'   OSOWO;   a  WLSO   URh                  U:SO4'   S	WO;   a1  WLS	   R                  5       R                  Sg5      URh                  U:S	4'   SURh                  U:S4'   U%S-  n%GM     GMF     U$ s  snf s  snf s  snf )hNzprice-reconstructyf_catyf_interval	yf_symbolz#'df' must be a Pandas DataFrame notr8   r1   )dwkmoTFrk   )r.   r&   r>   r<   r;   r:   r9   r8   i  r5   )r.   r&   r>   )r<   r;   r:   r9   <   rH   z,Have not implemented price reconstruct for 'z' interval. Contact developersr   z%Hit max depth of 2 ('{}'->'{}'->'{}')extrarq   r3   ru   zmin_dt=z
 interval=z sub_interval=z	Too old (z rows tagged)r   z/Nothing needs repairing (dts_to_repair[] empty)r,      yearsr.   r&   r>   r*   zgrp_max_size = rP   zRepair groups:z- rW   nearest)methodz
df_block:
i  )r<   r;   ;   z"Cannot reconstruct block starting z9, too old, Yahoo will reject request for finer-grain dataz	Fetching z	 prepost=rV   ->level)r   r   rC   r   r   r   rz   r   )millisecondszCannot reconstruct z block range z3, Yahoo not returning finer-grain data within rangectr)MONTUEWEDTHUFRISATSUN   zW-
Week Start	Day Start
intervalIDrs   )rf   r~   )ri   r   )rj   r   )rh   r   )rg   r7   )rs   r   )rk   r   )rf   ri   AdjCloserh   rg   rs   rk   rl  rj   r,  )ri  rj  diffzdf_new:
zCan't calibrate z block starting z so aborting repairri   r;  
fill_valuerf   zCan't calibrate block starting gh㈵>)rtol)weightsg-C6?{Gz?d   z Price calibration ratio (raw) = 6fz:Yahoo didn't return finer-grain data for these intervals: rg   rh   r   )Tr   r   r   r   r   r   r   typer	   r   rB   r   r   r   warningr   r   formatinfor   to_numpyr   r   r   r   rl   r   ceilr   r   r   copyr   r   	_dateutilrelativedeltar   appendget_indexerto_listsortisinr   todayr7   hasattrr^  setLevelloggingCRITICALr  r   r   weekdayr   	to_period
start_timer   cumsumr   groupbyrC  r-  rm  intersect1dnanffillbfillwherer   reindexisnanflags	writeablesizer   floattiler   averageabsr   get_locr   )Pr    r  rC   r   tagr   
log_extrasr   r  
price_cols	data_cols	intervalsiitdsnextsmin_lookbackssub_intervaltd_ranger  f_repairf_repair_rowsrR   min_dtf_recentdts_to_repairdf_v2f_gooddf_good
dts_groupsgrp_max_sizedtgg0i0glilgood_dtsn_fixeddf_blockr   r	  rejecttd_1dfetch_start	fetch_end	log_leveldf_fineweekdaysweek_end_daygrp_coldf_fine_grpdf_new	new_indexcommon_indexdf_new_calibdf_block_calibf_tagdiv_adjustsidxndiv_adjf_close_badf_close_bad_newdiv_adjusts_newdiv_adjusts_new_np
calib_colscalib_filterjfratiosrq  not1ratio	ratio_rcpbad_dtsno_fine_data_dts
df_new_rowdf_last_week
df_bad_row
bad_fieldssP                                                                                   r"   _reconstruct_intervals_batch)PriceHistory._reconstruct_intervals_batch  s    $$& 3H[f[fg
"bll++BDHMMtIAB<,,GHH!1=!1A"Wa!1
=(+	 H	CLM9a5//999M9>s9~PQ?Q9RS9RA1yQ//9RS $D	8K8KQT8UV+A(22;M ,'11r:d ?L~HNNI(Sqrs"**,"';I ++3/7,777HdNnNnHo<o9@@AaAach  jJ  jJ  dK  MU  VCKK:K.I]]_=))+s2 !, ,'9F$$!,,A\\%%e,q0F&&rxx{{388=Fwvhj
.W_ijxx6)H)H4M $$&&!"&&1)=">!?}MCz2bjj0&+B{O	/}"LLJR\L]"**,"';I	emm+!&E+>&&(,,!,452>224;@@a@HHV* %Q'()
5 $22@@q@ILU"$22@@q@ILT!$22@@q@ILT!$22@@q@ILT!$..A6L$..B7L|n5ZHq#m,-Aq!Bwwy:b>!,113lBB2%%b)!!2$' . 	%Z8ALL2adV4"w/0  s:'A1A1B**B4	*B1EBAvNgmmBF&;v&E&7==a+@+E+E+G2779+T!GB2B**B4	*B1EBCL1$$ W]]26%:%?%?%ARWWY%N!GB}}RQ/HqMX--//MqM  (" A((--*+HLLX67tHmmoGFt#)=)=)?')IYM`M`fiMj(j/Y^^5I5I5Kg5UYbYlYlrtYu4u:x8U\:]  ^W  XCz2''Q/E5 %0bEJJL83	T!%bEJJL83	dbEH,	 5 KI)..0%NN,u4	!!&++-=LL9\N)G9Ak]RTU^T_`hrLs((*Fvw''"LL	 0 01ll)lhmw{  FM  VZ  cgl  hGvw''	*'--:x8U\:]  ^W  XCz2kk!A$"\0B(BYEXEXfgEh(hinnpG}}+H:]x8]dBe  fY  ZCz2GEN5 L'):)B)B)Dq)H1)LPQ(QR(/(A(A$(G(Q(QRVYeRe(f(q(q%&T!')~~gmm6H6H'I$%IJGMM..x~~>EF(/(=(=(?%!,,u1,5&wz[M'ABGGIMMSTMUUVG!//'2K __&'."$.( % * +1&*k9R&*S  55%||778H8HI"),"7"<"<">IIw}}Q'7&8'--P\H]HbHbHdghHh:ij	(LL)CK78 >>(..&,,GL< A%(
2B7)K^_Cz2 4%fll&7&7&EF!)(..*=*=l*K!L&{3s:99;;"0"=w@W"WK
 *,K&&++-1133&1&7&7&9&?&?&A#%88E?1#5C!-!3!3C!8B #K 0A%zz"k/:a?#&Q;<G<L<LSSTW<UK$4$4S$9 /2L4M4R4RSV4WZfgnZoZtZt(+a[1 51 /1G<G<L<LSSTW<UX_<_K$4$4S$9#&7<G<L<LSSTW<UK$4$4S$9 =H<L<LSSTW<UK$4$4S$9'3K'@'E'EcAg'NRS'S(3(8(8(=|T_G`GeGefilmfmGn<H<Q<V<VWZ<[H\ B\ )\(=) $6, '5W&=&D&1&9&9(..UWU[U[&9&\&b&b&d&j&j&l.6w.?+.M{+&??,,.9.A.A&,,[`.A.aO.9.A.A&,,[][a[a.A.b.h.h.j.p.p.rO1@1I1I1K.JPQX/ZlJmp  AS  qT  KTFJJ'9;'FG !'*J!&,,"3"3L"AB:NWWYL%hnn&9&9,&GHT]]_N*c1L'BHH\,B+BCL##%%=gYFYZblm3z?+!!Q$''5577)//99)7)<)<)>'--77'3'8'8':+,N1a4()*LA& , $L1L4NNF!&&(G"LLGMgmm00>?HHJQQRWXG==**!,,.ag&Ggggs:7Gl+GJJvs99Dvvd|s:.

67;5<?#d* $==?)AIIeAhmQ./36/ *LL;E":FjLYcEk1-I%OEzi1n19 :&%/&8$-$] :&#	/9&8$	1$ nnhzXJ/F&G3&N%X%X%Z%^%^de%^%fgG!fll* %++C0	 
 #$q(Y\_`p\qq  zD  Efll* #ZZ_
u$#);;v||/C/CC/H1/L#ML%kk#$/GVVC[
'--jC.?@IIK
Z'-7-?EIIc6k*J&,6u,=EIIc5j)Z'5(SGMM!4D-D1=g1F		#v+.03EIIc6k4JEIIVY[`V`La0b		#u*-1;F1C		#v+.j(.8.AEIIc7l+2<[2IEIIc;./ J.2<[2IEIIc;./z)/9(/C/I/I/K/R/RSX/YEIIc8m,.2		#{*+1C q z _ > NSs   9	AS=AS= ATATc                    US;  a  X4$ UnUS:X  a  SnSnOUS:X  a  SnSnO
US:X  a  SnSnUS	   S
:  nUR                  5       (       d  X4$ UR                  [        R                  " U5      S
   S      nSnUR                  [
        R                  R                  S5      [        R                  " SS9-
  :  a-   U R                  S   US   -  n[        UW-  S-
  5      S:  a  SnU(       a  [          H  n	X==   W-  ss'   M     X0R                  S'   US   S:g  n
U
R                  5       (       a  USS/   R#                  5       nUS   R%                  5       R'                  SUS   R                  S
   S9US'   X   nUS   US   -  R)                  5       n[+        U5      S
:  a'  [        R,                  " U5      S:  a  US==   W-  ss'   X4$ ! [         a$    [        R                  R                  (       d  e  GNf = f)N)GBpZAcILAr  GBPrr  r  ZARr  ILSrk   r   rP   Tr3   rH   r5   regularMarketPriceri   r1   皙?Frd   rs   ry   rn  )r   r   r   r  r   r   r   r   r   r   r   r  r   r   r   r   r	   r{  r  shiftry  r   r  )r    r  rd   	currency2rR   f_volumelast_rowprices_in_subunitsr  r  f_divr.  div_pctss                r"   r   "PriceHistory._standardise_currency  s   00<	uIAIAIA h<>||~~<77288H-a045!==BLL,,U3i6I6Ir6RRS	../CDxPWGXXa{#c)).& %
 &-6z*;$99;; w{+,113D M//177d7mFXFXYZF[7\DM;D[)DM9CCEH8}q RZZ%9A%=;1$}3  ~~55	s   :,G *G>=G>c                    US   R                  5        Vs/ s H  oDU:w  d  M
  UPM     nn/ SQnU GH  nS nUS:X  a  U S3nSn	O.US:X  a  U S3nSn	O XF;   a  X&;   a
  U U S3nSn	OU S3nSn	U S3n[        U R                  XR                  5      n
U
R	                  SUS9S	   R
                  S
   nU	(       a  SU-  nUR                  US   U:H  S4==   U-  ss'   Uc  M  [        U R                  XpR                  5      nUR	                  SUS9S	   R
                  S
   nUR                  US   U:H  S4==   U-  ss'   GM     X!S'   U$ s  snf )Nrd   )USDJPYEURCNYr  CADr  =XFTr,   )r   rz   ri   rP   r1   rs   )uniquer   r   r   r  r   r   )r    r  fxrz   r  bad_div_currenciesmajor_currenciesfx2_tkrfx_tkrreversefx_datfx_ratefx2_datfx2_rates                 r"   r   "PriceHistory._dividends_convert_fx=  s   )2:)>)E)E)GS)GAPR7a)GSE#AGEz4ru4r&2+A3rd"
 3bD)!$**fllCFnnE&nA'JOOPRSGG)MM)J/2K?@GK@"&tzz7LLI"??%?GPUUVXYi
3Q6CDPD? $B !#*I Ts
   	EEc                 t    UR                   (       a  U$ U R                  XU5      nU R                  XRX45      nU$ N)r   _fix_unit_switch_fix_unit_random_mixups)r    r  rC   r   r   rJ  df3s          r"   r   PriceHistory._fix_unit_mixupsd  s7    88I##B+>**3+O
r%   c                    UR                   (       a  U$ [        R                  " 5       nSX R                  S.nUR                  S   S:X  a  SUR
                  ;  a  SUS'   U$ UR                  S   S:X  a'  UR                  SUS9  SUR
                  ;  a  SUS'   U$ UR                  5       nUR                  R                  c!  UR                  R                  U5      Ul        O:UR                  R                  U:w  a   UR                  R                  U5      Ul        SS	KJn  / S
Qn	U	 V
s/ s H  oUR
                  ;   d  M  U
PM     n	n
Xy   S:H  R                  SS9R                  5       nUR                  5       (       a  X{   nX{)    nX)    nOS nUnUR                  S   S::  a'  UR!                  SUS9  SUR
                  ;  a  SUS'   U$ Xy   R                  5       nUR#                  USSS9nX-  nUS-  R%                  5       S-  nUS:H  nSU-  nUS-  R%                  5       S-  nUS:H  US:H  -  nUU-  nUR                  5       (       d'  UR                  SUS9  SUR
                  ;  a  SUS'   U$ Sn['        [)        U	5      5       H"  nUS S 2U4   nU	U   n
UUR*                  UU
4'   M$     UU:H  R-                  5       nU R/                  XrUU5      nXy   R                  5       U:H  nXy   R                  5       U:H  R-                  5       nUS:  Ga  Xy   R                  5       U:H  U-  n['        UR                  S   5       GH  nUUS S 24   nUR                  5       (       d  M$  UR                  U   nS HC  n
U	R                  U
5      nUU   (       d  M   UR*                  UU
4   S-  UR*                  UU
4'   ME     Sn
U	R                  U
5      nUU   (       a0  UR*                  USS/4   R1                  5       UR*                  UU
4'   Sn
U	R                  U
5      nUU   (       d  M  UR*                  USS/4   R3                  5       UR*                  UU
4'   GM     Xy   R                  5       U:H  U-  n['        UR                  S   5       GH  nUUS S 24   nUR                  5       (       d  M$  UR                  U   nS HC  n
U	R                  U
5      nUU   (       d  M   UR*                  UU
4   S-  UR*                  UU
4'   ME     Sn
U	R                  U
5      nUU   (       a0  UR*                  USS/4   R1                  5       UR*                  UU
4'   Sn
U	R                  U
5      nUU   (       d  M  UR*                  USS/4   R3                  5       UR*                  UU
4'   GM     Xy   R                  5       U:H  nUR-                  5       nOUnUU-
  n UU-
  n!U S:  a(  SU  SU S3n"U!S:  a	  U"SU! S 3-  n"UR!                  U"US9  Xy   R                  5       U:H  n['        [)        U	5      5       HH  nUS S 2U4   n#U#R                  5       (       d  M#  U	U   n
UR*                  U#U
4   UR*                  U#U
4'   MJ     Ub_  SUR
                  ;  a  SUS'   [4        R6                  " X|/5      R9                  5       n[4        R:                  " UR                  5      Ul        U$ s  sn
f )!Nprice-repair-100xrM  r   r   Fr1   z3Cannot check single-row table for 100x price errorsrU  )ndimage)rg   rf   rh   ri   rj   rq   z6Insufficient good data for detecting 100x price errors)   r  wrap)r  mode   rs  r;  zNo sporadic 100x errors      )rf   ri   rr  rg   rf   ri   rh         Y@zfixed /z currency unit mixups (z	 crudely))r   r   r   r   r   r   r   r{  rl   r   r   r   scipyr  r   ry  rx  median_filterr   rB   r   r   r   r  r7   r   r   r   r   r   )$r    r  rC   r   r   r   r  rJ  _ndimager  r  f_zeroes
df2_zeroesdf_origdf2_datamedianr  ratio_roundedr  r  ratio_rcp_roundedf_rcpf_eitherr  r  fin_before
df2_taggedn_afterr  r  n_after_cruder  n_fixed_crudely
report_msgfjs$                                       r"   r	  $PriceHistory._fix_unit_random_mixupsl  s    88I $$& 3H[f[fg
88A;!"**,"';I88A;!LLNV`La"**,"';Iggi99<<		--k:CIYY\\[(		,,[9CI 	.A	 )>	1#++-=Q		>Na',,!,4==?<<>>Ji.CmGJG99Q<1KKPXbKc"**,"';I>**,''vF'K!**,r1S I	&^224r9#%*;s*BCu9||~~LL2*LE"**,"';I s9~&A!Q$B!A CGGBEN '
 O((*//wL^,,.#5
>**,388:Q; ((*c1Q6A1771:&q!tWvvxxiil*A!*A!uu*,&&a.4*?Q +
 OOA&a5&)ggcFG3D.D&E&I&I&KCGGCFOOOA&a55&)ggcFG3D.D&E&I&I&KCGGCFO' '* ^,,.#5>E5;;q>*1a4[vvxxiil*A!*A!uu*,&&a.5*@Q +
 OOA&a5&)ggcFG3D.D&E&I&I&KCGGCFOOOA&a55&)ggcFG3D.D&E&I&I&KCGGCFO' +* 002c9J&NN,M#M]*!M1Q;!'!H:5KLJ"/!2)<<
KK
*K5 >**,3s9~&A!Q$BvvxxaL!(RU!3A	 '
 !*"4"44*/
;'))S-.99;Csyy1CI
e ?s   ,[,[,c                 T    U R                   S   S:X  a  SnOSnU R                  XX4SS9$ )Nrd   KWF  rs  T)correct_dividend)r   _fix_prices_sudden_change)r    r  rC   r   r  s        r"   r  PriceHistory._fix_unit_switch  s:     !!*-6AA--bK]a-bbr%   c                 n   UR                   (       a  U$ [        R                  " 5       nSX R                  S.nUS   S;   nUR	                  5       nUR                  5       nUR                  R                  c!  UR                  R                  U5      Ul        O:UR                  R                  U:w  a   UR                  R                  U5      Ul        [         V	s/ s H  oUR                  ;   d  M  U	PM     n
n	X   S:H  X   R                  5       -  nS nU(       Ga   [        R                  " UR                  SS9SS	9R!                  UR                  R"                  5      nUR%                  5       UR'                  5       -  nUR                  US
:     n[(        R*                  " UR                  R"                  U5      nUU   nUU)    nUR                   (       a  SUR                  ;  a  SUS'   U$ UR                  5       nX   S:H  X   R                  5       -  nUS   R-                  5       US   R-                  5       :g  nU R                  R/                  S5      (       a  S nOUS   R                  5       R-                  5       ) US   R                  5       R-                  5       ) -  nUS   S:H  R-                  5       nUU-  U-  nU(       dY  US   R1                  5       nSUR2                  S'   [(        R4                  " UUS   -  5      nUS:  R-                  5       U-  nUU-  nSUR                  ;   aK  US   S:g  R-                  5       nUR                  5       (       a   UU) -  nUR                  5       (       a  SUU'   UR-                  5       nUR                  SS9nUb  UU-  nUR                  5       (       d'  UR7                  SUS9  SUR                  ;  a  SUS'   U$ UR%                  5       [9        U
5      [9        U5      -  :X  a'  UR7                  SUS9  SUR                  ;  a  SUS'   U$ U
S/-   nSn[;        [9        U
5      5       H   nU
U   n	UUR<                  US S 2U4   U	4'   M"     Ub  UUR<                  US4'   US   R-                  5       S:H  US   R                  5       R-                  5       -  nUUR<                  UR                  SS9U-  S4'   UUR<                  UU-  S4'   UU   R-                  5       U:H  nUR%                  5       n UR                  UR                  SS9   n!U R?                  XUU5      nUU   R-                  5       U:H  nUR%                  5       n"UR                  UR                  SS9   n#U U"-
  n$U$S:  ab  U R                   SU$ SU  SU S3n%U$S:  a4  [A        [C        [E        U!5      RG                  U#5      5      5      n&U%SU& 3-  n%UR7                  U%US9  Ub:  SUR                  ;  a  SUS'   [        RH                  " X/5      R	                  5       nUU   R-                  5       U:H  n'[;        [9        U5      5       HH  n(U'S S 2U(4   n)U)R                  5       (       d  M#  UU(   n	UR<                  U)U	4   UR<                  U)U	4'   MJ     U$ s  sn	f ) Nzprice-repair-zeroesrM  rP   rQ   ry   r1   rq   r  )r         ?r   Frg   rh   r  rk   r   ri   皙?ro   TzNo price=0 errors to repairrU  z;No good data for calibration so cannot fix price=0 bad datar  z: fixed r  z value=0 errors in z price datar4   r0   )%r   r   r   r   r   r{  rl   r   r   r   r	   r   r   r   r   r   r  r   r   countr   r  ry  endswithrm  r   r  r   r   rB   r   r  sortedr   set
differencer   )*r    r  rC   r   r   r   r  r   rJ  r  r  f_prices_baddf2_reservegrpnan_pctdtsf_zero_or_nan_ignoref_change	f_vol_badf_high_low_good
f_vol_zero
close_diffclose_chg_pct_absf_bad_price_chgf_splitf_change_expected_but_missing
f_bad_rowsr  r  r  f_vol_zero_or_nanr%  r$  
dts_taggedr&  dts_not_repairedr  r  dts_repairedr  r  r*  s*                                             r"   r   PriceHistory._fix_zeroes  sZ    88I$$& 5h]h]hi
B<:-]]_ggi99<<		--k:CIYY\\[(		,,[9CI!1F!1A#++5Ea!1
F3.#/2F2F2HH))L,,!,45AII,J\J\JaJabCggi#))+-G--#.C#%77<+=+=+B+BC#H 23K++,Cyybjj0&+B{O	((*COs2co6J6J6LLLv;'')SZ-@-@-BB;;%%I #F 0 0 2 ; ; ==3u:??CTC]C]C_B_`Oh-1,668J"_4x?I  !\..0
%&
"$&FF:G+D$E!#4t#;"E"E"G*"T%7	 S[[(>*c1;;=G{{}}078)0C-04466BFL!>? $,,.!%%1%-
 #i/J~~LL6jLI"**,"';IZ3s8!;;LLV^hLi"**,"';I(+	 s:'A1A-0CGGLA&)* (  +.CGGIx'( ]335:s8}?Q?Q?S?\?\?^_JM  a (+<<hFG:=,,h67^,,.#5
>>#YYz~~1~56
//wL^,,.#5
.."99Z^^^%;<W$Q;[[M'!H:=PQYPZZefC{%d3z?+E+EFV+W&XYL>**LLJL/"+"5"55+0K())S./::<C 	N##%,s9~&A1a4BvvxxaL!#AA	 ' 
W Gs   Z21Z2c           
         SUR                   ;  a  U$ US   S:H  R                  5       (       a  U$ Sn[        R                  " 5       nSU R                  S.nUR                  5       nUR                  5       nUS   R                  S S9R                  5       US'   US	   S:H  US   S:H  -  nUR                  US4   R                  5       nUR                  SS
S9nSUR                   ;  a  SUS'   US   US   -  US'   U(       aR  [        R                  US'   [        R                  US'   US   US   -  R                  S5      US'   [        SUS 35        XS   S:     R                   nUS   R#                  5       nUS   R#                  5       n	0 n
U GH-  nUR                   R%                  U5      nUS:  d  M'  US	   R&                  U   nUS   R&                  U   nX:  a  MR  XUS
-
     -  nXUS
-
     -  nXS
-
     X   -
  XS
-
     -  nUU-
  n[        UU-
  5      n[        UUU-   -
  5      nUU:  nUX'   U(       d  M  [        SUR)                  5        SUS-  S SUS-  S S35        [        SUS-  S S35        [        SUS-  S S35        [        SUS 35        [        SUS 35        [        SU 35        GM0     [+        U
R-                  5       5      [/        U
5      -  nU(       a  [        S US-  S S35        US!:  Ga  U
R1                  5        GH   nUR                   U   nUS	   R&                  U   nUS   R&                  U   nX-
  nUUR                  US	4'   XS
-
     XS
-
     -  X   X   -  -  nS"UU-   XS
-
     -  -
  nUU-  nUR                  S U[2        R4                  " S
5      -
  2S4==   U-  ss'   S#UR                  S U2S4'   S$UR)                  5        S%US 3nUR7                  UUS&9  U(       d  M  UUR                  US4'   GM     US   US   -  US'   U(       a  US   R                  S5      US'   U$ UR                  SS
S9nU$ )'Nrt   r   Fzrepair-capital-gains)rN  rP  ri   )fill_methodzPrice_Change%rs   r1   rq   r   rj   AdjScaleFactor
correctionr4   AdjYahooz# price_drop_pct_mean = .4fz# z: div = rs  .1fz%, cg = %z- price_drop_pct = z- price_drop_pct_excl_vol = z- diff_div = z- diff_total = z- cg_is_double_counted = z- pct_double_counted = gZd;O?r;  Tz'Repaired capital-gains double-count at z. Adj correction = rU  )r   r   r   r   r   r{  r   
pct_changer  r   meanr   r   r  r   printrl   ry  r  r   r   r   valuesr   r  r   r   rx  )r    r  r   r   r  no_distributionsprice_drop_pct_meanr>  r  acdcsr  r  dividendr  div_pctcg_pctprice_drop_pctprice_drop_pct_excl_voldiff_div
diff_totalcg_is_double_countedpct_double_counteddividend_true
adj_beforeadj_correctrS  r  s                               r"   r   "PriceHistory._repair_capital_gains  s   
 "**,I1$))++I $$& 6T[[Q
WWY]]_
 !k444FJJL?{Oq0R5HA5MN ff%5%FGLLNWW_1W- bjj(#B{O{Obk15	 "B}!vvB| obk9@@CBzN,-@,EFGO$q()//wK  "_%%'B((""2&CQw k?//4 "? 3 8 8 =+"s1uX-&3q51 #$E(QV"3qQx!?*8;N*N'6@A !8Gf<L!MN
'/*'<$/5Brwwyk'#+c1B(6RU:VYJZZ[\]/s0B3/GqIJ89PQT9TUX8YYZ[\M(389OJs+;<=56J5KLM= @ !.S9+,>s,B3+GqIJ&xxzXXc]k?//4 "? 3 8 8 =
 !) 8*7r;' !Qia%0RWQV^D
!]]%BaAh$NN(:5
19..q111589ZG9+/ssK'(?	{J]^hil]mnCz25/9BFF2|+,/ "2 W+5	1;5	*BuI 	 Q'B	r%   c                 [   Ub  UR                   (       a  U$ US;   a  U$ SUR                  ;   a  US   S:  R                  5       (       a  U$ [        R                  " 5       nSX R
                  S.nUS   S:g  R                  5       nUR                  5       (       d  UR                  SUS	9  U$ U R                  S
   S:X  a  SnOSnS nSn	UR                  5       nUR                  5       n
SU
R                  ;  a  SU
S'   SnU
S   R                  5       R                  5       nX   R                  5       nX)    R                  5       n
U
S   S:g  R                  5       nUR                  5       (       d  UR                  SUS	9  U$ [        R                  " U5      S   n/ n[        [        U5      S-
  SS5       GH@  nUU   nUS:X  a  M  U
R                   US-
     nUS   US   -
  nU
S   R                   U   nUS:  d  MH  UU-  S-
  S:  d  MV  U
R"                  US-
     nUS   U-   nUUS   :  d  M{  UUS   ::  d  M  UU
R$                  US4'   U
S   R                   U   U
S   R                   U   -  nUSUU
S   R                   US-
     -  -
  -  nU
S   R                   US-
     U-  U
R$                  US4'   SU
R$                  US4'   SnUR'                  U
R"                  U   R)                  5       5        GMC     [        U5      S:  a/  SU Vs/ s H  n[+        U5      PM     sn 3nUR-                  UUS	9  [        [        U5      S-
  SS5       GH  nUU   nU
R"                  U   nU
S   R                   U   nUS:X  a  M2  UU
S   R                   US-
     -  nSnSn[/        U
S   R                   U   U
S   R                   US-
     S-  SS9(       Ga  U
S   R                   US-
     S-  U
S   R                   U   -
  nUU
S   R                   US-
     S-  -  nSUU
S   R                   US-
     S-  -  -
  n U
S   R                   US-
     U
S   R                   US-
     -  n![/        U!U SS9(       dx  U U
S   R$                  S U[0        R2                  " SS9-
   -  U
R$                  S U[0        R2                  " SS9-
  2S4'   SU
R$                  S U[0        R2                  " SS9-
  2S4'   GOw[/        U
S   R                   U   U
S   R                   US-
     S-  SS9(       Ga  U
S   R                   US-
     S-  U
S   R                   U   -
  nUU
S   R                   US-
     S-  -  nSUU
S   R                   US-
     S-  -  -
  n U
S   R                   US-
     U
S   R                   US-
     -  n![/        U!U SS9(       dx  U U
S   R$                  S U[0        R2                  " SS9-
   -  U
R$                  S U[0        R2                  " SS9-
  2S4'   SU
R$                  S U[0        R2                  " SS9-
  2S4'   O(U
S   R                   US-
     U
S   R                   U   -
  nUn"U[        U
5      S-
  :  aU  [        R4                  " U"U
S   R                   U   U
S   R                   US-      -
  /5      n#[        R6                  " U#5      n$O[        R4                  " U"/5      n#U"n$[        U
5      U-
  S:  a(  [9        [        U
5      US-   5      n%[7        SU%S -
  5      n&O'[7        SUS-
  5      n&[9        [        U
5      U&S -   5      n%U%U&-
  S:  a  [        R:                  n'OqU
S   R                   U&U%S-
   R                  5       U
S   R                   U&S-   U% R                  5       -
  n([        R<                  " [        R>                  " U(5      5      n'/ n)U#S:H  RA                  5       (       a  U
S!   R                   U   S:X  ao  [        RB                  " U
S!   S:H  5      [        U
5      -  n*US-  S":  a  U)R'                  S#SS$.5        GO U*S%:  a  US&:  d  US:  a  U)R'                  S'SS$.5        GOU
S(   R$                  U   n+U+S:X  a  S n,ORUU+-  n,U,U:  a  U"U'-
  n-OU$n-U-S:  a9  [?        UU--
  5      n[?        U,U--
  5      n.U.U-  U::  a  U)R'                  S)U.S$.5        UU	:  a  U$S::  a  U)R'                  S'SS$.5        O[?        UU$-
  5      n[?        UU-  U$-
  5      n/U,c  U/U-  U::  a  U)R'                  S'U/S$.5        OR[?        U,U-  U$-
  5      n0U/U0:  a  U/U-  U::  a  U)R'                  S'U/S$.5        OU0U-  U::  a  U)R'                  S*U0S$.5        [        RD                  " U'5      (       d  U"U'-
  n1U1S:  a  [?        UU1-
  5      n[?        UU-  U1-
  5      n/U,c  U/U-  U::  a  U)R'                  S#U/S$.5        OR[?        U,U-  U1-
  5      n0U/U0:  a  U/U-  U::  a  U)R'                  S#U/S$.5        OU0U-  U::  a  U)R'                  S+U0S$.5        UUUUS,.n2U"U2S-'   U$U2S.'   U
S!   R                   U   U2S/'   U'U2S0'   SU2S1'   SU2S2'   SU2S3'   SU2S4'   SU2S5'   [        U)5      S:  a(  [G        U)S6 S79n)U)S   n3SU2U3S8   RI                  S9S:5      '   [J        RL                  " U2/5      RO                  S;5      n4Uc  U4nGM  [J        RP                  " UU4/5      nGM     Uc	  U(       d  U$ UR                   V5s/ s H  n5U5RS                  S<5      (       d  M  U5PM     n6n5UR                  5       nSS> jn7[        [        U5      5       GH  nUS?   R                   U   nUR"                  U   nUS=   R                   U   nUS:X  a  M?  UU
S   R                   US-
     -  nU
S   R                   US-
     U
S   R                   US-
     -  n8U
S   R                   U   U
S   R                   U   -  n9U9U8:H  n:U8U9-  n!SU!-
  n;U;S"U-  :  n<U;S@U-  :  n=U:(       a  Sn<SAU!0n2U:U2SB'   U=U2SC'   U<U2SD'   U2RU                  5        H  u  n>n?U>U;  aw  [W        U?[X        [        RZ                  45      (       a  SUU>'   OL[W        U?[\        5      (       a  SUU>'   O1[W        U?[^        5      (       a  SUU>'   O[a        U>U?[c        U?5      5      eU?UR$                  UU>4'   M     GM     U6/ SEQ-  n6SUSF'   [0        R2                  " SGSH9n@US1SD/   R                  SSI9nAUAR                  5       (       Gao  [        U5      S:  Ga_  [        R                  " WA5      S   nBUR"                  UA   nCUB GH0  nUR                   U   nURd                  nDS nEUS:  a  UR                   US-
     nFOUR                   US-      nFUS=   U-  WFS=   -  nGUS=   UFS=   -  nH[9        [?        UGS-
  5      [?        UHS-
  5      5      nI[?        WDUFRd                  -
  5      W@::  aE  WFSF   (       d;  WIS:  a5  WFRd                  WC;   a#  US-   n"WFS-   nJU"SJUJ-  :  a  WFRd                  nEOWDnEOWDnEWE(       d  M  SUR$                  WESF4'   U6 H&  n5U5UR                  ;   d  M  SUR$                  WEU54'   M(     GM3     SKnKUR                  5       n[        S[        U5      5       GH  nUR                   U   nURd                  nDSnLSnMUS-   n"UR                   US-
     nNUS=   UNS=   -  nO[?        UDUNRd                  -
  5      W@::  aI  WNSF   (       d?  USF   (       d5  [?        WOS-
  5      WK:  a#  US-   R                   US-
     nPU"SJUP-  :  a  SnMOSnLWM(       d	  WL(       d  M  WL(       a  WDOUR"                  US-
     nQSUR$                  UQSF4'   U6 H&  n5U5UR                  ;   d  M  SUR$                  WQU54'   M(     GM     U6R'                  SF5        SFUR                  ;   Ga  USF   nRURUU6 V5s/ s H  n5U5SF:w  d  M  U5PM     sn5   R                  SSI9) -  nRURR                  5       (       Ga,  UR"                  WR   nSSLUS Vs/ s H  n[+        UR)                  5       5      PM     sn 3nUR-                  UUS	9  UR"                  WR   nTUT H  nU[0        R2                  " SS9-
  nUU
R$                  S UU2S4==   USA   R$                  U   -  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   USA   R$                  U   -  ss'   SUR$                  S UU2S4'   SU
R$                  US4'   SnURg                  U5      nM     SUR$                  WRSF4'   URg                  SFSSI9nSFU6;   a  U6Ri                  SF5        UU6   R                  5       R                  5       (       d  [        U5      S:  a  [        S[        U5      5       H  nSMu  nVnWUS:  a(  USN   R                   US-
     USN   R                   U   -  nVU[        U5      S-
  :  a(  USN   R                   US-      USN   R                   U   -  nWWV=(       d    WWnVWW=(       d    WVnW[?        WVU-
  5      SO:  d  M  [?        WWU-
  5      SO:  d  M  UR"                  U   nDSUR$                  UDS24'   M     UU6   R                  5       R                  5       (       dA  U(       a8  UR                   (       d%  [J        RP                  " X/5      R                  5       n
U
$ U$ [        [        U5      5       GH@  nUS?   R                   U   nUR"                  U   nUS=   R                   U   nUS:X  a  M?  UU
S   R                   US-
     -  nU[0        R2                  " SPSH9-   nX[j        Rl                  " U
R"                  UX5      nY[9        UY[        U
5      S-
  5      nY[7        SUSQ-
  5      nZU
S   R                   UUYS-    Ro                  5       n[U[S:  R                  5       U[SR:  R                  5       -  n\U\R                  5       (       a1  U[        R                  " W\5      S   S   -   S-
  nYU
R"                  UY   nXSn]Sn^[J        Rp                  n_WYWZ:  Ga  U
R                   WZWYS-    R                  5       n`U`S   U`S   -  U`SS'   U`SS   U`S   -  U`ST'   U`S   R                   SS  R                  5       U`S   R                   S S R                  5       -
  na[        R&                  " S/Ua5      naUaU`SU'   U`ST   R                   SS  R                  5       U`S   R                   S S R                  5       -
  nb[        R&                  " S/Ub5      nbUbU`SV'   U`SUSV/   naUSW:  Ga  US:  Ga  UW`SS   R                   S   -  ncWaSV   UcSX-  :  nAUAR                  5       (       Ga  [        R                  " WA5      S   nBUB GH  ndWaSV   R                   Ud   neUeSYUaSU   R                   Ud   -  :  d  M1  SWaSV   -  We-  nfUfSZ:  ngU
S(   R$                  U   n+US3   R$                  U   nhU+S:X  d  Wh(       d  WgR                  5       (       a  [        R                  " Wg5      S   ni[        Ui5      S:  a  [        Rr                  " [        Wi5      5      nj[        [        Ui5      5       HV  nWiU   ndWfR"                  Ud   nkUkU:  a  WjU==   UWk-
  Rt                  -  ss'   M9  WjU==   S"WkU-
  Rt                  -  -  ss'   MX     [        Rv                  " Wj5      nWiU   nlOWiS   nlSn^WfR"                  Wl   n_  O-WeS[Wc-  :  d  GM|  W`SS   S:  R                  5       (       a  Sn]  O   UR$                  USD4   n<W](       a	  U<(       a  Sn]0 n2W]U2S\'   W^U2S]'   W_U2S^'   U](       a  U
S(   R$                  U   n+U+S:w  a  UU+-  n,U,U:  a*  US0   R$                  U   n'US-   R$                  U   n"U"U'-
  n-OUS.   R$                  U   n$U$n-U-S:  a6  [?        UU--
  5      n[?        U,U--
  5      n.U.US_-  ::  a  SUR$                  US34'   U2RU                  5        H  u  n>n?U>U;  a  [W        U?[X        [        RZ                  45      (       a  SUU>'   Oj[W        U?[\        5      (       a  SUU>'   OO[W        U?[^        5      (       a  SUU>'   O4U>S^:X  a  [J        Rx                  " S`Sa9UU>'   O[a        U>U?[c        U?5      5      eU?UR$                  UU>4'   M     S1UR                  ;   d  GM  S]UR                  ;   d  GM  SUR$                  US]   R                  5       S14'   GMC     U6S\S]/-  n6U6 H-  n5UU5   R                  5       (       a  M  URg                  U5SSI9nM/     S^n5U5UR                  ;   a6  UU5   R                  5       RA                  5       (       a  URg                  U5SSI9nU6 V5s/ s H  n5U5UR                  ;   d  M  U5PM     n6n5UR{                  SN5      nU7" USNSb9USc'   USc   R}                  5       nmUm GH  nnUSc   Un:H  noUUo   R                  5       np[        Up5      nqUpSN/   R                  5       nr[        Ur5      S:  a  WrSN   R"                  R                  5       R                  5       R                  R                  5       Sd-  nsUsR                   S   UsR$                  UsR"                  S   '   UsUrSe'   UrSN   UrSe   -  UrSf'   U6 H;  n5WpU5   R                  5       R                  5       (       a  M+  WpRg                  U5SSI9npM=     U6 V5s/ s H  n5U5WpR                  ;   d  M  U5PM     ntn5Ut GH  n5WpU5   R                  5       nu[        RB                  " Uu5      nvUvSWq4;   a  M7  WvWq-  nwU5S1:X  Ga  SnxS&nyS]WpR                  ;   a   WpU5   UpS]   :H  RA                  5       (       a  Mw  S\WpR                  ;   a  WpU5   UpU5   UpS\   -  :H  RA                  5       (       ay  SgnxWpS\   R                  5       nz[        RB                  " Uz5      nq[        RB                  " WuUz   5      nvUvUq-  nwUwUx:  a'  WoUS\   R                  5       -  nASUR$                  UAU54'   GM$  SDWpR                  ;   a?  WpSD   RA                  5       (       a'  WpS0   Wo   Wu   S:H  RA                  5       (       a  ShnyO6S&nxO3S\WpR                  ;   a!  WpU5   UpS\   :H  RA                  5       (       a  SgnxOSgnyWwWx:  ag  SUR$                  WoU54'   S]UR                  ;   aC  SUR$                  WoS]4'   [J        Rp                  UR$                  UoS^4'   UUo   R                  5       npGM  WwWy::  a  SUR$                  WoU54'   GM-  U5S2:X  aL  SnxS"nySCWpR                  ;  a  SinxSgnyWwWx:  a  SUR$                  WoU54'   GMe  WwWy::  a  SUR$                  WoU54'   GM  U5SB:X  a   WpU5   R                   S   (       a	  WvS:X  a  GM  U5SD:X  a  GM  U5S\:X  a  GM  U5SF:X  a  U R
                  Sj;   a  GM  U5S]:X  a  GM  U5Sk;   d  GM  GM     GM      S1U6;   a  SDU6;   a  Sln5SUU5'   [        [        U5      5       H  nUR"                  U   nUR                   U   n4U4S1   (       d  M-  U4SD   (       d  M9  U4S=   n{U4SN   n|U{U|-  n}U4SA   n~SU~-
  U}-  n;U{U;-  nO[?        UOXw-  -
  5      U:  nU(       d  Mv  SUR$                  UU54'   M     UU5   R                  5       (       d  URg                  U5SSI9nOU6R'                  U55        S4UR                  ;   aY  Sm H2  n5U5U;   a  UU5   US4   -  UU5'   M  US4   UU5'   U6R'                  U55        M4     URg                  S4SSI9nU6Ri                  S45        UR                  5       nXU6   R                  SSI9   nUR                   (       a8  UR                   (       d%  [J        RP                  " X/5      R                  5       n
U
$ 0 n[        USc   R}                  5       5       GH  nnXSc   Un:H     npUpR                  SSn9npSUpSo'   [        [        Up5      S-
  SS5       GHW  nWpR                   U   n4U4Rd                  nU[0        R2                  " SS9-
  nUSBU4;   =(       a    U4SB   nSDU4;   =(       a    U4SD   nSCU4;   =(       a    U4SC   nS\U4;   =(       a    U4S\   nS2U4;   =(       a    U4S2   nS1U4;   =(       a    U4S1   nS3U4;   =(       a    U4S3   nS]U4;   =(       a    U4S]   n^SlU4;   =(       a    U4Sl   n[        RB                  " U6 V5s/ s H  n5U5U4;   d  M  U4U5   PM     sn55      nW(       a  W(       a  WS:X  a  SnWS-  nW^(       a>  W(       a  SnSWpR$                  US14'   WS-  nW(       a  SnSWpR$                  USD4'   WS-  nW(       a  W(       a  SnSWpR$                  US\4'   WS-  nWS:X  Ga  W(       d  W(       a  W(       a  SpOSqn>WR                  U>/ 5      R'                  U5        SU4SN   -
  U4SA   -  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   GMF  W(       a  Srn>UnU4S=   U-  nUU
R$                  US4'   U>Ss-  n>SSU4SA   -
  U-  -
  nUU4SA   -  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   WR                  U>/ 5      R'                  U5        GM  W(       a  Stn>SU-  nU4S=   U-  nUU
R$                  US4'   U4SN   U-  nSU-
  nU4SA   n!U>Ss-  n>UU!-  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   WR                  U>/ 5      R'                  U5        GM  W(       a  Sun>WR                  U>/ 5      R'                  U5        SU4SN   -
  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   GM  W^(       Ga9  Svn>WR                  U>/ 5      R'                  U5        SU4SA   -  nU
R$                  S WU2S4==   U-  ss'   UR$                  S UU2S4==   U-  ss'   U4S^   n_U
S   R                   U4S?      nU4S=   nSUU-  -
  nU_[0        R2                  " SS9-
  nU
R$                  S U2S4==   U-  ss'   UR$                  S U2S4==   U-  ss'   U
R$                  U_S4==   U-  ss'   SU
R$                  US4'   SU
R$                  S UU2S4'   SUR$                  S UU2S4'   SWpR$                  USo4'   GM  W(       a  SU4SN   -
  nU4SA   n![?        UU!-  S-
  5      SW:  az  W>Ss-  n>WU!-  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   GMp  URg                  U5      nWpRg                  U5      npGM  W(       a  Swn>SU
S(   R$                  U   -  nU4S=   U-  nUU
R$                  US4'   U4SN   U-  nSU-
  nU4SA   n!U>Ss-  n>UU!-  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   WR                  U>/ 5      R'                  U5        GMy  GM|  WS:X  Ga  W(       a  W(       a  Sxn>WR                  U>/ 5      R'                  U5        SU4SN   U-  -
  nU
R$                  US4==   U-  ss'   U
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   GMH  W(       ai  W(       ab  U4S=   nUU4SN   -  n}U4SA   n~U
R$                  US4==   U-  ss'   S'n>WR                  U>/ 5      R'                  U5        SWpR$                  USo4'   GM  W(       a  W(       a  Syn>WR                  U>/ 5      R'                  U5        U4SN   U-  nSU-
  nUU4SA   -  nU
R$                  US4==   U-  ss'   U
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   G	M  W(       a  W(       a  U
R$                  US4==   U-  ss'   Srn>SzU4;   a  U4Sz   (       av  S nSU4SN   U-  -
  nUU4SA   -  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   U>S{-  n>WR                  U>/ 5      R'                  U5        SWpR$                  USo4'   G
Mk  G
Mn  G
Mq  WS|:X  d  G
Mz  W(       a  W(       a  W(       a  S}n>SU-  SU
S(   R$                  U   -  -  nU4S=   U-  nUU
R$                  US4'   U4SN   U-  nSU-
  nU4SA   n!U>Ss-  n>UU!-  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   SWpR$                  USo4'   WR                  U>/ 5      R'                  U5        GMr  W(       d  GM|  W(       d  GM  W(       d  GM  U4S=   nUU4SN   -  n}U4SA   n~S~n>UU-  nUU}-  nUU
R$                  US4'   SU-
  nUU~-  nU
R$                  S WU2S4==   U-  ss'   SU
R$                  S UU2S4'   UR$                  S UU2S4==   U-  ss'   SUR$                  S UU2S4'   WR                  U>/ 5      R'                  U5        SWpR$                  USo4'   GMZ     WpR                   (       d  GM  GM     W HO  n>SU> S[G        WU>   5       Vs/ s H  n[+        UR)                  5       5      PM     sn 3nUR-                  UUS	9  MQ     UR                   (       d%  [J        RP                  " X/5      R                  5       n
U
$ s  snf s  sn5f s  sn5f s  snf s  sn5f s  sn5f s  sn5f s  snf )N)r.   r,   r/   1yrt   r   zdiv-adjust-repair-badrM  rs   ry   zNo dividends to checkrU  rd   r-  r.  rs  gQ?r   Fri   r1   rP   rh   rr  rg   rj   r;  Tz'Repaired double-adjustment on div days rW  g?)rel_tol)secondsr4      rk   r  zdiv-too-small)staterm  g      ?g      ?zdiv-too-bigro   zdiv-pre-splitzdiv-too-big-and-pre-splitzdiv-too-small-and-pre-split)r   r  divrW  r   
drop_2Dmaxvolumevoldiv_too_bigdiv_too_smalldiv_pre_splitdiv_too_big_and_pre_splitdiv_too_small_and_pre_splitc                     U S   $ )Nrm   )r   s    r"   <lambda>2PriceHistory._fix_bad_div_adjust.<locals>.<lambda>  s    AfIr%   )keyrr  -_r   div_rs  c                 H   [        U 5      nU R                  U5      n/ nUR                  S   /nXA   R                  S   /n[	        SU5       H{  nUR                  U   n	XA   R                  U   n
U
[
        R                  " U5      -  U:  a$  UR                  U	5        UR                  U
5        Md  UR                  U5        U	/nU
/nM}     UR                  U5        [
        R                  " S/U-  5      nSn[        U5       H  u  p[        U5      nXXU-   & X-  nM     U$ )Nr   r1   rP   )
r   sort_valuesrl   r   rB   r   rY  r~  array	enumerate)r  column	thresholdr  	sorted_dfclusterscurrent_dtscurrents_valsr  r  rs  cluster_labelsr`  clusterncs                  r"   cluster_dividends;PriceHistory._fix_bad_div_adjust.<locals>.cluster_dividends  s    BAv.IH$??1-.K&.33A67M1a[__Q'',,Q/"''-00I=&&r*!((- OOK0#%$K%(EM ! OOK(XXrd1f-NC'1
\-.sr6*	 2 "!r%   r  r'   zpresent adjadj_missingadj_exceeds_divdiv_exceeds_adj)r  r  r  phantomr   r5   rq         ?g{Gz?zRemoving phantom div(s): )NNrW  r  #      grQ  zAdj LowdeltaadjDeltar4  g333333?gjt?皙?g(\?adj_exceeds_pricesdiv_date_wrongdiv_true_dateg?zdatetime64[ns, UTC])dtype)r  r  g    ~~Ar   zavg yr yieldr3  gUUUUUU?gtE]t?)zKAP.ILSAND)ry  rz  adj_too_small)rw  ry  	ascendingzFixed?ztoo-small div-adjustztoo-big div-adjustztoo-small divz & div-adjustztoo-big divzmissing div-adjustzwrong ex-div datezpre-split divz"too-big div and missing div-adjustztoo-big div & div-adjustzFX was repairedz and FX mixupr  ztoo-big div & pre-splitzdiv-too-big and adj-too-smallz	Repaired r0   )rs  rh  )Er   r   r   r   r   r   ry  r   r   r   r{  r   r   r  rB   r   r   rl   r   r~  r   r   rx  r   r   r   r  r7   r   r  rY  r  r   r   r  r7  replacer   r   	set_indexr   
startswithitemsr   boolbool_r   r  r   ru  r   r   removebisectbisect_leftrX  NaTzerosr6   argminr   r  r  	to_seriesrm  r  total_secondsr   
setdefault)r    r  rC   rd   r   r  r  currency_dividediv_status_dftoo_big_check_thresholdrJ  df_modifiedf_nandf2_nandiv_indicesfixed_datesr  div_idxprices_beforerm  rs  	dt_before	new_close	adj_afteradjrQ  r  r  ra  #div_too_small_improvement_threshold!div_too_big_improvement_thresholddrop_c2ltrue_adjustpresent_adjr   dropsrt  r   r   typical_volatilitydiffspossibilitiespct_zero_volr   div_postSplit_dropdiff_postSplitdiff_fxdiff_fxPostSplitdrop_wo_vol
div_statusprowr  checksr  pre_adjpost_adjdiv_missing_from_adjcloseimplied_div_yielddiv_adj_is_too_smalldiv_adj_exceeds_divr   vphantom_proximity_thresholdr  indicesdts_to_checkdiv_dt
phantom_dt	other_divratio1ratio2
divergence	drop_nextratio_thresholdthis_is_phantomlast_is_phantomlast_divr  	last_dropphantom_div_dt	f_phantomdiv_dtsphantom_div_dtsenddtr_prer_postlookahead_datelookahead_idxlookback_idxfuture_changesf_big_changediv_adj_exceeds_pricesr  r  xdeltas	adjDeltasadjDivr  adjDelta_dropr  f_near1_or_above	pre_splitnear_indices	penaltiesdtireversal_idxcluster_idscidfcr  r  r  
time_diffscluster_checksf_failn_failpct_failtrue_thresholdfals_thresholdf_adj_exceeds_prices	div_yieldpctcloseadj_presentalso_correct_adjdiv_repairsr  r  r  r  rx  rw  ry  r  n_failed_checksadj_correctionrS  correct_div
target_adjtarget_div_pctclose_beforetrue_adjenddt2r  div_truepct_truerk  s                                                                                                                                                         r"   r    PriceHistory._fix_bad_div_adjust  s#1    :I22Ibjj(b.A!.C-H-H-J-J I$$& 7_j_jk
KC'113yy{{LL0
LCI!!*-6"O!O"']]_ggickk)$C G!!#,,.*//#&k [!S(224yy{{LL0
LCIhhuoa( s;')2r2A!!nG!|HHWQY/M '-*@@Dk"''0CaxT#XaZ-  IIgai0	)'2S8	e 44mTZF[9[2;CGGIw./ #K 0 5 5g >WARARSZA[ [I#sSW1B1B7191M-M'MNC69'l6G6GPQ	6RUX6XCGGI{236:CGGI{23"&K&&syy'9'>'>'@A' 3( {a;[<Y[SV[<Y;Z[CKK:K. s;')2r2A!!nG7#Bk"''0C!|CL--gai88G 34/01-s5zw/W1B1B7191Mc1Q]bccw<,,WQY7;c%joog>VVW!2!2719!=c!AB!C3w<+<+<WQY+G+K$LL!+.33GAI>WARARSZ[\S\A]]{K5IOZ]`ah]i]m]m  oQoqr{  sF  sF  OP  sQ  pQ  ^R  PRCGG>R	 3 3A >>>KLOSCGG>R	 3 3A >>>KLU13w<3D3DWQY3OPT3T`effw<,,WQY7<s5zw?WWW!2!2719!=d!BC!C3w<+<+<WQY+G+K$LL!+.33GAI>WARARSZ[\S\A]]{K5IOZ]`ah]i]m]m  oQoqr{  sF  sF  OP  sQ  pQ  ^R  PRCGG>R	 3 3A >>>KLOSCGG>R	 3 3A >>>KLw<,,WQY7#e*//':RRDS!# $G(9(9'(BSZ__U\]^U^E_(_!`aVVE]
$(!
C A%#c(GAI.As1uAwqy)#c(E!G,5y1}%'VV"G))%A6??ACJOOTYZ[T[\_D`DiDiDkk%'WWRVVE]%;"Ms
!!c(m&8&8&A1&D!vvc(mS&89#c(B3;$!((/#)NO #T)gn'C-!((-)LMN+//3C<$(M %(%KM$s* $'9 9 *qy"3u9~),]5-@)A*-NNSWW)00/R`1ab 44!S(%,,mC-PQ"3z>2"%s?':J&F"G(0 '*K KPTT - 4 4mT[5\ ]/2M/4QS]3]/^,&)99$+.O$OTX#X$1$8$8-X_9`$a$47X$X]a#a$1$8$8B]fv9w$x xx 233 #');";K"Q"3{?3"%s?':K&G"H(0 '*M MRVV - 4 4oV]5^ _/2M/4QS^3^/_,&)99$+.O$OTX#X$1$8$8/Za9b$c$47X$X]a#a$1$8$8B_hx9y$z"$GCgNJ!%Jv'1J|$#&x=#5#5g#>Jx  2Ju(-J}%*/J'*/J'6;J238=J45=!A% &}:M N!!$;?
1W:--c378,,
|,66v>C$ # "		=#*> ?{ 3~  I*22K2all66J!2K%002	"> s=)*A#E*//2G$$Q'B&++A.C!|CL--gai88G +&++GAI6W9J9J7ST99UUG;',,W5G8I8I'8RRH(0G(;% "H,K #k 1#4G#D  #4r'z"B )',$'5J(AJ}%,?J(),@J()!'')!M)!!dBHH%566+0a(#As+++,a(#Au--+.a( )1T!W55+,!!"a%( *A +Z 	GG#(i &/&9&9r&B#=*;<=AAqAI5577s=)A-hhqk!nG(..q1L#((+!
q5 - 2 21Q3 7I - 2 21Q3 7Ie*_4	%8HHUi&66 VCZ#fSj/B
vinn,-1LLU^_hUinx{n ~~5"6{$-f$5	#i-/)2J)/J%+
:?CM%%j)&;<# 5 55?DM--j!m< $3 B  %002q#m,-A$$Q'CXXF#O#Ov;D$))!A#.HJ%0E6(--'(,GGPXYbPclopylz  @C  DI  JM  DM  @N  Q`  @`)&166qs;	#i-'&*O&*O//+:@S@STUVWTW@X?C!!.)";<AM111?D)).!*;<  # .( 	i  ---%i0I!m4Y1!y.Q4Y&Z&^&^de&^&f%fgI}}'--i81G2TGb3rwwy>G2T1UVCz2"/"5"5i"@)By221==EGG 34m8T8X8XY[8\\47;CGG 34KK 34m8T8X8XY[8\\47;GKK 34/0CGGBO,"&K$1$6$6r$:M * ;@!!)Y"67)..yq.AMF"i(V$((*..00 =!A%q#m"45A$.ME61u -c 2 7 7! <}S?Q?V?VWX?Y YC.q01!.s!3!8!81!=c@R@W@WXY@Z!Z!OVE#_uF501"4VO=S9TUW9W!.!4!4Q!7EI))&/*AB 6 V$((*..00}}))SN3>>@C
	 s=)*A#E*//2G$$Q'B&++A.C!|CL--gai88G  	 3 3 <<N"..syy.IMs3xz:Mq'"*-L !\..w}QGRRTN*Q.88:nt>S=]=]=__L!! '"((<*@*CA*F Fq H!$=!9%*""NFFM|+HH\-/:??A[>AgJ6% x!E(2)5qr*335'
8L8U8U8WWC5&1#'
iL--ab1::<q~?R?RSVTV?W?`?`?bb	IIseY7	 )*GZ01T>gm 1U8==#33Fz*fSj9Auuww"$((1+a.#*C,2:,>,C,CC,HM,uVG_5I5I#5N/NN +-VJ-?*?)N393; 0 ),N(;(?(?(C,9/,J,N,Nr,R	$)3JyGWG[G[G]G]3588<L3Ma3PL'*<'81'<46HHS=N4O	16s<7H1IA2>q/C28,,s2CC/2Rx09!C0M09!SVMM@Q0Q 2J -/IIi,@7CA7CA59N4:LL4NM$)%2T&[%@ )*%'9'9';';AE(>$)G $+L $1#4#4R9J5J#K %*>).&J/EJ+,+9J'(*7J'%N+//3C< %(%KM$s*-:5-A-E-Eb-I*,V488< $'9 9%2<%@%D%DR%H
 *qy"3u9~),]5-@)A)d3h7EIM--b/.AB!'')!M)!!dBHH%566+0a(#As+++,a(#Au--+.a(o-+-99;P+Qa((1T!W55+,!!"a%( *  5 55:JmNcNc:c_d!!-0@"A"J"J"Lm"[\A +D 	')9::A #'')) - 2 211 2 =  %%%-*:*?*?*A*E*E*G*G)..qq.9M#BVqM,A,A'A!VB
 &11#6#4]3#Oi  $I.557Cy)S0B#B'224GGAu~**,H8}q %c]00::<AACFFTTVZop
6@ooa6H
z//23%/"+3C=8H;M+M(qz**,0022%ll11l5G  *0HA13GaNH# ,,.aV#!A:%%(N%)N'7??:
gVfNg@g?l?l?n?n +w>GAJSZ[\S]`gh|`}S}D~  DD  DD  DF  DF *-/67K/L/U/U/W,FF#78!#/C(D!E#)A:#n4 "]3G%H%Q%Q%S SA6:M--ad3 (GOO;HY@Z@^@^@`@` $EN2.v69>>@@-0N .2N-@gajRYZnRoFoEtEtEvEv *- *->137))"a%0+}/D/DDFKM--b2B.BCEGVVM--b/.AB&3B&7&B&B&DG !^338))"a%0 '%(N%(N(?)-),>137))"a%0 !^338))"a%0 %qzr*v{ )),,	>dkk5G&G((FFs $! V F"'8F'BA$M!3}-."((+#((+}%%#.?*@*@ #E
Ic(C%cME"%m"4K)*;(=%%&77E'*5/2Q+R'SVe'e$''37))"a%0 / !#'')) - 2 211 2 =a &-*?*??5%'4Q'7-Hc:d'dM!$'45P'QM!$MM!$ 6 *../JQR.SMMM56%002 &F&;&?&?Q&?&GH==ii/::<J i0779:C#)$<c$ABG((5(9G %GH3w<>2r2ll1oXX9..q99+s2Is=7I"3s":"UsCT?U"3s":"UsCT?U%9S%@%^SI]E^" /3 6 O3;O+s2Is=7I /3 6 O3;O "2S!8!RSAQ=R /3 6 O3;O"$&&&)M&QAH&#a&&)M"N#5/Q:N */&#q(O!"&+9>B$56'1,&*/=BB(9$9:'1, )-2*@EB(<$<='1,"a'&/6E2K_#..q"5<<R@*-C.C<N)NFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1& ,%4
&)%j:&=3>K0 _,%(S3}3E-E,S%T
)3c-6H)HFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1#..q"5<<R@$)%(%8
&)%j:&=3>K0),SJ)>%(>%9
&)-&8_,)3k)AFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1#..q"5<<R@$0#..q"5<<R@),SXFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1'/#..q"5<<R@ *-S-?)?FUFK$78NJ8FUFK$78NJ8 ),O(<'*7|'8'8U'D!%j#&\)9#9!.y/B/B1/M!MGVG[$89XE9GVG[$89XE9 { :;sB;34K0;?FUFK$78;?FUFK$7848BL1+ &)3s8^
&)-&8
; 69:TA0A-7+-ENGG(;<N<?CCGG(;<#KK(;<N<?CGKK(;<8<GKKH5,9,>,>r,BM&-ll2&6G&+%(^)<)@)@)D%D
&)%j:&=3>K0),SJ)>%(>%9
&)-&8_,)3k)AFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1#..q"5<<R@# '& %)"{@#..q"5<<R@),s3x/G)GK0OC0FUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1$!%j #CH&)-&8 K0OC0)#..q"5<<R@48BL1$); 7#..q"5<<R@),S/)A%(>%9
)3c-6H)HK0OC0FUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1&? K0OC0+,3<M8N #'C&)SXo-E&FG-4s=7I-INGG(;<N<?CCGG(;<#KK(;<N<?CGKK(;<0A#..q"5<<R@48BL1' ,;* %)"=5&)/&9c#nBUBYBYZ\B]>]%^
&)%j:&=3>K0),SJ)>%(>%9
&)-&8_,)3k)AFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$7848BL1#..q"5<<R@$]] "%j #CH&)-&8;#&#6#+e#33;K0&)Hn)4{)BFUFK$78NJ8;?FUFK$78FUFK$78NJ8;?FUFK$78#..q"5<<R@48BL1W 3Z }}}g ;j AaSVKPQN=S#T=SrC	N=S#T"UVCKK:K.  }}))SN+668C
] =ZJ Lj 5Z 3Uj C0 Iz *NB $Use   Bv2-Bv7Bv7@/
Bv<@=Bv<B#Bwh#Bwh;BwnBwnBwF
BwF!	Bwt>#Bwc           
         UR                   (       a  U$ [        R                  " 5       nSX R                  S.nUS;   nU(       d  U$ UR	                  5       nUS   R                  5       S:g  nUR                  5       (       d  UR                  S5        U$ UR                  S[        US   U   R                  5       5       3US9  S	UR                  ;  a  S
US	'   [        R                  " U5      S    GHp  nUR                  U   n	UR                  U	S4   n
XR                  S   :X  a  M8  US;   a  US-  nOUS-  n[        UR                   S   U5      nUR"                  SUS-    nUR                  SU SU	R%                  5        SU
S 3US9  UR                  SUR                  S   R%                  5        SUR                  S   R%                  5        3US9  U R'                  XX:SSS9nXR                   S   S-
  :X  a  UnGM  UR"                  US-   S  nUR                   (       a  UR	                  5       nGMJ  [(        R*                  " UR	                  5       U/5      nGMs     U$ )Nzsplit-repairrM  r&   r.   r,   r/   ro   r   z%price-repair-split: No splits in datazSplits: rU  r   Fr.   r,   r/   r1   r*   z
split_idx=z
 split_dt=z split=rU  zdf dt range: rW   rP   T)correct_volumer/  )r   r   r   r   r   ry  r   r   r   to_dictr   r   r  rl   r   r   r   r   r   r0  r   r   )r    r  rC   r   r   r  interdaysplit_f	split_idxsplit_dtr   
cutoff_idxdf_pre_splitdf_pre_split_repaireddf_post_cutoffs                  r"   r   "PriceHistory._fix_bad_stock_splits
  s]    88I$$& .xVaVab
::I]]_^$--/14{{}}LL@AIxB~$6w$?$G$G$I JKLT^_bjj(#B{O'*1-Ixx	*HFF8^34E88A;& 00Q	Q	RXXa[)4J771Z\2LLL:i[
8==?:K7SXY\R]^fpLqLL=););A)>)C)C)E(Fd<K]K]^`KaKfKfKhJijr|L}$($B$B<[f  C  VZ$B  %[!XXa[]**!#A!7!''.99;B$9$D$D$F#WXB1 .2 	r%   c                 6?  ^{ UR                   (       a  U$ [        R                  " 5       nSX R                  S.nUm{ST{-  n	US;   n
US;   nUS;   a
  SnSUS	'   S nOfS
nSUS	'   US   R	                  5       S:g  nUR
                  U   R                  5       [        R                  R                  SS9-
  R                  5       nUR                  SU SUS SSU-  S S3US9  / SQnU
(       a	  US:w  a  SnOSnST{s=:  a  S:  a  O  OUR                  SUS9  U$ UR                  5       R                  SS9nUR
                  R                  c!  UR
                  R                  U5      Ul        O:UR
                  R                  U:w  a   UR
                  R                  U5      Ul        UR                   S   nUS   S:H  nUUU   R#                  5       R%                  SS 9-  nUR'                  5       =(       a    [(        R*                  " U5      S   S   S:H  nU) n[(        R*                  " U[(        R,                  " US5      -  5      S   n[/        U5      S:X  a  [(        R*                  " U5      S   n[/        U5      S:X  a  S nO[1        US   5      nS!U S"U 3nUb$  US#UR
                  U   R                  5        S3-  nUR                  UUS9  UR                  5       nUR3                  / S$QSS%S&9nUR5                  SS'0S(9nUS'   R#                  5       nUR'                  5       (       al  S)US*'   S+UR6                  US*4'   US'   U)    S,-  R9                  S-5      R9                  S.5      S/-   UR6                  U) S*4'   US*   US''   UR3                  S*SS 9  O,US'   S,-  R9                  S-5      R9                  S.5      S/-   US''   S0/nUR3                  U Vs/ s H  nUU;  d  M  UPM     snSS%S&9nU
(       aB  US:w  a<  T{S1;  a6  [(        R:                  " US24S5      nS3S0/nUU   R	                  5       nUS:H  nO3[(        R:                  " US44S5      nUnUU   R	                  5       nUS:H  nUR<                  R>                  (       d  UR                  5       nUR'                  5       (       a  SUU'   US0   S:H  nUR'                  5       (       aS  [(        R@                  " [/        U5      5      n US5   R	                  5       U)    US0   R	                  5       U)    -  U U) '   O'US5   R	                  5       US0   R	                  5       -  n URB                  n!U![(        RD                  :X  a  UR9                  S65      n[G        UR                   S   5       H9  n"US S 2U"4==   U -  ss'   UU"   URH                  ;   d  M)  UUU"   ==   U -  ss'   M;     U![(        RD                  :X  a  UR9                  S-5      nUSS 24   US S724   -  USS & U[(        R,                  " USSS 9-  n#U#R'                  5       (       a  SUU#'   U
(       a  US:w  a  [(        RJ                  " USS 9n$O[(        RL                  " USS 9n$[(        RN                  " U$5      n%U%R'                  5       (       a  SU$U%'   [Q        T{U	5      n&[(        RP                  " U$5      U&S-
  S8-  S-   :  a<  [(        R                  " U$5      SU&S-
  S8-  S-   -  :  a  UR                  S9U S:3US9  U$ [(        RR                  " U$S;S</5      u  n'n(U(U'-
  n)U'S=U)-  -
  n*U(S=U)-  -   n+U$U*:  U$U+:*  -  n[(        RT                  " U$U   5      n,[(        RV                  " U$U   5      n-U-U,-  n.UR                  S>U,S? S@U-S S#U.SA-  SB SC3US9  SDU.-  n/U
(       a  US:w  a  U/SE-  n/USF;   a  U/S2-  n/[Q        T{U	5      SU/-   :  a*  UR                  SGUS9  UR                  SHU.S SIU/S 3US9  U$ U$U	-  n0[Q        T{U	5      n&UR                  SJU&SK SLU/S 3US9  U&S-   U/-   S8-  n1UR                  SMU1SK SNSU1-  SK 3US9  SOURH                  ;  a  SUSO'   U(       aS  [(        R:                  " US44S5      nUU   RY                  SS5      R	                  5       nUnUSS 24   US S724   -  USS & OU$nU(       aM  [G        [/        U5      5       H4  n"UU"   nUS S 2U"4   UUSP-   '   UUSP-      R[                  SE5      UUSP-   '   M6     OU$USQ'   USQ   R[                  SE5      USQ'   UU	-  n0USU1-  :  n2UU1:  n3[/        U3R                   5      n4U4S:X  a  U3OU3R'                  SS 9n5U5R'                  5       (       Ga  U5) n6[(        R*                  " U65      S   n7[/        U2R                   5      n8UR
                  U8S:X  a  U2OU2R'                  SS 9   n9[(        R*                  " U55      S    GH1  n:U:S-
  n;UR
                  U;   n<US   R\                  U;   n=U=S:X  a  SOUS   R\                  U;S-
     U=-  n>UR                  SRU>S 35        U(       aL  U;S-   [/        U5      :  a:  US   R\                  U;S-      n?U?S:  a  [Q        U>US   R\                  U;   U?-  5      n>U6S U; R_                  5       n@[Q        SU@SS-
  5      nA[        [/        U75      UAST-   S-   5      nBUR\                  U7UAUB    nCUCR                  5       nCU9U9U<:     nD[/        UD5      S:  aR  [        WD5      nEUEU<:X  a  S nFOdWCR6                  U<[`        Rb                  " S5      -   WE[`        Rb                  " S5      -
   nFO&WCR6                  U<[`        Rb                  " S5      -   S  nFWFb  WFR                   (       a  S nFSU nGSV nHWFc  GM  WH" U=WF5      nIUH" UFS   R\                  S   UF5      nJ[Q        UIUJ5      S2:  d  GM  UR                  SWU<R                  5        SX35        U4S:X  a  SU3U:'   GM(  SU3U:S S 24'   GM4     U2U3-  nU(       d;  U0USY'   U2USZ'   U3US['   USY   R[                  S25      R9                  S.5      USY'   UUS\'   O[G        [/        U5      5       Hp  n"UU"   nU0S S 2U"4   UUS]-   '   UUS]-      R[                  S25      R9                  S.5      UUS]-   '   U2S S 2U"4   UUS^-   '   U3S S 2U"4   UUS_-   '   US S 2U"4   UUS`-   '   Mr     [(        R*                  " U5      S    GH   n:UR
                  U:   n<[        [/        U5      S-
  U:S2-   5      nKURe                  Sa5      (       a  SbnLOURe                  S/5      (       a  ScnLOSEnL[Q        SU:WL-
  5      nMUR\                  UMWK nNU(       a  UnOOSd/nOWO GHl  nUSd:X  a  WNSQ   UNS\   )    R	                  5       nPO WNUSP-      UNUS`-      )    R	                  5       nP[(        RT                  " WP5      n,[(        RV                  " UP5      n-U-U,-  n.SDU.-  n/U
(       a  US:w  a  U/SE-  n/USF;   a  U/S2-  n/U&S-   U/-   S8-  n1U(       a  UUSP-      R\                  U:   nQM  USQ   R\                  U:   nQUQU1:  d  M  WQSU1-  :  d  M  U(       aD  UR                  SeU SfU<R                  5        SgU.Sc-  SB Sh35        SUR6                  U<US`-   4'   GM1  UR                  SiU<R                  5        SgU.Sc-  SB Sh35        SUR6                  U<S\4'   GMo     GM     U(       d-  U2US\   R	                  5       -  n2U3US\   R	                  5       -  n3OZ[G        [/        U5      5       HB  n"UU"   nUU;   d  M  U2S S 2U"4   UUS`-      -  U2S S 2U"4'   U3S S 2U"4   UUS`-      -  U3S S 2U"4'   MD     U2U3-  nUR'                  5       (       d  UR                  S9U S:3US9  U$ STnRUS   R	                  5       S:g  nSUS;   Ga  WSR'                  5       (       Ga  [(        R*                  " WS5      S   nT[(        R*                  " U5      S   nU[/        UT5      (       a  [/        WU5      (       d  g WUS S 2S 4   WT-
  nVUVS7-  nVUVS:  nWUWR'                  5       (       Ga1  WVWW   R                  5       nX[        Rf                  " U5      UX-  nY[i        UY[        R                  R                  5      (       a  [        R                  R                  WRSj9n1O[`        Rb                  " WRSj9n1[i        U1[        R                  R                  5      (       ac  [i        WY[        R                  R                  5      (       a:  [(        R*                  " WVWX:H  5      S   S   n:UR
                  U:   n<U<WY-   U<U1-   :  nZOWYU1:  nZWZ(       a  URk                  SkUS9  U$ URm                  [n        Rp                  5      (       GaF  [s        [G        SUR                   S   5      5      USl'   UR                   S   S-
  USl   -
  USm'   U(       aN  UU Vs/ s H  nUS^-   PM
     sn   R'                  SS 9UU Vs/ s H  nUS_-   PM
     sn   R'                  SS 9-  n[OUSZ   US[   -  n[W[[(        R,                  " U[S75      -  [(        R,                  " U[S5      -  [(        R,                  " U[Sn5      -  [(        R,                  " U[S25      -  n[[t        Rv                  " SoS SpSbSqSr5         UR                  Ss[y        UU[   5      -   5        S S S 5        U{4St jn\Ub+  UR                   S   S-
  U-
  n]UR                  SuU SvU] 3US9  U(       Ga  [(        R:                  " US5      n^U(       a.  [(        R:                  " US5      n_[(        R:                  " US5      n`/ SwQna[G        [/        U5      5       GH  n"UU"   n[(        R*                  " U5      S   S   nbU(       Ga~  UGbz  UWb:  Gas  US S 2U"4   ncU3S S 2U"4   ndU2S S 2U"4   neW\" UcUS  UdUS  UeUS  5      nf[/        Uf5      S:  a7  [G        [/        Wf5      5       H  n;WfU;   n0U0S   U-   U0S   U-   U0S2   4UfU;'   M!     [(        Rz                  " [(        R,                  " WdS75      5      ng[(        Rz                  " [(        R,                  " WeS75      5      nhUhUg-  niW\" UiW]S  UhU]S  UgU]S  5      nj[/        Uj5      S:  an  [G        [/        Wj5      5       H  n;WjU;   n0U0S   W]-   U0S   U]-   U0S2   4UjU;'   M!     [G        [/        Wj5      5       H  n;WjU;   n0UU0S   -
  UU0S   -
  U0S2   4UjU;'   M!     WfnkUkR}                  Wj5        OW\" US S 2U"4   U3S S 2U"4   U2S S 2U"4   5      nkUR                  SxU SyWk 3US9  Ub  [G        [/        Wk5      S-
  S7S75       Hn  n;WkU;   n0UR
                  U0S      R                  5       U:  d  M.  UR                  SzU S{UR
                  U0S       S|UR
                  U0S   S-
      S}3US9  WkU;	 Mp     [/        Wk5      S:  d  GM  WkWaU"'   GM     [_        Wa Vls/ s H
  nlUlb  SOSPM     snl5      nmUmS:X  a  GOWmS:X  a  [G        [/        U5      5       V;s/ s H  n;WaU;   (       a  U;OS7PM     nnn;[(        R*                  " [(        R~                  " Un5      S7:g  5      S   S   n:UU:   noUR                  S~U SUo S3US9  GO/ SQnp[G        [/        U5      5       GH  n"UU"   nWaU"   nkUkc  / nkWk GHy  n0U0S2   S:X  a  T{nqU	nrOU	nqT{nrU
(       aR  SU SU SUR
                  U0S   S-
     R                  5        SUR
                  U0S      R                  5        SWqS 3
nsO5SU SU SUR
                  U0S   S-
      SUR
                  U0S       SWqS 3
nsUR                  WsUS9  WpU"==   U0S   U0S   -
  -  ss'   UR\                  U0S   U0S   2URH                  R                  U5      4==   Wq-  ss'   US0:X  a:  UR\                  U0S   U0S   2URH                  R                  S55      4==   Wq-  ss'   U(       a#  US3:X  a  SW_U0S   U0S   & OUS0:X  a  SW`U0S   U0S   & SW^U0S   U0S   & GM|     GM     [_        Wp5      S:  aY  S)nt[G        [/        U5      5       H*  n"WpU"   S:w  d  M  WtS):w  a  WtS-  ntWtUU"    SWpU"    S3-  ntM,     SWt 3nsURk                  UsUS9  U(       a  W_W`-  nu[(        R                  " U_U`5      nvUuR'                  5       (       a@  UR6                  WuS4   Wr-  R[                  5       R9                  S-5      UR6                  UuS4'   WvR'                  5       (       aC  UR6                  WvS4   S8-  Wr-  R[                  5       R9                  S-5      UR6                  UvS4'   SUR6                  W^SO4'   GOSnp[(        R*                  " U5      S   S   nbU(       Gac  UGb_  UWb:  GaX  W\" UUS  U3US  U2US  5      nf[/        Uf5      S:  a7  [G        [/        Wf5      5       H  n;WfU;   n0U0S   U-   U0S   U-   U0S2   4UfU;'   M!     [(        Rz                  " [(        R,                  " U3S75      5      nw[(        Rz                  " [(        R,                  " U2S75      5      nxUxUw-  nyW\" UyW]S  UxU]S  UwU]S  5      nj[/        Uj5      S:  an  [G        [/        Wj5      5       H  n;WjU;   n0U0S   W]-   U0S   U]-   U0S2   4UjU;'   M!     [G        [/        Wj5      5       H  n;WjU;   n0UU0S   -
  UU0S   -
  U0S2   4UjU;'   M!     WfnkUkR}                  Wj5        O
W\" UU3U25      nkUb  [G        [/        Wk5      S-
  S7S75       Hk  n;WkU;   n0UR
                  U0S      R                  5       U:  d  M.  UR                  SUR
                  U0S       S|UR
                  U0S   S-
      S}3US9  WkU;	 Mm     Wk GH+  n0U0S2   S:X  a  T{nqU	nrOU	nqT{nrUR                  SU0 SWq 3US9  S H=  nUR\                  U0S   U0S   2URH                  R                  U5      4==   Wq-  ss'   M?     U(       a:  UR\                  U0S   U0S   2URH                  R                  S5      4==   Wq-  ss'   U(       ak  URH                  R                  S5      nzUR\                  U0S   U0S   2Uz4   Wr-  R[                  5       R9                  S-5      UR\                  U0S   U0S   2Uz4'   SUR\                  U0S   U0S   2URH                  R                  SO5      4'   U0S   U0S   S-
  :X  aG  U
(       a'  SU SUR
                  U0S      R                  5        3nsO|SU SUR
                  U0S       3nsOcUR
                  U0S   S-
     nAUR
                  U0S      nBU
(       a)  SU SWAR                  5        SWBR                  5        S3nsOSU SWA SWB S3nsUR                  WsUS9  WpU0S   U0S   -
  -  npGM.     [/        Wk5      S2::  aV  SnsWk HM  n0WsSUR
                  U0S   S-
     R                  5        SUR
                  U0S      R                  5        3-  nsMO     OSWp S3nsURk                  WsUS9  U(       a  US   R#                  5       n%U%R'                  5       (       aG  US   U%)    R[                  S5      R9                  S-5      UR6                  U%) S4'   UR                  5       $ US   R[                  S5      R9                  S-5      US'   UR                  5       $ s  snf s  snf s  snf ! , (       d  f       GNj= fs  snlf s  sn;f )Nzprice-change-repairrM  r;  r!  r"  )r  rr  z
100x errorr  rN  z	bad splitzprice-repair-splitro   ry   r1   rX  z
start_min=z change=rU  z (rcp=rX   rU  )rf   rg   rh   ri   r&   TFr  g      ?z(Split ratio too close to 1. Won't repairr  r   rk   rq   zappears_suspended=z, idx_latest_active=rU   )rj   rs   ro   r   r   )rr   r   Volr,  rT   VolStrNaNg    .Ar   r   rR   ri   )r  rs  gMbP?rW  rf   r4   rj   r  rP   r3  zNo z
s detected   K   r  z+Estimation of true 1D change stats: mean = z.2fz, StdDev = r  rV  z
% of mean)r*   r  )r,   r/   z>Split ratio too close to normal price volatility. Won't repairz	sd_pct = z  largest_change_pct = z
split_max=z.3fz largest_change_pct=z
threshold=z, threshold_rcp=r   z 1D %z1D %z- vol_change_pct =    rH   c                    [         R                  " UR                  U-
  R                  5       5      nX3R	                  5       -  n[         R
                  " U* 5      n[         R                  " U5      [         R                  " U5      -  nUS   R                  5       n[         R                  " XT-  5      n[         R                  " XEU-
  S-  -  5      n[         R                  " U5      nX-
  U-  n	U	$ )Nrk   rW  )
r   r  rl   r  r7   expr  r   ry  sqrt)
ru  r  block	distancesrq  r[  weighted_meanweighted_varianceweighted_stdz_scores
             r"   _calc_volume_zscore_weightedLPriceHistory._fix_prices_sudden_change.<locals>._calc_volume_zscore_weighted^  s     "b(8'G'G'I JI0I ffiZ0G hhw/"&&/AG"8_557F$&FF6+;$<M(*w=:PUV9V/V(W%#%77+<#=L  &5EG"Nr%   c                     US   R                  5       n[        R                  " USS9nUS:X  a  g[        R                  " U5      nX-
  U-  nU$ )Nrk   r1   )ddofry   r   )ry  r   stdrY  )ru  r8  r[  rB  rY  r=  s         r"   _calc_volume_zscoreCPriceHistory._fix_prices_sudden_change.<locals>._calc_volume_zscorem  sL    "8_557F&&a0Ccz 776?D%}3G"Nr%   z'Detected false-positive split error on z, ignoring price droprdownupr  _r_down_up_frQ  r'   rs  zn/az	Unusual 'z' price action @ zM is actually similar to local price volatility, so ignoring (StdDev % mean = z%)zUnusual price action @ r5   z<100x changes are too soon after stock split events, abortingr  i_revzdisplay.max_rowszdisplay.max_columnszdisplay.widthr.  z!price-repair-split: my workings:
c                   > U S   (       aQ  [         R                  " U 5      n SU S'   [         R                  " U5      nSUS'   [         R                  " U5      nSUS'   U R                  5       (       d  / $ [         R                  " U 5      S   n/ n[	        [        U5      S-
  5       HP  nUS-  S:X  d  M  TS:  a  X#U      (       a  SOSnOX#U      (       a  SOSnUR                  X5   X5S-      U45        MR     [        U5      S-  S:w  aG  TS:  a  X#S      (       a  SOSnOX#S      (       a  SOSnUR                  US   [        U 5      U45        U$ )	Nr   Fr1   rW  r;  r   z	1.0/splitrP   )r   r{  r   r  rB   r   r~  )r  f_upf_downtrue_indicesrangesr  r  r   s          r"   map_signals_to_rangesEPriceHistory._fix_prices_sudden_change.<locals>.map_signals_to_ranges  s7   tGGAJ!wwt}Q!q	5577	88A;q>LF3|,q01q5A:s{)/Q)@gk-3O-Dk'MM<?LQ4G"MN 2 < 1$)3;%+,<%=';C)/R0@)A+wC|B/Q=>Mr%   zidx_latest_active=z, idx_rev_latest_active=)NNNNzcolumn 'z
' ranges: zPruning z range r]  z because too old.z
Potential z detected only in column z(, so treating as false positive (ignore))r   r   r   r   r   z
Corrected z on col=z range=[:z] m=r_   =r  zCorrected: zPruning range zrange=z m=)rf   rg   rh   ri   rj   rs   z on interval z across intervals rW   z (inclusive)z
Corrected:rV   )Br   r   r   r   ry  rl   r   r|  r}  r   r   r{  r   r   r   r   r   r   r   r   r   r  rollr   r   r   r-  r   r   fullr  r  onesr  r   rB   r   r  r  r  r7   
percentilerY  rB  r  r   r   r   r   r   r6  r   r   rx  isEnabledForr  DEBUGr   r   option_contextr   flipextendr  r  logical_xor)|r    r  rC   r   changer#  r/  r   r  	split_rcpr%  multidayfix_type	start_minr  OHLCcorrect_columns_individuallyrJ  r  f_no_activityappears_suspendedf_activeidx_latest_activelog_msgdf_workingsfna
debug_colsr  _1d_change_xprice_data_cols
price_dataf_zeror  df_dtyper  f_zero_num_denom_1d_change_denoisedf_na	split_maxq1q3iqrlower_boundupper_boundavgsdsd_pctlargest_change_pctrE  r  rP  rO  
f_up_ndimsf_up_shiftsnf_up_shiftsflat_indicesf_down_ndimsdown_dtsr  r  r  r  vol_change_pctnext_vi_pos_in_flat_indicesr   r   r8  down_dts_fromnext_down_dtblock_afterr>  rC  z_score_afterz_score_after_d1idx_endlookback	idx_startchanges_localr/  clean_changes
big_changethreshold_daysf_splits	indices_A	indices_Bgapsf_posgap_mingap_tdwithin_thresholdr@  rS  idx_rev_latest_activef_correctedf_open_fixedf_close_fixedOHLC_correct_rangesidx_first_fr*  f_upjf_downjranges_beforef_rev_downj	f_rev_upjf_revjranges_afterrR  r  r5  idxscoln_correctedrR   m_rcpr  counts_prettyf_open_and_closed_fixedf_open_xor_closed_fixed
f_rev_downf_rev_upf_revcol_locr   s|                                                                                                                              @r"   r0  &PriceHistory._fix_prices_sudden_changeK
  s"   88I$$& 5h]h]hi
%K	::44]"#H#6Jx I"H#7Jx >"++-4A!*Y-D-D-R-RYZ-R-[[aacIz)HVCLs6zRUFVVWX`jk/D( ,0(+0( LLC:LVIggi""U"399<<		--k:CIYY\\[(		,,[9CIIIaL Hq(%D	(8(<(<!(<(DD)--/TBHH]4KA4Nq4QST4T!>HHX!0D%DEaH !Q& " 21 5 !Q& $ #$5a$8 9&'8&99MN_M`a(CII&78==?@BBGWJ/hhj!&&'^efow&x!(((E1B(C% %%'7799$&K!-2KOOCM*/:5/A3$/G/K.S.STY.Z.a.abg.hkn.nKOOSD(N+!,X!6K9I9I(YZ9I9["-e"4S"8!@!@!G!N!Nu!UX[![KY
!&&4'O4a1J;N4'OVW`h&i D(U:M-M 77Aq63/L%g.O_-668J3&F77Aq63/L"O_-668J3&F))#*J::<<!$Jv W"::<<''#c(#C{+446w?#g,BWBWBY[aZaBbbCLk"++-G0E0E0GGC##rxx#**73Jz''*+AqsOs"OAw+---OA./36/ , rxx#**51J%abc+j".??QR!BGGFAA$>>!!-0L)*D("$**\"B #%))Lq"Axx+,88::(+% y)	66%&)a-3)>)BBrvvNaGbehmvyzmz  B  mB  EF  mF  fG  HGLL3xj
3:LFI 2RH=B2g39n39n K/4G;4VWgg)!,-VV'*+cB3s);WYZ]V^^`aghmamnq`rr|}  FP  	Q ZD(!#>)"a'"ui 3);#;;LLYakLlLL9VCL0GHZ[^G_`hrLsI  )+y)	z)C0DEWX[D\]eop_'99S@	z)C0@Ys@ST\fgckk)$C'77Aq63/LT**34==?J"O  *!"#/*SbST2CCL.L'3/0#A&)5ad);AgI&)4QwY)?)E)Ea)HAgI& 1
 #6K"-f"5";";A">K9$i/ i'_
(!mdq1A??'<L88L1!4Lv||,Lyy<?

PQ
@RSHxx,Q/EYYq\M&&q)&'1f#h-2D2DQqS2IA2M2>#2FGH1s3x ]//!4Fz),^S]=O=OPQ=RU[=[)\2 )5Ra(8(<(<(>%A4r9:#l+U2XaZ8eC!89((* (2 6}%)#&}#5L#r) '+&+ii93F3Fq3I0I,W`WjWjklWmJm&n"'))By/B/B1/E,E,F"GK*{/@/@"&K## *%8K%HM':;x;P;U;UVW;XZe'f$
 =*:;a? 'NrwwykYn%op%?(-DI*/DQKC 0D TM+ K"(K $K*3/55a8??FK K3/0#A&&'1gAdF#&1!D&&9&?&?&B&I&I%&PAdF#)/1AgI&'+AqDzAeG$&'1gAdF# 1 88A;q>C3B#c(1*c!e,G  %%""3''As8|,I',,Yw?M+&w:$1&$9=;M:M$N$W$W$YM$1!G)$<mAdF>S=S$T$]$]$_Mggm,VVM*c%&Z"D 0&!+&>1*a/*&_/AASH	/!,QwY!7!<!<S!AJ!,V!4!9!9#!>J!I-*s9}2L7"LL9QC7H  Ta  bh  il  bl  mp  aq  qs  *t  u:?KOOB$J7"LL+B2779+  N[  \b  cf  \f  gj  [k  km  *n  o7<KOOBG45  "T ,k#.7799F+c*3355D3/0#A&
?#)!Q$<+af2E#EF1a4L!%adk!D&.A!ADAJ	 1
 TMuuwwLL3xj
3:LFI ~&//1S8]"x||~~*1-IAIy>>YQW%	1DBJD1HEyy{{u+//+55h?'Ifi&=&=&K&KLL ) 7 7 E E> E ZI ) 3 3 HIi)@)@)N)NOOT^_egpg~g~  hM  hM  UN  UN((4=1!4Q7C3B(*VY'G$'-	'9$#KK ^fpKqIw}}--#E![->->q-A$BCK#.#4#4Q#7#9K<L#LK +&:'F:a'	:'FGKKQRKSVat~bt~opcdejcjt~b  WA  WE  WE  KL  WE  WM  M&v.T1BB"''(B"77"''(A:NNQSQXQXYaceQffikipipqy{|i}}H""#5t=RTVXgimnF[YaMbIccd o	B ($&HHQK!O6G$G!LL-.?-@@XYnXop  yCL  D'''!U+K  "wwq%0 "5 1":3t9%G hhqk!nQ/$*;*GL]alLl 1a4B AJE$QTlG$9"=N=O:PRWXiXjRkmt  vG  vH  nI  %JM=)A-!&s='9!:A -a 0A01!7H0H!A$QbJbdefgdh/iM!, "; #%''"''%*<"=K "(< =I&4F#8@U@V9WYbcxcyYz  }H  I^  I_  }`  $aL<(1,!&s<'8!9A ,QA/0t6K/KQqTTiMiklmnko.pLO ": "'s<'8!9A ,QA/01vq1vqt.DLO ": +FMM,/21QT7DAJqRStUFxs*VH=ZP("3v;q="b9"1I99QqT?//1I="LL8A3gcii!o=NbQTQZQZ[\]^[_`a[aQbPcct)u  ~HL  I &q		 : v;?-3'*[ &^ <OP<Oqam2<OPQEz!EJ3t9EUVEU03;EUVhhrxx~34Q7:3iz(3LSEQyz  CM  N (s4y)AQA03F~!##Q47? %A$-E )A$)E#$.xj8CIIVWXYVZ[\V\L]LbLbLdKeefgjgpgpqrstqugvg{g{g}f~  C  DE  FI  CJ  #KC$.xj8CIIVWXYVZ[\V\L]K^^_`c`i`ijklmjn`o_pptuvwzt{"|CS
;#A!A$qt)31adCKK,?,?,B!BCqHC<HHQqT!A$Y0C0CK0P%PQUVVQ) F{:>QqT!A$ 7!"g;?ad1Q4 815AaD1.- $ *8 {#a'$&M"3t9-&q>Q.,2 - 5)Qy+a.9I-KKM	 .
 (7CKK:K6*6*F'*,..}*U'*..00BE''JackJkBlotBtA{A{A}  BE  BE  FK  BLCGG3X=>*..00BE''JackJkBlorBruzBz  BB  BB  BD  BK  BK  LQ  BRCGG3X=>04CGGK,- K((1+a.+K &7&CHY]hHh !6a8I8J6KTRcRdMegmn  oA  hB  !C}%)"3}#56)!,,-aD3D,DadM^F^`abc`d+ea( 7  WWRWWT2%67
7727762#67 :-4U;P;Q5RT\]r]sTt  wA  BW  BX  wY   Z|$q("3|#45(O+,Q42G+G1PeIeghijgk*lQ 6 #3|#45(O+,QqT61QqT61Q4*@Q 6 'l+.q$?$s6{1}b"5Aq	Ayy1++-	9~cii!o5FbSTUVSWXYSYIZH[[l%mu  A"1I	 6
 Q47?A%E!A!EvaSA3/zBFAHHQqT!A$Y(;(;A(>>?1D? G#HHQqT!A$Y(;(;K(HHIQNI!!kk11(;G47HHQqT!A$Y=O4PSX4X3_3_3a3h3hin3oCHHQqT!A$Y/0HL1adCKK$7$7$DDEQ41Q4!8# *8*M#))AaD/BVBVBXAYZ *8*M#))AaD/ARS  IIadQh/E))AaD/C *8*4Fuzz|nTXY\YaYaYcXddpq *8*4FugTRUQVVbcS
3qtad{*= @ 6{a"AQsyy1a05578SYYqt_=Q=Q=S<TUUC   $K=2KK:K.x=%%'Dxxzz*-h-*>*D*DQ*G*N*Nu*Uh' ~~ !$H 3 3A 6 = =e DH~~c (Pp
 (Gb onF Q
 Ws>   
A}0%A}0H*A}5IA}:K;!A}?YA~ZA~}?
A~)r   r   r   r   r   r   r   r   r   r   r   r  )r7   r&   F)r7   F)r7   )rP   )F)FF) __name__
__module____qualname____firstlineno__r#   r   log_indent_decoratorr
   r   r   r  r  r   r  r   r"  r%  r(  r1  r   r  r   r   r   r	  r  r   r   r   r   r0  __static_attributes__r}  r%   r"   r   r      s   0 +deT eE%"	y (*||	y  yv.r|| .	&d 	&a299 aeryy e^		 ^299 0.",, .` A  AF7r%N    X  Xt c  c  @  @D o  ob ~  ~@  :  :x b
   b
 r%   r   )!	curl_cffir   mathr   r  rA  r   dateutilr|  r  numpyr   pandasr   r   r   r   yfinancer   r   yfinance.configr   yfinance.constr   r	   r
   yfinance.exceptionsr   r   r   r   r   r   r}  r%   r"   <module>r     sA              " $ G G  ]3  ]3 r%   