
    o[we                       U 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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" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0c m1Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m0c m:c m;Z: e	rd dl<m=Z= d dl>m?Z? dZ@deAd<   dZBdeAd<   dZCdeAd<   eCeBz  ZDdeAd<   eDe@z  ZEdeAd<   deEz  ZFdeAd<   i ZGd ZHdVdZIejJ        dWd!            ZKdXd#ZLdXd$ZMdYd(ZNd) ZO G d* d+ejP                  ZQ G d, d-e          ZR G d. d/ejS                  ZTd0 ZU G d1 d2ejS                  ZV G d3 d4ejW                  ZX G d5 d6ejY                  ZZ G d7 d8ej[                  Z\dZd[d<Z]d\d>Z^d]dDZ_d^dHZ`d_dKZadL ZbdM ZcdN Zdd_dOZe G dP dQe          Zf G dR dSe          Zg G dT dUe          ZhdS )`    )annotationsN)datetime	timedeltatzinfo)TYPE_CHECKINGAnyFinalcast)AutoLocator	FormatterLocator)nonsingular)lib)	Timestamp	to_offset)	FreqGroup)F)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)
BaseOffsetg      8@r	   HOURS_PER_DAYg      N@MIN_PER_HOURSEC_PER_MINSEC_PER_HOURSEC_PER_DAY@B MUSEC_PER_DAYc                     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    Elib/python3.11/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsr5   M   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kwargsr7   s     r4   wrapperz6register_pandas_matplotlib_converters.<locals>.wrapper^   s       	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   %)))	functoolswrapsr
   r   )r7   r>   s   ` r4   %register_pandas_matplotlib_convertersrA   Y   sE    
 _T) ) ) ) ) 7r6   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    r4   r;   r;   f   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*   )r5   munitsregistry
isinstance
_mpl_units)r3   type_clspreviouss       r4   rE   rE   |   sv    KKE ' '
sFO##Jvu7Ms,S,S#u-H (Ju!$' 'r6   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*   )r5   typerJ   rK   getpoprM   itemsr+   r,   r0   )rN   rO   unit	formatters       r4   rF   rF      s    kk ' '
s##E**++s22O&&& &++-- . .i	??#4o}"UUU$-FOD!. .r6   tm	pydt.timefloatc                V    | j         dz  | j        dz  z   | j        z   | j        dz  z   }|S )Ni  <   r'   )hourminutesecondmicrosecond)rX   tot_secs     r4   _to_ordinalfrb      s0    gnry2~-	9BNU<RRGNr6   c                    t          | t                    r0t          |           }t          |                                          S t          | t
          j                  rt          |           S | S r*   )rL   strr   rb   r/   r-   )dparseds     r4   time2numrg      sZ    !S +1FKKMM***!TY AHr6   c                  T    e Zd Zed             Zedd            Zed	d            ZdS )
r0   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  )rg   ).0xs     r4   
<listcomp>z)TimeConverter.convert.<locals>.<listcomp>   s    ///AHQKK///r6   )rd   r-   r/   rL   r   r   rg   r   maplisttupler1   ndarray)rG   rV   axisvalid_typess       r4   convertzTimeConverter.convert   s    DI&e[)) 	#Z->-> 	#(5// 	#E??"eU## 	'99X&&&edE2:u=>> 	0//////r6   r8   munits.AxisInfo | Nonec                z    | dk    rd S t                      }t          |          }t          j        ||d          S )Nr/   )majlocmajfmtlabel)r   TimeFormatterrJ   AxisInfo)rV   rs   rx   ry   s       r4   axisinfozTimeConverter.axisinfo   s=    6>>4v&&fV6JJJJr6   rd   c                    dS )Nr/   rk   rm   rs   s     r4   default_unitszTimeConverter.default_units   s    vr6   N)r8   rv   )r8   rd   )__name__
__module____qualname__staticmethodru   r}   r   rk   r6   r4   r0   r0      sq          \ K K K \K    \  r6   r0   c                       e Zd Zd
dZdddZd	S )r{   r8   rH   c                    || _         d S r*   )locs)selfr   s     r4   __init__zTimeFormatter.__init__   s    			r6   r   posintrd   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.%fr'     r\      r   N%H:%M:%S%H:%M)r   rounddivmodr-   r/   strftime)r   rm   r   fmtsmsusmsusmh_s              r4   __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0r6   Nr8   rH   r   r   r   r8   rd   )r   r   r   r   r   rk   r6   r4   r{   r{      sA           !1 !1 !1 !1 !1 !1 !1r6   r{   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 rk   )r,   _convert_1d)rl   vrs   unitss     r4   rn   z+PeriodConverter.convert.<locals>.<listcomp>   s+    RRRao11!UDAARRRr6   )r   r,   r   )valuesr   rs   s    ``r4   ru   zPeriodConverter.convert   sO    v&& 	FRRRRR6RRRFF$00EEFr6   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    r4   <lambda>z-PeriodConverter._convert_1d.<locals>.<lambda>  s    M!TY,G,G r6   F)skipnaperiod)r   c                :    g | ]}t          |j                  S rk   r   )rl   rm   rs   s     r4   rn   z/PeriodConverter._convert_1d.<locals>.<listcomp>  s%    DDDa33DDDr6   )hasattr	TypeErrorrd   r   r   r-   r.   r/   r1   r2   warningscatch_warningsfilterwarningsFutureWarningrL   r   r   r   r   r   asfreqasi8r   ro   r   infer_dtyperp   rq   rr   )r   r   rs   rt   s     ` r4   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   ru   r   rk   r6   r4   r,   r,      sH          \   \  r6   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 '')rL   r   r   ordinalrd   r   r-   r.   r/   r1   r2   r   r   rr   r   size
ValueError)r.   r   s     r4   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5r6   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 rk   )r+   r   )rl   r   rs   rV   s     r4   rn   z-DatetimeConverter.convert.<locals>.<listcomp>'  s,    SSSq'33AtTBBSSSr6   )r   r+   r   )r   rV   rs   s    ``r4   ru   zDatetimeConverter.convert#  sQ     v&& 	GSSSSSFSSSFF&2264FFFr6   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    r4   	try_parsez0DatetimeConverter._convert_1d.<locals>.try_parse.  sF    u'8'@'@AAA   s   %( 77)rL   r   r-   r.   r1   r2   r/   r   r   r   r   rd   rp   rq   rr   r   r   r   comasarray_tuplesafer   r   r   r   r   )r   rV   rs   r   s       r4   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rV   tzinfo | Noner8   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   )rx   ry   rz   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr-   r.   rJ   r|   )rV   rs   r   rx   ry   datemindatemaxs          r4   r}   zDatetimeConverter.axisinfoP  sx     &"---(B777)D!Q'')D!Q''&GWCU
 
 
 	
r6   N)rV   r   r8   r   )r   r   r   r   ru   r   r}   rk   r6   r4   r+   r+   "  si          \ ! ! \!F 
 
 
 \
 
 
r6   r+   c                      e Zd Zdd	dZdS )
r   N%Y-%m-%d
defaultfmtrd   r8   rH   c                J    t           j                            | |||           d S r*   )r   AutoDateFormatterr   )r   locatorr   r   s       r4   r   z PandasAutoDateFormatter.__init__e  s%     ))$ZHHHHHr6   )Nr   )r   rd   r8   rH   )r   r   r   r   rk   r6   r4   r   r   d  s4        I I I I I I Ir6   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_axisrs   set_view_intervalget_view_intervalset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)r   dmindmaxra   r   s        r4   r   z!PandasAutoDateLocator.get_locatorj  s    $;--//w<<$-''DJ(11GTY'''*GL*DI,G,G,I,IJJ*GL*DI,G,G,I,IJJN%11$dCCCr6   c                @    t                               | j                  S r*   )r   get_unit_genericr   r   s    r4   	_get_unitzPandasAutoDateLocator._get_unity  s    !224:>>>r6   N)r   r   r   r   r   rk   r6   r4   r   r   i  s5        D D D? ? ? ? ?r6   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>r8   rH   c                T    t           j                            | |           d| _        d S )Ng      ?)r   DateLocatorr   	_interval)r   r   s     r4   r   zMilliSecondLocator.__init__  s&    ##D"---r6   c                ,    |                      d          S )Nr   )r   r   s    r4   r   zMilliSecondLocator._get_unit  s    $$R(((r6   c                h    t           j                            |           }|dk     rt          j        S |S Nr   )r   RRuleLocatorr   r   UNIT)r   rV   s     r4   r   z#MilliSecondLocator.get_unit_generic  s/    "33D99!88%**r6   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 )NQ r      )r   
   2   d      i  r   g     @@   z)MillisecondLocator estimated to generate re   z ticks from z to z: exceeds Locator.MAXTICKS* 2 (z) L)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                   r4   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    r4   r  z MilliSecondLocator._get_interval  s
    ~r6   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        r4   	autoscalezMilliSecondLocator.autoscale  sM    
 ''))
dt$$t$$d+++r6   Nr   )r   r   r   r   r   r   r   r   r   r  r$  rk   r6   r4   r   r   }  s        #D   ) ) )   \+ + +Z  
, 
, 
, 
, 
,r6   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   r\   r'   r  r   i6B )microseconds)
r   r   fromordinalrZ   r   yearmonthday
astimezoner   )	rm   r   ixdt	remainderr]   r^   r_   r`   s	            r4   _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%<====Ir6   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  )r4  r  r  )r4     iX  )r  r  r   r   rk   )nyearsmin_spacingmaj_spacingfactors       r4   _get_default_annual_spacingr:    s     {{%+"kk	"%+"kk	"%+"kk	#%,"kk	#%,"kk	#%-"kk4!#&,rk6C<k%%r6   datesr   r   rd   
np.ndarrayc                    t          | |          }t          | d| j        z  z
  |          }t          j        ||z
            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   r   )getattrr   r1   nonzero)r;  r   currentrP   s       r4   period_breakrA    sG     eV$$Guq5:~-v66H:g())!,,r6   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   )rB  r"  s     r4   has_level_labelrG    sD     1A+a.A"5"5$(S..utr6   r   r!   c                &   |j         }t          j        |          }d}|t          j        j        k    r|t          j        k    rd}nq|t          j        k    rd}n^|t          j        k    rd}nK|t          j        k    rd}n8|t          j	        k    rd}n%|t          j        k    rd}nt          d|           d	|z  }d
|z  }nN|t          j        k    rd}d}n9|t          j        k    rd	}d
}n$|t          j        k    rd}d}nt          d          | t          j                    5  t          j        ddt"                     t          j        ddt"                     t%          t'          |           |          t%          t'          |          |          }} d d d            n# 1 swxY w Y   t)          | t$                    sJ t)          |t$                    sJ |j        | j        z
  dz   }t          j                    5  t          j        ddt"                     t          j        ddt"                     t-          | ||          d d d            n# 1 swxY w Y   t/          j        |dt.          j        fdt4          fdt4          fdg          j        d         d d <   dd         d d <   dd         ddg<   d         d         d         fd ||k    rt9          d!          t9          d"          }	dJfd%}
dJfd&}dJfd'}||d(z  k     r |d           nK||d)z  k     r |d*           n5||d+z  k     r |d,           n||d-z  k     r |d.           n	||d/z  k     r |d0           n||d1z  k     r |d2           n||d3z  k     r |d           n||d4z  k     r |d*           n||dz  k     r |d,           n||d5z  k     r |d0           n||d6z  k     r |d2           no||d7z  k     r |
dd8           nX||d9z  k     r |
d*d8           nA||d:z  k     r |
dd8           n*||d7z  k     r |
d6d           n||d;z  k     r |
d5d           nd|	<   d<   t9          d<          }d         d=<   d>|	<   d?|<   t;          |          s.t;          |	          sd?           <   nd? |	          <   n||d;z  k    rt9          d"          }	d|	<   |t          j        j        k     rdd<   nt9          d!          dd         <   t9          d@          }t9          d<          }d=|<   dA|	<   dB|<   t;          |          s.t;          |	          sdB |          <   ndB |	          <   n|dC|z  k    rnt9          d<          }t9          d"          }	t9          d@          }d|	<   d|<   d8|<   d8|	<   dD|	<   dE|<   t;          |          sdE |	          <   nQ|d7|z  k    rFt9          d<          }t9          dF          }t9          d"          }	d|<   d|	<   dD|<   dE|<   n|d;|z  k    rZt9          d<          }t9          d"          }	d|<   d|	<   d8|<   |	         j        }|	|dk    |dGk    z           }dD|<   dE|<   n|dH|z  k    r5t9          d<          }t9          dF          }d|<   d|<   d8|<   dI|<   nat9          d<          }|         j        }||z  }tA          |          \  }}|||z  dk             }d|<   |||z  dk             }d|<   dI|<   S )KNr   l     "R: l    `;P i \&r  i  r   zunexpected frequency: im     i     4      zunexpected frequencyr   r   r   r   r   r   r   )r	  r
  r   valmajmin)r   z|S20dtyper   r   Tr   c                d    | d         dk    r| j         dk    rdz  dk    r| d         S | d         S )Nr   r   rE  rF  )rB  	vmin_origs    r4   first_labelz"_daily_finder.<locals>.first_labelj  sB    Nak&6&:&:)a-SVAVAVq>!q>!r6   r*  r)  r8   rH   c                   j         }dj        z  z
  j         }||z
  dk    }d
<   d||| z  dk    z  <   t          d          }d	||| z  dk    z  <   d	<   d	|<   |r t          |          sd	           <   d S d S d S )Nr   r   Tr(  r   %H:%M
%d-%b%H:%M
%d-%b
%Y)r]   r   rA  rG  )label_intervalforce_year_start_hour
_prev_hour
hour_start
year_startdates_	day_startrU  info_fmtinfo_majinfo_minrT  s         r4   _hour_finderz#_daily_finder.<locals>._hour_finderu  s    KE 1v{?28J*,2J"&HYCGHZ5>#9Q#>?@%ff55JCJHZ5>#9Q#>?@"0HY#5HZ  F
I(N(N F3EY//000F F F Fr6   c                    t          d          }j        }dj        z  z
  j        }||z
  dk    }d
|<   d||| z  dk    z  <   t          d          }	d         }d|||| z  dk    z  <   d|<   d	||<   d S )
Nr]   r   r   Tr(  r   r   rW  rX  )rA  r^   r   )rY  r]  _minute_prev_minuteminute_startr^  ra  r_  r`  inforb  rc  s          r4   _minute_finderz%_daily_finder.<locals>._minute_finder  s    %ff55JmG"Q_4<L#l2q8L#'HZ GKH\W~%=%BCD%ff55JE{HGNH\W~%=%BCD"0HY#5HZ   r6   c                   t          d          }j        }dj        z  z
  j        }||z
  dk    }d	d         |<   d	d         ||| z  dk    z  <   t          d          }	d         }d	|||| z  dk    z  <   d
|<   d||<   d S )Nr^   r   r   TrO  rP  r(  r   r   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rA  r_   r   )
rY  rh  _second_prev_secondsecond_startr^  ra  r_  r`  ri  s
          r4   _second_finderz%_daily_finder.<locals>._second_finder  s    '99LmG"Q_4<L#l2q8L(,DK%JNDK.(@A(EFG%ff55JE{HGQH\W~%=%BCD"3HY#8HZ   r6   i.  ip  r  i`	  r4  i  r  i      i        F      r        @Fg      ?g      ?   r(  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r2  %Yr   )!_period_dtype_coder   from_period_dtype_codeFR_HRrG   FR_NSFR_USFR_MSFR_SECFR_MINr   FR_BUSFR_DAYFR_WKr   r   r   r   r   r   rL   r   r   r1   zerosint64rC  r   rA  rG  r)  r(  r:  ) r"  r#  r   
dtype_code
freq_groupperiodsperdayperiodsperyearperiodspermonthspanmonth_startrd  rj  ro  r^  
week_startquarter_startmonth_break
jan_or_jul
year_breakr6  
min_anndef
maj_anndef	major_idx	minor_idxr_  r`  rU  ri  ra  rb  rc  rT  s                            @@@@@@@@r4   _daily_finderr    s
   (J1*==JMY_***((5MM9?**2MM9?**/MM9+++(MM9+++#MM9?**MMBjBBCCC},},	y'	'	'	y'	'	'	y	&	&/000 I		 	"	" 

 

;m	
 	
 	
 	
 	7-	
 	
 	
 	
 3t9940003t994000 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 dF#####dF#####<$,&*D		 	"	" ? ?;m	
 	
 	
 	
 	7-	
 	
 	
 	
 Dd>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8eRX&t}oV  D [DKNDKNDKBE{HE{HE{H" " " " "  //	"6733	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	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%ff55JE{H"&HY$,H[!#/HZ ":y99 F&{I>> F7CH[[33449EH[[556 
1$	$	$"6733 $	---DKK$VU33I%)DK	"!&&11
!&&11
# (+z955 	B";	:: B4@Z00115A[112	&	&	&!&&11
"6733!&&11
 $#$ % $'z955 	:19H[[--.	~%	%	%!&&11
$VY77"6733"& $"&'	^#	#	#!&&11
"6733# $$[)/ +"2{a7G!HI
#'	n$	$	$!&&11
$VY77#"&$# "&&11
J',
&#>v#F#F Z
Z 71 <>	"
Z 71 <>	""Ks&   -A5F..F25F2AI##I'*I'c                    d}| }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 )Nrt  r   rN  rO  rP  r   z|S8rQ  r   r   r   rx  Try  rz  ru  rL  rv  r  r2  r}  	r   r1   r  rC  aranger?  rG  r   r:  )r"  r#  r   r  rT  r  ri  r_  r^  rb  ra  idxr  r  r6  r  r  yearsr  s                      r4   _monthly_finderr    s   N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:"Kr6   c                   d}| }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 )Nrv  r   rN  rO  rP  r  rQ  r   r   r   g      @TzQ%qzQ%q
%Fr2  z%Fi  r  )r"  r#  r   r  rT  r  ri  r_  rb  ra  r^  r  r  r6  r  r  r  s                    r4   _quarterly_finderr  \  s   N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:"Kr6   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    }d
|d         |<   d
|d         ||z  d	k    <   d|d         |<   |S )Nr   rN  rO  rP  r  rQ  r   r   r   Tr}  )r   r1   r  rC  r  r:  )	r"  r#  r   r  ri  r_  r  r  r  s	            r4   _annual_finderr    s    IIs4!8}}4T$;?D8eS\E4=5$-P  D )D$(++DKDK%[F:4@@Z#q(I!DK	.2DK*$)+!DK	Kr6   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|           )NzUnsupported frequency: )r~  r   r  FR_ANNr  FR_QTRr  FR_MTHr  r  rG   r  r  NotImplementedError)r   r  fgroups      r4   
get_finderr    s    (J-j99F!!!	9#	#	#  	9#	#	#
	(.
.
.6Y_3L3L!"HJ"H"HIIIr6   c                  <    e Zd ZdZ	 	 	 	 	 	 	 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
    FTr   Nr   r!   minor_locatorrC  dynamic_modebaser   r{  r)  r*  r8   rH   c	                    t          |          }|| _        || _        |||c| _        | _        | _        || _        || _        d| _        || _	        t          |          | _        d S r   )r   r   r  r{  r)  r*  isminor	isdynamicoffsetplot_objr  finder)	r   r   r  r  r  r{  r)  r*  r  s	            r4   r   zTimeSeries_DateLocator.__init__  sb     		07,tz48$%  &&r6   c                   | j         j        &|                     ||| j                  | j         _        | j         j        }| j        r!t          j        |d         |d                   S t          j        |d         |d                   S )z'Returns the default locations of ticks.NrP  rN  rO  )r  date_axis_infor  r   r  r1   compress)r   r"  r#  r   s       r4   _get_default_locsz(TimeSeries_DateLocator._get_default_locs  sq    ='/+/;;tT49+M+MDM(-.< 	?;wu~wu~>>>{75>75>:::r6   c                   t          | j                                                  }|| j        j        k    rd| j        _        || j        _        |\  }}||k     r||}}| j        r|                     ||          }nC| j        }t          ||          \  }}|dz   |z  }t          t          ||dz   |                    }|S )z"Return the locations of the ticks.Nr   )rq   rs   r   r  view_intervalr  r  r  r  r   rp   range)r   vir"  r#  r   r  re   r   s           r4   r   zTimeSeries_DateLocator.__call__  s     49..0011,,,+/DM(&(#
d$;;t$D> 	5))$55DD9DD$''FQET>DdD1Hd3344Dr6   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   )rs   r   r  r   )r   r"  r#  r   s       r4   r$  z TimeSeries_DateLocator.autoscale  sl     y2244t%%dD11QG}t4<<AIDAID4&&&r6   )FTr   r   r   r   N)r   r!   r  rC  r  rC  r  r   r{  r   r)  r   r*  r   r8   rH   )r   r   r   __doc__r   r  r   r$  rk   r6   r4   r  r    s{         ( $!' ' ' ' '*	; 	; 	;  (' ' ' ' 'r6   r  c                  :    e Zd ZdZ	 	 	 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.
    FTNr   r!   r  rC  r  r8   rH   c                    t          |          }d | _        || _        g | _        d | _        || _        || _        d| _        || _        t          |          | _
        d S r   )r   formatr   r   
formatdictr  r  r  r  r  r  )r   r   r  r  r  s        r4   r   z!TimeSeries_DateFormatter.__init__  sZ     	!	15$%  &&r6   c                `   | j         j        &|                     ||| j                  | j         _        | j         j        }| j        r7t          j        |d         t          j        |d                   z  |          }nt          j        |d         |          }d |D             | _        | j        S )z"Returns the default ticks spacing.NrP  rO  c                    i | ]
\  }}}}||S rk   rk   )rl   rm   r   fs       r4   
<dictcomp>z@TimeSeries_DateFormatter._set_default_format.<locals>.<dictcomp>6  s"    ;;;LQ1a1a;;;r6   )	r  r  r  r   r  r1   r  logical_notr  )r   r"  r#  ri  r  s        r4   _set_default_formatz,TimeSeries_DateFormatter._set_default_format,  s    ='/+/;;tT49+M+MDM(}+< 	4[er~d5k/J/J!JDQQFF[ed33F;;F;;;r6   c                    || _         t          | j                                                  x\  }}}|| j        j        k    rd| j        _        || j        _        ||k     r||}}|                     ||           dS )zSets the locations of the ticksN)r   rq   rs   r   r  r  r  r  )r   r   r"  r#  r  s        r4   set_locsz!TimeSeries_DateFormatter.set_locs9  s    
 	!$)"="="?"?@@@tr,,,+/DM(&(#$;; $4T  t,,,,,r6   r   r   r   rd   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   rM  )r  rT   rL   r1   bytes_decoder   r   r   r   r   r   r   r   )r   rm   r   r   r   s        r4   r   z!TimeSeries_DateFormatter.__call__H  s)   ?"2/%%a,,C#ry)) *jj))(** @ @'9*   
  ATY???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ff-----??3'''s   'A B33B7:B7)FTN)r   r!   r  rC  r  rC  r8   rH   r   r   r   )r   r   r   r  r   r  r  r   rk   r6   r4   r  r    s~         " $!' ' ' ' '$  - - - -( ( ( ( ( ( (r6   r  c                  4    e Zd ZdZedd            Zddd	Zd
S )TimeSeries_TimedeltaFormatterzR
    Formats the ticks along an axis controlled by a :class:`TimedeltaIndex`.
    
n_decimalsr   r8   rd   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 ʚ;r\   r   r  	   02d:r   .0re   z days )r   r   )	rm   r   r  r   nsr   r   re   decimalss	            r4   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r6   r   r   c                *   t          | j                                                  \  }}t          t	          t          j        t          j        dt          ||z
            z                                d          }| 	                    |||          S )Nl    h] r  )
rq   rs   r   rP  r   r1   ceillog10r   r  )r   rm   r   r"  r#  r  s         r4   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:>>>r6   N)r  r   r8   rd   r   r   )r   r   r   r  r   r  r   rk   r6   r4   r  r  Z  sW             \ ? ? ? ? ? ? ?r6   r  )r7   r   r8   r   )r8   rB   r   )rX   rY   r8   rZ   r*   )r   r   r8   r   )r8   r0  )r;  r   r   rd   r8   r<  )rB  r<  r"  rZ   r8   rC  )r   r!   )i
__future__r   
contextlibr   r-   r   r   r?   typingr   r   r	   r
   r   matplotlib.datesr;  r   matplotlib.tickerr   r   r   matplotlib.transformsr   matplotlib.unitsr   rJ   numpyr1   pandas._libsr   pandas._libs.tslibsr   r   pandas._libs.tslibs.dtypesr   pandas._typingr   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    pandas._libs.tslibs.offsetsr!   r"   __annotations__r#   r$   r%   r&   r(   rM   r5   rA   contextmanagerr;   rE   rF   rb   rg   ConversionInterfacer0   r{   DateConverterr,   r   r+   r   r   r   r   r   r   r/  r:  rA  rG  r  r  r  r  r  r  r  r  rk   r6   r4   <module>r     su   " " " " " " "                 
                 ! ! ! ! ! !         
 . - - - - - ! ! ! ! ! !                  1 0 0 0 0 0                            
 !                 4 4 4 4 4 4         
 , + + + + + + + + + + + 7))))))666666             !L0 0 0 0 0!M1 1 1 1 1{* * * * *
	 	 	
 
 
 
    *' ' ' '. . . .   
      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 ? ? ?(K, K, K, K, K,+ K, K, K,\    :& & & &,- - - -     u u u upC C CL, , ,^  (J J J J"S' S' S' S' S'W S' S' S'vL( L( L( L( L(y L( L( L(^? ? ? ? ?I ? ? ? ? ?r6   