
    Wg!1                        d dl Zd dlZd dlZd dlZd dlZd dl	m
Z
 d dlZd dlZd dlmZmZ d dlmZmZ d dlmZmZmZmZ  G d d      Zy)    N)isclose)sharedutils)
_BASE_URL__PRICE_COLNAMES_)YFInvalidPeriodErrorYFPricesMissingErrorYFTzMissingErrorYFRateLimitErrorc                   b   e Zd ZddZej
                  	 	 	 	 	 ddej                  fd       Zddej                  fdZ	dde
fdZddej                  fdZddej                  fdZddej                  fd	Zddej                  fd
Zddej                  fdZej
                  dd       Zd Zej
                  d        Zej
                  d        Zej
                  d        Zej
                  d        Zej
                  d        Zej
                  d        Zej
                  dd       Zy)PriceHistoryNc                     || _         |j                         | _        || _        || _        || _        i | _        d | _        d| _        d | _	        y )NF)
_datauppertickertzproxysession_history_cache_history_metadata_history_metadata_formatted_reconstruct_start_interval)selfdatar   r   r   r   s         L/var/www/html/venv/lib/python3.12/site-packages/yfinance/scrapers/history.py__init__zPriceHistory.__init__   sM    
lln
 !%+0( ,0(    returnc           
      (   t        j                         }|xs | j                  }|}|}|	r|dv r|dk(  rt        d      |~|{|x| j                  }|t        | j                        }t        |      }t        j                         t        j                  | j                  <   |j                  dd      d   t        j                  | j                  <   |r||j                  |       t        j                         S |dk(  rMt        j                  t         j"                  j%                         j'                  |      j(                  dd      }nlt         j"                  j%                         j'                  |      j                         }|t        j*                  |      z  }|t        j,                  d	      z  }|}d}d
}|}|}|s||j/                         dk(  r/| j                  }|t        | j                        }t        |      }t        j                         t        j                  | j                  <   |j                  dd      d   t        j                  | j                  <   |r||j                  |       t        j                         S |t1        t3        j4                               }nt        j6                  ||      }|%|dk(  r|dz
  }n0|dv r|dz
  }n&|dv r|dz
  }n|dz
  }nt        j6                  ||      }||d}n|j/                         }d|i}|j/                         |d<   ||d<   |d   dk(  rd|d<   d|d<   t9        |      }| j                  }dD ]K  }||v st        t!        j"                  ||   d      j;                  d      j'                  |            ||<   M |j=                  | j                   dt        |              t>         d| j                   }d}| j@                  jB                  }|xt!        j"                  |d      j;                  d      }t         j"                  j%                         }t        j,                  d !      }||z   |k  r| j@                  jD                  }	  |||||"      }d#|jF                  v s|tI        d$      |jK                         }	 |d%   d&   d'   d(   | _'        |d   d)   d*v } d+}!|s||j/                         dk(  r0|!d,|d    d-z  }!||!| z  }!n| sH|!t!        j"                  |d      j;                  d      j'                  |      j                          z  }!n9|!t!        j"                  |d      j;                  d      j'                  |       z  }!|!d.z  }!|	|!| d/z  }!n| sJ|!t!        j"                  |d      j;                  d      j'                  |      j                          d/z  }!nE|!t!        j"                  |d      j;                  d      j'                  |       d/z  }!n	|!d0| d/z  }!d1}"|tQ        |t8              stS        | j                  |!      }d2}"ntQ        |t8              r)d3|v r%|!d4|d3    d/z  }!tS        | j                  |!      }d2}"nd%|v r5|d%   d5   r-|!d6|d%   d5   d7   z   d8z   z  }!tS        | j                  |!      }d2}"nd%|vs$|d%   d&   |d%   d&   r|d%   d&   d'   d9   d:   d'   stS        | j                  |!      }d2}"n]|r[|| jN                  d;   vrJt        jT                  |      s5tW        | j                  |d<jY                  | jN                  d;               }d2}"|"rt              }t        j                         t        j                  | j                  <   |j                  dd      d   t        j                  | j                  <   |r||j                  |       | jZ                  | jZ                  |k(  rd| _-        t        j                         S |r|| jN                  jC                  d;g       vrmt1        t3        j4                               }t        j                  j]                  |      }|t        j*                  |      z  }|t        j,                  d	      z  }t        j^                  |d%   d&   d'         }#|rd|#j`                  sXt!        jb                  |d      }$|#jd                  |#jf                  d'   dz
     |$k\  r|#jh                  d'|#jf                  d'   dz
   }#|#j`                  r| j                   d=}%n\tk        |#      dk(  r | j                   d>|#jd                  d'    d?}%n.| j                   d>|#jd                  d'    d.|#jd                  d)    }%|j=                  |%       |j/                         dk(  r|j=                  | j                   d@       |#jm                  dA      }&t!        jn                  |&jq                         jd                  |&dB   js                         |&dC   ju                         |&dD   jw                         |&dE   jq                         |&dF   jq                         |&dG   jy                         dHI      }#	 |&dJ   ju                         |#dJ<   |&dK   ju                         |#dK<   | jN                  dL   }'|'dMv }(| jN                  dN   })| jN                  dO   }*t        jz                  |#|d   |)      }#t        j|                  |#|d         }#|d   d)   d*v } |s| rdP| jN                  v r| jN                  dP   }+tQ        |+t         jn                        s<t        j~                  | jN                  d2Q      | _'        d2| _@        | jN                  dP   }+t        j                  |#|d   |+      }#|#j`                  r| j                   dR}%n\tk        |#      dk(  r | j                   dS|#jd                  d'    d?}%n.| j                   dS|#jd                  d'    d.|#jd                  d)    }%|j=                  |%       t        j                  |d%   d&   d'         \  },}-}.|(sd}.|-t        jz                  |-||)      }-|,t        jz                  |,||)      },|.t        jz                  |.||)      }.|]|#j`                  sQ|#jd                  d'   j                  dT      }/|,|,j                  |/d },|.|.j                  |/d }.|-|-j                  |/d }-|bt!        j"                  |d      j;                  |      }$|,|,|,jd                  |$k     },|.|.|.jd                  |$k     }.|-|-|-jd                  |$k     }-|d   d)   d*v } | st!        jb                  |#jd                  j                        j;                  |)d2dUV      |#_2        |,jf                  d'   d'kD  r@t!        jb                  |,jd                  j                        j;                  |)d2dUV      |,_2        |-jf                  d'   d'kD  r@t!        jb                  |-jd                  j                        j;                  |)d2dUV      |-_2        |#j                         }0|,jf                  d'   d'kD  rt        j                  |0|,|      }0dJ|0j                  v r#d'|0j                  |0dJ   j                         dJf<   ndW|0dJ<   |-jf                  d'   d'kD  rt        j                  |0|-|      }0dK|0j                  v r#d'|0j                  |0dK   j                         dKf<   ndW|0dK<   |(r_|.jf                  d'   d'kD  rt        j                  |0|.|      }0dX|0j                  v r#d'|0j                  |0dX   j                         dXf<   ndW|0dX<   |0j`                  r| j                   dY}%n\tk        |0      dk(  r | j                   dZ|0jd                  d'    d?}%n.| j                   dZ|0jd                  d'    d.|0jd                  d)    }%|j=                  |%       t        j                  |0|d   |)|	|*[      }0|0|0jd                  j                  d\]          }0|	r|j=                  | j                   d^       |0j                         }0| j                  |0|*      \  }0}*| j                  |0||*      }0| j                  |0jh                  d)d ||)|      }1d_|0j                  vrd1|0d_<   t!        j                  |0j                  |0jd                  d)         |1g      }0| j                  |0||)|      }0| j                  |0||)      }0| j                  |0||)|      }0|0j                         }0	 |rt        j                  |0      }0n|rt        j                  |0      }0|r%t        j                  |0|d%   d&   d'   d(   db         }0|0dG   j                  d'      j                  t        j                        |0dG<   | rdc|0jd                  _Y        ndd|0jd                  _Y        |s|0j                  g dedfg      }0|
swt        dGgz   g dez   }3|3D 4cg c]  }4|4|0j                  v s|4 }3}4|0|3   j                         |0|3   d'k(  z  j                  dh      }5|0j                  |5jd                  |5         }0||k7  r| j                  |0|||      }0|0j`                  r| j                   di}%n\tk        |0      dk(  r | j                   dj|0jd                  d'    d?}%n.| j                   dj|0jd                  d'    d.|0jd                  d)    }%|j=                  |%       | jZ                  | jZ                  |k(  rd| _-        |0S # tL        $ r  t        $ r |r Y w xY w# t        $ r i | _'        Y w xY w# t        $ r Y w xY w# t        $ r}2|rd`|2z  }nda|2z  }t        j                         t        j                  | j                  <   |t        j                  | j                  <   |rt        | j                  d|      |j                  | j                  d|       Y d}2~2d}2~2ww xY wc c}4w )ka  
        :Parameters:
            period : str
                Valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
                Either Use period parameter or use start and end
            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 is 99 years ago
                E.g. for start="2020-01-01", the first data point will be on "2020-01-01"
            end: str
                Download end date string (YYYY-MM-DD) or _datetime, exclusive.
                Default is now
                E.g. for end="2023-01-01", the last data point will be on "2022-12-31"
            prepost : bool
                Include Pre and Post market data in results?
                Default is False
            auto_adjust: bool
                Adjust all OHLC automatically? Default is True
            back_adjust: bool
                Back-adjusted data to mimic true historical prices
            repair: bool
                Detect currency unit 100x mixups and attempt repair.
                Default is False
            keepna: bool
                Keep NaN rows returned by Yahoo?
                Default is False
            proxy: str
                Optional. Proxy server URL scheme. Default is None
            rounding: bool
                Round values to 2 decimal places?
                Optional. Default is False = precision suggested by Yahoo!
            timeout: None or float
                If not None stops waiting for a response after given number of
                seconds. (Can also be a fraction of a second e.g. 0.01)
                Default is 10 seconds.
            raise_errors: bool
                If True, then raise errors as Exceptions instead of logging.
        )5d1wk1mo3mor    z<Yahoo's interval '5d' is nonsense, not supported with repairN:    ytd   days1dmax1mi:	 )5m15m30m90mi O )1h60mi gl   j-t )period1period2rangeintervalincludePrePostr/   r.   zdiv,splits,capitalGainseventss)unitUTCz: Yahoo GET parameters: z/v8/finance/chart/   )minutes)urlparamsr   timeoutzWill be right backz~*** YAHOO! FINANCE IS CURRENTLY DOWN! ***
Our engineers are working quickly to resolve the issue. Thank you for your patience.chartresultr   metamh  (  -> )z	 (period=FTstatus_codez(Yahoo status_code = errorz (Yahoo error = "descriptionz")
indicatorsquotevalidRanges, z$: yfinance received OHLC data: EMPTYz: yfinance received OHLC data: z onlyz: resampling 30m OHLC from 15m30minOpenHighLowClose	Adj CloseVolume)rU   rV   rW   rX   rY   rZ   )indexr   	DividendsStock SplitsinstrumentType)
MUTUALFUNDETFexchangeTimezoneNamecurrencytradingPeriods)tradingPeriodsOnlyz: OHLC after cleaning: EMPTYz: OHLC after cleaning: Dshift_forward)	ambiguousnonexistent        Capital Gainsz$: OHLC after combining events: EMPTYz: OHLC after combining events: )repairrb   first)keepz: checking OHLC for repairs ...	Repaired?zauto_adjust failed with %szback_adjust failed with %s	priceHintDatetimeDate)r\   r]   rj   ignore)columnserrorsaxisz : yfinance returning OHLC: EMPTYz: yfinance returning OHLC: )]r   get_yf_loggerr   	Exceptionr   r
   r   strempty_dfr   _DFSsplit_ERRORSrN   	_datetimedatepd	Timestamputcnow
tz_convertyear_interval_to_timedelta	timedeltalowerint_timetime_parse_user_dtdicttz_localizedebugr   r   get	cache_gettextRuntimeErrorjsonr   r   
isinstancer	   is_valid_period_formatr   joinr   fromtimestampparse_quotesemptyto_datetimer[   shapeiloclenresample	DataFramelastrl   r+   minsum	set_df_tzfix_Yahoo_dst_issueformat_history_metadatar   'fix_Yahoo_returning_prepost_unrequestedparse_actionsfloorloc
sort_indexsafe_merge_dfsrs   isna!fix_Yahoo_returning_live_separate
duplicated_standardise_currency_fix_bad_div_adjust_fix_zeroesconcatdrop_fix_unit_mixups_fix_bad_stock_splitsauto_adjustback_adjustnproundfillnaastypeint64namer   all	_resample)6r   periodr6   startendprepostactionsr   r   rk   keepnar   roundingr@   raise_errorsloggerinterval_userperiod_userr   
_exceptionerr_msg
start_userend_userr?   params_prettykr>   r   get_fnend_dtdt_now
data_delayintraday_price_data_debugfailquotesendDtmsgquotes2
quote_typeexpect_capital_gainstz_exchangerb   tps	dividendssplitscapital_gainsstartDtdfdf_lastedata_colnamescmask_nan_or_zeros6                                                         r   historyzPriceHistory.history   s   ^ $$&# h"== 4 ^__}1CWW:!1$++!>J!*oG/4~~/?FKK,29--a2H2KFNN4;;/#((W- >>++U?%NN2<<+>+>+@+K+KB+O+T+TVWYZ[ELL//1<<R@EEGEU99&AAEY00a88E$H
FNflln&=Bz-dkk:
j/+0>>+;DKK(.5mmD!.DQ.Gt{{+$$LL)~~''{%**,'**33}t#&LE!<<'ME.(NE*,E,,UB7!&37F\\^Fv&F%^^-z#*  *&!&F: 5xVWW' 	lAM!#&r||F1IC'H'T'TUZ'['f'fgi'j#ka 	l 	}$<S=O<PQR .t{{m<?\\#C0<<UCF\\((*F",,R8J
"f,--		D $tyy0DL" $M N N 99;D	(%)']8%<Q%?%GD" *%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-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d&<&<]&KKTYTpTpqwTx-dkk6499TMcMcdqMrCstJD*oG',~~'7FKK$*1--a*@*CFNN4;;'  W%//;@`@`dl@l370>>## fD$:$:$>$>}b$QQejjl#CNN005EU11&99EY((a00E ##DM($;A$>?v||NN3S1E||FLLOa/0E9Qv||A':;<<[[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&-k&:&>&>&@{#)0)@)D)D)F~&
 ++,<=
)-BB,,-CD))*5 
);[I**66*3EF*%b)Z78(8D<R<R(R(()9:Cc2<<0).)F)FtG]G]rv)w&370,,-=>BB66R\K]_bcF<<[[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 	8[II$!OOM8[QM<< ,,q///4( )gh 7I ,$1$5$5gh$?M%#ZZ1F?LL3/;;B?E$%ioo&=>	( -m.A.AE.I J!u 45 *%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44R
9K[agrz{$$'$223LLDKK=(GHIB
  55b(CLB))"hAB &&rwwrs|X{GTG"**,"';BGGBHHRL17;<B&&r8['JB++B+FB!!"hWEBB	@&&r*&&r* "d7mH5a8@MNB(|**1-44RXX>8&BHHM"BHHM !OX`aB,z9<jjM(5I1bjjQIMI "= 1 6 6 8B}<MQR<R SXX^_X`)//0@ABB}$Hm[IB88[[M!ABCW\[[M!<RXXa[MOC[[M!<RXXa[MbhhWYl^\CS++7D<\<\`h<h/3D,	i   	 	 	  	(%'D"	(x  H  
	@6:6:',~~'7FKK$*1FNN4;;'DKK ABBg>??
	@4 Jsv   7AM9 =AN ,AN, E4/AN< IAQ(I#AQ(M9ANNANNAN)N(AN)N,	AN9N8AN9N<	AQ%OBAQ Q AQ%c                     ||f}|| j                   v r| j                   |   S | j                  ||d|      }|| j                   |<   |S )NT)r   r6   r   r   )r   r   )r   r   r6   r   	cache_keyr   s         r   _get_history_cachezPriceHistory._get_history_cache  sW    v&	+++&&y11\\(DPU\V)+I&	r   c                     | j                   d| j                   vr| j                  dd|       | j                  du r+t        j                  | j                         | _         d| _        | j                   S )Nrc   r    r1   )r   r6   r   FT)r   r   r   r   r   )r   r   s     r   get_history_metadataz!PriceHistory.get_history_metadata  sl    !!)-=TE[E[-[##4$e#L++u4%*%B%B4CYCY%ZD"/3D,%%%r   c                     | j                  ||      }d|j                  v r|d   }||dk7     S t        j                         S )Nr   r   r\   r   r   rs   r   Series)r   r   r   r   r   s        r   get_dividendszPriceHistory.get_dividends  sG    $$F%$@"**$;IY!^,,yy{r   c                     | j                  ||      }d|j                  v r|d   }||dk7     S t        j                         S )Nr   rj   r   r   )r   r   r   r   r   s        r   get_capital_gainszPriceHistory.get_capital_gains  sI    $$F%$@bjj(/M !!344yy{r   c                     | j                  ||      }d|j                  v r|d   }||dk7     S t        j                         S )Nr   r]   r   r   )r   r   r   r   r   s        r   
get_splitszPriceHistory.get_splits  sH    $$F%$@RZZ''F&A+&&yy{r   c                 j   | j                  ||      }g }d|j                  v r|j                  d       d|j                  v r|j                  d       d|j                  v r|j                  d       |r,||   }||dk7     j                  d      j	                  d      S t        j                         S )Nr   r\   r]   rj   r   r   )how)r   rs   appenddropnar   r   r   )r   r   r   r   action_columnsr   s         r   get_actionszPriceHistory.get_actions  s    $$F%$@"**$!!+.RZZ'!!.1bjj(!!/2(G7a<(//E/:AA!DDyy{r   c                 6   ||k(  r|S d }|dk(  rd}no|dk(  rd}ng|dk(  rd}n_|dk(  rKd}|d	k(  rd
}n;t         j                  j                         j                  d      j	                         }d| }nt        d| d      dddddddd}d|j                  v rd|d<   d|j                  v r|d   |d<   d|j                  v rd|d<   d|j                  |d   dk(  df<   |j                  |dd|      j                  |      }	d|	j                  |	d   dk(  df<   |	S ) Nr!   zW-MONr    5Dr"   MSr#   QSr&   JANz%bzQS-z(Not implemented resampling to interval ''rl   r   r+   r   r   prod)rU   rW   rV   rX   rZ   r\   r]   rn   anyrY   rX   rj         ?r]   ri   left)labelclosedoffset)
r~   datetimenowstrftimer   rx   rs   r   r   agg)
r   r   df_intervaltarget_intervalr   r  resample_periodalign_monthresample_mapdf2s
             r   r   zPriceHistory._resample  s`   /)Ie#%O$"O%"O%"O#'00446??EKKM #K=1OFFWWXYZZE56% "**$(-L%"**$(4W(=L%bjj(,1L):=r.!3&67kk/vkVZZ[gh<?N#S(.89
r   c                 0(   t        j                         }d|| j                  d}t        |t        j
                        st        dt        |            |dk(  r|S |dd  dv rd}d}nd}t        D cg c]	  }||v s| }	}|	d	gz   }
g d
}|D ci c]  }|t        j                  |       }}t        t        |      dz
        D ci c]  }||   ||dz       }}d d t        j                  d      d}dD ]  }t        j                  d      ||<    t        j                  d      |d<   ||v r||   }||   }n*|j                  d| d       d|j                  vrd|d<   |S | j                   || _        || j                   k7  rQ||| j                      k7  r?dj#                  | j                   || j                      |      }|j%                  ||       |S |j'                         }||
   j)                         |k(  }|j+                  d      }||   }|d }nn|t        j                  d      z  }t        j,                  j/                         |z
  }|j1                  |j2                  j4                        j7                  d      }|j9                  d| d| d| |       |u|j2                  |k\  }||z  }|j+                         sQdt;        j<                  |j+                  d             d}|j%                  ||       d|j                  vrd|d<   |S |j2                  |   }t        |      dk(  r(|j9                  d|       d|j                  vrd|d<   |S |j?                         }d|j                  vrd|d<   ||	   jA                         j+                  d       }|||	   j)                         |k7  jC                  d      z  }||   }|d   gg}|dk(  r!tD        jF                  jG                  d !      }n|d"k(  r!tD        jF                  jG                  d !      }n~|d#k(  r!tD        jF                  jG                  d !      }nX|d$k(  r!tD        jF                  jG                  d!      }n2|dk(  rt        j                  d%      }nt        j                  d      }|j9                  d&| |       t        dt        |            D ]X  }||   }|jI                         |d'   d   jI                         |z   k  r|d'   jK                  |       G|jK                  |g       Z |j9                  d(|       |D ]  }|j9                  d)|d    d*|d'           ! t        t        |            D ]1  }||   }|d   } |j2                  jM                  | gd+,      d   }!|!dkD  rO||j2                  |!dz
     |k\  r8|r1|j2                  |!dz
     jI                         | jI                         k(  r|!dz  }!|d'   }"|j2                  jM                  |"gd+,      d   }#|#t        |      dz
  k  r8|r1|j2                  |#dz      jI                         |"jI                         k(  r|#dz  }#|j2                  |!|#dz    }$||xx   |$jO                         z  cc<   ||   jQ                          4 d}%|D ]P  }||j2                  jS                  |         }&|j9                  d-tU        |&      z          |d   }'|'jI                         }(d})|d$k(  r;t        jH                  jW                         |(z
  t        j                  d.      kD  rd})n>|d/v r:t        jH                  jW                         |(z
  t        j                  d0      kD  rd})|)rd1|r|'n|( d2}|j%                  ||       t        j                  d      }*|d"v r|(|z
  }+|d'   jI                         |z   },n+|d#k(  r|(}+|d'   jI                         |z   },n|d   }+|d'   |z   },|+|*z  }+|,|*z  },|r#|+jI                         }+|,jI                         |*z   },|tY        |jI                         |+      }+|j9                  d3| d4| d5|+ d6|, |       t        j                         }t[        |d7      r+|j\                  }-|j_                  t`        jb                         | je                  |+|,|dd|dd8      }.t[        |d7      r|j_                  -       |.|.jf                  rd1|r|'n|( d2}|j%                  ||       m|.jh                  |d   |d'   ||   z   t        j                  d9      z
   j?                         }.|.jf                  r"d:| d;|r|'n|( d<}|j%                  ||       d|.d=<   |d"k(  rjg d>}/|/|&j2                  d   jk                         d?z   dz
  d?z     }0|.j2                  jm                  d       jo                  d@|0z         jp                  |.dA<   dA}1n|d#k(  r/t	        jr                  |.j2                  jH                        |.dB<   dB}1n_d|.jh                  |.j2                  jS                  |&j2                        d=f<   |.d=   ju                         |.dC<   |.jw                  d=d      }.dC}1|.|.|	dDgz      jA                         jC                  d          }.|.jy                  |1      }2|2j{                  dEdFdGdHdIdJdKL      j}                  dMdNiO      }3|1dPv r5|3j2                  jm                  |.j2                  j4                        |3_        nb|.dC   j                         |.dQ<   t;        jJ                  |.j2                  d   g|.j2                  |.dC   j                         dkD           }4|4|3_        |j9                  dRtU        |3      z          t;        j                  |&j2                  |3j2                        }5t        |5      dk(  rdS| dT|( dU}|j%                  ||       V|d#k(  r|3|3j2                  jS                  |5         }6|&|&j2                  jS                  |5         }7|7dN   |k(  }8|8j+                         r|7dN   |7dV   z  }9t:        j                  |9|8<   |9j                         j                         }9t;        j                  |8      d   D ]E  }:|6j2                  |:   }t        |9      };|3jh                  |dDf   dk7  rv|:|;dz
  k  r |9j                  |:dz      |9j                  |:<   ZdW|6dD   j                  |:   |6dV   j                  |:dz
     z  z
  }<|9j                  |:dz
     |<z  |9j                  |:<   |:dkD  r |9j                  |:dz
     |9j                  |:<   |9j                  |:dz      |9j                  |:<   |6dD   j                  |:dz      dk7  s|9j                  |:xx   dW|6dD   j                  |:dz      |6dV   j                  |:   z  z
  z  cc<   H |7dV   |k(  }=|9j                  |&j2                  t:        j                  X      j                         j                         }9|&dV   |9z  |3dN<   |=j+                         r|=j                  |3j2                  dX      }>|9j                  |3j2                  t:        j                  X      j                         j                         }?|>j)                         }@|3dV   |@   |?|@   z  |3jh                  |@dNf<   dYdVg}A|3|3j2                  jS                  |5         |A   j)                         }6|&|&j2                  jS                  |5         |A   j)                         }7|7|k7  }B|Bt;        j                  |6       z  }B|Bj+                         s|j%                  dZ|( dU|       t        t        A            D ]+  }CBd d |Cf    }D|Dj+                         sd|7DCf<   d|6|D|Cf<   - |7B   |6|B   z  }E|2j                         }F|3j2                  |F_        |F|Fj2                  jS                  |5         j)                         j                  t              }F|Fd d d f   }Ft;        j                  |Ft        A            }F|F|B   }Ft;        j                  |EdWd[\       }Gt;        j<                  |G      t        |A      k(  rdW}Hnt;        j                  EF]      }Ht        Hd^z  dz
        d_k  r?|&j?                         }&t        D ]!  }|jh                  ||   |k7  |fxx   d`z  cc<   # Hd`z  }H|j9                  daHdb|       t        dW|Hz  d      }It        |Hd      }H|Hdk(  rIdk(  rnBHdkD  r|3|	xx   Hz  cc<   |3d	xx   |Hz  cc<   n"IdkD  r|3|	xx   dWIz  z  cc<   |3d	xx   |Iz  cc<   |&j2                  |&|	d	gz      |k(  j)                         j+                  d         }Jg }K|JD ]"  }:|:|3j2                  vsKjK                  |:       $ t        K      dkD  r|j9                  dctU        K      z   |       JD ]  }:|:|3j2                  vr|3jh                  |:   }L|d"k(  r:|3j                  |3j2                  j                  |:      dz
     }M|.jh                  |:d  }.|jh                  |:   }N|Nj2                  |N|k(     j)                         }Odd|Ov rLdd   |jh                  |:ddf<   deOv rLde   |jh                  |:def<   dYOv ry|d"k(  r`|:|.j2                  d   k7  rNMdV   |jh                  |:dYf<   t        |jh                  |:dYf   |jh                  |:def         |jh                  |:def<   nLdY   |jh                  |:dYf<   dVOv r)LdV   |jh                  |:dVf<   |LdN   |jh                  |:dNf<   ndNOv rLdN   |jh                  |:dNf<   d	Ov r1Ld	   j                         j                  df      |jh                  |:d	f<   d|jh                  |:df<   |%dz  }% S |S c c}w c c}w c c}w )gNzprice-reconstructyf_catyf_interval	yf_symbolz#'df' must be a Pandas DataFrame notr,   r%   )dwkmoTFrZ   )r!   r*   r1   r/   r.   r-   2mr,   i  r(   )r!   r*   r1   )r/   r.   r-   r  <   r<   z,Have not implemented price reconstruct for 'z' interval. Contact developersrn   z%Hit max depth of 2 ('{}'->'{}'->'{}')extraru   re   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*   r1      zgrp_max_size = rD   zRepair groups:z- rK   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=rJ   ->level)r   r   r6   r   r   r   rk   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
intervalIDr\   )rU   rl   )rX   r   )rY   r   )rW   r   )rV   r+   )r\   r   )rZ   r   )rU   rX   AdjCloserW   rV   r\   rZ   r8  rY   )rs   )r5  r6  diffzdf_new:
zCan't calibrate z block starting z so aborting repairrX   r  
fill_valuerU   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: rV   rW   r   )Rr   rw   r   r   r   r   rx   typer   r   r5   r   r~   r   warningrs   r   formatinfor   to_numpyr  r   r   r   r[   r   ceilr   r   r   copyr   r   	_dateutilrelativedeltar   r   get_indexerto_listsortisinry   todayr+   hasattrr*  setLevelloggingCRITICALr   r   r   weekdayr   	to_period
start_timer   cumsumr   groupbyr  renamer9  intersect1dnanffillbfillwherer   reindexisnansizer   floattiler   averageabsr   get_locr   )Pr   r   r6   r   tagr   
log_extrasr   r   
price_cols	data_cols	intervalsiitdsnextsmin_lookbackssub_intervaltd_ranger   f_repairf_repair_rowsrF   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_blockstart_dtstart_d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ratiosr=  not1ratio	ratio_rcpbad_dtsno_fine_data_dts
df_new_rowdf_last_week
df_bad_row
bad_fieldssP                                                                                   r   _reconstruct_intervals_batchz)PriceHistory._reconstruct_intervals_batch.  s    $$& 3H[_[f[fg
"bll+A48LLtIAB<,,GHH!1=AQ"Wa=
=(+	 H	CLMa5//99MM9>s9~PQ?Q9RSA1yQ//SS $D	8K8KQT8UV+ 	<A(22;M!	<'11r:du ?LH~HNNI(Sqrs"**,"';I ++3/7D,t777HdNnNnHo<o9@@AaAachim  jJ  jJ  dK  MU  VCKK:K.I]]_i=))+s2 !, ,'9F$$!,,A\\((*Q.F&&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+j>&&(,,!,452j>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 	1ALL2adV4"w/0	1 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 	!"  q	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&"-"3"3"5";";"=K!xxq1 X)//4,!::b+o6!;"QU{8C8H8Hq8Q 0 0 5 +.[0I0N0Ns0SVbcjVkVpVp$'!GW- 1- +-8C8H8Hq8QT[8[ 0 0 5"Qw8C8H8Hq8Q 0 0 5 9D8H8Hq8Q 0 0 5#/#<#A#A#'#Ja#O$/$4$4S$9S<P[C\CaCabehibiCj8DW8M8R8RSV8WDX >X %X$9)X, #1"9S"@K"-"5"5hnnQSQWQW"5"X"^"^"`"f"f"hK*27*;k*IF;'"(*5*=*=fllW\*=*]*5*=*=fllWYW]W]*=*^*d*d*f*l*l*n-<-E-E-G*FLWoVhFil{  }O  mP  GP

#5{#BC !'*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$''557+,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* $==?) 7AIIeAhmQ./36/7LL;E":FjLYcEk1-I%OEzi1n19 :&%/&8$-$] :&#	/9&8$	1$ nnhzXJ/F&G3&N%X%X%Z%^%^de%^%fgG! 1fll* %++C0	1
 #$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!aq	j O > NSs   1	AP	;AP	APAPc                    |dvr||fS |}|dk(  rd}d}n|dk(  rd}d}n	|dk(  rd}d}|d	   d
kD  }|j                         s||fS |j                  t        j                  |      d
   d      }d}|j                  t
        j                  j                         t        j                  d      z
  kD  r,	 | j                  d   |d   z  }t        |z  dz
        dk  rd}|rt        D ]  }	||	xx   z  cc<    || j                  d<   |d   dk7  }
|
j                         r|ddg   j                         }|d   j                         j!                  d|d   j                  d
         |d<   ||
   }|d   |d   z  j#                         }t%        |      d
kD  r%t        j&                  |      dkD  r|dxx   z  cc<   ||fS # t        $ r Y w xY w)N)GBpZAcILAr  GBPr>  r  ZARr  ILSrZ   r   rD   Tr<   r(   regularMarketPricerX   r%   皙?Frb   r\   ri   r:  )r  r   r   r]  r   r   r   r   r~   r   r   rd  rx   r   rG  r[  shiftrE  r   rc  )r   r   rb   	currency2rF   f_volumelast_rowprices_in_subunitsr  r   f_divdivsdiv_pctss                r   r   z"PriceHistory._standardise_currency  s   00x<	uIAIAIA h<>||~x<77288H-a045!==BLL//1I4G4GR4PPQ../CDxPWGXXa{#c)).& % 1
-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$9}/  s   1+F> >	G
	G
c                 p    |j                   r|S | j                  |||      }| j                  ||||      }|S N)r   _fix_unit_switch_fix_unit_random_mixups)r   r   r6   r   r   r  df3s          r   r   zPriceHistory._fix_unit_mixups  s=    88I##B+>**3+wO
r   c                 H   |j                   r|S t        j                         }d|| j                  d}|j                  d   dk(  rd|j
                  vrd|d<   |S |j                  d   dk(  r(|j                  d|       d|j
                  vrd|d<   |S |j                         }|j                  j                  !|j                  j                  |      |_        n9|j                  j                  |k7  r |j                  j                  |      |_        dd	lm} g d
}	|	D 
cg c]  }
|
|j
                  v s|
 }	}
||	   dk(  j                  d      j                         }|j                         r||   }||    }||    }nd }|}|j                  d   dk  r(|j!                  d|       d|j
                  vrd|d<   |S ||	   j                         }|j#                  |dd      }||z  }|dz  j%                         dz  }|dk(  }d|z  }|dz  j%                         dz  }|dk(  |dk(  z  }||z  }|j                         s(|j                  d|       d|j
                  vrd|d<   |S d}t'        t)        |	            D ]!  }|d d |f   }|	|   }
||j*                  ||
f<   # ||k(  j-                         }| j/                  ||||      }||	   j                         |k(  }||	   j                         |k(  j-                         }|dkD  r||	   j                         |k(  |z  }t'        |j                  d         D ]  }||d d f   }|j                         s|j                  |   }dD ]<  }
|	j                  |
      }||   s|j*                  ||
f   dz  |j*                  ||
f<   > d}
|	j                  |
      }||   r0|j*                  |ddgf   j1                         |j*                  ||
f<   d}
|	j                  |
      }||   s|j*                  |ddgf   j3                         |j*                  ||
f<    ||	   j                         |k(  |z  }t'        |j                  d         D ]  }||d d f   }|j                         s|j                  |   }dD ]<  }
|	j                  |
      }||   s|j*                  ||
f   dz  |j*                  ||
f<   > d}
|	j                  |
      }||   r0|j*                  |ddgf   j1                         |j*                  ||
f<   d}
|	j                  |
      }||   s|j*                  |ddgf   j3                         |j*                  ||
f<    ||	   j                         |k(  }|j-                         }n|}||z
  } ||z
  }!| dkD  r*d|  d| d}"|!dkD  r	|"d|! d z  }"|j!                  |"|       ||	   j                         |k(  }t'        t)        |	            D ]A  }|d d |f   }#|#j                         s|	|   }
|j*                  |#|
f   |j*                  |#|
f<   C |\d|j
                  vrd|d<   t5        j6                  ||g      j9                         }t5        j:                  |j                        |_        |S c c}
w )!Nprice-repair-100xr  r   rn   Fr%   z3Cannot check single-row table for 100x price errorsr   )ndimage)rV   rU   rW   rX   rY   ru   z6Insufficient good data for detecting 100x price errors)   r  wrap)r`  mode   r?  r  zNo sporadic 100x errors      )rU   rX   r>  rV   rU   rX   rW         Y@zfixed /z currency unit mixups (z	 crudely))r   r   rw   r   r   rs   r   rG  r[   r   r   r   scipyr  r  rE  rD  median_filterr   r5   r   r   r   r  r+   r   r   r   r   r   )$r   r   r6   r   r   r   rg  r  _ndimageri  r   f_zeroes
df2_zeroesdf_origdf2_datamedianr  ratio_roundedr  r  ratio_rcp_roundedf_rcpf_eitherrf  rk  fin_before
df2_taggedn_afterr  r  n_after_cruder  n_fixed_crudely
report_msgfjs$                                       r   r  z$PriceHistory._fix_unit_random_mixups  s    88I $$& 3H[_[f[fg
88A;!"**,"';I88A;!LLNV`La"**,"';Iggi99<<		--k:CIYY\\[(		,,[9CI 	.A	 )>1Q#++-=Q>	>	Na',,!,4==?<<>XJxi.C(mGJG99Q<1KKPXbKc"**,"';Iy>**,''vF'K6!**,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((*//XwL^,,.#5
y>**,388:Q; Y((*c1Q6A1771:& Lq!tWvvxiil* @A!*A!u*,&&a.4*?Q@
 OOA&a5&)ggcFG3D.D&E&I&I&KCGGCFOOOA&a5&)ggcFG3D.D&E&I&I&KCGGCFO'L* ^,,.#5>E5;;q>* L1a4[vvxiil* AA!*A!u*,&&a.5*@QA
 OOA&a5&)ggcFG3D.D&E&I&I&KCGGCFOOOA&a5&)ggcFG3D.D&E&I&I&KCGGCFO'L* Y002c9J&NN,M#M]*!M1Q;!'!H:5KLJ"/!2)<<
KK
*K5 y>**,3s9~& 	4A!Q$BvvxaL!(RU!3A		4
 !*"4"44*/
;'))S*-.99;Csyy1CI
e ?s   "Z6Zc                 \    | j                   d   dk(  rd}nd}| j                  ||||d      S )Nrb   KWF  r?  T)correct_dividend)r   _fix_prices_sudden_change)r   r   r6   r   r  s        r   r  zPriceHistory._fix_unit_switch  s>     !!*-6AA--b(K]a-bbr   c                    |j                   r|S t        j                         }d|| j                  d}|d   dv }|j	                         }|j                         }|j                  j                  !|j                  j                  |      |_        n9|j                  j                  |k7  r |j                  j                  |      |_        t        D 	cg c]  }	|	|j                  v s|	 }
}	||
   dk(  ||
   j                         z  }d }|rt        j                  |j                  d      d	      j!                  |j                  j"                        }|j%                         |j'                         z  }|j                  |d
kD     }t)        j*                  |j                  j"                  |      }||   }||    }|j                   rd|j                  vrd|d<   |S |j                         }||
   dk(  ||
   j                         z  }|d   j-                         |d   j-                         k7  }| j                  j/                  d      rd }n|d   j                         j-                          |d   j                         j-                          z  }|d   dk(  j-                         }||z  |z  }|sX|d   j1                         }d|j2                  d<   t)        j4                  ||d   z        }|dkD  j-                         |z  }||z  }d|j                  v rA|d   dk7  j-                         }|j                         r|| z  }|j                         rd||<   |j-                         }|j                  d      }|||z  }|j                         s(|j7                  d|       d|j                  vrd|d<   |S |j%                         t9        |
      t9        |      z  k(  r(|j7                  d|       d|j                  vrd|d<   |S |
dgz   }d}t;        t9        |
            D ]  }|
|   }	||j<                  |d d |f   |	f<   ! |||j<                  |df<   |d   j-                         dk(  |d   j                         j-                         z  }||j<                  |j                  d      |z  df<   ||j<                  ||z  df<   ||   j-                         |k(  }|j%                         } |j                  |j                  d         }!| j?                  ||||      }||   j-                         |k(  }|j%                         }"|j                  |j                  d         }#| |"z
  }$|$dkD  rd| j                   d|$ d|  d| d}%|$dk  r4tA        tC        tE        |!      jG                  |#                  }&|%d|& z  }%|j7                  |%|       |8d|j                  vrd|d<   t        jH                  ||g      j	                         }||   j-                         |k(  }'t;        t9        |            D ]A  }(|'d d |(f   })|)j                         s||(   }	|j<                  |)|	f   |j<                  |)|	f<   C |S c c}	w ) Nzprice-repair-zeroesr  rD   rE   ri   r%   ru   rZ  )r         ?rn   FrV   rW   z=XrZ   r   rX   皙?r]   TzNo price=0 errors to repairr   z;No good data for calibration so cannot fix price=0 bad datar  z: fixed r  z value=0 errors in z price datar'   r$   )%r   r   rw   r   r   rG  r[   r   r   r   r   rs   r   r   r   r  rW  r   r   countr   rM  rE  endswithr9  r   rd  r   r   r5   r   r  sortedlistset
differencer   )*r   r   r6   r   r   r   rg  r   r  r   rh  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_rowsri  rf  rk  f_vol_zero_or_nanr  r  
dts_taggedr  dts_not_repairedr  r   dts_repairedr  r  r  s*                                             r   r   zPriceHistory._fix_zeroes  se    88I$$& 5h]a]h]hi
B<:-]]_ggi99<<		--k:CIYY\\[(		,,[9CI!1FAQ#++5EaF
FJ3.#j/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2c*o6J6J6L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6BFL!>? $,,.!%%1%-
 #i/J~~LL6jLI"**,"';IZ3s8!;;LLV^hLi"**,"';I(+	 s:' 	1A1A-0CGGLA&)*	1  +.CGGIx'( ]335:s8}?Q?Q?S?\?\?^_JM  a (+<<hFG:=,,h67^,,.#5
>>#YYz~~1~56
//Xw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vvxaL!#AA		/ 
W Gs   Z&Zc                 U   ||j                   r|S |dv r|S t        j                         }d|| j                  d}|d   dk7  j	                         }|j                         s|j                  d|       |S | j                  d   d	k(  rd
}nd}d }d}	|j                         }|j                         }
d|
j                  vrd|
d<   d}|
d   j                         j	                         }|
|   j                         }|
|    j                         }
|
d   dk7  j	                         }|j                         s|j                  d|       |S t        j                  |      d   }g }t        t        |      dz
  dd      D ]5  }||   }|dk(  r|
j                   |dz
     }|d   |d   z
  }|
d   j                   |   }|dkD  sD||z  dz
  dk  sP|
j"                  |dz
     }|d   |z   }||d   k\  ss||d   k  s|||
j$                  |df<   |
d   j                   |   |
d   j                   |   z  }|d||
d   j                   |dz
     z  z
  z  }|
d   j                   |dz
     |z  |
j$                  |df<   d|
j$                  |df<   d}|j'                  |
j"                  |   j)                                8 t        |      dkD  r/d|D cg c]  }t+        |       c} }|j-                  ||       t        t        |      dz
  dd      D ]  }||   }|
j"                  |   }|
d   j                   |   }|dk(  r0||
d   j                   |dz
     z  }d}d}t/        |
d   j                   |   |
d   j                   |dz
     dz  d      r|
d   j                   |dz
     dz  |
d   j                   |   z
  }||
d   j                   |dz
     dz  z  }d||
d   j                   |dz
     dz  z  z
  } |
d   j                   |dz
     |
d   j                   |dz
     z  }!t/        |!| d      s| |
d   j$                  d |t1        j2                  d      z
   z  |
j$                  d |t1        j2                  d      z
  df<   d|
j$                  d |t1        j2                  d      z
  df<   nyt/        |
d   j                   |   |
d   j                   |dz
     dz  d      r|
d   j                   |dz
     dz  |
d   j                   |   z
  }||
d   j                   |dz
     dz  z  }d||
d   j                   |dz
     dz  z  z
  } |
d   j                   |dz
     |
d   j                   |dz
     z  }!t/        |!| d      s| |
d   j$                  d |t1        j2                  d      z
   z  |
j$                  d |t1        j2                  d      z
  df<   d|
j$                  d |t1        j2                  d      z
  df<   n(|
d   j                   |dz
     |
d   j                   |   z
  }|}"|t        |
      dz
  k  rSt        j4                  |"|
d   j                   |   |
d   j                   |dz      z
  g      }#t        j6                  |#      }$nt        j4                  |"g      }#|"}$t        |
      |z
  dk  r(t9        t        |
      |dz         }%t7        d|%dz
        }&n't7        d|dz
        }&t9        t        |
      |&dz         }%|%|&z
  dk  rt        j:                  }'no|
d   j                   |&|%dz
   j	                         |
d   j                   |&dz   |% j	                         z
  }(t        j<                  t        j>                  |(            }'g })|#dk(  jA                         r|
d    j                   |   dk(  rkt        jB                  |
d    dk(        t        |
      z  }*|dz  d!k  r|)j'                  d"dd#       n|*d$kD  r|d%kD  s|dkD  r|)j'                  d&dd#       n|
d'   j$                  |   }+|+dk(  rd },nO||+z  },|,|kD  r|"|'z
  }-n|$}-|-dkD  r8t?        ||-z
        }t?        |,|-z
        }.|.|z  |k  r|)j'                  d(|.d#       ||	kD  r|$dk  r|)j'                  d&dd#       nt?        ||$z
        }t?        ||z  |$z
        }/|,|/|z  |k  rd|)j'                  d&|/d#       nOt?        |,|z  |$z
        }0|/|0k  r|/|z  |k  r1|)j'                  d&|/d#       n|0|z  |k  r|)j'                  d)|0d#       t        jD                  |'      s|"|'z
  }1|1dkD  rt?        ||1z
        }t?        ||z  |1z
        }/|,|/|z  |k  rd|)j'                  d"|/d#       nOt?        |,|z  |1z
        }0|/|0k  r|/|z  |k  r1|)j'                  d"|/d#       n|0|z  |k  r|)j'                  d*|0d#       ||||d+}2|"|2d,<   |$|2d-<   |
d    j                   |   |2d.<   |'|2d/<   d|2d0<   d|2d1<   d|2d2<   d|2d3<   d|2d4<   t        |)      dkD  r+tG        |)d5 6      })|)d   }3d|2|3d7   jI                  d8d9      <   tK        jL                  |2g      jO                  d:      }4||4}|tK        jP                  ||4g      } ||s|S |j                  D 5cg c]  }5|5jS                  d;      s|5 }6}5|j                         }dd=}7t        t        |            D ]o  }|d>   j                   |   }|j"                  |   }|d<   j                   |   }|dk(  r=||
d   j                   |dz
     z  }|
d   j                   |dz
     |
d   j                   |dz
     z  }8|
d   j                   |   |
d   j                   |   z  }9|9|8k(  }:|8|9z  }!d|!z
  };|;d!|z  k  }<|;d?|z  kD  }=|:rd}<d@|!i}2|:|2dA<   |=|2dB<   |<|2dC<   |2jU                         D ]  \  }>}?|>|vrhtW        |?tX        t        jZ                  f      rd||><   nBtW        |?t\              rd||><   n,tW        |?t^              rd||><   nta        |>|?tc        |?            |?|j$                  ||>f<    r |6g dDz  }6d|dE<   t1        j2                  dFG      }@|d0dCg   j                  dH      }A|Aj                         rUt        |      dkD  rFt        j                  A      d   }B|j"                  |A   }C|BD ]  }|j                   |   }|jd                  }Dd }E|dkD  r|j                   |dz
     }Fn|j                   |dz      }F|d<   |z  Fd<   z  }G|d<   |Fd<   z  }Ht9        t?        |Gdz
        t?        |Hdz
              }It?        D|Fjd                  z
        @k  r<FdE   s7Idk  r2Fjd                  Cv r"|d,   }"Fd,   }J|"dI|Jz  kD  rFjd                  }EnD}EnD}EEsd|j$                  EdEf<   |6D ]"  }5|5|j                  v sd|j$                  E|5f<   $  dJ}K|j                         }t        dt        |            D ]  }|j                   |   }|jd                  }Dd}Ld}M|d,   }"|j                   |dz
     }N|d<   |Nd<   z  }Ot?        |D|Njd                  z
        @k  r=NdE   s8|dE   s3t?        Odz
        Kk  r"|d,   j                   |dz
     }P|"dI|Pz  kD  rd}Mnd}LMsLsLrDn|j"                  |dz
     }Qd|j$                  |QdEf<   |6D ]"  }5|5|j                  v sd|j$                  Q|5f<   $  |6j'                  dE       dE|j                  v r|dE   }R|R||6D 5cg c]
  }5|5dEk7  s	|5 c}5   j                  dH       z  }R|Rj                         r,|j"                  R   }SdK|SD cg c]  }t+        |j)                                c} }|j-                  ||       |j"                  R   }T|TD ]  }|t1        j2                  d      z
  }U|
j$                  d |Udfxx   |d@   j$                  |   z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |d@   j$                  |   z  cc<   d|j$                  d |Udf<   d|
j$                  |df<   d}|jg                  |      } d|j$                  RdEf<   |jg                  dEdH      }dE|6v r|6ji                  dE       ||6   j                         j                         st        |      dkD  rt        dt        |            D ]  }dL\  }V}W|dkD  r(|dM   j                   |dz
     |dM   j                   |   z  }V|t        |      dz
  k  r(|dM   j                   |dz      |dM   j                   |   z  }WVxs W}VWxs V}Wt?        V|z
        dNk  st?        W|z
        dNk  s|j"                  |   }Dd|j$                  |Dd1f<    ||6   j                         j                         s|r|
S |S t        t        |            D ]  }|d>   j                   |   }|j"                  |   }|d<   j                   |   }|dk(  r=||
d   j                   |dz
     z  }|t1        j2                  dOG      z   }Xtk        jl                  |
j"                  |X      }Yt9        |Yt        |
      dz
        }Yt7        d|dPz
        }Z|
d   j                   ||Ydz    jo                         }[|[dkD  j	                         |[dQk  j	                         z  }\|\j                         r0|t        j                  \      d   d   z   dz
  }Y|
j"                  |Y   }Xd}]d}^tJ        jp                  }_YZkD  r|
j                   ZYdz    j                         }`|`d   |`d   z  |`dR<   |`dR   |`d   z  |`dS<   |`d   j                   dd  j	                         |`d   j                   d d j	                         z
  }at        j&                  dg|a      }a|a|`dT<   |`dS   j                   dd  j	                         |`d   j                   d d j	                         z
  }bt        j&                  dg|b      }b|b|`dU<   |`dTdUg   }a|dVkD  r|dk  r|`dR   j                   d   z  }cadU   |cdWz  kD  }A|Aj                         rt        j                  A      d   }B|BD ]|  }dadU   j                   |d   }e|edX|adT   j                   |d   z  kD  s/dadU   z  ez  }f|fdYk\  }g|
d'   j$                  |   }+|d2   j$                  |   }h|+dk(  shsgj                         rt        j                  g      d   }it        |i      dkD  rt        jr                  t        i            }jt        t        |i            D ]S  }i|   }dfj"                  |d   }k|k|k  rj|xx   |kz
  jt                  z  cc<   7j|xx   d!k|z
  jt                  z  z  cc<   U t        jv                  j      }i|   }lnid   }ld}^fj"                  l   }_ n%edZcz  kD  se`dR   dk  j                         rd}] n |j$                  |dCf   }<]r|<rd}]i }2]|2d[<   ^|2d\<   _|2d]<   |]r|
d'   j$                  |   }+|+dk7  r||+z  },|,|kD  r*|d/   j$                  |   }'|d,   j$                  |   }"|"|'z
  }-n|d-   j$                  |   }$|$}-|-dkD  r5t?        ||-z
        }t?        |,|-z
        }.|.|d^z  k  rd|j$                  |d2f<   |2jU                         D ]  \  }>}?|>|vrtW        |?tX        t        jZ                  f      rd||><   natW        |?t\              rd||><   nKtW        |?t^              rd||><   n5|>d]k(  rtK        jx                  d_`      ||><   nta        |>|?tc        |?            |?|j$                  ||>f<    d0|j                  v sd\|j                  v sd|j$                  |d\   j	                         d0f<    |6d[d\gz  }6|6D ])  }5||5   j                         r|jg                  |5dH      }+ d]}5|5|j                  v r4||5   j                         jA                         r|jg                  |5dH      }|6D 5cg c]  }5|5|j                  v s|5 }6}5|j{                  dM      } |7|dMa      |db<   |db   j}                         }m|mD ]  }n|db   |nk(  }o||o   j                         }pt        |p      }q|pdMg   j                         }rt        |r      dkD  rrdM   j"                  j                         j                         j                  j                         dcz  }s|sj                   d   |sj$                  |sj"                  d   <   |s|rdd<   |rdM   |rdd   z  |rde<   |6D ]7  }5p|5   j	                         j                         r%pjg                  |5dH      }p9 |6D 5cg c]  }5|5pj                  v s|5 }t}5|tD ]  }5p|5   j	                         }ut        jB                  |u      }v|vdqfv r3vqz  }w|5d0k(  rd}xd%}yd\pj                  v rp|5   |pd\   k(  jA                         rjd[pj                  v rp|5   |p|5   |pd[   z  k(  jA                         rudf}xpd[   j	                         }zt        jB                  |z      }qt        jB                  u|z         }v|v|qz  }w|w|xkD  r'o|d[   j	                         z  }Ad|j$                  |A|5f<   dCpj                  v r5pdC   jA                         r"pd/   o   u   dk(  jA                         rdg}yn/d%}xn,d[pj                  v rp|5   |pd[   k(  jA                         rdf}xndf}ywxk\  rdd|j$                  o|5f<   d\|j                  v rCd|j$                  od\f<   tJ        jp                  |j$                  |od]f<   ||o   j                         }pwyk  rd|j$                  o|5f<   |5d1k(  rFd}xd!}ydBpj                  vrdh}xdf}ywxk\  rd|j$                  o|5f<   /wyk  rd|j$                  o|5f<   G|5dAk(  rp|5   j                   d   rvdk(  re|5dCk(  rl|5d[k(  rs|5dEk(  r| j                  div r|5d\k(  r|5djv s  d0|6v rdC|6v rdk}5d||5<   t        t        |            D ]u  }|j"                  |   }|j                   |   }4|4d0   s'|4dC   s-|4d<   }{|4dM   }||{||z  }}|4d@   }~d|~z
  |}z  };|{|;z  }Ot?        |O||z  z
        |k  }|sed|j$                  ||5f<   w ||5   j                         s|jg                  |5dH      }n|6j'                  |5       d3|j                  v rWdlD ].  }5|5|v r||5   |d3   z  ||5<   |d3   ||5<   |6j'                  |5       0 |jg                  d3dH      }|6ji                  d3       |j                         }|||6   j                  dH         }|j                   r3|j                   s%tK        jP                  |
|g      j                         }
|
S i }t        |db   j}                               D ]  }n||db   |nk(     }p|pj                  dm      }pd|pdn<   t        t        |p      dz
  dd      D ]g  }pj                   |   }4|4jd                  }|t1        j2                  d      z
  }UdA|4v xr |4dA   }dC|4v xr |4dC   }dB|4v xr |4dB   }d[|4v xr |4d[   }d1|4v xr |4d1   }d0|4v xr |4d0   }d2|4v xr |4d2   }d\|4v xr |4d\   }^dk|4v xr |4dk   }t        jB                  |6D 5cg c]  }5|5|4v s|4|5    c}5      }rrdk(  rd}dz  }^r4rd}dpj$                  |d0f<   dz  }rd}dpj$                  |dCf<   dz  }rrd}dpj$                  |d[f<   dz  }dk(  rsrrdondp}>j                  |>g       j'                  |       d|4dM   z
  |4d@   z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   rdq}>|}|4d<   |z  }||
j$                  |df<   |>drz  }>dd|4d@   z
  |z  z
  }||4d@   z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   j                  |>g       j'                  |       rds}>d|z  }|4d<   |z  }||
j$                  |df<   |4dM   |z  }d|z
  }|4d@   }!|>drz  }>||!z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   j                  |>g       j'                  |       nrdt}>j                  |>g       j'                  |       d|4dM   z
  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   
^r:du}>j                  |>g       j'                  |       d|4d@   z  }|
j$                  d Udfxx   |z  cc<   |j$                  d |Udfxx   |z  cc<   |4d]   }_|
d   j                   |4d>      }|4d<   }d||z  z
  }|_t1        j2                  d      z
  }|
j$                  d |dfxx   |z  cc<   |j$                  d |dfxx   |z  cc<   |
j$                  |_dfxx   |z  cc<   d|
j$                  |df<   d|
j$                  d |Udf<   d|j$                  d |Udf<   dpj$                  |dnf<   Grd|4dM   z
  }|4d@   }!t?        ||!z  dz
        dVkD  ry>drz  }>|!z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   |jg                  |      }pjg                  |      }psdv}>d|
d'   j$                  |   z  }|4d<   |z  }||
j$                  |df<   |4dM   |z  }d|z
  }|4d@   }!|>drz  }>||!z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   j                  |>g       j'                  |       dk(  rrrdw}>j                  |>g       j'                  |       d|4dM   |z  z
  }|
j$                  |dfxx   |z  cc<   |
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   rcra|4d<   }||4dM   z  }}|4d@   }~|
j$                  |dfxx   |z  cc<   d&}>j                  |>g       j'                  |       dpj$                  |dnf<   rrdx}>j                  |>g       j'                  |       |4dM   |z  }d|z
  }||4d@   z  }|
j$                  |dfxx   |z  cc<   |
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   ss|
j$                  |dfxx   |z  cc<   dq}>dy|4v r{|4dy   rvd }d|4dM   |z  z
  }||4d@   z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   |>dzz  }>j                  |>g       j'                  |       dpj$                  |dnf<   	d{k(  s	rrrd|}>d|z  d|
d'   j$                  |   z  z  }|4d<   |z  }||
j$                  |df<   |4dM   |z  }d|z
  }|4d@   }!|>drz  }>||!z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   dpj$                  |dnf<   j                  |>g       j'                  |       
s
s
s
|4d<   }||4dM   z  }}|4d@   }~d}}>||z  }||}z  }||
j$                  |df<   d|z
  }||~z  }|
j$                  d Udfxx   |z  cc<   d|
j$                  d |Udf<   |j$                  d |Udfxx   |z  cc<   d|j$                  d |Udf<   j                  |>g       j'                  |       dpj$                  |dnf<   j pj                   s D ]N  }>d~|> dtG        |>         D cg c]  }t+        |j)                                c} }|j-                  ||       P dR|
j                  v rta        d      |j                   s%tK        jP                  |
|g      j                         }
|
S c c}w c c}5w c c}5w c c}w c c}5w c c}5w c c}5w c c}w )N)r!   r"   r#   1yzdiv-adjust-repair-badr  r\   ri   zNo dividends to checkr   rb   r  r  r?  gQ?rn   FrX   r   r%   rD   rW   r>  rV   rY   r  Tz'Repaired double-adjustment on div days r"  g?)rel_tol)secondsr'      rZ   r  zdiv-too-small)stater9  g      ?g      ?zdiv-too-bigr]   zdiv-pre-splitzdiv-too-big-and-pre-splitzdiv-too-small-and-pre-split)r   r  div%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                     | d   S )Nr9   )r   s    r   <lambda>z2PriceHistory._fix_bad_div_adjust.<locals>.<lambda>  s
    AfI r   )keyr	  -_r   div_r
  c                 D   t        |       }| j                  |      }g }|j                  d   g}||   j                  d   g}t	        d|      D ]x  }|j                  |   }	||   j                  |   }
|
t        j                  |      z  |k  r#|j                  |	       |j                  |
       b|j                  |       |	g}|
g}z |j                  |       t        j                  dg|z        }d}t        |      D ]  \  }}t        |      }|||||z    ||z  } |S )Nr   r%   rD   )
r   sort_valuesr[   r   r5   r   meanr   array	enumerate)r   column	thresholdr  	sorted_dfclusterscurrent_dtscurrents_valsrk  r{  r
  cluster_labelsr,  clusterncs                  r   cluster_dividendsz;PriceHistory._fix_bad_div_adjust.<locals>.cluster_dividends  s6   BAv.IH$??1-.K&v.33A67M1a[ *__Q'',,Q/"''-00I=&&r*!((- OOK0#%$K%(EM* OOK(XXrd1f-NC'1 
7\-.s3r6*r	 "!r   r  
   zpresent adjadj_missingadj_exceeds_divdiv_exceeds_adj)r+  r,  r-  phantom   r(   ru         ?g{Gz?zRemoving phantom div(s): NNr  r  #      gAdjzAdj LowdeltaadjDeltar  g333333?gjt?皙?g(\?adj_exceeds_pricesdiv_date_wrongdiv_true_dateg?zdatetime64[ns, UTC])dtype)r   r'  g    ~~Ar   zavg yr yieldr  gUUUUUU?gtE]t?)zKAP.ILSAND)r  r  adj_too_small)r  r  	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 r$   z"Adj" has snuck in df2)r
  r4  )Er   r   rw   r   rE  r  r   r   r   rG  rs   r   r   r]  r5   r   r   r[   r   r   r   ry   rD  r   r~   r   r  r+   r   rZ  r  rd  r   r   r_  r  replacer   r   	set_indexr   
startswithitemsr   boolbool_r   ra  rx   rA  r   r   removebisectbisect_left
pct_changeNaTzerosr)   argminr   r  unique	to_seriesr9  r{  total_secondsr  
setdefault)r   r   r6   rb   r   rg  r  currency_dividediv_status_dftoo_big_check_thresholdr  df_modifiedf_nandf2_nandiv_indicesfixed_datesrk  div_idxprices_beforer9  r
  	dt_before	new_close	adj_afteradjr  r   r{  div_pct#div_too_small_improvement_threshold!div_too_big_improvement_thresholddrop_c2ltrue_adjustpresent_adjr   dropsr  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_pricesr9  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,  r8  r  r  r  r=  n_failed_checksadj_correction
correctioncorrect_div
target_adjtarget_div_pctclose_beforetrue_adjenddt2r  div_truepct_trueadj_corrects                                                                                                                                                         r   r   z PriceHistory._fix_bad_div_adjust  s0    :I22I$$& 7_c_j_jk
KC'113yy{LL0
LCI!!*-6"O!O"']]_ggickk)$C G!!#,,.e*//#5&k [!S(224yy{LL0
LCIhhuoa( s;')2r2 	BA!!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'	B( {a;[<YSV<Y;Z[CKK:K. s;')2r2 ]	@A!!nG7#Bk"''0C!|CL--gai88G 34/01-s5zw/W1B1B7191Mc1Q]b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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 #');";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$ # "		=#*> ?{]	@~  I*22Kall66J!K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+0a(#As++,a(#Au-+.a( (!DG44+,!!"a%(-A,	-Z 	GG#(i &/&9&9r&B#=*;<=AAqAI557s=)A-hhqk!nG(..q1L E#((+!
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)&;<# E 5 55?DM--j!m<E3EB  %002q#m,- 	E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!!.)";< EAM111?D)).!*;<E#	E( 	i  ---%i0I!m4Y1!y.Q4Y&Z&^&^de&^&f%fgI}}'--i81G2Tb3rwwy>2T1U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 =!A%q#m"45 
JA$.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
J V$((*..0
	 s=)* @	e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uuw"$((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]3588<L3Ma3PL'*<'81'<46HHS=N4O	16s<7H1I )RA2>q/C28,,s2CC/2Rx09!C0M09!SVMM@Q0Q)R -/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+0a(#As++,a(#Au-+.a(o-+-99;P+Qa('!DG44+,!!"a%(-  5 55:JmNcNc:c_d!!-0@"A"J"J"Lm"[\A@	eD 	')9:: 	>A #'') - 2 211 2 =	> %%%-*:*?*?*A*E*E*G)..qq.9M#BqM,A,A'A!BB
 &11#6#4]3#Oi  $I.557 i	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( 6qz**,002%ll11l5G6 *0HA13GaHNH# Y ,,.aV#!A:%%(N%)N'7??:
gVfNg@g?l?l?n +w>GAJSZ[\S]`gh|`}S}D~  DD  DD  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-@gajRYZnRoFoEtEtEv *- *->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Y!i	V F"'8F'BA$M!3}-. 8"((+#((+}%#.?*@ #E
Ic(C%cME"%m"4K)*;(=%%&77E'*5//2Q+R'SVe'e$'37))"a%08 !#'') - 2 211 2 =a &-*?*??5 %%'4Q'7-Hc:d'dM!$'45P'QM!$MM!$% *../JQR.SMMM56%002 &mF&;&?&?Q&?&GH==iig/::<J i0779: S	C#M)$<c$ABG((5(9G %GH3w<>2r2 K9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"$&&&)MQA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K9Z }}gS	j  	/AaSVKPQN=S#TrC	N#T"UVCKK:K.	/ CKK455}}))S'N+668C
_ =ZJ Lj 5Z 3Uf C0 Iz *NB $Usb   Bj)5Bj.Bj.
Bj3Bj3 Bj8b Bj=bBj=gBkg/Bk|<	Bk}Bkh# Bkc           
         |j                   r|S t        j                         }d|| j                  d}|dv }|s|S |j	                         }|d   j                         dk7  }|j                         s|j                  d       |S |j                  dt        |d   |   j                                |       d	|j                  vrd
|d	<   t        j                  |      d   D ]o  }|j                  |   }	|j                  |	df   }
|	|j                  d   k(  r7|dv r|dz  }n|dz  }t        |j                   d   |      }|j"                  d|dz    }|j                  d| d|	j%                          d|
d|       |j                  d|j                  d   j%                          d|j                  d   j%                          |       | j'                  ||||
dd      }||j                   d   dz
  k(  r|}|j"                  |dz   d  }|j                   r|j	                         }Kt)        j*                  |j	                         |g      }r |S )Nzsplit-repairr  r*   r!   r"   r#   r]   r   z%price-repair-split: No splits in datazSplits: r   rn   Fr!   r"   r#   r%   r%  z
split_idx=z
 split_dt=z split=.4fzdf dt range: rK   rD   T)correct_volumer  )r   r   rw   r   r   rE  r  r   ry   to_dictrs   r   r]  r[   r   r   r   r   r   r  r   r   )r   r   r6   r   r   rg  interdaysplit_f	split_idxsplit_dtr|   
cutoff_idxdf_pre_splitdf_pre_split_repaireddf_post_cutoffs                  r   r   z"PriceHistory._fix_bad_stock_splits	  so    88I$$& .xVZVaVab
::I]]_^$--/14{{}LL@AIxB~$6w$?$G$G$I JKLT^_bjj(#B{O'*1- 	YIxx	*HFF8^34E288A;& 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<QY[fhm  C  VZ$B  %[!RXXa[]**!#A!7!''.99;B$9$D$D$F#WXB1	Y2 	r   c                 V3  h |j                   r|S t        j                         }d|| j                  d}|hdhz  }	|dv }
|dv }|dv r
d}d|d	<   d }nid
}d|d	<   |d   j	                         dk7  }|j
                  |   j                         t        j                  j                  d      z
  j                         }|j                  d| d|ddd|z  dd|       g d}dhcxk  rdk  rn n|j                  d|       |S |j                         j                  d      }|j
                  j                  !|j
                  j                  |      |_        n9|j
                  j                  |k7  r |j
                  j                  |      |_        |j                   d   }|d   dk(  }|||   j#                         j%                  d      z  }|j'                         xr t)        j*                  |      d   d   dk(  }| }t)        j*                  |t)        j,                  |d      z        d   }t/        |      dk(  rt)        j*                  |      d   }t/        |      dk(  rd }nt1        |d         }d| d | }|$|d!|j
                  |   j                          dz  }|j                  ||       |j3                  t4        j6                        rQ|j                         }|j9                  g d"dd#$      }d%g}|j9                  |D cg c]	  }||vs| c}dd#$      }ng }|
r<|d&k7  r7hd'vr3t)        j:                  |d(fd      }|d)d%g   j	                         }|dk(  }n0t)        j:                  |d*fd      }||   j	                         }|dk(  }|j'                         rd||<   |d%   dk(  }|j'                         rRt)        j<                  t/        |            }|d+   j	                         |    |d%   j	                         |    z  || <   n'|d+   j	                         |d%   j	                         z  }|j>                  }|t(        j@                  k(  r|jC                  d,      }tE        |j                   d         D ]U  }|d d |fxx   |z  cc<   |j3                  t4        j6                        s4||   jF                  v sF|||   xx   |z  cc<   W |t(        j@                  k(  r|jC                  d-      }|dd f   |d d.f   z  |dd  |t)        j,                  |dd      z  } | j'                         rd|| <   |
r|d&k7  rt)        jH                  |d      }!nt)        jJ                  |d      }!t)        jL                  |!      }"|"j'                         rd|!|"<   |j3                  t4        j6                        r+|!d/<   |d/   jO                  d(      jC                  d0      |d/<   tQ        h|	      }#t)        jP                  |!      |#dz
  d1z  dz   k  r=t)        j                  |!      d|#dz
  d1z  dz   z  kD  r|j                  d2| d3|       |S t)        jR                  |!d4d5g      \  }$}%|%|$z
  }&|$d6|&z  z
  }'|%d6|&z  z   }(|!|'k\  |!|(k  z  }t)        jT                  |!|         })t)        jV                  |!|         }*|*|)z  }+|j                  d7|)d8d9|*dd!|+d:z  d;d<|       d=|+z  },|
r|d&k7  r|,d>z  },|d?v r|,d(z  },tQ        h|	      d|,z   k  r0|j                  d@|       |j                  dA|+ddB|,d|       |S |!|	z  }-tQ        h|	      }#|j                  dC|#dDdE|,d|       |#dz   |,z   d1z  }.|j                  dF|.dD|       dG|jF                  vrd|dG<   |
r|d&k7  rdH}/nd}/|/rPt)        j:                  |d*fd      }||   jY                  dd      j	                         }|dd f   |d d.f   z  |dd  n|!}||	z  }-|d|.z  k  }0||.kD  }1t/        |1j                         }2|2dk(  r|1n|1j'                  d      }3|3j'                         rIt)        j*                  |3      d   D ]-  }4|d   jZ                  |4   }5|5dk(  rdn|d   jZ                  |4dz
     |5z  }6|rJ|4dz   t/        |      k  r9|d   jZ                  |4dz      }7|7dkD  rtQ        |6|d   jZ                  |4   |7z        }6|6d=kD  stQ        d|4dIz
        }8t        t/        |      |4dIz         }9|d   jZ                  |8|9 dk7  j'                         r|d   jZ                  |8|4dz
   jU                         }:t)        jL                  |:      s|:dkD  r
|5|:z  dJk  r|2dk(  rd|1|4<   %d|1|4d d f<   0 |0|1z  }|j3                  t4        j6                        r|/s6|-dK<   |0|dL<   |1|dM<   |dK   jO                  d(      jC                  d0      |dK<   n|tE        t/        |            D ]e  }||   }||v s|-d d |f   |dNz   <   ||dNz      jO                  d(      jC                  d0      ||dNz   <   |0d d |f   ||dOz   <   |1d d |f   ||dPz   <   g |j'                         s|j                  d2| d3|       |S dQ};|d   j	                         dk7  }<|dv r|<j'                         rt)        j*                  |<      d   }=t)        j*                  |      d   }>t/        |=      rt/        |>      sy |>d d d f   |=z
  }?|?d.z  }?|?dkD  }@|@j'                         r#|?@   j                         }At        j\                  |      |Az  }Bt_        |Bt        j                  j                        r!t        j                  j                  |;R      }.nta        jb                  |;R      }.t_        |.t        j                  j                        r]t_        Bt        j                  j                        r9t)        j*                  |?Ak(        d   d   }C|j
                  |C   }D|DBz   |D|.z   k  }EnB|.k  }EEr|je                  dS|       |S |j3                  t4        j6                        r<tg        tE        dj                   d               |dT<   |j                   d   dz
  |dT   z
  |dU<   |/rN||D cg c]  }|dOz   	 c}   j'                  d      ||D cg c]  }|dPz   	 c}   j'                  d      z  }Fn|dL   |dM   z  }FFt)        j,                  |Fd.      z  t)        j,                  |Fd      z  t)        j,                  |FdV      z  t)        j,                  |Fd(      z  }Fti        jj                  dWd dXdIdYdZ      5  |j                  d[tm        |F         z          d d d        hfd\}G|.|j                   d   dz
  |z
  }H|j                  d]| d^|H |       |/rJt)        j:                  |d      }I|r,t)        j:                  |d      }Jt)        j:                  |d      }Kg d_}LtE        t/        |            D ]o  }||   }t)        j*                  |      d   d   }M|rp|m|Mk\  rg|d d |f   }N|1d d |f   }O|0d d |f   }P G|N|d  |O|d  |P|d        }Qt/        |Q      dkD  r5tE        t/        Q            D ]  }4Q|4   }-|-d   |z   |-d   |z   |-d(   f|Q|4<     t)        jn                  t)        j,                  Od.            }Rt)        jn                  t)        j,                  Pd.            }S|S|Rz  }T G|THd  |S|Hd  |R|Hd        }Ut/        |U      dkD  rjtE        t/        U            D ]  }4U|4   }-|-d   Hz   |-d   |Hz   |-d(   f|U|4<     tE        t/        U            D ]  }4U|4   }-||-d   z
  ||-d   z
  |-d(   f|U|4<     Q}V|Vjq                  U       n G|d d |f   |1d d |f   |0d d |f         }V|j                  d`| daV |       |tE        t/        V      dz
  d.d.      D ]n  }4V|4   }-|j
                  |-d      j                         |k  s,|j                  db| dc|j
                  |-d       dd|j
                  |-d   dz
      de|       V|4= p t/        V      dkD  skVL|<   r ts        LD Wcg c]  }W|Wdnd
 c}W      }X|Xdk(  rnXdk(  rztE        t/        |            D 4cg c]  }4L|4   r|4nd. }Y}4t)        j*                  t)        jt                  |Y      d.k7        d   d   }C||C   }Z|j                  df| dg|Z dh|       ng di}[tE        t/        |            D ]  }||   }L|   }V|Vg }VVD ]m  }-|-d(   djk(  rh}\|	}]n|	}\h}]|
rRdk| dl| dm|j
                  |-d   dz
     j                          dn|j
                  |-d      j                          do\d
}^n5dk| dl| dm|j
                  |-d   dz
      dn|j
                  |-d       do\d
}^|j                  ^|       [|xx   |-d   |-d   z
  z  cc<   |jZ                  |-d   |-d   |jF                  jw                  |      fxx   \z  cc<   |d%k(  r:|jZ                  |-d   |-d   |jF                  jw                  d+      fxx   \z  cc<   |r!|d)k(  rdHJ|-d   |-d    n|d%k(  rdHK|-d   |-d    dHI|-d   |-d    p  ts        [      dkD  rWdp}_tE        t/        |            D ]&  }[|   dk7  s_dpk7  r_dqz  }__||    dr[|    dsz  }_( dt_ }^|je                  |^|       |rJKz  }`t)        jx                  |J|K      }a|`j'                         r@|jz                  `df   ]z  jO                         jC                  d-      |jz                  |`df<   aj'                         rC|jz                  adf   d1z  ]z  jO                         jC                  d-      |jz                  |adf<   dH|jz                  IdGf<   nd}[t)        j*                  |      d   d   }M|rU|R|Mk\  rL G||d  |1|d  |0|d        }Qt/        |Q      dkD  r5tE        t/        Q            D ]  }4Q|4   }-|-d   |z   |-d   |z   |-d(   f|Q|4<     t)        jn                  t)        j,                  |1d.            }bt)        jn                  t)        j,                  |0d.            }c|c|bz  }d G|dHd  |c|Hd  |b|Hd        }Ut/        |U      dkD  rjtE        t/        U            D ]  }4U|4   }-|-d   Hz   |-d   |Hz   |-d(   f|U|4<     tE        t/        U            D ]  }4U|4   }-||-d   z
  ||-d   z
  |-d(   f|U|4<     Q}V|Vjq                  U       n
 G||1|0      }V|tE        t/        V      dz
  d.d.      D ]k  }4V|4   }-|j
                  |-d      j                         |k  s,|j                  du|j
                  |-d       dd|j
                  |-d   dz
      de|       V|4= m VD ]  }-|-d(   djk(  rh}\|	}]n|	}\h}]|j                  dv|- dw\ |       dxD ]<  }|jZ                  |-d   |-d   |jF                  jw                  |      fxx   \z  cc<   > |r:|jZ                  |-d   |-d   |jF                  jw                  dy      fxx   \z  cc<   |rk|jF                  jw                  d      }e|jZ                  |-d   |-d   |ef   ]z  jO                         jC                  d-      |jZ                  |-d   |-d   |ef<   dH|jZ                  |-d   |-d   |jF                  jw                  dG      f<   |-d   |-d   dz
  k(  rB|
r'dk| dz|j
                  |-d      j                          }^nwdk| dz|j
                  |-d       }^n^|j
                  |-d   dz
     }f|j
                  |-d      }g|
r)dk| d{fj                          d|gj                          d}}^ndk| d{f d|g d}}^|j                  ^|       [|-d   |-d   z
  z  }[ t/        V      d(k  rTd~}^VD ]L  }-^d|j
                  |-d   dz
     j                          d||j
                  |-d      j                          z  }^N ndt[ ds}^|je                  ^|       |r|d   j#                         }"|"j'                         rG|d   |"    jO                  d      jC                  d-      |jz                  |" df<   |j                         S |d   jO                  d      jC                  d-      |d<   |j                         S c c}w c c}w c c}w # 1 sw Y   xY wc c}Ww c c}4w )Nzprice-change-repairr  r  r  r  )r  r>  z
100x errorr  r  z	bad splitzprice-repair-splitr]   ri   r%   r#  z
start_min=z change=r  z (rcp=rL   r   )rU   rV   rW   rX   r7  g      ?z(Split ratio too close to 1. Won't repairFr>  r   rZ   ru   zappears_suspended=z, idx_latest_active=rI   )rY   rZ   r\   r]   rn   rr   )rv   rt   rX   r*   )r  r?  gMbP?r"  rU   r'   rY   ra  r   rD   z1D %ry   r  zNo z
s detected   K   r0  z+Estimation of true 1D change stats: mean = z.2fz, StdDev = r  z.1fz
% 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=rn   Tr*  g       @rdownup_r_down_upr<   r(   z<100x changes are too soon after stock split events, abortingrk  i_revzdisplay.max_rowszdisplay.max_columnszdisplay.widthr  z!price-repair-split: my workings:
c                 d   | d   rNt        j                  |       } d| d<   t        j                  |      }d|d<   t        j                  |      }d|d<   | j                         sg S t        j                  |       d   }g }t	        t        |      dz
        D ]F  }|dz  dk(  sdkD  r|||      rdnd}n|||      rdnd}|j                  ||   ||dz      |f       H t        |      dz  dk7  r>dkD  r||d      rdnd}n||d      rdnd}|j                  |d   t        |       |f       |S )	Nr   Fr%   r"  r  r|   z	1.0/splitrD   )r   rG  r  r]  r5   r   r   )r  f_upf_downtrue_indicesrangesrk  r^  r|   s          r   map_signals_to_rangeszEPriceHistory._fix_prices_sudden_change.<locals>.map_signals_to_rangesk
  sH   tGGAJ!wwt}Q!q	557	88A;q>LF3|,q01 Oq5A:s{)/Q)@gk-3LO-Dk'MM<?LQ4G"MNO < 1$)3;%+L,<%=';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=rH   rS   =r  zCorrected: zPruning range zrange=z m=)rU   rV   rW   rX   rY   r\   z on interval z across intervals rK   z (inclusive)z
Corrected:rJ   )>r   r   rw   r   rE  r[   r   rH  rI  r   r   rG  r   r   r   r   r   r   r   r  r   r]  rollr   r   isEnabledForrQ  DEBUGr   fullonesr;  r   r   r5   rs   rc  r  r_  r   r+   
percentiler  stdr@  r   r   r   r~   r   rD  r  r   option_contextry   flipextendr   r  re  logical_xorr   )ir   r   r6   r   changer  r  r   rg  	split_rcpr  multidayfix_type	start_minr  OHLCr  r  f_no_activityappears_suspendedf_activeidx_latest_activelog_msgdf_debug
debug_colsr   _1d_change_x
price_dataf_zeror^  df_dtyper  f_zero_num_denom_1d_change_minxf_na	split_maxq1q3iqrlower_boundupper_boundavgsdsd_pctlargest_change_pctr  r!  correct_columns_individuallyr  r  
f_up_ndimsf_up_shiftsrk  rz  vol_change_pctnext_vlookback	lookaheadavg_vol_afterthreshold_daysf_splits	indices_A	indices_Bgapsf_posgap_mingap_tdr  r{  within_thresholdr  r  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_afterr  r  r  idxscoln_correctedrF   m_rcpr   counts_prettyf_open_and_closed_fixedf_open_xor_closed_fixed
f_rev_downf_rev_upf_revcol_locr   r   r|   si                                                                                                           @r   r  z&PriceHistory._fix_prices_sudden_changeQ	  s   88I$$& 5h]a]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/ 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/w}}-xxzH}}%fmnw}  AH!J}}%MA*9La%MTU^f}gHJ D(U:M-M 77Aq63/LfW-.779J3&F77Aq63/LT++-J3&F::<!$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""7==17h...T!W%,%		-
 rxx#**51J%abc+j".??QR!BGGFAA$>>!-0L)*D( jjA>O !ii1=Oxx(88:$'OD!w}}-.HV'/55a8??FHV y)	66/"i!ms%:Q%>>266/CZ]`enqrervydy|}d}]~C~LL3xj
3:LFI R9B2g39n39n+;0NOggoa()VVOA&'cB3s);WYZ]V^^`aghmamnq`rr|}  FP  	Q ZD(!#>)"a'"ui 3);#;;LLYakLlLL9VCL0GHZ[^G_`hrLsI i'y)	z)C0DEWX[D\]eop_'99S@	z)C1Dckk)$CD( ,0(+0('77Aq63/LT**34==?J)!"#/*SbST2CCL*L9$i/ i'_
(!mdq1A??XXk*1- *M&&q)&'1f#h-2D2DQqS2IA2M1s3x ]//!4Fz),^S]=O=OPQ=RU[=[)\!A%  #1ad|H #CHad 3IN+00)DcINNP !$'M$6$6x!$D$I$I$KM88M2}q7HQ}__bMb !!Q"'Q$)QqS	1*2 TMw}}-/ !#) !% ( 3 3A 6 = =e Ds4y) 9AQAJ-.q!tWT*-5a$h-?-E-Ea-H-O-OPU-VT*06q!tW-.21a4jU+9 uuw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 ) 7 7 E E> E ZI ) 3 3 HIi)@)@)N)NOT^_egpg~g~  hM  hM  UN((4=1!4Q7C3B(*VY'G$'-	'9$#KK ^fpKqIw}}- q(..*;!<=HSM (q 1! 3hsm CHW+#
$C1QwY$CDHHaHPS[nx\yij]^_d]d\ySzS~S~  EFS~  TG  G#F+htn<"''(B"77"''(A:NNQSQXQXYaceQffikipipqy{|i}}H""#5t=RTVXgimn bFXV^M_I``ab	B ($&HHQK!O6G$G!LL-.?-@@XYnXop  yCL  D'''!U+K  "wwq%0 "5 1":3t9% -4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!: jA -a 0A01!7H0H!A$QbJbdefgdh/iM!,j #%''"''%*<"=K "(< =I&4F#8@U@V9WYbcxcyYz  }H  I^  I_  }`  $aL<(1,!&s<'8!9 qA ,QA/0t6K/KQqTTiMiklmnko.pLOq "'s<'8!9 EA ,QA/01vq1vqt.DLOE +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'*[-4^ <OPqam2PQEz!EJ3t9EUV03;VVhhrxx~34Q7:3iz(3LSEQyz  CM  N (s4y) 6AQA03F~!## 6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.-668 {#a'$&M"3t9- L&q>Q.,2 - 5)Qy+a.9I-KKM	L
 (7CKK:K6*6*F'*,..}*U'*..0BE''JackJkBlotBtA{A{A}  BE  BE  FK  BLCGG3X=>*..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 f)!,,-aD3D,DadM^F^`abc`d+ea(f  WWRWWT2%67
7727762#67 :-4U;P;Q5RT\]r]sTt  wA  BW  BX  wY   Z|$q("3|#45 m(O+,Q42G+G1PeIeghijgk*lQm #3|#45 A(O+,QqT61QqT61Q4*@QA 'l+.q$?$s6{1}b"5 &Aq	Ayy1++-	9~cii!o5FbSTUVSWXYSYIZH[[l%mu  A"1I	&
  +Q47?A%E!A!EvaSA3/zBF EAHHQqT!A$Y(;(;A(>>?1D?E#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" VAQsyy1a05578SYYqt_=Q=Q=S<TUUCV $K=2KK:K.x=%%'Dxxz*-h-*>*D*DQ*G*N*Nu*Uh' ~~ !$H 3 3A 6 = =e DH~~U &Nb %D\yb bF Q
 Ws;   	AfAfAf
0Af!AfCAf!DAf&fAfr1  )r"   r*   NNFTTFFFNFr*  F)r+   r*   Nr  )r+   N)rD   )FF)__name__
__module____qualname__r   r   log_indent_decoratorr   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r  r  r   r   r   r  r  r   r   r   r      s   0 -1=AJO46"	r (*||	r  rhR\\ 	&$ 	& RYY bii ryy  !",, !F y  yv5n    X  Xt c  c  @  @D y  yv :  :x K   K r   r   )r  r~   dateutilrH  rQ  numpyr   pandasr   mathr   r   r   rG  yfinancer   r   yfinance.constr   r   yfinance.exceptionsr   r	   r
   r   r   r  r   r   <module>r=     s5            " 7 n nO-  O- r   