o
    h                     @  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 ZDdfddZEejFdgddZGdhddZHdhdd ZIdid$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ZXdjdkd;d<ZYdld>d?ZZdmdEdFZ[dndHdIZ\dodMdNZ]dpdRdSZ^ej_dqdVdWZ`ej_dqdXdYZaej_dqdZd[Zbej_dqd\d]Zcdrd^d_ZdG d`da daeZeG dbdc dceZfG ddde deeZgdS )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                  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-   y/var/www/html/construction_image-detection-poc/venv/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s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)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   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   com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   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr&   r'   r@   rl   )rK   rd   r   rh   ri   datemin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absminticks_freqMilliSecondLocatorr   set_axisrd   set_view_intervalget_view_interval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   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   )viewlim_to_dtr   r   r   r   r   _get_intervalMAXTICKSRuntimeErrorr   tznamereplacer   astypeobjectlenraise_if_exceedsr   )rt   r   r   nmaxnminnummax_millis_ticksintervalestimater   r   sted	all_datesrs   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.
        )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   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-   )nyearsmin_spacing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   _cresoFR_BUSFR_DAYFR_WKFR_MTHFR_QTRFR_ANNNotImplementedError)r   
dtype_code
freq_groupppdppmppyr-   r-   r.   _get_periods_per_ymd'  s6   









r7  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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_labelp  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  )rA  rB  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}   rC  rD  )rS   r  r  )rA  rE  
hour_startr  rG  rH  rI  rJ  rK  rL  r-   r.   _minute_finder     

z%_daily_finder.<locals>._minute_finderc                   rN  )NrS   rT   Tr   r|   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rT   r  r  )rA  rE  minute_startr  rP  r-   r.   _second_finder  rR  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)rA  r~   rB  r  r1   r?   )rA  r~   r1   r?   )r'  r7  r~   r   r   r   r   r   r   r*   zerosint64r  r   r  r  r   r)  r>   r   r   r  )r   r   r   r2  periodsperdayperiodspermonthperiodsperyearspaninfomonth_startrM  rQ  rT  
week_startquarter_startmonth_break
jan_or_jul
year_breakr  
min_anndef
maj_anndef	major_idx	minor_idxr-   rF  r.   _daily_finderK  sF  








trpnljhfdb`
^
\
Z
X
VMK




97


*


!






rr  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   r[  Tr\  r]  rY  r"  r%  r   r  r`  
r7  r~   r*   ra  r  aranger  r  r   r  )r   r   r   r   re  r?  rf  rg  rG  rL  rJ  rI  idxrj  rl  r  rn  ro  yearsrp  r-   r-   r.   _monthly_finder  sj   

&rx  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<  rs  r=  r   r   r%  r   g      @TzQ%qzQ%q
%Fr  z%Fi  rt  )r   r   r   r   re  r?  rf  rg  rG  rJ  rI  rL  rv  rw  r  rn  ro  rp  r-   r-   r.   _quarterly_finder[  sJ   

ry  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<  rs  r=  r   r   r   Tr`  )r~   r*   ra  r  ru  r  )
r   r   r   rf  rg  rG  rn  ro  rp  rq  r-   r-   r.   _annual_finder  s   rz  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(  r0  rz  r/  ry  r.  rx  r+  r>   r-  rr  r1  )r   r2  fgroupr-   r-   r.   
get_finder  s   



r|  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)	is_periodr   )r   r   r  r^  r   r  isminor	isdynamicoffsetplot_objr|  finder)	rt   r   r~  r  r  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   r  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   r  r  r  r   ra   range)rt   vir   r   rs   r  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"   r~  r  r  r  r  r~   r^  r~   r   r~   r  r~   r1   r?   )	ro   rp   rq   __doc____annotations__ru   r  r   r   r-   r-   r-   r.   r}    s   
 r}  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"   r~  r  r  r1   r?   c                 C  sJ   t |dd}d | _|| _g | _d | _|| _|| _d| _|| _t	|| _
d S r  )r   formatr   rs   
formatdictr  r  r  r  r|  r  )rt   r   r~  r  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>7  r   z@TimeSeries_DateFormatter._set_default_format.<locals>.<dictcomp>)r  r   r  r*   r  logical_notr  )rt   r   r   rg  r  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   r  )rt   rs   r   r   r-   r-   r.   set_locs:  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   r9  )r  rI   rB   r*   bytes_decoder   r   r   r   r   r~   r   r   )rt   r^   rw   r   r   r-   r-   r.   r   F  s   



z!TimeSeries_DateFormatter.__call__)FTN)r   r"   r~  r  r  r  r1   r?   r   r   r   )	ro   rp   rq   r  r  ru   r  r  r   r-   r-   r-   r.   r    s   
 
r  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   r  r   nsr   r   rY   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] r  )
rb   rd   r   r<  r~   r*   ceillog10r   r  )rt   r^   rw   r   r   r  r-   r-   r.   r   p  s   &z&TimeSeries_TimedeltaFormatter.__call__N)r  r~   r1   rX   r   r   )ro   rp   rq   r  r  rr   r  r   r-   r-   r-   r.   r  X  s   
 r  )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   rO   r   rO   r   r"   r1   r8  )r   r"   )h
__future__r   
contextlibr   r&   r   r   r7   typingr   r   r   r   matplotlib.datesr  r   matplotlib.tickerr	   r
   r   matplotlib.transformsr   matplotlib.unitsr   r@   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"   rC   r/   r9   contextmanagerr2   r<   r=   rW   r[   ConversionInterfacer)   rk   DateConverterr%   r   r$   r   r   r   r   r   r   r  r  r  r  r  r7  cacherr  rx  ry  rz  r|  r}  r  r  r-   r-   r-   r.   <module>   s|    



	+(BN




$ HG/
YL