
    d͍                       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mZ d dlm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/m0Z0 d dl1m2c m3Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z: d dl;m2c m<c m=Z< e	r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	Generatorcast)relativedelta)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)
BaseOffsetg      8@r	   HOURS_PER_DAY      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    a/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsr7   L   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kwargsr9   s     r6   wrapperz6register_pandas_matplotlib_converters.<locals>.wrapper]   s       	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   %)))	functoolswrapsr   r   )r9   r@   s   ` r6   %register_pandas_matplotlib_convertersrC   X   sE    
 _T) ) ) ) ) 7r8   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    r6   r=   r=   e   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,   )r7   munitsregistry
isinstance
_mpl_units)r5   type_clspreviouss       r6   rG   rG   {   sv    KKE ' '
sFO##Jvu7Ms,S,S#u-H (Ju!$' 'r8   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,   )r7   typerL   rM   getpoprO   itemsr-   r.   r2   )rP   rQ   unit	formatters       r6   rH   rH      s    kk ' '
s##E**++s22O&&& &++-- . .i	??#4o}"UUU$-FOD!. .r8   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)rZ   tot_secs     r6   _to_ordinalfrd      s0    gnry2~-	9BNU<RRGNr8   c                    t          | t                    r0t          |           }t          |                                          S t          | t
          j                  rt          |           S | S r,   )rN   strr   rd   r1   r/   )dparseds     r6   time2numri      sZ    !S +1FKKMM***!TY AHr8   c                  T    e Zd Zed             Zedd            Zed	d            ZdS )
r2   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  )ri   ).0xs     r6   
<listcomp>z)TimeConverter.convert.<locals>.<listcomp>   s    ///AHQKK///r8   )rf   r/   r1   rN   r   r   ri   r   maplisttupler3   ndarray)rI   rX   axisvalid_typess       r6   convertzTimeConverter.convert   s    DI&e[)) 	#Z->-> 	#(5// 	#E??"eU## 	'99X&&&edE2:u=>> 	0//////r8   r:   munits.AxisInfo | Nonec                z    | dk    rd S t                      }t          |          }t          j        ||d          S )Nr1   )majlocmajfmtlabel)r   TimeFormatterrL   AxisInfo)rX   ru   rz   r{   s       r6   axisinfozTimeConverter.axisinfo   s=    6>>4v&&fV6JJJJr8   rf   c                    dS )Nr1   rm   ro   ru   s     r6   default_unitszTimeConverter.default_units   s    vr8   N)r:   rx   )r:   rf   )__name__
__module____qualname__staticmethodrw   r   r   rm   r8   r6   r2   r2      sq          \ K K K \K    \  r8   r2   c                       e Zd Zd
dZdddZd	S )r}   r:   rJ   c                    || _         d S r,   )locs)selfr   s     r6   __init__zTimeFormatter.__init__   s    			r8   r   posintrf   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/   r1   strftime)r   ro   r   fmtsmsusmsusmh_s              r6   __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0r8   Nr:   rJ   r   r   r   r:   rf   )r   r   r   r   r   rm   r8   r6   r}   r}      sA           !1 !1 !1 !1 !1 !1 !1r8   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 rm   )r.   _convert_1d)rn   vru   unitss     r6   rp   z+PeriodConverter.convert.<locals>.<listcomp>   s+    RRRao11!UDAARRRr8   )r   r.   r   )valuesr   ru   s    ``r6   rw   zPeriodConverter.convert   sO    v&& 	FRRRRR6RRRFF$00EEFr8   c                   t          d          st          d          t          t          t          t
          j        t
          j        t          j	        f}t          | |          st          |           st          |           rt          | j                  S t          | t                    r|                     j                  j        S t          | t$                    r|                     fd          S t)          j        | d          dk    rt          | j                  j        S t          | t,          t.          t          j        t$          f          rfd| D             S | S )	Nfreqz/Axis must have `freq` set to convert to Periodsc                .    t          | j                  S r,   get_datevaluer   r   s    r6   <lambda>z-PeriodConverter._convert_1d.<locals>.<lambda>   s    a(C(C r8   F)skipnaperiod)r   c                :    g | ]}t          |j                  S rm   r   )rn   ro   ru   s     r6   rp   z/PeriodConverter._convert_1d.<locals>.<listcomp>  s%    @@@AM!TY//@@@r8   )hasattr	TypeErrorrf   r   r   r/   r0   r1   r3   r4   rN   r   r   r   r   r    asfreqasi8r   rq   r   infer_dtyperr   rs   rt   )r   r   ru   rv   s     ` r6   r   zPeriodConverter._convert_1d   sL   tV$$ 	OMNNNHfdiBMRfk** 	Aj.@.@ 	AHVDTDT 	A 333,, 		A==++00&& 	A::CCCCDDD_VE222h>> vDI666;;ubj% @AA 	A@@@@@@@@r8   N)r   r   r   r   rw   r   rm   r8   r6   r.   r.      sH          \   \  r8   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 '')rN   r   r   ordinalrf   r   r/   r0   r1   r3   r4   r   r   rt   r   size
ValueError)r0   r   s     r6   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5r8   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 rm   )r-   r   )rn   r   ru   rX   s     r6   rp   z-DatetimeConverter.convert.<locals>.<listcomp>  s,    SSSq'33AtTBBSSSr8   )r   r-   r   )r   rX   ru   s    ``r6   rw   zDatetimeConverter.convert  sQ     v&& 	GSSSSSFSSSFF&2264FFFr8   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    r6   	try_parsez0DatetimeConverter._convert_1d.<locals>.try_parse"  sF    u'8'@'@AAA   s   %( 77)rN   r   r/   r0   r3   r4   r1   r   r   r   r   rf   rr   rs   rt   r   r   r   comasarray_tuplesafer   r   r   r   r   )r   rX   ru   r   s       r6   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rX   tzinfo | Noner:   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   )rz   r{   r|   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr/   r0   rL   r~   )rX   ru   r   rz   r{   datemindatemaxs          r6   r   zDatetimeConverter.axisinfoD  sx     &"---(B777)D!Q'')D!Q''&GWCU
 
 
 	
r8   N)rX   r   r:   r   )r   r   r   r   rw   r   r   rm   r8   r6   r-   r-     si          \ ! ! \!F 
 
 
 \
 
 
r8   r-   c                      e Zd Zdd	dZdS )
r   N%Y-%m-%d
defaultfmtrf   r:   rJ   c                J    t           j                            | |||           d S r,   )r   AutoDateFormatterr   )r   locatorr   r   s       r6   r   z PandasAutoDateFormatter.__init__Y  s%     ))$ZHHHHHr8   )Nr   )r   rf   r:   rJ   )r   r   r   r   rm   r8   r6   r   r   X  s4        I I I I I I Ir8   r   c                      e Zd Zd Zd ZdS )r   c                   t          ||          }|j        dz  |j        z   dz  |j        z   }|j        dz  |j        z   dz  |j        z   }|dz  |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.g      (@g      ?@r$   g     @)r   yearsmonthsdayshoursminutessecondsabsminticks_freqMilliSecondLocatorr   set_axisru   set_view_intervalget_view_intervalset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)r   dmindmaxdeltanum_daysnum_secrc   r   s           r6   r   z!PandasAutoDateLocator.get_locator^  s    dD))K$&5=
J;%5=MW$w.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Cr8   c                @    t                               | j                  S r,   )r   get_unit_genericr   r   s    r6   	_get_unitzPandasAutoDateLocator._get_unitq  s    !224:>>>r8   N)r   r   r   r   r   rm   r8   r6   r   r   ]  s5        D D D&? ? ? ? ?r8   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>r:   rJ   c                T    t           j                            | |           d| _        d S )Ng      ?)r   DateLocatorr   	_interval)r   r   s     r6   r   zMilliSecondLocator.__init__x  s&    ##D"---r8   c                ,    |                      d          S )Nr   )r   r   s    r6   r   zMilliSecondLocator._get_unit|  s    $$R(((r8   c                h    t           j                            |           }|dk     rt          j        S |S Nr   )r   RRuleLocatorr   r   UNIT)r   rX   s     r6   r   z#MilliSecondLocator.get_unit_generic  s/    "33D99!88%**r8   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 rg   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                   r6   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    r6   r  z MilliSecondLocator._get_interval  s
    ~r8   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        r6   	autoscalezMilliSecondLocator.autoscale  sM    
 ''))
dt$$t$$d+++r8   Nr   )r   r   r   r   r   r   r   r   r   r  r%  rm   r8   r6   r   r   u  s        #D   ) ) )   \+ + +Z  
, 
, 
, 
, 
,r8   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   fromordinalr\   r   yearmonthday
astimezoner   )	ro   r   ixdt	remainderr_   r`   ra   rb   s	            r6   _from_ordinalr0    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%<====Ir8   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  )r5  r  r  )r5     iX  )r  r  r   r   rm   )nyearsmin_spacingmaj_spacingfactors       r6   _get_default_annual_spacingr;    s     {{%+"kk	"%+"kk	"%+"kk	#%,"kk	#%,"kk	#%-"kk4!#&,rk6C<k%%r8   datesr    r   rf   
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   r3   nonzero)r<  r   currentrR   s       r6   period_breakrB    sG     eV$$Guq5:~-v66H:g())!,,r8   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   )rC  r#  s     r6   has_level_labelrH    sD     1A+a.A"5"5$(S..utr8   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          t          |           |          t          t          |          |          }} t!          | t                    sJ t!          |t                    sJ |j        | j        z
  dz   }t%          | ||          t'          j        |dt&          j        fdt,          fdt,          fdg          j        d         d d <   dd         d d <   dd         ddg<   d         d         d         fd||k    rt1          d          t1          d          }	dFfd!}
dFfd"}dF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 |d,           n||d-z  k     r |d.           n||d/z  k     r |d           n||d0z  k     r |d&           n||dz  k     r |d(           n||d1z  k     r |d,           n||d2z  k     r |d.           no||d3z  k     r |
dd4           nX||d5z  k     r |
d&d4           nA||d6z  k     r |
dd4           n*||d3z  k     r |
d2d           n||d7z  k     r |
d1d           nd|	<   d<   t1          d8          }d         d9<   d:|	<   d;|<   t3          |          s.t3          |	          sd;           <   nd; |	          <   n||d7z  k    rt1          d          }	d|	<   |t          j        j        k     rdd<   nt1          d          dd         <   t1          d<          }t1          d8          }d9|<   d=|	<   d>|<   t3          |          s.t3          |	          sd> |          <   nd> |	          <   n|d?|z  k    rnt1          d8          }t1          d          }	t1          d<          }d|	<   d|<   d4|<   d4|	<   d@|	<   dA|<   t3          |          sdA |	          <   nQ|d3|z  k    rFt1          d8          }t1          dB          }t1          d          }	d|<   d|	<   d@|<   dA|<   n|d7|z  k    rZt1          d8          }t1          d          }	d|<   d|	<   d4|<   |	         j        }|	|dk    |dCk    z           }d@|<   dA|<   n|dD|z  k    r5t1          d8          }t1          dB          }d|<   d|<   d4|<   dE|<   nat1          d8          }|         j        }||z  }t9          |          \  }}|||z  dk             }d|<   |||z  dk             }d|<   dE|<   S )GNr   l     "R: l    `;P i \&r  i  r   zunexpected frequency: im     i     4      zunexpected frequency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   rF  rG  )rC  	vmin_origs    r6   first_labelz"_daily_finder.<locals>.first_labelR  sB    Nak&6&:&:)a-SVAVAVq>!q>!r8   r+  r*  r:   rJ   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   rB  rH  )label_intervalforce_year_start_hour
_prev_hour
hour_start
year_startdates_	day_startrV  info_fmtinfo_majinfo_minrU  s         r6   _hour_finderz#_daily_finder.<locals>._hour_finder]  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r8   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   rX  rY  )rB  r`   r   )rZ  r^  _minute_prev_minuteminute_startr_  rb  r`  ra  inforc  rd  s          r6   _minute_finderz%_daily_finder.<locals>._minute_finderj  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   r8   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   TrP  rQ  r)  r   r   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rB  ra   r   )
rZ  ri  _second_prev_secondsecond_startr_  rb  r`  ra  rj  s
          r6   _second_finderz%_daily_finder.<locals>._second_finderw  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   r8   i.  ip  r  i`	  r5  i  r  i      i        F      r        @Fg      ?g      ?   r)  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r3  %Yr   )_period_dtype_coder   from_period_dtype_codeFR_HRrI   FR_NSFR_USFR_MSFR_SECFR_MINr   FR_BUSFR_DAYFR_WKr   r   rN   r   r!   r3   zerosint64rD  r   rB  rH  r*  r)  r;  ) r#  r$  r   
dtype_code
freq_groupperiodsperdayperiodsperyearperiodspermonthspanmonth_startre  rk  rp  r_  
week_startquarter_startmonth_break
jan_or_jul
year_breakr7  
min_anndef
maj_anndef	major_idx	minor_idxr`  ra  rV  rj  rb  rc  rd  rU  s                            @@@@@@@@r6   _daily_finderr    so	   (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 	s4yyt,,,s4yyt,,, T dF#####dF#####<$,&*D$T:::F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 <>	""Kr8   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 )Nru  r   rO  rP  rQ  r   z|S8rR  r   r   r   ry  Trz  r{  rv  rM  rw  r  r3  r~  	r   r3   r  rD  aranger@  rH  r   r;  )r#  r$  r   r  rU  r  rj  r`  r_  rc  rb  idxr  r  r7  r  r  r   r  s                      r6   _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:"Kr8   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 )Nrw  r   rO  rP  rQ  r  rR  r   r   r   g      @TzQ%qzQ%q
%Fr3  z%Fi  r  )r#  r$  r   r  rU  r  rj  r`  rc  rb  r_  r  r   r7  r  r  r  s                    r6   _quarterly_finderr  D  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:"Kr8   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   rO  rP  rQ  r  rR  r   r   r   Tr~  )r   r3   r  rD  r  r;  )	r#  r$  r   r  rj  r`  r  r  r  s	            r6   _annual_finderr  s  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	Kr8   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  rI   r  r  NotImplementedError)r   r  fgroups      r6   
get_finderr    s    (J-j99F!!!	9#	#	#  	9#	#	#
	(.
.
.6Y_3L3L!"HJ"H"HIIIr8   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_locatorrD  dynamic_modebaser   r|  r*  r+  r:   rJ   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	            r6   r   zTimeSeries_DateLocator.__init__  sb     		07,tz48$%  &&r8   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.NrQ  rO  rP  )r  date_axis_infor  r   r  r3   compress)r   r#  r$  r   s       r6   _get_default_locsz(TimeSeries_DateLocator._get_default_locs  sq    ='/+/;;tT49+M+MDM(-.< 	?;wu~wu~>>>{75>75>:::r8   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   )rs   ru   r   r  view_intervalr  r  r  r  r   rr   range)r   vir#  r$  r   r  rg   r   s           r6   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r8   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   )ru   r   r  r   )r   r#  r$  r   s       r6   r%  z TimeSeries_DateLocator.autoscale  sl     y2244t%%dD11QG}t4<<AIDAID4&&&r8   )FTr   r   r   r   N)r   r"   r  rD  r  rD  r  r   r|  r   r*  r   r+  r   r:   rJ   )r   r   r   __doc__r   r  r   r%  rm   r8   r6   r  r    s{         ( $!' ' ' ' '*	; 	; 	;  (' ' ' ' 'r8   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  rD  r  r:   rJ   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        r6   r   z!TimeSeries_DateFormatter.__init__  sZ     	!	15$%  &&r8   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.NrQ  rP  c                    i | ]
\  }}}}||S rm   rm   )rn   ro   r   fs       r6   
<dictcomp>z@TimeSeries_DateFormatter._set_default_format.<locals>.<dictcomp>  s"    ;;;LQ1a1a;;;r8   )	r  r  r  r   r  r3   r  logical_notr  )r   r#  r$  rj  r  s        r6   _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;;;r8   c                    || _         t          | j                                                  x\  }}}|| j        j        k    rd| j        _        || j        _        ||k     r||}}|                     ||           dS )zSets the locations of the ticksN)r   rs   ru   r   r  r  r  r  )r   r   r#  r$  r  s        r6   set_locsz!TimeSeries_DateFormatter.set_locs!  s    
 	!$)"="="?"?@@@tr,,,+/DM(&(#$;; $4T  t,,,,,r8   r   r   r   rf   c                F   | j         dS | j                             |d          }t          |t          j                  r|                    d          }t          t          |          | j                  }t          |t                    sJ |	                    |          S )Nr   zutf-8rN  )
r  rV   rN   r3   bytes_decoder   r   r   r   )r   ro   r   r   r   s        r6   r   z!TimeSeries_DateFormatter.__call__0  s    ?"2/%%a,,C#ry)) *jj))CFF;;;Fff-----??3'''r8   )FTN)r   r"   r  rD  r  rD  r:   rJ   r   r   r   )r   r   r   r  r   r  r  r   rm   r8   r6   r  r    s~         " $!' ' ' ' '$  - - - -	( 	( 	( 	( 	( 	( 	(r8   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   r:   rf   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   .0rg   z days )r   r   )	ro   r   r  r   nsr   r   rg   decimalss	            r6   format_timedelta_ticksz4TimeSeries_TimedeltaFormatter.format_timedelta_ticksA  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r8   r   r   c                *   t          | j                                                  \  }}t          t	          t          j        t          j        dt          ||z
            z                                d          }| 	                    |||          S )Nl    h] r  )
rs   ru   r   rQ  r   r3   ceillog10r   r  )r   ro   r   r#  r$  r  s         r6   r   z&TimeSeries_TimedeltaFormatter.__call__R  sv    TY88::;;tRWRXkCt<L<L.L%M%MNNOOQRSS
**1c:>>>r8   N)r  r   r:   rf   r   r   )r   r   r   r  r   r  r   rm   r8   r6   r  r  <  sW             \ ? ? ? ? ? ? ?r8   r  )r9   r   r:   r   )r:   rD   r   )rZ   r[   r:   r\   r,   )r   r   r:   r   )r:   r1  )r<  r    r   rf   r:   r=  )rC  r=  r#  r\   r:   rD  )r   r"   )i
__future__r   
contextlibr   r/   r   r   rA   typingr   r   r	   r
   r   dateutil.relativedeltar   matplotlib.datesr<  r   matplotlib.tickerr   r   r   matplotlib.transformsr   matplotlib.unitsr   rL   numpyr3   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pandas._libs.tslibs.offsetsr"   r#   __annotations__r%   r&   r'   r(   r*   rO   r7   rC   contextmanagerr=   rG   rH   rd   ri   ConversionInterfacer2   r}   DateConverterr.   r   r-   r   r   r   r   r   r   r0  r;  rB  rH  r  r  r  r  r  r  r  r  rm   r8   r6   <module>r     su   " " " " " " "                 
                  1 0 0 0 0 0 ! ! ! ! ! !         
 . - - - - - ! ! ! ! ! !                  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*   :6 6 6"?
 ?
 ?
 ?
 ?
, ?
 ?
 ?
DI I I I If6 I I I
? ? ? ? ?F2 ? ? ?0K, K, K, K, K,+ K, K, K,\    :& & & &,- - - -     e e e ePC C CL, , ,^  (J J J J"S' S' S' S' S'W S' S' S'vF( F( F( F( F(y F( F( F(R? ? ? ? ?I ? ? ? ? ?r8   