
    cMh                       d dl mZ d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	m
Z
mZ d dlZd dlmZ d dlmZmZm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l0m1c m2Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m1c m;c m<Z; e	rd dl=m>Z> d dl?m@Z@ d dlAmBZB i ZCd ZDdSdZEejF        dTd            ZGdUdZHdUdZIdVdZJd  ZK G d! d"ejL                  ZM G d# d$e          ZN G d% d&ejO                  ZPd' ZQ G d( d)ejO                  ZR G d* d+ejS                  ZT G d, d-ejU                  ZV G d. d/ejW                  ZXdWdXd3ZYdYd5ZZdZd;Z[d[d=Z\d\dAZ]d]dEZ^ej_        d^dH            Z`ej_        d^dI            Zaej_        d^dJ            Zbej_        d^dK            Zcd_dLZd G dM dNe          Ze G dO dPe          Zf G dQ dRe          ZgdS )`    )annotationsN)datetime	timedeltatzinfo)TYPE_CHECKINGAnycast)AutoLocator	FormatterLocator)nonsingular)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)
BaseOffsetc                     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    e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsr0   K   sL    	%&	!	)*	%&	M"	)*E L    funcr   returnc                l     t          j                    fd            }t          t          |          S )z/
    Decorator applying pandas_converters.
    c                 d    t                      5   | i |cd d d            S # 1 swxY w Y   d S r%   )pandas_converters)argskwargsr2   s     r/   wrapperz6register_pandas_matplotlib_converters.<locals>.wrapper\   s       	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   %)))	functoolswrapsr	   r   )r2   r9   s   ` r/   %register_pandas_matplotlib_convertersr<   W   sE    
 _T) ) ) ) ) 7r1   Generator[None, None, None]c               #     K   t          d          } | rt                       	 dV  | dk    rt                       dS dS # | dk    rt                       w w xY 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/   r6   r6   d   sn       @AAE 


F??LLLLL ?5F??LLLL s	   ? ANonec                     t                      } | D ]f\  }}|t          j        v r<t          t          j        |         |          st          j        |         }|t          |<    |            t          j        |<   gd S r%   )r0   munitsregistry
isinstance
_mpl_units)r.   type_clspreviouss       r/   r@   r@   z   sv    KKE ' '
sFO##Jvu7Ms,S,S#u-H (Ju!$' 'r1   c                 j   t                      D ]R\  } }t          t          j                            |                     |u rt          j                            |            St                                          D ]7\  }}t          |          t          t          t          hvr|t          j        |<   8d S r%   )r0   typerE   rF   getpoprH   itemsr&   r'   r+   )rI   rJ   unit	formatters       r/   rA   rA      s    kk ' '
s##E**++s22O&&& &++-- . .i	??#4o}"UUU$-FOD!. .r1   tm	pydt.timefloatc                V    | j         dz  | j        dz  z   | j        z   | j        dz  z   }|S )Ni  <   @B )hourminutesecondmicrosecond)rS   tot_secs     r/   _to_ordinalfr^      s0    gnry2~-	9BNU<RRGNr1   c                    t          | t                    r0t          |           }t          |                                          S t          | t
          j                  rt          |           S | S r%   )rG   strr   r^   r*   r(   )dparseds     r/   time2numrc      sZ    !S +1FKKMM***!TY AHr1   c                  T    e Zd Zed             Zedd            Zed	d            ZdS )
r+   c                v   t           t          j        f}t          | |          st	          |           st          |           rt          |           S t          | t                    r|                     t                    S t          | t          t          t          j        t          f          rd | D             S | S )Nc                ,    g | ]}t          |          S  )rc   ).0xs     r/   
<listcomp>z)TimeConverter.convert.<locals>.<listcomp>   s    ///AHQKK///r1   )r`   r(   r*   rG   r   r   rc   r   maplisttupler,   ndarray)rB   rQ   axisvalid_typess       r/   convertzTimeConverter.convert   s    DI&e[)) 	#Z->-> 	#(5// 	#E??"eU## 	'99X&&&edE2:u=>> 	0//////r1   r3   munits.AxisInfo | Nonec                z    | dk    rd S t                      }t          |          }t          j        ||d          S )Nr*   )majlocmajfmtlabel)r
   TimeFormatterrE   AxisInfo)rQ   ro   rt   ru   s       r/   axisinfozTimeConverter.axisinfo   s=    6>>4v&&fV6JJJJr1   r`   c                    dS )Nr*   rg   ri   ro   s     r/   default_unitszTimeConverter.default_units   s    vr1   N)r3   rr   )r3   r`   )__name__
__module____qualname__staticmethodrq   ry   r|   rg   r1   r/   r+   r+      sq          \ K K K \K    \  r1   r+   c                       e Zd Zd
dZdddZd	S )rw   r3   rC   c                    || _         d S r%   )locs)selfr   s     r/   __init__zTimeFormatter.__init__   s    			r1   r   pos
int | Noner`   c                R   d}t          |          }t          ||z
  dz            }|dz  }|dz  }t          |d          \  }}t          |d          \  }	}t          |	d          \  }
}	|dk    r*t          j        |	|||                              |          S |dk    r2t          j        |	|||                              |          dd         S |dk    r)t          j        |	||                              d	          S t          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.%frX     rW      r   N%H:%M:%S%H:%M)introunddivmodr(   r*   strftime)r   ri   r   fmtsmsusmsusmh_s              r/   __call__zTimeFormatter.__call__   s   $ FFa!eu_%%T\D[a}}1a}}1a}}1779Q1d++44S9991WW9Q1d++44S99#2#>>!VV9Q1%%..z:::yA''000r1   Nr3   rC   r   r   r   r3   r`   )r}   r~   r   r   r   rg   r1   r/   rw   rw      sA           !1 !1 !1 !1 !1 !1 !1r1   rw   c                  :    e Zd Zed             Zed             ZdS )r'   c                    t          |           rfd| D             } nt                              |           } | S )Nc                H    g | ]}t                               |          S rg   )r'   _convert_1d)rh   vro   unitss     r/   rj   z+PeriodConverter.convert.<locals>.<listcomp>   s+    RRRao11!UDAARRRr1   )r   r'   r   )valuesr   ro   s    ``r/   rq   zPeriodConverter.convert   sO    v&& 	FRRRRR6RRRFF$00EEFr1   c                   t          d          st          d          t          t          t          t
          j        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#          | j                  cd d d            S t          | t&                    r+|                     j                  j        cd d d            S t          | t,                    r$|                     fd          cd d d            S t1          j        | d	          d
k    r't'          | j                  j        cd d d            S t          | t4          t6          t          j        t,          f          rfd| D             cd d d            S 	 d d d            n# 1 swxY w Y   | S )Nfreqz/Axis must have `freq` set to convert to Periodsignore#Period with BDay freq is deprecatedcategoryPeriodDtype\[B\] is deprecatedc                .    t          | j                  S r%   get_datevaluer   r{   s    r/   <lambda>z-PeriodConverter._convert_1d.<locals>.<lambda>  s    M!TY,G,G r1   F)skipnaperiod)r   c                :    g | ]}t          |j                  S rg   r   )rh   ri   ro   s     r/   rj   z/PeriodConverter._convert_1d.<locals>.<listcomp>  s%    DDDa33DDDr1   )hasattr	TypeErrorr`   r   r   r(   r)   r*   r,   r-   warningscatch_warningsfilterwarningsFutureWarningrG   r   r   r   r   r   asfreqasi8r   rk   r   infer_dtyperl   rm   rn   )r   r   ro   rp   s     ` r/   r   zPeriodConverter._convert_1d   s    tV$$ 	OMNNNHfdiBMR$&& 	E 	E#?-    #;m    6;//Ef%%E F##E
 %VTY77	E 	E 	E 	E 	E 	E 	E 	E FK00 	E}}TY//4	E 	E 	E 	E 	E 	E 	E 	E FE** Ezz"G"G"G"GHH!	E 	E 	E 	E 	E 	E 	E 	E" 666(BB #6	:::?)	E 	E 	E 	E 	E 	E 	E 	E* FT5"*e$DEE EDDDDVDDD-	E 	E 	E 	E 	E 	E 	E 	E*E+	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E. s+   )A;G?13G?1,G?*4G?+:G??HHN)r}   r~   r   r   rq   r   rg   r1   r/   r'   r'      sH          \   \  r1   r'   c                   t          | t                    r|                     |          j        S t          | t          t
          t          j        t          j        t          j
        f          rt          | |          j        S t          |           s;t          |           s,t          | t          j        t          f          r| j        dk    r| S | d S t!          d|  d          )N   zUnrecognizable date '')rG   r   r   ordinalr`   r   r(   r)   r*   r,   r-   r   r   rn   r   size
ValueError)r)   r   s     r/   r   r     s    $ {{4  ((	D3$)TYN	O	O 	dD!!))4D>> tbj%011 8<yA~~	t
4T444
5
55r1   c                  R    e Zd Zed             Zed             Zed	d            ZdS )
r&   c                    t          |           rfd| D             } nt                              |           } | S )Nc                H    g | ]}t                               |          S rg   )r&   r   )rh   r   ro   rQ   s     r/   rj   z-DatetimeConverter.convert.<locals>.<listcomp>%  s,    SSSq'33AtTBBSSSr1   )r   r&   r   )r   rQ   ro   s    ``r/   rq   zDatetimeConverter.convert!  sQ     v&& 	GSSSSSFSSSFF&2264FFFr1   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        |           } n# t0          $ r Y nw xY wt          j        |           } | S )Nc                t    	 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_parse,  sF    u'8'@'@AAA   s   %( 77)rG   r   r(   r)   r,   r-   r*   r   r   r   r   r`   rl   rm   rn   r   r   r   comasarray_tuplesafer   r   r   r   r   )r   rQ   ro   r   s       r/   r   zDatetimeConverter._convert_1d*  sv   	 	 	 fxBM49MNN 	-?6*** 	-8F#3#3 	-M$$ 	-9V$$$ubj% HII 	-&&)) ' v&%(( 'fbj11 7.v66'' >&+A+A *622    _V,,Fs   E& &
E32E3rQ   tzinfo | Noner3   munits.AxisInfoc                    | }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  r   i   )rt   ru   rv   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr(   r)   rE   rx   )rQ   ro   r   rt   ru   datemindatemaxs          r/   ry   zDatetimeConverter.axisinfoN  sx     &"---(B777)D!Q'')D!Q''&GWCU
 
 
 	
r1   N)rQ   r   r3   r   )r}   r~   r   r   rq   r   ry   rg   r1   r/   r&   r&      si          \ ! ! \!F 
 
 
 \
 
 
r1   r&   c                      e Zd Zdd	dZdS )
r   N%Y-%m-%d
defaultfmtr`   r3   rC   c                J    t           j                            | |||           d S r%   )r   AutoDateFormatterr   )r   locatorr   r   s       r/   r   z PandasAutoDateFormatter.__init__c  s%     ))$ZHHHHHr1   )Nr   )r   r`   r3   rC   )r}   r~   r   r   rg   r1   r/   r   r   b  s4        I I I I I I Ir1   r   c                      e Zd Zd Zd ZdS )r   c                   ||z
                                   }t          |          | j        k     rd| _        t	          | j                  }|                    | j                    |j        j        | j        	                                   |j        j
        | j                                          |S t          j                            | ||          S )z*Pick the best locator based on a distance.)total_secondsabsminticks_freqMilliSecondLocatorr   set_axisro   set_view_intervalget_view_intervalset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)r   dmindmaxr]   r   s        r/   r   z!PandasAutoDateLocator.get_locatorh  s    $;--//w<<$-''DJ(11GTY''' +GL*,,..  +GL*,,..  N%11$dCCCr1   c                @    t                               | j                  S r%   )r   get_unit_genericr   r   s    r/   	_get_unitzPandasAutoDateLocator._get_unit}  s    !224:>>>r1   N)r}   r~   r   r   r   rg   r1   r/   r   r   g  s5        D D D*? ? ? ? ?r1   r   c                  H    e Zd ZdZddZd Zed             Zd Zd Z	d	 Z
d
S )r   gLH>r3   rC   c                T    t           j                            | |           d| _        d S )Ng      ?)r   DateLocatorr   	_interval)r   r   s     r/   r   zMilliSecondLocator.__init__  s&    ##D"---r1   c                ,    |                      d          S )Nr   )r   r   s    r/   r   zMilliSecondLocator._get_unit  s    $$R(((r1   c                h    t           j                            |           }|dk     rt          j        S |S )Nr   )r   RRuleLocatorr   r   UNIT)r   rQ   s     r/   r   z#MilliSecondLocator.get_unit_generic  s/    "33D99!88%**r1   c                   	 |                                  \  }}n# t          $ r g cY S w xY wt          j        ||f          \  }}||z
  dz  dz  }d}dD ]}|||dz
  z  k    r	|| _         nd| _        ||z
  |                                 |                                 z  z  }|| j        dz  k    r&t          d|d	d
| d| d| j        dz  d	d	          |                                 }| d}	| j	        
                    d           }
|                    d           }|                    d           }t          |||	|
                              t                    }	 t          |          dk    r)|                     t          j        |                    }|S n# t"          $ r Y nw xY wt          j        ||g          }|S )NiQ r      )r   
   2   d      i  r   g     @@   z)MillisecondLocator estimated to generate ra   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_datesr   limss                   r/   r   zMilliSecondLocator.__call__  s:   	++--JD$$ 	 	 	III	 _dD\22
dd{e#d*2 	$ 	$Hh"2Q"6777!)#DNN4KDNN$4$4t7I7I7K7K$KLdma'''0U0 0+/0 0590 0)/0 0 0   %%''W^^D!!\\\&&\\\&&RRdrBBBII&QQ		9~~!!,,V_Y-G-GHH "  	 	 	D	 d|,,s    ))!;F 
F+*F+c                    | j         S r%   )r   r   s    r/   r  z MilliSecondLocator._get_interval  s
    ~r1   c                    |                                  \  }}t          j        |          }t          j        |          }|                     ||          S )z@
        Set the view limits to include the data range.
        )datalim_to_dtr   r   r   )r   r   r   vminvmaxs        r/   	autoscalezMilliSecondLocator.autoscale  sM    
 ''))
dt$$t$$d+++r1   Nr   )r}   r~   r   r   r   r   r   r   r   r  r  rg   r1   r/   r   r     s        #D   ) ) )   \+ + +Z  
, 
, 
, 
, 
,r1   r   r   r   r   c           
     $   t          |           }t          j        |          }t          |           |z
  }t	          d|z  d          \  }}t	          d|z  d          \  }}t	          d|z  d          \  }}t          d|z            }|dk     rd}t          |j        |j        |j        t          |          t          |          t          |          |          }||                    |          }|dk    r|t          d|z
            z  }|S )	Nr   r   rW   rX   r   r   i6B )microseconds)
r   r   fromordinalrU   r   yearmonthday
astimezoner   )	ri   r   ixdt	remainderrY   rZ   r[   r\   s	            r/   _from_ordinalr)    s   	QB		b	!	!Ba2IR)^Q//OD)rI~q11FIrI~q11FIi)+,,KR	
263t99c&kk3v;;
 
B 
~]]2V
iY%<====Ir1   tuple[int, int]c                    | dk     rd\  }}nN| dk     rd\  }}nB| dk     rd\  }}n6| dk     rd\  }}n*| d	k     rd
\  }}n| dk     rd\  }}n| 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   rg   )nyearsmin_spacingmaj_spacingfactors       r/   _get_default_annual_spacingr4    s     {{%+"kk	"%+"kk	"%+"kk	#%,"kk	#%,"kk	#%-"kk4!#&,rk6C<k%%r1   datesr   r   r`   npt.NDArray[np.intp]c                V    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)r5  r   masks      r/   _period_breakr;    s(     eV,,D:dAr1   npt.NDArray[np.bool_]c                d    t          | |          }t          | d| j        z  z
  |          }||k    S )Nr   )getattrr   )r5  r   currentrK   s       r/   r8  r8    s6    eV$$Guq5:~-v66Hhr1   label_flagsr  boolc                `    | j         dk    s | j         dk    r| d         dk    r|dz  dk    rdS dS )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r   )r@  r  s     r/   has_level_labelrE    sD     1A+a.A"5"5$(S..utr1   r   r#   tuple[int, int, int]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}nf|t          j	        k    rd}d}nQ|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_HRrB   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_ymdr_  '  s   (J1*==J
CY_***dk**3hCi	y'	'	'	y'	'	'	y	&	&	y'	'	'	y'	'	'	y'	'	'!"HJ"H"HIIIS=r1   r  
np.ndarrayc           	         |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            n# 1 swxY w Y   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    rt          d          t          d          }	t          d          dBfd}
dCfd}dCfd}||dz  k     r |d           n3||d z  k     r |d!           n||d"z  k     r |d#           n||d$z  k     r |d%           n||d&z  k     r |d'           n||d(z  k     r |d)           n||d*z  k     r |d           n||d+z  k     r |d!           n||d,z  k     r |d#           n||d-z  k     r |d'           nm||d.z  k     r |d)           nW||d/z  k     r |
dd0           n@||d1z  k     r |
d!d0           n)||d2z  k     r |
d3d0           n||d/z  k     r |
d.d           n||d4z  k     r |
d-d           nd|	<   d<   d5<   d6|	<   d7<   t                    s.t          |	          sd7           <   nd7 |	          <   n||d4z  k    rt          d          }	d|	<   |t           j        j        k     rd|d
<   nt          d          d|d
         <   t          d8          }t          d          d5|<   d9|	<   d:<   t                    s.t          |	          sd: |          <   nd: |	          <   n|d;|z  k    rnt          d          t          d          }	t          d8          }d|	<   d|<   d0<   d0|	<   d<|	<   d=<   t                    sd= |	          <   nQ|d/|z  k    rFt          d          t          d>          }t          d          }	d|<   d|	<   d<|<   d=<   n|d4|z  k    rZt          d          t          d          }	d<   d|	<   d0<   |	         j        }|	|dk    |d?k    z           }d<|<   d=<   n|d@|z  k    r5t          d          t          d>          }d<   d|<   d0<   dA<   nat          d                   j        }||z  }t+          |          \  }}||z  dk             }d|<   ||z  dk             }d|<   dA|<   |S )DNr   r   r   r   r   r   r   )r  r  r   valmajmin)r   z|S20dtyper   r   Tr   r   c                d    | d         dk    r| j         dk    rdz  dk    r| d         S | d         S )Nr   r   rC  rD  )r@  	vmin_origs    r/   first_labelz"_daily_finder.<locals>.first_labelp  sB    Nak&6&:&:)a-SVAVAVq>!q>!r1   r$  r#  r"  label_intervalr   force_year_startrA  r3   rC   c                    j         }t          d          }d<   d	||| z  dk    z  <   d||| z  dk    z  <   d<   d<   |r t          
          sd           <   d S d S d S )NrY   Tr   r   %H:%M
%d-%b%H:%M
%d-%b
%Y)rY   r8  rE  )rk  rl  targetr:  dates_	day_startrj  info_fmtinfo_majinfo_minri  
year_starts       r/   _hour_finderz#_daily_finder.<locals>._hour_finder|  s    [F%ff55D"&HY>BHTVn49:;>EHTVn49:;"0HY#5HZ  F
I(N(N F3EY//000F F F Fr1   c                    j         }t          d          }t          d          }d|<   d||| z  dk    z  <   d||| z  dk    z  <   d<   d	<   d S )NrY   rZ   Tr   r   rn  ro  )rZ   r;  r8  )
rk  rp  
hour_startr:  rq  rr  rs  rt  ru  rv  s
       r/   _minute_finderz%_daily_finder.<locals>._minute_finder  s~    ]F&vv66J%fh77D#'HZ >BHTVn49:;>EHTVn49:;"0HY#5HZ   r1   c                    j         }t          d          }t          d          }d|<   d||| z  dk    z  <   d||| z  dk    z  <   d<   d	<   d S )NrZ   r[   Tr   r   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)r[   r;  r8  )
rk  rp  minute_startr:  rq  rr  rs  rt  ru  rv  s
       r/   _second_finderz%_daily_finder.<locals>._second_finder  s~    ]F(::L%fh77D%)H\">BHTVn49:;>HHTVn49:;"3HY#8HZ   r1   i.  ip  r  i`	  r.  i  r   i      i        F   r   rL  r         @Fg      ?g      ?rJ  rM  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r,  %Y)rk  r   rl  rA  r3   rC   )rk  r   r3   rC   )rO  r_  r   r   r   r   r   r    r   r,   zerosint64rA  r   r;  rE  r   rQ  rB   r#  r"  r4  )r  r  r   rZ  periodsperdayperiodspermonthperiodsperyearspaninfomonth_startrw  rz  r}  
week_startquarter_startmonth_break
jan_or_jul
year_breakr0  
min_anndef
maj_anndef	major_idx	minor_idxrq  rr  rj  rs  rt  ru  ri  rv  s                          @@@@@@@@r/   _daily_finderr  K  s    (J5I$5O5O2M?N IIIs4yy4T$;?D		 	"	" 
 
;m	
 	
 	
 	
 	7-	
 	
 	
 	
 D111t$///
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8eRX&t}oV  D [DKNDKNDKBE{HE{HE{H" " " " " !&%00	#FG44"6622
		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 -%'''N1MD(((N1MD(((N1MD(((N2MC'''N2MC'''N2MC'''N1MB&&&N1MB&&&N1MB&&&N2MA%%%N2MC'''LE""""MC'''LE""""MD(((LE""""MC'''LD!!!!MA%%%LT""""$(H[!"&HY"&HY$,H[!#/HZ ":y99 F&{I>> F7CH[[33449EH[[556 
1$	$	$#FG44 $	---DKK%fe44I%)DK	""6622
"6622
# (+z955 	B";	:: B4@Z00115A[112	&	&	&"6622
#FG44"6622
 $#$ % $'z955 	:19H[[--.	~%	%	%"6622
%fi88#FG44"& $"&'	^#	#	#"6622
#FG44# $$[)/ +"2{a7G!HI
#'	n$	$	$"6622
%fi88#"&$# #6622
J',
&#>v#F#F Z
Z 71 <>	"
Z 71 <>	""Ks   A)CCC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                                    d
         }	|d         }
|d         }|d|z  k    r=d|
|	<   d|d<   d|d d <   d||	<   t          |	|          s|j        dk    rd}nd
}d||<   n|d|z  k    r;|dz  d
k                                    }d|
|	<   d|d         |<   d|d<   d||<   d||	<   n|d|z  k    r(d|
|	<   d|d<   |d	z  d
k    |d	z  dk    z  }d||<   d||	<   n|d|z  k    r1|dz  d
k                                    }d|
|	<   d|d         |<   d||	<   nV||z  }t          |          \  }}||	         d	z  dz   }|	||z  d
k             }d|
|<   d|d         |	||z  d
k             <   d||<   |S )Nr   rc  rd  re  r   z|S8rf  r   r   rL  r   r  Tr  r  r  rJ  rM  r   r,  r  
r_  r   r,   r  rA  aranger9  rE  r   r4  )r  r  r   r   r  ri  r  r  rq  rv  rt  rs  idxr  r  r0  r  r  yearsr  s                       r/   _monthly_finderr    s   /55Aq.IIIs4yy4T$;?D 8eS\E4=5$-P  D )D$(++DK%[FDK2+"++--a0JE{HE{Htn$$$#U'z955 	%{Q$HSM	~%	%	%!q1133# &*UM"U"&'	^#	#	##UrkQ&6B;!+;<
#'	n$	$	$!q1133#%)UM"# &#>v#F#F Zz"b(1,
 2a 79	"=AUJ
 2a 79:"Kr1   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                                    d
         }|d|z  k    r<d|	|<   d|d<   d|
d d <   d|
|<   t          ||          s|j        dk    rd}nd
}d|
|<   no|d|z  k    rd|	|<   d|d<   d|
|<   nV||         d	z  dz   }||z  }t          |          \  }}|||z  d
k             }d|	|<   d|d         |||z  d
k             <   d|
|<   |S )Nr   rc  rd  re  r  rf  r   r   rM  r   g      @TzQ%qzQ%q
%Fr,  z%Fi  r  )r  r  r   r   r  ri  r  r  rq  rt  rs  rv  r  r  r0  r  r  r  s                     r/   _quarterly_finderr  [  s   /55Aq.IIIs4yy4T$;?D8eS\E4=5$-P  D )D$(++DKDK%[FE{HE{H1*/**,,Q/Js^####U(z955 	&{Q%HSM	n$	$	$#U# z"a'$.&#>v#F#F Z
 2a 79	"=AUJ
 2a 79:"Kr1   c                   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   rc  rd  re  r  rf  r   r   r   Tr  )r   r,   r  rA  r  r4  )
r  r  r   r  r  rq  r  r  r  r  s
             r/   _annual_finderr    s     IIs4!8}}4T$;?D8eS\E4=5$-P  D )D$(++DKDK%[F:4@@Z#q(I#q(I!DK	!DK	!DK	Kr1   c                >   | 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|           )NrN  )rO  r   rP  rX  r  rW  r  rV  r  rS  rB   rU  r  rY  )r   rZ  fgroups      r/   
get_finderr    s    (J-j99F!!!	9#	#	#  	9#	#	#
	(.
.
.6Y_3L3L!"HJ"H"HIIIr1   c                  H    e Zd ZU dZded<   	 	 	 	 	 	 	 dddZd Zd Zd ZdS )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"   ro   FTr   Nr   r#   minor_locatorrA  dynamic_modebaser   r  r#  r$  r3   rC   c	                    t          |d          }|| _        || _        |||c| _        | _        | _        || _        || _        d| _        || _	        t          |          | _        d S NT)	is_periodr   )r   r   r  r  r#  r$  isminor	isdynamicoffsetplot_objr  finder)	r   r   r  r  r  r  r#  r$  r  s	            r/   r   zTimeSeries_DateLocator.__init__  si     ...		07,tz48$%  &&r1   c                    |                      ||| j                  }| j        r!t          j        |d         |d                   S t          j        |d         |d                   S )z'Returns the default locations of ticks.re  rc  rd  )r  r   r  r,   compress)r   r  r  r   s       r/   _get_default_locsz(TimeSeries_DateLocator._get_default_locs  sW    ++dD$)44< 	?;wu~wu~>>>{75>75>:::r1   c                2   t          | j                                                  }|\  }}||k     r||}}| j        r|                     ||          }nC| j        }t          ||          \  }}|dz   |z  }t          t          ||dz   |                    }|S )z"Return the locations of the ticks.r   )	rm   ro   r   r  r  r  r   rl   range)r   vir  r  r   r  ra   r   s           r/   r   zTimeSeries_DateLocator.__call__  s     49..0011
d$;;t$D> 	5))$55DD9DD$''FQET>D dD1Hd3344Dr1   c                    | j                                         \  }}|                     ||          }|ddg         \  }}||k    r
|dz  }|dz  }t          ||          S )zf
        Sets the view limits to the nearest multiples of base that contain the
        data.
        r   r   r   )ro   r   r  r   )r   r  r  r   s       r/   r  z TimeSeries_DateLocator.autoscale  sl     y2244t%%dD11QG}t4<<AIDAID4&&&r1   )FTr   r   r   r   N)r   r#   r  rA  r  rA  r  r   r  r   r#  r   r$  r   r3   rC   )	r}   r~   r   __doc____annotations__r   r  r   r  rg   r1   r/   r  r    s          " JJJ
 $!' ' ' ' '*; ; ;  &' ' ' ' 'r1   r  c                  F    e Zd ZU dZded<   	 	 	 dddZd ZddZdddZdS )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"   ro   FTNr   r#   r  rA  r  r3   rC   c                    t          |d          }d | _        || _        g | _        d | _        || _        || _        d| _        || _        t          |          | _
        d S r  )r   formatr   r   
formatdictr  r  r  r  r  r  )r   r   r  r  r  s        r/   r   z!TimeSeries_DateFormatter.__init__  sa     ...	!	15$%  &&r1   c                   |                      ||| j                  }| j        r7t          j        |d         t          j        |d                   z  |          }nt          j        |d         |          }d |D             | _        | j        S )z"Returns the default ticks spacing.re  rd  c                    i | ]
\  }}}}||S rg   rg   )rh   ri   r   fs       r/   
<dictcomp>z@TimeSeries_DateFormatter._set_default_format.<locals>.<dictcomp>7  s"    ;;;LQ1a1a;;;r1   )r  r   r  r,   r  logical_notr  )r   r  r  r  r  s        r/   _set_default_formatz,TimeSeries_DateFormatter._set_default_format/  s    {{4ty11< 	4[er~d5k/J/J!JDQQFF[ed33F;;F;;;r1   c                    || _         t          | j                                                  \  }}||k     r||}}|                     ||           dS )zSets the locations of the ticksN)r   rm   ro   r   r  )r   r   r  r  s       r/   set_locsz!TimeSeries_DateFormatter.set_locs:  sX    
 	TY88::;;t$;; $4T  t,,,,,r1   r   r   r   r`   c                   | j         dS | j                             |d          }t          |t          j                  r|                    d          }t          j                    5  t          j        ddt                     t          t          |          | j                  }d d d            n# 1 swxY w Y   t          |t                    sJ |                    |          S )Nr   zutf-8r   r   r   rb  )r  rO   rG   r,   bytes_decoder   r   r   r   r   r   r   r   )r   ri   r   r   r   s        r/   r   z!TimeSeries_DateFormatter.__call__F  s)   ?"2/%%a,,C#ry)) *jj))(** @ @'9*   
  ATY???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ff-----??3'''s   'A B33B7:B7)FTN)r   r#   r  rA  r  rA  r3   rC   r   r   r   )	r}   r~   r   r  r  r   r  r  r   rg   r1   r/   r  r    s           JJJ
 $!' ' ' ' '$	 	 	
- 
- 
- 
-( ( ( ( ( ( (r1   r  c                  @    e Zd ZU dZded<   edd            ZdddZdS )TimeSeries_TimedeltaFormatterzR
    Formats the ticks along an axis controlled by a :class:`TimedeltaIndex`.
    r"   ro   
n_decimalsr   r3   r`   c                   t          | d          \  }}t          |d          \  }}t          |d          \  }}t          |d          \  }}t          |d|dz
  z  z            }t          |          ddt          |          ddt          |          d}|dk    r|d	|d
| dz  }|dk    rt          |          dd| }|S )z8
        Convert seconds to 'D days HH:MM:SS.F'
        i ʚ;rW   r   r   	   02d:r   .0ra   z days )r   r   )	ri   r   r  r   nsr   r   ra   decimalss	            r/   format_timedelta_ticksz4TimeSeries_TimedeltaFormatter.format_timedelta_ticks_  s    
 q%  2a}}1a}}1a}}1rB:>22331vv555CFF555Q555>>.X.
......A66q66&&&1&&Ar1   r   r   r   c                *   t          | j                                                  \  }}t          t	          t          j        t          j        dt          ||z
            z                                d          }| 	                    |||          S )Nl    h] r  )
rm   ro   r   re  r   r,   ceillog10r   r  )r   ri   r   r  r  r  s         r/   r   z&TimeSeries_TimedeltaFormatter.__call__p  sv    TY88::;;tRWRXkCt<L<L.L%M%MNNOOQRSS
**1c:>>>r1   N)r  r   r3   r`   r   r   )r}   r~   r   r  r  r   r  r   rg   r1   r/   r  r  X  sb           JJJ   \ ? ? ? ? ? ? ?r1   r  )r2   r   r3   r   )r3   r=   r   )rS   rT   r3   rU   r%   )r   r   r3   r   )r3   r*  )r5  r   r   r`   r3   r6  )r5  r   r   r`   r3   r<  )r@  r6  r  rU   r3   rA  )r   r#   r3   rF  )r  rU   r  rU   r   r#   r3   r`  )r   r#   )h
__future__r   
contextlibr   r(   r   r   r:   typingr   r   r	   r   matplotlib.datesr5  r   matplotlib.tickerr
   r   r   matplotlib.transformsr   matplotlib.unitsr   rE   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#   rH   r0   r<   contextmanagerr6   r@   rA   r^   rc   ConversionInterfacer+   rw   DateConverterr'   r   r&   r   r   r   r   r   r   r)  r4  r;  r8  rE  r_  cacher  r  r  r  r  r  r  r  rg   r1   r/   <module>r     s   " " " " " "                 
             
  ! ! ! ! ! !         
 . - - - - - ! ! ! ! ! !                               
                      
 !                 4 4 4 4 4 4         
 , + + + + + + + + + + + 7))))))$$$$$$666666 
	 	 	
 
 
 
    *' ' ' '. . . .   
      F.   6%1 %1 %1 %1 %1I %1 %1 %1V% % % % %f* % % %P6 6 6"?
 ?
 ?
 ?
 ?
, ?
 ?
 ?
DI I I I If6 I I I
? ? ? ? ?F2 ? ? ?4K, K, K, K, K,+ K, K, K,\    :& & & &,          ! ! ! !H D D D DN D D D DN , , , ,^    ,J J J J"Q' Q' Q' Q' Q'W Q' Q' Q'rI( I( I( I( I(y I( I( I(X? ? ? ? ?I ? ? ? ? ?r1   