o
    թZh-                     @  s  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l0m1  m2Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m1  m;  m<Z; e	rd dl=m>Z> d dl?m@Z@ d dlAmBZB i ZCdd ZDdeddZEejFdfddZGdgddZHdgdd ZIdhd$d%ZJd&d' ZKG d(d) d)ejLZMG d*d+ d+eZNG d,d- d-ejOZPd.d/ ZQG d0d1 d1ejOZRG d2d3 d3ejSZTG d4d5 d5ejUZVG d6d7 d7ejWZXdidjd;d<ZYdkd>d?ZZdldEdFZ[dmdHdIZ\dndMdNZ]dodRdSZ^dpdUdVZ_dpdWdXZ`dpdYdZZadpd[d\Zbdqd]d^ZcG d_d` d`eZdG dadb dbeZeG dcdd ddeZfdS )r    )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                  C  s4   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)pairs r-   \/var/www/html/lang_env/lib/python3.10/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsK   s   r/   funcr   returnc                   s    t   fdd}tt|S )z/
    Decorator applying pandas_converters.
    c                    s8   t    | i |W  d    S 1 sw   Y  d S r#   )pandas_converters)argskwargsr0   r-   r.   wrapper\   s   $z6register_pandas_matplotlib_converters.<locals>.wrapper)	functoolswrapsr   r   )r0   r6   r-   r5   r.   %register_pandas_matplotlib_convertersW   s   
r9   Generator[None, None, None]c                  c  sF    t d} | r
t  zdV  W | dkrt  dS dS | dkr"t  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)valuer-   r-   r.   r2   d   s   	
r2   Nonec                  C  sP   t  } | D ] \}}|tjv rttj| |stj| }|t|< | tj|< qd S r#   )r/   munitsregistry
isinstance
_mpl_units)r,   type_clspreviousr-   r-   r.   r<   z   s   
r<   c                  C  sb   t  D ]\} }ttj| |u rtj|  qt D ]\}}t|tt	t
hvr.|tj|< qd S r#   )r/   typer@   rA   getpoprC   itemsr$   r%   r)   )rD   rE   unit	formatterr-   r-   r.   r=      s   
r=   tm	pydt.timefloatc                 C  s(   | j d | jd  | j | jd  }|S )Ni  <   @B )hourminutesecondmicrosecond)rM   tot_secr-   r-   r.   _to_ordinalf   s   $rW   c                 C  s6   t | trt| }t| S t | tjrt| S | S r#   )rB   strr   rW   r(   r&   )dparsedr-   r-   r.   time2num   s   
r[   c                   @  s4   e Zd Zedd ZedddZeddd	Zd
S )r)   c                 C  sf   t tjf}t| |st| st| rt| S t| tr | tS t| t	t
tjtfr1dd | D S | S )Nc                 S  s   g | ]}t |qS r-   )r[   .0xr-   r-   r.   
<listcomp>   s    z)TimeConverter.convert.<locals>.<listcomp>)rX   r&   r(   rB   r   r   r[   r   maplisttupler*   ndarray)r>   rK   axisvalid_typesr-   r-   r.   convert   s   


zTimeConverter.convertr1   munits.AxisInfo | Nonec                 C  s*   | dkrd S t  }t|}tj||ddS )Nr(   )majlocmajfmtlabel)r	   TimeFormatterr@   AxisInfo)rK   rd   rh   ri   r-   r-   r.   axisinfo   s
   zTimeConverter.axisinforX   c                 C  s   dS )Nr(   r-   )r^   rd   r-   r-   r.   default_units   s   zTimeConverter.default_unitsN)r1   rg   )r1   rX   )__name__
__module____qualname__staticmethodrf   rm   rn   r-   r-   r-   r.   r)      s    

r)   c                   @  s"   e Zd ZdddZddd	d
ZdS )rk   r1   r?   c                 C  s
   || _ d S r#   )locs)selfrs   r-   r-   r.   __init__      
zTimeFormatter.__init__r   pos
int | NonerX   c                 C  s   d}t |}t|| d }|d }|d }t|d\}}t|d\}	}t|	d\}
}	|dkr:t|	||||S |dkrMt|	||||dd S |dkr[t|	||d	S t|	|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.%frQ     rP      r   N%H:%M:%S%H:%M)introunddivmodr&   r(   strftime)rt   r^   rw   fmtsZmsusmsusmh_r-   r-   r.   __call__   s   zTimeFormatter.__call__Nr1   r?   r   rw   rx   r1   rX   )ro   rp   rq   ru   r   r-   r-   r-   r.   rk      s    
rk   c                   @  s$   e Zd Zedd Zedd ZdS )r%   c                   2   t | r fdd| D } | S t|  } | S )Nc                      g | ]	}t | qS r-   )r%   _convert_1dr]   vrd   unitsr-   r.   r_          z+PeriodConverter.convert.<locals>.<listcomp>)r   r%   r   )valuesr   rd   r-   r   r.   rf      s
   zPeriodConverter.convertc                   s^  t  ds	tdttttjtjtj	f}t
  t
jddtd t
jddtd t| |s6t| s6t| rCt|  jW  d    S t| trV|  jjW  d    S t| trk|  fddW  d    S tj| d	d
dkrt|  jdjW  d    S t| tttjtfr fdd| D W  d    S W d    | S 1 sw   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                   s   t |  jS r#   get_datevaluer   )r^   rd   r-   r.   <lambda>  s    z-PeriodConverter._convert_1d.<locals>.<lambda>F)Zskipnaperiod)r   c                   s   g | ]}t | jqS r-   r   r\   r   r-   r.   r_     s    z/PeriodConverter._convert_1d.<locals>.<listcomp>)hasattr	TypeErrorrX   r   r   r&   r'   r(   r*   r+   warningscatch_warningsfilterwarningsFutureWarningrB   r   r   r   r   r   asfreqasi8r   r`   r   Zinfer_dtypera   rb   rc   )r   r   rd   re   r-   r   r.   r      sF   





zPeriodConverter._convert_1dN)ro   rp   rq   rr   rf   r   r-   r-   r-   r.   r%      s
    
r%   c                 C  s   t | tr| |jS t | tttjtjt	j
frt| |jS t| s3t| s3t | t	jtfr5| jdkr5| S | d u r;d S td|  d)N   zUnrecognizable date '')rB   r   r   ordinalrX   r   r&   r'   r(   r*   r+   r   r   rc   r   size
ValueError)r'   r   r-   r-   r.   r     s   

r   c                   @  s2   e Zd Zedd Zedd Zedd	d
ZdS )r$   c                   r   )Nc                   r   r-   )r$   r   r   rd   rK   r-   r.   r_   %  r   z-DatetimeConverter.convert.<locals>.<listcomp>)r   r$   r   )r   rK   rd   r-   r   r.   rf   !  s
   zDatetimeConverter.convertc                 C  s   dd }t | ttjtjtjfrt| S t	| st
| r| S t | tr(|| S t | tttjttfrot | tr<t| } t | trD| j} t | tjsOt| } t| sWt| rY| S zt| } W n	 tyi   Y nw t| } | S )Nc                 S  s*   z	t t| W S  ty   |  Y S w r#   )mdatesdate2numtoolsto_datetime	Exception)r   r-   r-   r.   	try_parse,  s
   z0DatetimeConverter._convert_1d.<locals>.try_parse)rB   r   r&   r'   r*   r+   r(   r   r   r   r   rX   ra   rb   rc   r   r   r   comZasarray_tuplesafer   r   r   r   r   )r   rK   rd   r   r-   r-   r.   r   *  s.   





zDatetimeConverter._convert_1drK   tzinfo | Noner1   munits.AxisInfoc                 C  sL   | }t |d}t||d}tddd}tddd}tj||d||fd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   )rh   ri   rj   Zdefault_limits)PandasAutoDateLocatorPandasAutoDateFormatterr&   r'   r@   rl   )rK   rd   r   rh   ri   ZdateminZdatemaxr-   r-   r.   rm   N  s   
zDatetimeConverter.axisinfoN)rK   r   r1   r   )ro   rp   rq   rr   rf   r   rm   r-   r-   r-   r.   r$      s    

#r$   c                   @  s   e Zd Zd	d
ddZdS )r   N%Y-%m-%d
defaultfmtrX   r1   r?   c                 C  s   t j| ||| d S r#   )r   AutoDateFormatterru   )rt   locatorr   r   r-   r-   r.   ru   c  s   z PandasAutoDateFormatter.__init__)Nr   )r   rX   r1   r?   )ro   rp   rq   ru   r-   r-   r-   r.   r   b  s    r   c                   @  s   e Zd Zdd Zdd ZdS )r   c                 C  sn   ||   }t|| jk r/d| _t| j}|| j |jj| j	   |jj
| j   |S tj| ||S )z*Pick the best locator based on a distance.)total_secondsabsZminticks_freqMilliSecondLocatorr   Zset_axisrd   Zset_view_intervalget_view_intervalZset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)rt   dmindmaxrV   r   r-   r-   r.   r   h  s   
z!PandasAutoDateLocator.get_locatorc                 C  s   t | jS r#   )r   get_unit_genericr   rt   r-   r-   r.   	_get_unit}  s   zPandasAutoDateLocator._get_unitN)ro   rp   rq   r   r   r-   r-   r-   r.   r   g  s    r   c                   @  sF   e Zd ZdZdddZdd Zedd	 Zd
d Zdd Z	dd Z
dS )r   gLH>r1   r?   c                 C  s   t j| | d| _d S )Ng      ?)r   DateLocatorru   	_interval)rt   r   r-   r-   r.   ru     s   
zMilliSecondLocator.__init__c                 C  s
   |  dS )Nr   )r   r   r-   r-   r.   r     rv   zMilliSecondLocator._get_unitc                 C  s   t j| }|dk rtjS |S )Nr   )r   ZRRuleLocatorr   r   UNIT)r   rK   r-   r-   r.   r     s   z#MilliSecondLocator.get_unit_genericc              
   C  sb  z|   \}}W n ty   g  Y S w t||f\}}|| d d }d}dD ]}|||d  kr8|| _ nd| _q)|| |  |    }|| jd kretd|d	d
| d| d| jd d	d	|  }| d}	| j	
d }
|jd d}|jd d}t|||	|
dt}zt|dkr| t|}|W S W n	 ty   Y nw t||g}|S )NiQ ry      )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   )Zviewlim_to_dtr   r   r   r   r   _get_intervalZMAXTICKSRuntimeErrorr   tznamereplacer   ZastypeobjectlenZraise_if_exceedsr   )rt   r   r   ZnmaxZnminnumZmax_millis_ticksintervalestimater   r   stZedZ	all_datesrs   Zlimsr-   r-   r.   r     sT   

zMilliSecondLocator.__call__c                 C  s   | j S r#   )r   r   r-   r-   r.   r     s   z MilliSecondLocator._get_intervalc                 C  s,   |   \}}t|}t|}| ||S )z@
        Set the view limits to include the data range.
        )Zdatalim_to_dtr   r   r   )rt   r   r   vminvmaxr-   r-   r.   	autoscale  s   

zMilliSecondLocator.autoscaleNr   )ro   rp   rq   r   ru   r   rr   r   r   r   r   r-   r-   r-   r.   r     s    

-r   r   r   r   c           	      C  s   t | }t|}t| | }td| d\}}td| d\}}td| d\}}t d| }|dk r6d}t|j|j|jt |t |t ||}|d urR||}|dkr_|t	d| d7 }|S )	Nrz   r   rP   rQ   r   r   i6B )microseconds)
r~   r   fromordinalrO   r   yearmonthday
astimezoner   )	r^   r   Zixdt	remainderrR   rS   rT   rU   r-   r-   r.   _from_ordinal  s"   
 
r   tuple[int, int]c                 C  s   | dk rd\}}||fS | dk rd\}}||fS | dk r$d\}}||fS | dk r0d\}}||fS | d	k r<d
\}}||fS | dk rHd\}}||fS | d d }|d |d }}||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   ry   r   r-   )nyearsZmin_spacingZmaj_spacingfactorr-   r-   r.   _get_default_annual_spacing  s*   
r   datesr   r   rX   npt.NDArray[np.intp]c                 C  s   t | |}t|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)r   r   maskr-   r-   r.   _period_break  s   
r   npt.NDArray[np.bool_]c                 C  s&   t | |}t | d| j  |}||kS )Nr   )getattrr   )r   r   currentrF   r-   r-   r.   r     s   
r   label_flagsr   boolc                 C  s4   | j dks| j dkr| d dkr|d 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   r-   r-   r.   has_level_label  s   
"r  r   r"   tuple[int, int, int]c                 C  s   | j }t|}d}|tjjkrt| j}d| }d| }nC|tjkr(d}d}n9|tjkr2d}d}n/|tj	kr<d}d}n%|tj
krFd}d	}n|tjkrPd}d
}n|tjkrZd}d}ntd| |||fS )Nr      im     i     4   r         Unsupported frequency: )_period_dtype_coder   from_period_dtype_codeFR_HRr>   r   Z_cresoFR_BUSZFR_DAYFR_WKFR_MTHFR_QTRFR_ANNNotImplementedError)r   
dtype_codeZ
freq_groupZppdppmZppyr-   r-   r.   _get_periods_per_ymd'  s6   









r  
np.ndarrayc              	     s  |j }t|\}}}| t| t|} }||  d }t ' tjddtd tjddtd tt| |dt||d|d W d    n1 sIw   Y  t	j
|dt	jfd	tfd
tfdgd} j|d d d < d|d d d < d|d	 ddg< |d	 |d
 |d fdd||krt dt d}	t ddF fdd}
dG fdd }dG fd!d"}||d# k r|d |S ||d$ k r|d% |S ||d& k r|d' |S ||d( k r|d) |S ||d* k r|d+ |S ||d, k r|d- |S ||d. k r|d |S ||d/ k r)|d% |S ||d0 k r6|d' |S ||d1 k rC|d+ |S ||d2 k rP|d- |S ||d3 k r^|
dd4 |S ||d5 k rl|
d%d4 |S ||d6 k rz|
d7d4 |S ||d3 k r|
d2d |S ||d8 k r|
d1d |S d|	< d< d9< d:|	< d;< tst|	sd;< |S d;|	< |S ||d8 krt d}	d|	< |tjjk rd|d
< nt dd|d
 < t d<}t dd9|< d=|	< d>< tst|	sd>|< |S d>|	< |S |d?| kr[t dt d}	t d<}d|	< d|< d4< d4|	< d@|	< dA< tsYdA|	< |S |d3| krt dt dB}t d}	d|< d|	< d@|< dA< |S |d8| krt dt d}	d< d|	< d4<  |	 j}|	|dk|dCkB  }d@|< dA< |S |dD| krt dt dB}d< d|< d4< dE< |S t d  j}|| }t|\}}|| dk }d|< || dk }d|< dE|< |S )HNr   r   r   r   r   r   r   )r   r   r   valmajmin)r   z|S20Zdtyper   r   Tr   r   c                   s2   | d dkr| j dkr d dkr| d S | d S )Nr   r   r  r  )r   )	vmin_origr-   r.   first_labelo  s   "z"_daily_finder.<locals>.first_labelr   r   r   label_intervalr~   force_year_startr  r1   r?   c                   sv    j }t d}d< d|||  dk@ < d|||  dk@ < d< d< |r7ts9d< d S d S d S )NrR   Tr   r}   %H:%M
%d-%b%H:%M
%d-%b
%Y)rR   r   r  )r!  r"  targetr   dates_	day_startr   info_fmtinfo_majinfo_minr  
year_startr-   r.   _hour_finder{  s   
z#_daily_finder.<locals>._hour_finderc                   ^    j }t d}t d}d|< d|||  dk@ < d|||  dk@ < d< d< d S )NrR   rS   Tr   r}   r#  r$  )rS   r   r   )r!  r%  Z
hour_startr   r'  r(  r)  r*  r+  r,  r-   r.   _minute_finder     

z%_daily_finder.<locals>._minute_finderc                   r.  )NrS   rT   Tr   r|   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rT   r   r   )r!  r%  Zminute_startr   r/  r-   r.   _second_finder  r1  z%_daily_finder.<locals>._second_finderi.  ip  r   i`	  r   i  r   i      i        F   rz   r
  r         @Fg      ?g      ?r  r  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r   %Y)r!  r~   r"  r  r1   r?   )r!  r~   r1   r?   )r  r  r~   r   r   r   r   r   r   r*   zerosZint64r  r   r   r  r   r  r>   r   r   r   )r   r   r   r  ZperiodsperdayZperiodspermonthperiodsperyearspaninfoZmonth_startr-  r0  r2  Z
week_startquarter_startZmonth_break
jan_or_julZ
year_breakr   
min_anndef
maj_anndef	major_idx	minor_idxr-   r&  r.   _daily_finderK  sF  








trpnljhfdb`
^
\
Z
X
VMK




97


*


!






rI  c                 C  s$  t |\}}}| }t| t|} }||  d }tj|dtfdtfdtfdgd}t| |d |d< |d }d|d< |d	 d
k d
 }	|d }
|d }|d| krzd|
|	< d|d< d|d d < d||	< t|	|sx|jdkrrd}nd
}d||< |S |d| kr|d d
k }d|
|	< d|d |< d|d< d||< d||	< |S |d| krd|
|	< d|d< |d	 d
k|d	 dkB }d||< d||	< |S |d| kr|d d
k }d|
|	< d|d |< d||	< |S || }t	|\}}||	 d	 d }|	|| d
k }d|
|< d|d |	|| d
k < d||< |S )Nr   r  r  r  r   z|S8r  r   r   r
  r   r9  Tr:  r;  r7  r  r  r   r   r>  
r  r~   r*   r?  r  aranger   r  r   r   )r   r   r   r   r@  r  rA  rB  r'  r,  r*  r)  idxrC  rD  r   rE  rF  yearsrG  r-   r-   r.   _monthly_finder  sj   

&rO  c                 C  s|  t |\}}}| }t| t|} }||  d }tj|dtfdtfdtfdgd}t| |d |d< d|d< |d }|d }	|d }
|d	 d
k d
 }|d| krzd|	|< d|d< d|
d d < d|
|< t||sx|jdkrrd}nd
}d|
|< |S |d| krd|	|< d|d< d|
|< |S || d	 d }|| }t	|\}}||| d
k }d|	|< d|d ||| d
k < d|
|< |S )Nr   r  r  r  rJ  r  r   r   r  r   g      @TzQ%qzQ%q
%Fr   z%Fi  rK  )r   r   r   r   r@  r  rA  rB  r'  r*  r)  r,  rM  rN  r   rE  rF  rG  r-   r-   r.   _quarterly_finderY  sJ   

rP  c           
      C  s   t | t |d } }||  d }tj|dt fdtfdtfdgd}t| |d |d< d|d< |d }t|\}}|| d	k}|| d	k}	d
|d |< d
|d |	< d|d |< |S )Nr   r  r  r  rJ  r  r   r   r   Tr>  )r~   r*   r?  r  rL  r   )
r   r   r   rA  rB  r'  rE  rF  rG  rH  r-   r-   r.   _annual_finder  s   rQ  c                 C  sb   | j }t|}|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| )Nr  )r  r   r  r  rQ  r  rP  r  rO  r  r>   r  rI  r  )r   r  Zfgroupr-   r-   r.   
get_finder  s   



rR  c                   @  sL   e Zd ZU dZded< 							ddddZdd Zdd Zd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!   rd   FTr   Nr   r"   minor_locatorr  dynamic_modebaser~   r<  r   r   r1   r?   c	           	      C  sT   t |dd}|| _|| _|||| _| _| _|| _|| _d| _|| _	t
|| _d S NT)Z	is_periodr   )r   r   rV  r<  r   r   isminor	isdynamicoffsetplot_objrR  finder)	rt   r   rT  rU  rV  r<  r   r   r[  r-   r-   r.   ru     s   zTimeSeries_DateLocator.__init__c                 C  s>   |  ||| j}| jrt|d |d S t|d |d S )z'Returns the default locations of ticks.r  r  r  )r\  r   rX  r*   compress)rt   r   r   r   r-   r-   r.   _get_default_locs  s   z(TimeSeries_DateLocator._get_default_locsc                 C  sv   t | j }|\}}||k r||}}| jr| ||}|S | j}t||\}}|d | }tt||d |}|S )z"Return the locations of the ticks.r   )	rb   rd   r   rY  r^  rV  r   ra   range)rt   vir   r   rs   rV  rY   r   r-   r-   r.   r     s   
zTimeSeries_DateLocator.__call__c                 C  sL   | j  \}}| ||}|ddg \}}||kr!|d8 }|d7 }t||S )zf
        Sets the view limits to the nearest multiples of base that contain the
        data.
        r   r   r   )rd   r   r^  r   )rt   r   r   rs   r-   r-   r.   r     s   
z TimeSeries_DateLocator.autoscale)FTr   r   r   r   N)r   r"   rT  r  rU  r  rV  r~   r<  r~   r   r~   r   r~   r1   r?   )	ro   rp   rq   __doc____annotations__ru   r^  r   r   r-   r-   r-   r.   rS    s   
 rS  c                   @  sJ   e Zd ZU dZded< 			ddddZdd ZdddZd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!   rd   FTNr   r"   rT  r  rU  r1   r?   c                 C  sJ   t |dd}d | _|| _g | _d | _|| _|| _d| _|| _t	|| _
d S rW  )r   formatr   rs   
formatdictrX  rY  rZ  r[  rR  r\  )rt   r   rT  rU  r[  r-   r-   r.   ru     s   z!TimeSeries_DateFormatter.__init__c                 C  s\   |  ||| j}| jrt|d t|d @ |}nt|d |}dd |D | _| jS )z"Returns the default ticks spacing.r  r  c                 S  s   i | ]	\}}}}||qS r-   r-   )r]   r^   r   fr-   r-   r.   
<dictcomp>3  r   z@TimeSeries_DateFormatter._set_default_format.<locals>.<dictcomp>)r\  r   rX  r*   r]  Zlogical_notre  )rt   r   r   rB  rd  r-   r-   r.   _set_default_format+  s    z,TimeSeries_DateFormatter._set_default_formatc                 C  s:   || _ t| j \}}||k r||}}| || dS )zSets the locations of the ticksN)rs   rb   rd   r   rh  )rt   rs   r   r   r-   r-   r.   set_locs6  s
   
z!TimeSeries_DateFormatter.set_locsr   rw   rx   rX   c                 C  s   | j d u rdS | j |d}t|tjr|d}t  tjddt	d t
t|| jd}W d    n1 s9w   Y  t|t
sEJ ||S )Nr   zutf-8r   r   r   r  )re  rI   rB   r*   bytes_decoder   r   r   r   r   r~   r   r   )rt   r^   rw   r   r   r-   r-   r.   r   B  s   



z!TimeSeries_DateFormatter.__call__)FTN)r   r"   rT  r  rU  r  r1   r?   r   r   r   )	ro   rp   rq   ra  rb  ru   rh  ri  r   r-   r-   r-   r.   rc    s   
 
rc  c                   @  s4   e Zd ZU dZded< eddd	ZddddZdS )TimeSeries_TimedeltaFormatterzR
    Formats the ticks along an axis controlled by a :class:`TimedeltaIndex`.
    r!   rd   
n_decimalsr~   r1   rX   c           	      C  s   t | d\}}t |d\}}t |d\}}t |d\}}t|d|d   }t|ddt|ddt|d}|dkrI|d	|d
| d7 }|dkrWt|dd| }|S )z8
        Convert seconds to 'D days HH:MM:SS.F'
        i ʚ;rP   rz   r   	   02d:r   .0rY   z days )r   r~   )	r^   rw   rm  r   nsr   r   rY   Zdecimalsr-   r-   r.   format_timedelta_ticks[  s   &z4TimeSeries_TimedeltaFormatter.format_timedelta_ticksr   rw   rx   c              
   C  sF   t | j \}}ttttdt||  d}| 	|||S )Nl    h] rn  )
rb   rd   r   r  r~   r*   ceillog10r   rt  )rt   r^   rw   r   r   rm  r-   r-   r.   r   l  s   &z&TimeSeries_TimedeltaFormatter.__call__N)rm  r~   r1   rX   r   r   )ro   rp   rq   ra  rb  rr   rt  r   r-   r-   r-   r.   rl  T  s   
 rl  )r0   r   r1   r   )r1   r:   r   )rM   rN   r1   rO   r#   )r   r   r1   r   )r1   r   )r   r   r   rX   r1   r   )r   r   r   rX   r1   r   )r   r   r   rO   r1   r  )r   r"   r1   r  )r   r"   r1   r  )r   r"   )g
__future__r   
contextlibr   r&   r   r   r7   typingr   r   r   r   Zmatplotlib.datesr   r   Zmatplotlib.tickerr	   r
   r   Zmatplotlib.transformsr   Zmatplotlib.unitsr   r@   numpyr*   Zpandas._libsr   Zpandas._libs.tslibsr   r   Zpandas._libs.tslibs.dtypesr   r   Zpandas._typingr   r   Zpandas.core.dtypes.commonr   r   r   r   r   Zpandasr   r   r   Zpandas.core.commoncorecommonr   Zpandas.core.indexes.datetimesr   Zpandas.core.indexes.periodr   r   r   Zpandas.core.tools.datetimesr   Z	datetimescollections.abcr    Zmatplotlib.axisr!   Zpandas._libs.tslibs.offsetsr"   rC   r/   r9   contextmanagerr2   r<   r=   rW   r[   ZConversionInterfacer)   rk   ZDateConverterr%   r   r$   r   r   r   r   r   r   r   r   r   r   r  r  rI  rO  rP  rQ  rR  rS  rc  rl  r-   r-   r-   r.   <module>   st    



	+(BN





$ 
H
G
/
YL