
    8'h                        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  G d d      Zy)    N)isclose)sharedutils)
_BASE_URL__PRICE_COLNAMES_)YFInvalidPeriodErrorYFPricesMissingErrorYFTzMissingErrorc                   @   e Zd ZddZej
                  	 	 	 	 	 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                         | _        || _        || _        || _        d | _        d | _        d| _        d | _	        y )NF)
_datauppertickertzproxysession_history_history_metadata_history_metadata_formatted_reconstruct_start_interval)selfdatar   r   r   r   s         U/var/www/html/trade_iq/venv/lib/python3.12/site-packages/yfinance/scrapers/history.py__init__zPriceHistory.__init__   sL    
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}"|tO        |t8              stQ        | j                  |!      }d2}"ntO        |t8              r)d3|v r%|!d4|d3    d/z  }!tQ        | j                  |!      }d2}"nd%|v r5|d%   d5   r-|!d6|d%   d5   d7   z   d8z   z  }!tQ        | j                  |!      }d2}"nzd%|vs$|d%   d&   |d%   d&   r|d%   d&   d'   d9   d:   d'   stQ        | j                  |!      }d2}"n9|7|| jL                  d;   vr&tS        | j                  || jL                  d;         }d2}"|"rt              }t        j                         t        j                  | j                  <   |j                  dd      d   t        j                  | j                  <   |r||j                  |       | jT                  | jT                  |k(  rd| _*        t        j                         S t        jV                  |d%   d&   d'         }#|rd|#jX                  sXt!        jZ                  |d      }$|#j\                  |#j^                  d'   dz
     |$k\  r|#j`                  d'|#j^                  d'   dz
   }#|#jX                  r| j                   d<}%n\tc        |#      dk(  r | j                   d=|#j\                  d'    d>}%n.| j                   d=|#j\                  d'    d.|#j\                  d)    }%|j=                  |%       |j/                         dk(  r|j=                  | j                   d?       |#je                  d@      }&t!        jf                  |&ji                         j\                  |&dA   jk                         |&dB   jm                         |&dC   jo                         |&dD   ji                         |&dE   ji                         |&dF   jq                         dGH      }#	 |&dI   jm                         |#dI<   |&dJ   jm                         |#dJ<   | jL                  dK   }'|'dLv }(| jL                  dM   })| jL                  dN   }*t        jr                  |#|d   |)      }#t        jt                  |#|d         }#|d   d)   d*v } |s| rdO| jL                  v r| jL                  dO   }+tO        |+t         jf                        s<t        jv                  | jL                  d2P      | _&        d2| _<        | jL                  dO   }+t        jz                  |#|d   |+      }#|#jX                  r| j                   dQ}%n\tc        |#      dk(  r | j                   dR|#j\                  d'    d>}%n.| j                   dR|#j\                  d'    d.|#j\                  d)    }%|j=                  |%       t        j|                  |d%   d&   d'         \  },}-}.|(sd}.|-t        jr                  |-||)      }-|,t        jr                  |,||)      },|.t        jr                  |.||)      }.|]|#jX                  sQ|#j\                  d'   j                  dS      }/|,|,j                  |/d },|.|.j                  |/d }.|-|-j                  |/d }-|bt!        j"                  |d      j;                  |      }$|,|,|,j\                  |$k     },|.|.|.j\                  |$k     }.|-|-|-j\                  |$k     }-|d   d)   d*v } | st!        jZ                  |#j\                  j                        j;                  |)d2dTU      |#_.        |,j^                  d'   d'kD  r@t!        jZ                  |,j\                  j                        j;                  |)d2dTU      |,_.        |-j^                  d'   d'kD  r@t!        jZ                  |-j\                  j                        j;                  |)d2dTU      |-_.        |#j                         }0|,j^                  d'   d'kD  rt        j                  |0|,|      }0dI|0j                  v r#d'|0j                  |0dI   j                         dIf<   ndV|0dI<   |-j^                  d'   d'kD  rt        j                  |0|-|      }0dJ|0j                  v r#d'|0j                  |0dJ   j                         dJf<   ndV|0dJ<   |(r_|.j^                  d'   d'kD  rt        j                  |0|.|      }0dW|0j                  v r#d'|0j                  |0dW   j                         dWf<   ndV|0dW<   |0jX                  r| j                   dX}%n\tc        |0      dk(  r | j                   dY|0j\                  d'    d>}%n.| j                   dY|0j\                  d'    d.|0j\                  d)    }%|j=                  |%       t        j                  |0|d   |)|	|*Z      }0|0|0j\                  j                  d[\          }0|	r|j=                  | j                   d]       |0j                         }0| j                  |0|*      \  }0}*| j                  |0||*      }0| j                  |0j`                  d)d ||)|      }1d^|0j                  vrd1|0d^<   t!        j                  |0j                  |0j\                  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(   da         }0|0dF   j                  d'      j                  t        j                        |0dF<   | rdb|0j\                  _U        ndc|0j\                  _U        |0j                         | _W        |s|0j                  g dddef      }0|
swt        dFgz   g ddz   }3|3D 4cg c]  }4|4|0j                  v s|4 }3}4|0|3   j                         |0|3   d'k(  z  j                  dg      }5|0j                  |5j\                  |5         }0||k7  r| j                  |0|||      }0|0jX                  r| j                   dh}%n\tc        |0      dk(  r | j                   di|0j\                  d'    d>}%n.| j                   di|0j\                  d'    d.|0j\                  d)    }%|j=                  |%       | jT                  | jT                  |k(  rd| _*        |0S # t        $ r |r Y /w xY w# t        $ r i | _&        Y 2w xY w# t        $ r Y w xY w# t        $ r}2|rd_|2z  }nd`|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 )ja  
        :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validRangesz$: yfinance received OHLC data: EMPTYz: yfinance received OHLC data: z onlyz: resampling 30m OHLC from 15m30minOpenHighLowClose	Adj CloseVolume)rS   rT   rU   rV   rW   rX   )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: )repairr`   first)keepz: checking OHLC for repairs ...	Repaired?zauto_adjust failed with %szback_adjust failed with %s	priceHintDatetimeDate)rZ   r[   rh   ignore)columnserrorsaxisz : yfinance returning OHLC: EMPTYz: yfinance returning OHLC: )[r   get_yf_loggerr   	Exceptionr   r
   r   strempty_dfr   _DFSsplit_ERRORSrM   	_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   
isinstancer	   r   r   parse_quotesemptyto_datetimerY   shapeiloclenresample	DataFramelastrj   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_dfsrq   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namecopyr   r   all	_resample)6r   periodr5   startendprepostactionsr   r   ri   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_exchanger`   tps	dividendssplitscapital_gainsstartDtdfdf_lastedata_colnamescmask_nan_or_zeros6                                                         r   historyzPriceHistory.history   s0   ^ $$&# 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F$2H2H2W$W .dkk64CYCYZgChiJD*oG',~~'7FKK$*1--a*@*CFNN4;;'  W%//;@`@`dl@l370>>## ##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,	]  	 	  	(%'D"	(l  H  
	@6:6:',~~'7FKK$*1FNN4;;'DKK ABBg>??
	@8 Jsv   7AK =AK/ ),AL C/AL F2AOGAOKAK,K+AK,K/ALLALL	ALLALL	AN?LBAN:N:AN?c                     | j                   | j                  ddd|       | j                  du r+t        j                  | j                         | _         d| _        | j                   S )Nr   r0   T)r   r5   r   r   F)r   r   r   r   r   )r   r   s     r   get_history_metadataz!PriceHistory.get_history_metadata  s]    !!)LLtTLO++u4%*%B%B4CYCY%ZD"/3D,%%%r   c                     | j                   | j                  d|       | j                   %d| j                   v r| j                   d   }||dk7     S t        j                         S )Nr*   r   r   rZ   r   r   r   r~   Series)r   r   r   s      r   get_dividendszPriceHistory.get_dividends  sZ    == LLUL3==$)Ek2IY!^,,yy{r   c                     | j                   | j                  d|       | j                   %d| j                   v r| j                   d   }||dk7     S t        j                         S )Nr*   r   rh   r   r   )r   r   r   s      r   get_capital_gainszPriceHistory.get_capital_gains  s[    == LLUL3==$DMM)I MM/:M !!344yy{r   c                     | j                   | j                  d|       | j                   %d| j                   v r| j                   d   }||dk7     S t        j                         S )Nr*   r   r[   r   r   )r   r   r   s      r   
get_splitszPriceHistory.get_splits  sZ    == LLUL3==$4==)H]]>2F&A+&&yy{r   c                 j   | j                   | j                  d|       | j                   ud| j                   v rgd| j                   v rYddg}d| j                   v r|j                  d       | j                   |   }||dk7     j                  d      j	                  d      S t        j                         S )	Nr*   r   rZ   r[   rh   r   r   )how)r   r   appenddropnar   r~   r   )r   r   action_columnsr   s       r   get_actionszPriceHistory.get_actions  s    == LLUL3==$)E.\`\i\iJi)>:N$--/%%o6mmN3G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 ''rj   r   r*   r   r   prod)rS   rU   rT   rV   rX   rZ   r[   rl   anyrW   rV   rh         ?r[   rg   left)labelclosedoffset)
r|   datetimenowstrftimer   rv   rq   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moTFrX   )r    r)   r0   r.   r-   r,   2mr+   i  r'   )r    r)   r0   )r.   r-   r,   r  <   r;   z,Have not implemented price reconstruct for 'z' interval. Contact developersrl   z%Hit max depth of 2 ('{}'->'{}'->'{}')extrars   rc   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)   r0      zgrp_max_size = rC   zRepair groups:z- rJ   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=rI   ->level)r   r   r5   r   r   r   ri   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
intervalIDrZ   )rS   rj   )rV   r   )rW   r   )rU   r   )rT   r*   )rZ   r   )rX   r   )rS   rV   AdjCloserU   rT   rZ   rX   r1  rW   )rq   )r.  r/  diffzdf_new:
zCan't calibrate z block starting z so aborting repairrV   r   
fill_valuerS   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: rT   rU   r   )Rr   ru   r   r   r~   r   rv   typer   r   r4   r   r|   r   warningrq   r   formatinfor   to_numpyr   r   r   r   rY   r   ceilr   r   r   r   r   r   	_dateutilrelativedeltar}   r   get_indexerto_listsortisinrw   todayr*   hasattrr#  setLevelloggingCRITICALr   r   r   weekdayr   	to_period
start_timer   cumsumr   groupbyr  renamer2  intersect1dnanffillbfillwherer   reindexisnansizer   floattiler   averageabsr   get_locr   )Pr   r   r5   r   tagr   
log_extrasr   r   
price_cols	data_cols	intervalsiitdsnextsmin_lookbackssub_intervaltd_ranger   f_repairf_repair_rowsrE   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ratiosr6  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  GBPr7  r  ZARr  ILSrX   r   rC   Tr;   r'   regularMarketPricerV   r$   皙?Fr`   rZ   rg   r3  )r   r   r   rU  r   r~   r   r   r|   r   r   r\  rv   r   r   rS  shiftr>  r   r[  )r   r   r`   	currency2rE   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
-5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   r5   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   rl   Fr$   z3Cannot check single-row table for 100x price errorsr  )ndimage)rT   rS   rU   rV   rW   rs   z6Insufficient good data for detecting 100x price errors)   r  wrap)rX  mode   r8  r   zNo sporadic 100x errors      )rS   rV   r7  rT   rS   rV   rU         Y@zfixed /z currency unit mixups (z	 crudely))r   r   ru   r   r   rq   r   r   rY   r   r   r   scipyr  r   r>  r=  median_filterr   r4   r   r   r   r  r*   r   r~   r   r   r   )$r   r   r5   r   r   r   r_  r  _ndimagera  r   f_zeroes
df2_zeroesdf_origdf2_datamedianr  ratio_roundedr  r  ratio_rcp_roundedf_rcpf_eitherr^  rc  fin_before
df2_taggedn_afterr  r  n_after_cruderz  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 )Nr`   KWF  r8  T)correct_dividend)r   _fix_prices_sudden_change)r   r   r5   r   r  s        r   r  zPriceHistory._fix_unit_switchr  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  rC   rD   rg   r$   rs   rR  )r         ?rl   FrT   rU   z=XrX   r   rV   皙?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   ru   r   r   r   rY   r   r   r   r   rq   r   r~   r   r   rO  r}   r   countr   rE  r>  endswithr2  r   r\  r   r   r4   r   r  sortedlistset
differencer   )*r   r   r5   r   r   r   r_  r   r  r   r`  f_prices_baddf2_reservegrpnan_pctdtsf_zero_or_nan_ignoref_change	f_vol_badf_high_low_good
f_vol_zero
close_diffclose_chg_pct_absf_bad_price_chgf_splitf_change_expected_but_missing
f_bad_rowsra  r^  rc  f_vol_zero_or_nanr  r  
dts_taggedr  dts_not_repairedrz  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                 O   ||j                   r|S |dk7  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                         }d{d>}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}<dA|!i}2|:|2dB<   |=|2dC<   |<|2dD<   |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 dEz  }6d|dF<   t1        j2                  d=G      }@|d0dDg   j                  dH      }A|Aj                         rt        j                  A      d   }B|j"                  |A   }C|BD ]  }|j                   |   }|jd                  }Dd }E|dkD  r|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FdF   sIdk  rFjd                  Cv r"|d,   }"Fd,   }J|"dI|Jz  kD  rFjd                  }EnD}EnD}En|t        |      dz
  k  r|j                   |dz      }K|d<   |z  |Kd<   z  }G|d<   |Kd<   z  }Ht9        t?        |Gdz
        t?        |Hdz
              }It?        D|Kjd                  z
        @k  r7Idk  r2Kjd                  Cv r"|d,   }"Kd,   }L|"dI|Lz  kD  rKjd                  }EnD}EnD}EEsd|j$                  EdFf<   |6D ]"  }5|5|j                  v sd|j$                  E|5f<   $  dJ}M|j                         }t        dt        |            D ]  }|j                   |   }|jd                  }Dd}Nd}O|d,   }"|j                   |dz
     }P|d<   |Pd<   z  }Qt?        |D|Pjd                  z
        @k  r=PdF   s8|dF   s3t?        Qdz
        Mk  r"|d,   j                   |dz
     }R|"dI|Rz  kD  rd}Ond}NOsNsNrDn|j"                  |dz
     }Sd|j$                  |SdFf<   |6D ]"  }5|5|j                  v sd|j$                  S|5f<   $  |6j'                  dF       ||6   j                         j                         s|S dF|j                  v r|dF   }T|T||6D 5cg c]
  }5|5dFk7  s	|5 c}5   j                  dH       z  }T|Tj                         r,|j"                  T   }UdK|UD cg c]  }t+        |j)                                c} }|j-                  ||       |j"                  T   }V|VD ]  }|t1        j2                  d      z
  }W|
j$                  d |Wdfxx   |dA   j$                  |   z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |dA   j$                  |   z  cc<   d|j$                  d |Wdf<   d|
j$                  |df<   d}|jg                  |      } d|j$                  TdFf<   |jg                  dFdH      }dF|6v r|6ji                  dF       t        t        |            D ];  }|d?   j                   |   }|j"                  |   }|d<   j                   |   }|dk(  r=||
d   j                   |dz
     z  }|t1        j2                  dLG      z   }Xtk        jl                  |
j"                  |X      }Yt9        |Yt        |
      dz
        }Y|dkD  r|dz
  n|dz
  }Z|
d   j                   |Ydz    jo                         }[|[dkD  j	                         |[dMk  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  |`dN<   |`dN   |`d   z  |`dO<   |`d   j                   dd  j	                         |`d   j                   d d j	                         z
  }at        j&                  dg|a      }a|a|`dP<   |`dO   j                   dd  j	                         |`d   j                   d d j	                         z
  }bt        j&                  dg|b      }b|b|`dQ<   t        j                  |`d   dkD        d   D ]K  }`j$                  |`j"                  |   dQfxx   |`d   j                   |   |`dN   j                   |   z  z  cc<   M `dPdQg   }a|dRkD  r|dk  r|`dN   j                   d   z  }cadQ   |cdSz  kD  }A|Aj                         rt        j                  A      d   }B|BD ]f  }dadQ   j                   |d   }e|edT|adP   j                   |d   z  kD  s/dadQ   z  ez  }f|fdUk\  }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edVcz  kD  sed}] n |j$                  |dDf   }<]r|<rd}]i }2]|2dW<   ^|2dX<   _|2dY<   |]r|
d'   j$                  |   }+|+dk7  r||+z  },|,|kD  r*|d/   j$                  |   }'|d,   j$                  |   }"|"|'z
  }-n|d-   j$                  |   }$|$}-|-dkD  r5t?        ||-z
        }t?        |,|-z
        }.|.|dZz  k  rd|j$                  |d2f<   |2jU                         D ]  \  }>}?|>|vrtW        |?tX        t        jZ                  f      rd||><   natW        |?t\              rd||><   nKtW        |?t^              rd||><   n5|>dYk(  rtK        jx                  d[\      ||><   nta        |>|?tc        |?            |?|j$                  ||>f<    d0|j                  v s
dX|j                  v sd|j$                  |dX   j	                         d0f<   > |6dWdXgz  }6||6   j                         j                         st        |      dkD  rt        dt        |            D ]  }d]\  }m}n|dkD  r(|d^   j                   |dz
     |d^   j                   |   z  }m|t        |      dz
  k  r(|d^   j                   |dz      |d^   j                   |   z  }nmxs n}mnxs m}nt?        m|z
        d_k  st?        n|z
        d_k  s|j"                  |   }Dd|j$                  |Dd1f<    |6D ])  }5||5   j                         r|jg                  |5dH      }+ dY}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{                  d^      } |7|d^`      |da<   |da   j}                         }o|oD ]  }p|da   |pk(  }q||q   j                         }rt        |r      }s|rd^g   j                         }tt        |t      dkD  rtd^   j"                  j                         j                         j                  j                         dbz  }u|uj                   d   |uj$                  |uj"                  d   <   |u|tdc<   |td^   |tdc   z  |tdd<   |6D ]4  }5r|5   j	                         }vt        jB                  |v      }w|wdsfv r3t        jB                  v      sz  }x|5d0k(  rJd}yde}zdXrj                  v rr|5   |rdX   k(  jA                         r}dWrj                  v r r|5   |r|5   |rdW   z  k(  jA                         rdDrj                  v r5rdD   jA                         r"rd/   q   v   dk(  jA                         rdf}zn/d%}yn,dWrj                  v rr|5   |rdW   k(  jA                         rdg}yndg}zxyk\  rdd|j$                  q|5f<   dX|j                  v rCd|j$                  qdXf<   tJ        jp                  |j$                  |qdYf<   ||q   j                         }rxzk  rd|j$                  q|5f<   |5d1k(  rFd}yd!}zdCrj                  vrdh}ydg}zxyk\  rd|j$                  q|5f<   xzk  rd|j$                  q|5f<   |5dBk(  rr|5   j                   d   rwdk(  r|5dDk(  r|5dWk(  r|5dFk(  r| j                  div r'|5dXk(  r.|5d2k(  s57 
 |j                         }|||6   j                  dH         }|j                   r3|j                   s%tK        jP                  |
|g      j                         }
|
S i }{t        |da   j}                               D 	]  }p||da   |pk(     }r|rj                  dj      }rd|rdk<   t        t        |r      dz
  dd      D 	]4  }rj                   |   }4|4jd                  }|t1        j2                  d      z
  }WdB|4v xr |4dB   }|dD|4v xr |4dD   }}dC|4v xr |4dC   }~dW|4v xr |4dW   }d1|4v xr |4d1   }d0|4v xr |4d0   }d2|4v xr |4d2   }dX|4v xr |4dX   }^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rj$                  |d0f<   dz  }}rd}}drj$                  |dDf<   dz  }rrd}drj$                  |dWf<   dz  }dk(  r}s~r}rdlndm}>{j                  |>g       j'                  |       d|4d^   z
  |4dA   z  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   rdn}>|}|4d<   |z  }||
j$                  |df<   |>doz  }>dd|4dA   z
  |z  z
  }||4dA   z  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   {j                  |>g       j'                  |       rdp}>d|z  }|4d<   |z  }||
j$                  |df<   |4d^   |z  }d|z
  }|4dA   }!|>doz  }>||!z  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   {j                  |>g       j'                  |       c|rdq}>{j                  |>g       j'                  |       d|4d^   z
  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   ^r:dr}>{j                  |>g       j'                  |       d|4dA   z  }|
j$                  d Wdfxx   |z  cc<   |j$                  d |Wdfxx   |z  cc<   |4dY   }_|
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 |Wdf<   d|j$                  d |Wdf<   drj$                  |dkf<   <rd|4d^   z
  }|4dA   }!t?        ||!z  dz
        dRkD  ry>doz  }>|!z  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   |jg                  |      }rjg                  |      }rs ds}>d|
d'   j$                  |   z  }|4d<   |z  }||
j$                  |df<   |4d^   |z  }d|z
  }|4dA   }!|>doz  }>||!z  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   {j                  |>g       j'                  |       dk(  sr|rdt}>{j                  |>g       j'                  |       d|4d^   |z  z
  }|
j$                  |dfxx   |z  cc<   |
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   r}r|
j$                  |dfxx   |z  cc<   dp}>du|4v r{|4du   rvd }d|4d^   |z  z
  }||4dA   z  }|
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   |>dvz  }>{j                  |>g       j'                  |       drj$                  |dkf<   ossswdw}>{j                  |>g       j'                  |       |4d^   |z  }d|z
  }||4dA   z  }|
j$                  |dfxx   |z  cc<   |
j$                  d Wdfxx   |z  cc<   d|
j$                  d |Wdf<   |j$                  d |Wdfxx   |z  cc<   d|j$                  d |Wdf<   drj$                  |dkf<   	7 rj                   s		 {D ]N  }>dx|> dytG        {|>         D cg c]  }t+        |j)                                c} }|j-                  ||       P dN|
j                  v rta        dz      |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}w )|Nr)   zdiv-adjust-repair-badr  rZ   rg   zNo dividends to checkr  r`   r  r  r8  gQ?rl   FrV   r   r$   rC   rU   r7  rT   rW   r   Tz'Repaired double-adjustment on div days r  g?)rel_tol)secondsr&      rX   r  zdiv-too-small)stater2  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 )Nr2   )r   s    r   <lambda>z2PriceHistory._fix_bad_div_adjust.<locals>.<lambda>  s
    AfI r   )keyr   -_r}   div_r  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$   rC   )
r   sort_valuesrY   r   r4   r   meanr   array	enumerate)r   column	thresholdr  	sorted_dfclusterscurrent_dtscurrents_valsrc  rs  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$  phantomr'   rs         ?g{Gz?zRemoving phantom div(s): #   gAdjzAdj LowdeltaadjDeltar  g333333?gjt?皙?g(\?adj_exceeds_pricesdiv_date_wrongdiv_true_dateg?zdatetime64[ns, UTC])dtypeNNr  r  )r  r  g    ~~Ar   zavg yr yieldg?gUUUUUU?r  gtE]t?)zKAP.ILSAND	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FX was repairedz and FX mixupztoo-big div & div-adjustz	Repaired r#   z"Adj" has snuck in df2)r  r-  )Er   r   ru   r   r>  r   r   r   r   r   rq   r   r   rU  r4   r   r   rY   r   r   r}   rw   r=  r   r|   r   r  r*   r   rR  r  r\  r   r   rW  r  replacer~   r   	set_indexr   
startswithitemsr   boolbool_r   rY  rv   r:  r   r   removebisectbisect_left
pct_changeNaTzerosr(   argminr   r  unique	to_seriesr2  rs  total_secondsr  
setdefault)r   r   r5   r`   r   r_  r  currency_dividediv_status_dftoo_big_check_thresholdr  df_modifiedf_nandf2_nandiv_indicesfixed_datesrc  div_idxprices_beforer2  r  	dt_before	new_close	adj_afteradjr  r   rs  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_volrz   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prev_divratio1ratio2
divergence	drop_prevnext_div	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lookahead_datelookahead_idxlookback_idxfuture_changesf_big_changediv_adj_exceeds_pricesr-  r.  xdeltas	adjDeltasadjDivr  adjDelta_dropr  f_near1_or_above	pre_splitnear_indices	penaltiesdtireversal_idxr_prer_postcluster_idscidfcr  r  r  
time_diffsf_failn_failpct_failtrue_thresholdfals_thresholddiv_repairsr"  r$  r#  r,  r  r  r  n_failed_checksadj_correction
correctioncorrect_div
target_adjtarget_div_pctclose_beforetrue_adjenddt2r  s                                                                                                                                                r   r   z PriceHistory._fix_bad_div_adjust  s,    :It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%'YYrvve}%="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&9q&A#=*;<=AAqAI557hhqk!nG(..q1L (E#((+!
q5,11!A#6H!%j8HUOKF Z(5/9F!$S_c&*o!FJ6(--/04OOX`ajXkpz  ~B  qB#==L8#&v;D(0(8I#c)m3-5]]
-3
)/J]+A--,11!A#6H!%j8HUOKF Z(5/9F!$S_c&*o!FJ6(--/04OOT^aeTe#==L8#&v;D(0(8I#c)m3-5]]
-3
)/J?CM%%j)&;<# E 5 55?DM--j!m<EM(E\  %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 V$((*..0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( s=)* A	eA#E*//2G$$Q'B&++A.C!|CL--gai88G  	 3 3 <<N"..syy.IMs3xz:M(/!719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	 )*!K."23A6 ]AEE!''!*j01Q{^5H5H5KAeHMMZ[L\5\\1]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&[%@ >B$:$)E"*J $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"[\CA	eF 	')9::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  	>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 [	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( P ,,.aV#66&>A-%%(N%(N'7??:
gVfNg@g?l?l?n +w>GAJSZ[\S]`gh|`}S}D~  DD  DD  DF (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(('aP[	z &002 &mF&;&?&?Q&?&GH==iig/::<J i0779: ^	C#M)$<c$ABG((5(9G %GH3w<>2r2 V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"$&&&)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$ 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$); 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1mV9p }}}^	@  	/AaSVKPQN=S#TrC	N#T"UVCKK:K.	/ CKK455}}))S'N+668C
o =ZJ LL 5Z 3UZ CL *NZ $UsU   	B])6B].B].@
B]3@B]3A B]8e%B]=e9B]=x$	B^x.B^[# B^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  rl   Fr    r!   r"   r$   r  z
split_idx=z
 split_dt=z split=.4fzdf dt range: rJ   rC   T)correct_volumer  )r   r   ru   r   r   r>  r   r   rw   to_dictrq   r   rU  rY   r   r   r   r   r}   r  r~   r   )r   r   r5   r   r   r_  interdaysplit_f	split_idxsplit_dtrz   
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                 2  i |j                   r|S t        j                         }d|| j                  d}|idiz  }	|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ic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  r7id'vr3t)        j:                  |d(fd      }|d)d%g   j	                         }|dk(  }n0t)        j:                  |d*fd      }||   j	                         }|dk(  }|j'                         rd||<   |d+   j	                         |d%   j	                         z  }|j<                  }|t(        j>                  k(  r|jA                  d,      }tC        |j                   d         D ]U  }|d d |fxx   |z  cc<   |j3                  t4        j6                        s4||   jD                  v sF|||   xx   |z  cc<   W |t(        j>                  k(  r|jA                  d-      }|dd f   |d d.f   z  |dd  |t)        j,                  |dd      z  } | j'                         rd|| <   |
r|d&k7  rt)        jF                  |d      }!nt)        jH                  |d      }!t)        jJ                  |!      }"|"j'                         rd|!|"<   |j3                  t4        j6                        r+|!d/<   |d/   jM                  d(      jA                  d0      |d/<   tO        i|	      }#t)        jN                  |!      |#dz
  d1z  dz   k  r=t)        j                  |!      d|#dz
  d1z  dz   z  kD  r|j                  d2| d3|       |S t)        jP                  |!d4d5g      \  }$}%|%|$z
  }&|$d6|&z  z
  }'|%d6|&z  z   }(|!|'k\  |!|(k  z  }t)        jR                  |!|         })t)        jT                  |!|         }*|*|)z  }+|j                  d7|)d8d9|*dd!|+d:z  d;d<|       d=|+z  },|
r|d&k7  r|,d>z  },|d?v r|,d(z  },tO        i|	      d|,z   k  r0|j                  d@|       |j                  dA|+ddB|,d|       |S |!|	z  }-tO        i|	      }#|j                  dC|#dDdE|,d|       |#dz   |,z   d1z  }.|j                  dF|.dD|       dG|jD                  vrd|dG<   |
r|d&k7  rdH}/nd}/|/rPt)        j:                  |d*fd      }||   jW                  dd      j	                         }|dd f   |d d.f   z  |dd  n|!}||	z  }-|d|.z  k  }0|0j'                         r~|dk  }1|dI   dkD  j	                         }2t)        j,                  |2d      }3|0jX                  d(k(  r5|3d d t(        jZ                  f   j]                  |0j                   d   d      }3|0|1|3z    z  }0||.kD  }4t/        |4j                         }5|5dk(  r|4n|4j'                  d      }6|6j'                         rDt)        j*                  |6      d   D ](  }7|d   j^                  |7   }8|8dk(  rdn|d   j^                  |7dz
     |8z  }9|rJ|7dz   t/        |      k  r9|d   j^                  |7dz      }:|:dkD  rtO        |9|d   j^                  |7   |:z        }9|9d=kD  stO        d|7dJz
        };t        t/        |      |7dJz         }<|d   j^                  |;|< dk7  j'                         r|d   j^                  |;|7dz
   jS                         }=t)        jJ                  |=      s
|8|=z  dKk  r|5dk(  rd|4|7<    d|4|7d d f<   + |0|4z  }|j3                  t4        j6                        r|/s6|-dL<   |0|dM<   |4|dN<   |dL   jM                  d(      jA                  d0      |dL<   n|tC        t/        |            D ]e  }||   }||v s|-d d |f   |dOz   <   ||dOz      jM                  d(      jA                  d0      ||dOz   <   |0d d |f   ||dPz   <   |4d d |f   ||dQz   <   g |j'                         s|j                  d2| d3|       |S dR}>|d   j	                         dk7  }?|dv r|?j'                         rt)        j*                  |?      d   }@t)        j*                  |      d   }At/        |@      rt/        A      sy Ad d d f   @z
  }B|Bd.z  }B|BdkD  }C|Cj'                         rBC   j                         }Dt        j`                  |      |Dz  }Etc        |Et        j                  j                        r!t        j                  j                  |>S      }.nte        jf                  |>S      }.E|.k  r|ji                  dT|       |S |j3                  t4        j6                        r<tk        tC        dj                   d               |dU<   |j                   d   dz
  |dU   z
  |dV<   |/rN||D cg c]  }|dPz   	 c}   j'                  d      ||D cg c]  }|dQz   	 c}   j'                  d      z  }Fn|dM   |dN   z  }FFt)        j,                  |Fd.      z  t)        j,                  |Fd      z  t)        j,                  |FdW      z  t)        j,                  |Fd(      z  }Ftm        jn                  dXd dYdJdZd[      5  |j                  d\tq        |F         z          d d d        if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`}LtC        t/        |            D ]o  }||   }t)        j*                  |      d   d   }M|rp|m|Mk\  rg|d d |f   }N|4d d |f   }O|0d d |f   }P G|N|d  |O|d  |P|d        }Qt/        |Q      dkD  r5tC        t/        Q            D ]  }7Q|7   }-|-d   |z   |-d   |z   |-d(   f|Q|7<     t)        jr                  t)        j,                  Od.            }Rt)        jr                  t)        j,                  Pd.            }S|S|Rz  }T G|THd  |S|Hd  |R|Hd        }Ut/        |U      dkD  rjtC        t/        U            D ]  }7U|7   }-|-d   Hz   |-d   |Hz   |-d(   f|U|7<     tC        t/        U            D ]  }7U|7   }-||-d   z
  ||-d   z
  |-d(   f|U|7<     Q}V|Vju                  U       n G|d d |f   |4d d |f   |0d d |f         }V|j                  da| dbV |       |tC        t/        V      dz
  d.d.      D ]n  }7V|7   }-|j
                  |-d      j                         |k  s,|j                  dc| dd|j
                  |-d       de|j
                  |-d   dz
      df|       V|7= p t/        V      dkD  skVL|<   r tw        LD Wcg c]  }W|Wdnd
 c}W      }X|Xdk(  rnXdk(  rztC        t/        |            D 7cg c]  }7L|7   r|7nd. }Y}7t)        j*                  t)        jx                  |Y      d.k7        d   d   }Z||Z   }[|j                  dg| dh|[ di|       ng dj}\tC        t/        |            D ]  }||   }L|   }V|Vg }VVD ]m  }-|-d(   dkk(  ri}]|	}^n|	}]i}^|
rRdl| dm| dn|j
                  |-d   dz
     j                          do|j
                  |-d      j                          dp]d
}_n5dl| dm| dn|j
                  |-d   dz
      do|j
                  |-d       dp]d
}_|j                  _|       \|xx   |-d   |-d   z
  z  cc<   |j^                  |-d   |-d   |jD                  j{                  |      fxx   ]z  cc<   |d%k(  r:|j^                  |-d   |-d   |jD                  j{                  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  tw        \      dkD  rWdq}`tC        t/        |            D ]&  }\|   dk7  s`dqk7  r`drz  }``||    ds\|    dtz  }`( du` }_|ji                  |_|       |rJKz  }at)        j|                  |J|K      }b|aj'                         r@|j~                  adf   ^z  jM                         jA                  d-      |j~                  |adf<   bj'                         rC|j~                  bdf   d1z  ^z  jM                         jA                  d-      |j~                  |bdf<   dH|j~                  IdGf<   nd}\t)        j*                  |      d   d   }M|rU|R|Mk\  rL G||d  |4|d  |0|d        }Qt/        |Q      dkD  r5tC        t/        Q            D ]  }7Q|7   }-|-d   |z   |-d   |z   |-d(   f|Q|7<     t)        jr                  t)        j,                  |4d.            }ct)        jr                  t)        j,                  |0d.            }d|d|cz  }e G|eHd  |d|Hd  |c|Hd        }Ut/        |U      dkD  rjtC        t/        U            D ]  }7U|7   }-|-d   Hz   |-d   |Hz   |-d(   f|U|7<     tC        t/        U            D ]  }7U|7   }-||-d   z
  ||-d   z
  |-d(   f|U|7<     Q}V|Vju                  U       n
 G||4|0      }V|tC        t/        V      dz
  d.d.      D ]k  }7V|7   }-|j
                  |-d      j                         |k  s,|j                  dv|j
                  |-d       de|j
                  |-d   dz
      df|       V|7= m VD ]  }-|-d(   dkk(  ri}]|	}^n|	}]i}^|j                  dw|- dx] |       dyD ]<  }|j^                  |-d   |-d   |jD                  j{                  |      fxx   ]z  cc<   > |r:|j^                  |-d   |-d   |jD                  j{                  dI      fxx   ]z  cc<   |rk|jD                  j{                  d      }f|j^                  |-d   |-d   |ff   ^z  jM                         jA                  d-      |j^                  |-d   |-d   |ff<   dH|j^                  |-d   |-d   |jD                  j{                  dG      f<   |-d   |-d   dz
  k(  rB|
r'dl| dz|j
                  |-d      j                          }_nwdl| dz|j
                  |-d       }_n^|j
                  |-d   dz
     }g|j
                  |-d      }h|
r)dl| d{gj                          d|hj                          d}}_ndl| d{g d|h 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du\ dt}_|ji                  _|       |r|d   j#                         }"|"j'                         rG|d   |"    jM                  d      jA                  d-      |j~                  |" df<   |j                         S |d   jM                  d      jA                  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}7w )Nzprice-change-repairr  r   r  r  )r  r7  z
100x errorr  r  z	bad splitzprice-repair-splitr[   rg   r$   r  z
start_min=z change=r  z (rcp=rK   r  )rS   rT   rU   rV   r+  g      ?z(Split ratio too close to 1. Won't repairFr2  r   rX   rs   zappears_suspended=z, idx_latest_active=rH   )rW   rX   rZ   r[   rl   rp   )rt   rr   rV   r)   )r  r8  gMbP?r  rS   r&   rW   rY  r   rC   z1D %rw   r  zNo z
s detected   K   r&  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=rl   TrZ   r!  g       @rdownup_r_down_upr;   r'   z<100x changes are too soon after stock split events, abortingrc  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   rz   z	1.0/splitrC   )r   r   r   rU  r4   r   r   )r  f_upf_downtrue_indicesrangesrc  rR  rz   s          r   map_signals_to_rangeszEPriceHistory._fix_prices_sudden_change.<locals>.map_signals_to_ranges	  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   rz   z
Corrected z on col=z range=[:z] m=rG   z, =r  zCorrected: zPruning range zrange=z m=)rS   rT   rU   rV   rW   z on interval z across intervals rJ   z (inclusive)z
Corrected:rI   )@r   r   ru   r   r>  rY   r   r@  rA  r}   r   r   r   r   r   r   r   r   r   r   r   rU  rollr   r   isEnabledForrI  DEBUGr   fullr/  r   r   r4   rq   r[  r  rW  r   r*   
percentiler  stdr4  ndimnewaxisrepeatr   r   r   r|   r   r=  r  r~   option_contextrw   flipextendr   r  r]  logical_xorr   )jr   r   r5   r   changer  r  r   r_  	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_zerorR  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  f_negr  f_div_beforer  
f_up_ndimsf_up_shiftsrc  rn  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  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  idxsr  coln_correctedrE   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   rz   sj                                                                                                            @r   r  z&PriceHistory._fix_prices_sudden_change  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 +'')CL,A,A,CC##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/::< 3&E%a'113E775!,L{{a+ArzzM:AA&,,q/XYAZ 455F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2q7L !!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%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~~ &NL %D\yb bF Q
 Ws;   	Ad Ad &Ad%Ad*2!Ad/A+Ad<B!Aed/Ad9r0  )r!   r)   NNFTTFFFNFr!  Fr  )rC   )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      s   0 -1=AJO46"	k (*||	k  kZ	&$ 	&299 ryy 		 	 	!",, !F y  yv5n    X  Xt c  c  @  @D a  aF :  :x @   @ r   r   )r  r|   dateutilr@  rI  numpyr   pandasr~   mathr   r   r   r;  yfinancer   r   yfinance.constr   r   yfinance.exceptionsr   r	   r
   r   r  r   r   <module>r,     s5            " 7 \ \Z+  Z+ r   