
    .ic                       U d dl mZ d dlZd dlZd dlmZmZ d dlZd dlmZm	Z	m
Z
 d dlZd dlZd dlmZ d dlmZ d dlZd dlmZ d dlmZmZ d dlmZmZ d dlmZm Z  d d	l!m"Z"m#Z#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z)m*Z* d dl+m,c m-Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m,c m6c m7Z6 erd dl8m9Z9 d dl:m;Z; d dl<m=Z= d dlm>Z> i Z?de@d<   d9dZAd:dZBej                  d;d       ZDd<dZEd<dZFd=dZGd ZH G d dej                        ZJ G d dej                  j                        ZM G d dej                        ZOd>d ZP G d! d"ej                        ZQ G d# d$ej                        ZS G d% d&ej                        ZU G d' d(ej                        ZWd?d)ZXd@d*ZYdAd+ZZdBd,Z[dCd-Z\ej                  dDd.       Z^ej                  dDd/       Z_ej                  dDd0       Z`ej                  dDd1       Zad>d2Zb G d3 d4ej                  j                        Zd G d5 d6ej                  j                        Ze G d7 d8ej                  j                        Zfy)E    )annotationsN)datetimetzinfo)TYPE_CHECKINGAnycast)lib)	Timestamp	to_offset)	FreqGroupperiods_per_day)Fnpt)is_floatis_float_dtype
is_integeris_integer_dtypeis_nested_list_like)IndexSeries
get_option)
date_range)PeriodPeriodIndexperiod_range)	Generator)Axis)
BaseOffset)TimeUnitdict
_mpl_unitsc                     t         t        ft        t        ft        j
                  t        ft        j                  t        ft        j                  t        ft        j                  t        fg} | S N)r
   DatetimeConverterr   PeriodConverterpydtr   datetimeTimeConverternp
datetime64)pairss    c/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsr.   F   sT    	%&	!	)*	%&	M"	)*E L    c                ^     t        j                          fd       }t        t        |      S )z/
    Decorator applying pandas_converters.
    c                 T    t               5   | i |cd d d        S # 1 sw Y   y xY wr#   )pandas_converters)argskwargsfuncs     r-   wrapperz6register_pandas_matplotlib_converters.<locals>.wrapperW   s+      	)((	) 	) 	)s   ')	functoolswrapsr   r   )r5   r6   s   ` r-   %register_pandas_matplotlib_convertersr9   R   s/    
 __T) ) 7r/   c               #     K   t        d      } | r
t                	 d | dk(  rt                yy# | dk(  rt                w w xY ww)z
    Context manager registering pandas' converters for a plot.

    See Also
    --------
    register_pandas_matplotlib_converters : Decorator that applies this.
    z'plotting.matplotlib.register_convertersNauto)r   register
deregister)values    r-   r2   r2   _   sE      @AE
F?L 5F?L s   A0 AAAc                     t               } | D ]h  \  }}|t        j                  v r9t        t        j                  |   |      st        j                  |   }|t        |<    |       t        j                  |<   j y r#   )r.   munitsregistry
isinstancer!   )r,   type_clspreviouss       r-   r<   r<   u   sb    KE '
sFOO#Jvu7Ms,Su-H (Ju!$'r/   c                 T   t               D ]O  \  } }t        t        j                  j	                  |             |u s1t        j                  j                  |        Q t        j                         D ]5  \  }}t        |      t        t        t        hvs#|t        j                  |<   7 y r#   )r.   typer@   rA   getpopr!   itemsr$   r%   r)   )rC   rD   unit	formatters       r-   r=   r=      s    k '
s##E*+s2OO&' &++- .i	?#4o}"UU$-FOOD!.r/   c                ~    | j                   dz  | j                  dz  z   | j                  z   | j                  dz  z   }|S )Ni  <   @B )hourminutesecondmicrosecond)tmtot_secs     r-   _to_ordinalfrV      s8    ggnryy2~-		9BNNU<RRGNr/   c                    t        | t              r$t        |       }t        |j	                               S t        | t
        j                        rt        |       S | S r#   )rB   strr
   rV   r(   r&   )dparseds     r-   time2numr[      sC    !S1FKKM**!TYYAHr/   c                  @    e Zd Zed        Zedd       Zedd       Zy)r)   c                f   t         t        j                  f}t        | |      st	        |       st        |       rt        |       S t        | t              r| j                  t              S t        | t        t        t        j                  t        f      r| D cg c]  }t        |       c}S | S c c}w r#   )rX   r&   r(   rB   r   r   r[   r   maplisttupler*   ndarray)r>   rK   axisvalid_typesxs        r-   convertzTimeConverter.convert   s    DII&e[)Z->(5/E?"eU#99X&&edE2::u=>)./AHQK// 0s   B.c                    | dk7  ry t         j                  j                         }t        |      }t	        j
                  ||d      S )Nr(   )majlocmajfmtlabel)mpltickerAutoLocatorTimeFormatterr@   AxisInfo)rK   rb   rg   rh   s       r-   axisinfozTimeConverter.axisinfo   s;    6>'')v&fV6JJr/   c                     y)Nr(    )rd   rb   s     r-   default_unitszTimeConverter.default_units   s    r/   N)returnzmunits.AxisInfo | None)rs   rX   )__name__
__module____qualname__staticmethodre   ro   rr   rq   r/   r-   r)   r)      s>      K K  r/   r)   c                      e Zd ZddZdddZy)rm   c                    || _         y r#   )locs)selfrz   s     r-   __init__zTimeFormatter.__init__   s	    	r/   c                   d}t        |      }t        ||z
  dz        }|dz  }|dz  }t        |d      \  }}t        |d      \  }	}t        |	d      \  }
}	|dk7  r't        j                  |	|||      j                  |      S |dk7  r*t        j                  |	|||      j                  |      dd S |dk7  r&t        j                  |	||      j                  d	      S t        j                  |	|      j                  d
      S )a  
        Return the time of day as a formatted string.

        Parameters
        ----------
        x : float
            The time of day specified as seconds since 00:00 (midnight),
            with up to microsecond precision.
        pos
            Unused

        Returns
        -------
        str
            A string in HH:MM:SS.mmmuuu format. Microseconds,
            milliseconds and seconds are only displayed if non-zero.
        z%H:%M:%S.%frO     rN      r   N%H:%M:%S%H:%M)introunddivmodr&   r(   strftime)r{   rd   posfmtsmsusmsusmh_s              r-   __call__zTimeFormatter.__call__   s    $ Fa!eu_%T\D[a}1a}1a}1799Q1d+44S991W99Q1d+44S9#2>>!V99Q1%..z::yyA''00r/   Nrs   Noner   r   z
int | Noners   rX   )rt   ru   rv   r|   r   rq   r/   r-   rm   rm      s    !1r/   rm   c                  B    e Zd Zedd       Zedd       Zedd       Zy)r%   c                    t        |d      st        d      t        |j                  d      }t        j                  | |      S )Nfreqz/Axis must have `freq` set to convert to PeriodsT	is_period)hasattr	TypeErrorr   r   r%   convert_from_freq)valuesrK   rb   r   s       r-   re   zPeriodConverter.convert   s=     tV$MNNd300>>r/   c                    t        |       r%| D cg c]  }t        j                  ||       } }| S t        j                  | |      } | S c c}w r#   )r   r%   _convert_1d)r   r   vs      r-   r   z!PeriodConverter.convert_from_freq   sP    v&DJKqo11!T:KFK  %00>F Ls   A	c                j   t         t        t        t        j                  t
        j                  f}t        j                         5  t        j                  ddt               t        j                  ddt               t        | |      st        |       st        |       rt        |       cd d d        S t        | t              r$| j!                        j"                  cd d d        S t        | t$              r| j'                  fd      cd d d        S t)        j*                  | d      dk(  r t        | 	      j"                  cd d d        S t        | t,        t.        t
        j0                  f      r#| D cg c]  }t        |       c}cd d d        S 	 d d d        | S c c}w # 1 sw Y   | S xY w)
Nignore#Period with BDay freq is deprecatedcategoryPeriodDtype\[B\] is deprecatedc                    t        |       S r#   )_get_datevalue)rd   r   s    r-   <lambda>z-PeriodConverter._convert_1d.<locals>.<lambda>  s    N1d,C r/   F)skipnaperiod)r   )rX   r   r   r&   r'   r*   r+   warningscatch_warningsfilterwarningsFutureWarningrB   r   r   r   r   asfreqasi8r   r^   r	   infer_dtyper_   r`   ra   )r   r   rc   rd   s    `  r-   r   zPeriodConverter._convert_1d   sm   HfdiiG$$& 	A##?- ##;m 6;/f%F#%fd3	A 	A FK0}}T*//	A 	A FE*zz"CD!	A 	A" 6(B #65::)	A 	A* FT5"**$=>9?@Aq$/@-	A 	A* ?+	A.  A-	A. s7   A&F(5*F()#F(0F()F(9F#F(#F((F2Nrb   r   r   r   )rt   ru   rv   rw   re   r   r   rq   r/   r-   r%   r%      s<    
? 
?    r/   r%   c                @   t        | t              r| j                  |      j                  S t        | t        t
        t        j                  t        j                  f      rt        | |      j                  S t        |       st        |       r| S | y t        d|  d      )NzUnrecognizable date '')rB   r   r   ordinalrX   r   r&   r'   r*   r+   r   r   
ValueError)r'   r   s     r-   r   r     s    ${{4 (((	D3$))R]]C	DdD!)))	D	Xd^	
,TF!4
55r/   c                  @    e Zd Zedd       Zed        Zedd       Zy)r$   c                    t        |       r&| D cg c]  }t        j                  |||       } }| S t        j                  | ||      } | S c c}w r#   )r   r$   r   )r   rK   rb   r   s       r-   re   zDatetimeConverter.convert#  sW     v&LRSq'33AtTBSFS  '2264FF Ts   Ac                   d }t        | t        t        j                  t        j
                  t        j                  f      rt        j                  |       S t        |       st        |       r| S t        | t              r ||       S t        | t        t        t        j                  t        t         f      rt        | t               rt        |       } t        | t              r| j"                  } t        | t        j                        st%        j&                  |       } t)        |       st+        |       r| S 	 t-        j.                  |       } t        j                  |       } | S # t0        $ r Y "w xY w)Nc                v    	 t        j                  t        j                  |             S # t        $ r | cY S w xY wr#   )mdatesdate2numtoolsto_datetime	Exception)r   s    r-   	try_parsez0DatetimeConverter._convert_1d.<locals>.try_parse4  s5    u'8'8'@AA s   '* 88)rB   r   r&   r'   r*   r+   r(   r   r   r   r   rX   r_   r`   ra   r   r   r   comasarray_tuplesafer   r   r   r   r   )r   rK   rb   r   s       r-   r   zDatetimeConverter._convert_1d2  s   	 fxBMM499MN??6**8F#3M$V$$ubjj% HI&&) v&%(fbjj1..v6'>&+A**62 __V,F  s   5E! !	E-,E-c                    | }t        |      }t        ||      }t        j                  ddd      }t        j                  ddd      }t	        j
                  ||d||f      S )z
        Return the :class:`~matplotlib.units.AxisInfo` for *unit*.

        *unit* is a tzinfo instance or None.
        The *axis* argument is required but not used.
        )tzi     i   )rg   rh   ri   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr&   r'   r@   rn   )rK   rb   r   rg   rh   datemindatemaxs          r-   ro   zDatetimeConverter.axisinfoV  sb     &"-(B7))D!Q'))D!Q'&GWCU
 	
r/   Nr   )rK   ztzinfo | Noners   zmunits.AxisInfo)rt   ru   rv   rw   re   r   ro   rq   r/   r-   r$   r$   "  s=      ! !F 
 
r/   r$   c                      e Zd ZdddZy)r   Nc                H    t         j                  j                  | |||       y r#   )r   AutoDateFormatterr|   )r{   locatorr   
defaultfmts       r-   r|   z PandasAutoDateFormatter.__init__k  s      ))$ZHr/   )Nz%Y-%m-%d)r   rX   rs   r   )rt   ru   rv   r|   rq   r/   r-   r   r   j  s    Ir/   r   c                      e Zd Zd Zd Zy)r   c                   ||z
  j                         }t        |      | j                  k  rd| _        t	        | j
                        }|j                  | j                          |j                  j                  | j                  j                            |j                  j                  | j                  j                           |S t        j                  j                  | ||      S )z*Pick the best locator based on a distance.)total_secondsabsminticks_freqMilliSecondLocatorr   set_axisrb   set_view_intervalget_view_intervalset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)r{   dmindmaxrU   r   s        r-   r   z!PandasAutoDateLocator.get_locatorp  s    $;--/w<$--'DJ(1GTYY' +GLL**,,. +GLL**,,. N%%11$dCCr/   c                @    t         j                  | j                        S r#   )r   get_unit_genericr   r{   s    r-   	_get_unitzPandasAutoDateLocator._get_unit  s    !224::>>r/   N)rt   ru   rv   r   r   rq   r/   r-   r   r   o  s    D*?r/   r   c                  @    e Zd ZdZd	dZd Zed        Zd Zd Z	d Z
y)
r   gLH>c                R    t         j                  j                  | |       d| _        y )Ng      ?)r   DateLocatorr|   	_interval)r{   r   s     r-   r|   zMilliSecondLocator.__init__  s    ##D"-r/   c                $    | j                  d      S )Nr   )r   r   s    r-   r   zMilliSecondLocator._get_unit  s    $$R((r/   c                n    t         j                  j                  |       }|dk  rt        j                  S |S )Nr   )r   RRuleLocatorr   r   UNIT)r   rK   s     r-   r   z#MilliSecondLocator.get_unit_generic  s0    ""33D9!8%***r/   c                F   	 | j                         \  }}t        j                  ||f      \  }}||z
  dz  dz  }d}dD ]  }|||dz
  z  k  r	|| _         n	d| _         ||z
  | j                         | j                         z  z  }|| j                  dz  kD  r't        d|d	d
| d| d| j                  dz  d	d	      | j                         }| d}	| j                  j                  d       }
|j                  d       }|j                  d       }t        |||	|
      j                  t              }	 t        |      dkD  r&| j!                  t        j                  |            }|S 	 t        j                  ||g      }|S # t        $ r g cY S w xY w# t"        $ r Y 5w xY w)NiQ r~      )r   
   2   d      i  r   g     @@   z)MillisecondLocator estimated to generate rY   z ticks from z to z: exceeds Locator.MAXTICKS* 2 (z) r   )r   )startendr   r   r   )viewlim_to_dtr   r   r   r   r   _get_intervalMAXTICKSRuntimeErrorr   tznamereplacer   astypeobjectlenraise_if_exceedsr   )r{   r   r   nmaxnminnummax_millis_ticksintervalestimater   r   sted	all_datesrz   limss                   r-   r   zMilliSecondLocator.__call__  s   	++-JD$
 __dD\2
dd{e#d*2 	$Hh"2Q"677!)#DN	$ 4KDNN$4t7I7I7K$KLdmma'';A,l4&TF ;)!,B0  %%'2WW^^D!\\\&\\\&RRdrBII&Q		9~!,,V__Y-GH " d|,O  	I	F  		s#   F 53F FF	F F c                    | j                   S r#   )r   r   s    r-   r   z MilliSecondLocator._get_interval  s    ~~r/   c                    | j                         \  }}t        j                  |      }t        j                  |      }| j                  ||      S )z@
        Set the view limits to include the data range.
        )datalim_to_dtr   r   nonsingular)r{   r   r   vminvmaxs        r-   	autoscalezMilliSecondLocator.autoscale  sE    
 '')
dt$t$d++r/   Nr   )rt   ru   rv   r   r|   r   rw   r   r   r   r  rq   r/   r-   r   r     s5    #D)  +Z
,r/   r   c                    | dk  r	d\  }}||fS | dk  r	d\  }}||fS | dk  r	d\  }}||fS | dk  r	d\  }}||fS | d	k  r	d
\  }}||fS | dk  r	d\  }}||fS | dz  dz   }|dz  |dz  }}||fS )zN
    Returns a default spacing between consecutive ticks for annual data.
       )r   r      )r   r   r   )r      r   )r  r   r   )r     iX  )r   r   r~   r   rq   )nyearsmin_spacingmaj_spacingfactors       r-   _get_default_annual_spacingr    s     {%+"k %% 
"%+"k %% 
"%+"k %% 
#%,"k %% 
#%,"k %% 
#%-"k %% 4!#&,rk6C<k%%r/   c                J    t        | |      }t        j                  |      d   S )z
    Returns the indices where the given period changes.

    Parameters
    ----------
    dates : PeriodIndex
        Array of intervals to monitor.
    period : str
        Name of the period to monitor.
    r   )_period_break_maskr*   nonzero)datesr   masks      r-   _period_breakr#    s$     eV,D::dAr/   c                \    t        | |      }t        | d| j                  z  z
  |      }||k7  S )Nr   )getattrr   )r!  r   currentrE   s       r-   r  r    s2    eV$Guq5::~-v6Hhr/   c                b    | j                   dk(  s| j                   dk(  r| d   dk(  r	|dz  dkD  ryy)z
    Returns true if the ``label_flags`` indicate there is at least one label
    for this level.

    if the minimum view limit is not an exact integer, then the first tick
    label won't be shown, so we must adjust for that.
    r   r           FTsize)label_flagsr  s     r-   has_level_labelr,  	  s;     1A+a.A"5$(S.r/   c                   | j                   }t        j                  |      }d}|t        j                  j                  k\  r t        | j                        }d|z  }d|z  }n|t        j                  k(  rd}d}n|t        j                  k(  rd}d}nn|t        j                  k(  rd}d}nV|t        j                  k(  rd}d	}n>|t        j                  k(  rd}d
}n&|t        j                  k(  rd}d}nt        d|       |||fS )Nr      im     i     4   r         Unsupported frequency: )_period_dtype_coder   from_period_dtype_codeFR_HRr>   r   _cresoFR_BUSFR_DAYFR_WKFR_MTHFR_QTRFR_ANNNotImplementedError)r   
dtype_code
freq_groupppdppmppys         r-   _get_periods_per_ymdrE    s   ((J11*=J
CY__***dkk*3hCi	y''	'	y''	'	y	&	y''	'	y''	'	y''	'!$;J<"HIIS=r/   c           	     N
   |j                   }t        |      \  }}}| t        |       t        |      }} || z
  dz   }t        j                         5  t        j
                  ddt               t        j
                  ddt               t        t        | |      t        ||      |      d d d        t        j                  |dt        j                  fd	t        fd
t        fdg      }j                  |d   d d  d|d   d d  d|d	   ddg<   |d	   |d
   |d   fd||k  rt        d      t        d      }	t        d      d<fd}
d=fd}d=fd}||dz  k  r
 |d       |S ||dz  k  r
 |d       |S ||dz  k  r
 |d       |S ||dz  k  r
 |d       |S ||d z  k  r
 |d!       |S ||d"z  k  r
 |d#       |S ||d$z  k  r
 |d       |S ||d%z  k  r
 |d       |S ||d&z  k  r
 |d       |S ||d'z  k  r
 |d!       |S ||d(z  k  r
 |d#       |S ||d)z  k  r |
dd*       |S ||d+z  k  r |
dd*       |S ||d,z  k  r |
d-d*       |S ||d)z  k  r |
d(d       |S ||d.z  k  r |
d'd       |S d|	<   d<   d/<   d0|	<   d1<   t              s$t        |	      sd1       <   |S d1 |	      <   |S ||d.z  k  rt        d      }	d|	<   |t         j"                  j$                  k  rd|d
<   nt        d      d|d
   <   t        d2      }t        d      d/|<   d3|	<   d4<   t              s$t        |	      sd4 |      <   |S d4 |	      <   |S |d5|z  k  r[t        d      t        d      }	t        d2      }d|	<   d|<   d*<   d*|	<   d6|	<   d7<   t              sd7 |	      <   |S |d)|z  k  r:t        d      t        d8      }t        d      }	d|<   d|	<   d6|<   d7<   |S |d.|z  k  rPt        d      t        d      }	d<   d|	<   d*<   |	   j&                  }|	|dk(  |d9k(  z     }d6|<   d7<   |S |d:|z  k  r.t        d      t        d8      }d<   d|<   d*<   d;<   |S t        d         j(                  }||z  }t+        |      \  }}||z  dk(     }d|<   ||z  dk(     }d|<   d;|<   |S # 1 sw Y   gxY w)>Nr   r   r   r   r   r   r   )r   r   r   valmajmin)r   z|S20dtyper   r   Tr   r   c                V    | d   dk(  r| j                   dkD  rdz  dkD  r| d   S | d   S )Nr   r   r(  r)  )r+  	vmin_origs    r-   first_labelz"_daily_finder.<locals>.first_labelb  s<    Nak&6&6&:)a-SVAVq>!q>!r/   daymonthyearc                    j                   }t        d      }d<   d	||| z  dk(  z  <   d||| z  dk(  z  <   d<   d<   |rt        
      sd       <   y y y )NrP   Tr   r   %H:%M
%d-%b%H:%M
%d-%b
%Y)rP   r  r,  )label_intervalforce_year_starttargetr"  dates_	day_startrO  info_fmtinfo_majinfo_minrN  
year_starts       r-   _hour_finderz#_daily_finder.<locals>._hour_findern  s    [[F%ff5D"&HY>BHTVn49:;>EHTVn49:;"0HY#5HZ 
I(N3EY/0 )Or/   c                    j                   }t        d      }t        d      }d|<   d||| z  dk(  z  <   d||| z  dk(  z  <   d<   d	<   y )NrP   rQ   Tr   r   rT  rU  )rQ   r#  r  )
rV  rX  
hour_startr"  rY  rZ  r[  r\  r]  r^  s
       r-   _minute_finderz%_daily_finder.<locals>._minute_findery  st    ]]F&vv6J%fh7D#'HZ >BHTVn49:;>EHTVn49:;"0HY#5HZ r/   c                    j                   }t        d      }t        d      }d|<   d||| z  dk(  z  <   d||| z  dk(  z  <   d<   d	<   y )NrQ   rR   Tr   r   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rR   r#  r  )
rV  rX  minute_startr"  rY  rZ  r[  r\  r]  r^  s
       r-   _second_finderz%_daily_finder.<locals>._second_finder  st    ]]F(:L%fh7D%)H\">BHTVn49:;>HHTVn49:;"3HY#8HZ r/   i.  ip  r   i`	  r  i  r   i      i        F   r   r2  r         @Fg      ?g      ?r0  r3  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r  %Y)rV  r   rW  boolrs   r   )rV  r   rs   r   )r5  rE  r   r   r   r   r   r   r   r*   zerosint64rr  r   r#  r,  r   r7  r>   rQ  rR  r  )r  r  r   r@  periodsperdayperiodspermonthperiodsperyearspaninfomonth_startr_  rb  re  
week_startquarter_startmonth_break
jan_or_jul
year_breakr  
min_anndef
maj_anndef	major_idx	minor_idxrY  rZ  rO  r[  r\  r]  rN  r^  s                          @@@@@@@@r-   _daily_finderr  =  s9    ((J5I$5O2M?N IIs4y4T$;?D		 	 	" 
;m	
 	7-	
 D1t$/

 88eRXX&t}oVD [[DKNDKNDKBE{HE{HE{H" !&%0	#FG4"662
		F 		F	6 	6	9 	9 -%''1h Kg MD((1d Kc MD((1` K_ MD((2\ K[ MC''2X KW MC''2T KS MC''1P KO MB&&1L KK MB&&1H KG MB&&2D KC MA%%2@ K MC''E"| K{ MC''E"x Kw MD((E"t Ks MC''D!p Ko MA%%T"l Ki %)H[!"&HY"&HY$,H[!#/HZ ":y9&{I>7CH[34Z KW :FH[56V KQ 
1$	$#FG4 $	---DK%fe4I%)DK	""662
"662
# (+z95";	:4@Z01r Ko 6B[12n Kk 
&	&"662
#FG4"662
 $#$ % $'z9519H[-.T KQ 
~%	%"662
%fi8#FG4"& $"&'B K? 
^#	#"662
#FG4# $$[)// +"2{a7G!HI
#'* K' 
n$	$"662
%fi8#"&$# K #662
J',,
&#>v#F Z
Z 71 <>	"
Z 71 <>	""Ks
 
s   ATT$c                   t        |      \  }}}| }t        |       t        |      }} || z
  dz   }t        j                  |dt        fdt        fdt        fdg      }t        j
                  | |dz         |d<   |d   }d|d<   |d	z  d
k(  j                         d
   }	|d   }
|d   }|d|z  k  r;d|
|	<   d|d<   d|d d  d||	<   t        |	|      s|j                  dkD  rd}nd
}d||<   |S |d|z  k  r4|dz  d
k(  j                         }d|
|	<   d|d   |<   d|d<   d||<   d||	<   |S |d|z  k  r'd|
|	<   d|d<   |d	z  d
k(  |d	z  dk(  z  }d||<   d||	<   |S |d|z  k  r*|dz  d
k(  j                         }d|
|	<   d|d   |<   d||	<   |S ||z  }t        |      \  }}||	   d	z  dz   }|	||z  d
k(     }d|
|<   d|d   |	||z  d
k(     <   d||<   |S )Nr   rH  rI  rJ  r   z|S8rK  r   r   r2  r   rl  Trm  rn  rj  r0  r3  r   r  rq  
rE  r   r*   rs  rr  aranger   r,  r*  r  )r  r  r   r   rw  rN  rx  ry  rY  r^  r\  r[  idxr|  r~  r  r  r  yearsr  s                       r-   _monthly_finderr    s   /5Aq.IIs4y4T$;?D 88eS\E4=5$-PD ))D$(+DK%[FDK2+"++-a0JE{HE{Htn$$#U'z95{{Q$HSML KI 
~%	%!q113# &*UM"U"&'6 K3 
^#	##UrkQ&6B;!+;<
#'& K# 
n$	$!q113#%)UM"# K &#>v#F Zz"b(1,
 2a 79	"=AUJ
 2a 79:"Kr/   c                   t        |      \  }}}| }t        |       t        |      }} || z
  dz   }t        j                  |dt        fdt        fdt        fdg      }t        j
                  | |dz         |d<   d|d<   |d   }|d   }	|d   }
|d	z  d
k(  j                         d
   }|d|z  k  r;d|	|<   d|d<   d|
d d  d|
|<   t        ||      s|j                  dkD  rd}nd
}d|
|<   |S |d|z  k  rd|	|<   d|d<   d|
|<   |S ||   d	z  dz   }||z  }t        |      \  }}|||z  d
k(     }d|	|<   d|d   |||z  d
k(     <   d|
|<   |S )Nr   rH  rI  rJ  r  rK  r   r   r3  r   g      @TzQ%qzQ%q
%Fr  z%Fi  r  )r  r  r   r   rw  rN  rx  ry  rY  r\  r[  r^  r  r  r  r  r  r  s                     r-   _quarterly_finderr  M  s   /5Aq.IIs4y4T$;?D88eS\E4=5$-PD ))D$(+DKDK%[FE{HE{H1*/**,Q/Js^###U(z95{{Q%HSM" K 
n$	$#U# K z"a'$.&#>v#F Z
 2a 79	"=AUJ
 2a 79:"Kr/   c                Z   t        |       t        |dz         }} || z
  dz   }t        j                  |dt         fdt        fdt        fdg      }t        j                  | |dz         |d<   d|d<   |d   }t        |      \  }}||z  d	k(  }||z  d	k(  }	d
|d   |<   d
|d   |	<   d|d   |<   |S )Nr   rH  rI  rJ  r  rK  r   r   r   Trq  )r   r*   rs  rr  r  r  )
r  r  r   rx  ry  rY  r  r  r  r  s
             r-   _annual_finderr  }  s     Is4!8}4T$;?D88eS\E4=5$-PD ))D$(+DKDK%[F:4@Z#q(I#q(I!DK	!DK	!DK	Kr/   c                b   | j                   }t        j                  |      }|t        j                  k(  rt        S |t        j
                  k(  rt        S |t        j                  k(  rt        S |t        j                  j                  k\  s|t        j                  k(  rt        S t        d|       )Nr4  )r5  r   r6  r>  r  r=  r  r<  r  r9  r>   r;  r  r?  )r   r@  fgroups      r-   
get_finderr    s    ((J--j9F!!!	9##	#  	9##	#
	((..
.6Y__3L!$;J<"HIIr/   c                  d    e Zd ZU dZded<   	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZd Zd Zd Zy)TimeSeries_DateLocatora  
    Locates the ticks along an axis controlled by a :class:`Series`.

    Parameters
    ----------
    freq : BaseOffset
        Valid frequency specifier.
    minor_locator : {False, True}, optional
        Whether the locator is for minor ticks (True) or not.
    dynamic_mode : {True, False}, optional
        Whether the locator should work in dynamic mode.
    base : {int}, optional
    quarter : {int}, optional
    month : {int}, optional
    day : {int}, optional
    r   rb   Nc	                    t        |d      }|| _        || _        |||c| _        | _        | _        || _        || _        d| _        || _	        t        |      | _        y NTr   r   )r   r   basero  rQ  rP  isminor	isdynamicoffsetplot_objr  finder)	r{   r   minor_locatordynamic_moder  ro  rQ  rP  r  s	            r-   r|   zTimeSeries_DateLocator.__init__  s\     .		07,tz48$%  &r/   c                    | j                  ||| j                        }| j                  rt        j                  |d   |d         S t        j                  |d   |d         S )z'Returns the default locations of ticks.rJ  rH  rI  )r  r   r  r*   compress)r{   r  r  r   s       r-   _get_default_locsz(TimeSeries_DateLocator._get_default_locs  sQ    ++dD$))4<<;;wu~wu~>>{{75>75>::r/   c                    t        | j                  j                               }|\  }}||k  r||}}| j                  r| j	                  ||      }|S | j
                  }t        ||      \  }}|dz   |z  }t        t        ||dz   |            }|S )z"Return the locations of the ticks.r   )	r`   rb   r   r  r  r  r   r_   range)r{   vir  r  rz   r  rY   r   s           r-   r   zTimeSeries_DateLocator.__call__  s     499..01
d$;t$D>>))$5D  99DD$'FQET>D dD1Hd34Dr/   c                    | j                   j                         \  }}| j                  ||      }|ddg   \  }}||k(  r
|dz  }|dz  }t        j                  j                  ||      S )zf
        Sets the view limits to the nearest multiples of base that contain the
        data.
        r   r   r   )rb   r   r  rj   
transformsr  )r{   r  r  rz   s       r-   r  z TimeSeries_DateLocator.autoscale  sm     yy224t%%dD1QG}t4<AIDAID~~))$55r/   )FTr   r   r   r   N)r   r   r  rr  r  rr  r  r   ro  r   rQ  r   rP  r   rs   r   )	rt   ru   rv   __doc____annotations__r|   r  r   r  rq   r/   r-   r  r    s    " J
 $!'' ' 	'
 ' ' ' ' 
'*;&6r/   r  c                  R    e Zd ZU dZded<   	 	 	 d		 	 	 	 	 	 	 d
dZd ZddZdddZy)TimeSeries_DateFormattera  
    Formats the ticks along an axis controlled by a :class:`PeriodIndex`.

    Parameters
    ----------
    freq : BaseOffset
        Valid frequency specifier.
    minor_locator : bool, default False
        Whether the current formatter should apply to minor ticks (True) or
        major ticks (False).
    dynamic_mode : bool, default True
        Whether the formatter works in dynamic mode or not.
    r   rb   Nc                    t        |d      }d | _        || _        g | _        d | _        || _        || _        d| _        || _        t        |      | _
        y r  )r   formatr   rz   
formatdictr  r  r  r  r  r  )r{   r   r  r  r  s        r-   r|   z!TimeSeries_DateFormatter.__init__  sT     .	!	15$%  &r/   c           	     P   | j                  ||| j                        }| j                  r3t        j                  |d   t        j
                  |d         z  |      }nt        j                  |d   |      }|D ci c]
  \  }}}}|| c}}}| _        | j                  S c c}}}w )z"Returns the default ticks spacing.rJ  rI  )r  r   r  r*   r  logical_notr  )r{   r  r  ry  r  rd   r   fs           r-   _set_default_formatz,TimeSeries_DateFormatter._set_default_format!  s    {{4tyy1<<[[er~~d5k/J!JDQF[[ed3F4:;;LQ1a1a4; <s   <B!c                    || _         t        | j                  j                               \  }}||k  r||}}| j	                  ||       y)zSets the locations of the ticksN)rz   r`   rb   r   r  )r{   rz   r  r  s       r-   set_locsz!TimeSeries_DateFormatter.set_locs,  sF    
 	TYY88:;t$; $4T  t,r/   c                   | j                   y| j                   j                  |d      }t        |t        j                        r|j                  d      }t        j                         5  t        j                  ddt               t        t        |      | j                        }d d d        t        t              sJ |j                  |      S # 1 sw Y   ,xY w)Nr   zutf-8r   r   r   rG  )r  rI   rB   r*   bytes_decoder   r   r   r   r   r   r   r   )r{   rd   r   r   r   s        r-   r   z!TimeSeries_DateFormatter.__call__8  s    ??"//%%a,C#ryy)jj)((* @''9*
  ATYY?@ ff---??3''@ @s   )=CC)FTN)r   r   r  rr  r  rr  rs   r   r   r   r   )	rt   ru   rv   r  r  r|   r  r  r   rq   r/   r-   r  r    sS     J
 $!'' ' 	' 
'$	
-(r/   r  c                  P     e Zd ZU dZdd fdZded<   ed	d
d       ZdddZ xZ	S )TimeSeries_TimedeltaFormatterzR
    Formats the ticks along an axis controlled by a :class:`TimedeltaIndex`.
    c                0    || _         t        | 	          y r#   )rK   superr|   )r{   rK   	__class__s     r-   r|   z&TimeSeries_TimedeltaFormatter.__init__O  s    	r/   r   rb   c                L   t        | d|z        \  }}t        |d      \  }}t        |d      \  }}t        |d      \  }}t        |d||z
  z  z        }	t        |      ddt        |      ddt        |      d}|dkD  r|d|	d| d	z  }|dk7  rt        |      d	d
| }|S )z8
        Convert seconds to 'D days HH:MM:SS.F'
        r   rN   r   02d:r   .0rY   z days )r   r   )
rd   r   
n_decimalsexpr   nsr   r   rY   decimalss
             r-   format_timedelta_ticksz4TimeSeries_TimedeltaFormatter.format_timedelta_ticksU  s    
 q"c'"2a}1a}1a}1rB:#34451vcl!CF3<qQ5>1Xa
|1_-..A6q6!*F1#&Ar/   c                >   ddddd| j                      }t        | j                  j                               \  }}t	        t        t        j                  t        j                  dd|z  z  t        ||z
        z                    |      }| j                  ||||      S )N	   r   r0  r   )r  r   r   r   r   r   )rK   r`   rb   r   rJ  r   r*   ceillog10r   r  )r{   rd   r   r  r  r  r  s          r-   r   z&TimeSeries_TimedeltaFormatter.__call__f  s    aqq1$))<TYY88:;tRWWRXXcBGmc$+>N.N%OPQSVW
**1c:sCCr/   )r  )rK   r   )r  )r  r   r  r   rs   rX   r   r   )
rt   ru   rv   r  r|   r  rw   r  r   __classcell__)r  s   @r-   r  r  J  s2     J  D Dr/   r  )rs   z-list[tuple[type, type[mdates.DateConverter]]])r5   r   rs   r   )rs   zGenerator[None]r   )rT   z	pydt.timers   floatr   )rs   ztuple[int, int])r!  r   r   rX   rs   npt.NDArray[np.intp])r!  r   r   rX   rs   znpt.NDArray[np.bool_])r+  r  r  r  rs   rr  )r   r   rs   ztuple[int, int, int])r  r  r  r  r   r   rs   z
np.ndarray)g
__future__r   
contextlibr   r&   r   r7   typingr   r   r   r   
matplotlibrj   matplotlib.datesr!  r   matplotlib.unitsunitsr@   numpyr*   pandas._libsr	   pandas._libs.tslibsr
   r   pandas._libs.tslibs.dtypesr   r   pandas._typingr   r   pandas.core.dtypes.commonr   r   r   r   r   pandasr   r   r   pandas.core.commoncorecommonr   pandas.core.indexes.datetimesr   pandas.core.indexes.periodr   r   r   pandas.core.tools.datetimesr   	datetimescollections.abcr   matplotlib.axisr   pandas._libs.tslibs.offsetsr   r   r!   r  r.   r9   contextmanagerr2   r<   r=   rV   r[   ConversionInterfacer)   rk   	Formatterrm   DateConverterr%   r   r$   r   r   r   r   r   r   r  r#  r  r,  rE  cacher  r  r  r  r  Locatorr  r  r  rq   r/   r-   <module>r     s+   "    
   ! !  
  
 !   4 
 , +)$6' 
D 	
  *'.
F.. 6%1CJJ(( %1V0f** 0f	6E
,, E
PIf66 I
?F22 ?4K,++ K,j&, !H D DN D DN , ,^  ,J"Q6SZZ// Q6rI(szz33 I(X DCJJ$8$8  Dr/   