
    Pic                    ,   U d dl mZ d dlZd dlZd dlmZmZ d dlZd dlmZm	Z	m
Z
 d dlZd dl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l+m,c m-Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m,c m6c m7Z6 erd dl8m9Z9 d dl:m;Z; d dl<m=Z= d dlm>Z> i Z?de@d<   dQdZAdRdZBejC        dSd            ZDdTdZEdTdZFdUd!ZGd" ZH G d# d$ejI                  ZJ G d% d&ejK        jL                  ZM G d' d(ejN                  ZOdVd+ZP G d, d-ejN                  ZQ G d. d/ejR                  ZS G d0 d1ejT                  ZU G d2 d3ejV                  ZWdWd5ZXdXd;ZYdYd=ZZdZdAZ[d[dCZ\ej]        d\dF            Z^ej]        d\dG            Z_ej]        d\dH            Z`ej]        d\dI            ZadVdJZb G dK dLejK        jc                  Zd G dM dNejK        jL                  Ze G dO dPejK        jL                  ZfdS )]    )annotationsN)datetimetzinfo)TYPE_CHECKINGAnycast)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)
BaseOffset)TimeUnitdict
_mpl_unitsreturn-list[tuple[type, type[mdates.DateConverter]]]c                     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    y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsr0   F   sL    	%&	!	)*	%&	M"	)*E L    funcr   c                l     t          j                    fd            }t          t          |          S )z/
    Decorator applying pandas_converters.
    c                 d    t                      5   | i |cd d d            S # 1 swxY w Y   d S r%   )pandas_converters)argskwargsr2   s     r/   wrapperz6register_pandas_matplotlib_converters.<locals>.wrapperW   s       	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   %)))	functoolswrapsr   r   )r2   r8   s   ` r/   %register_pandas_matplotlib_convertersr;   R   sE    
 _T) ) ) ) ) 7r1   Generator[None]c               #     K   t          d          } | rt                       	 dV  | dk    rt                       dS dS # | dk    rt                       w w xY w)z
    Context manager registering pandas' converters for a plot.

    See Also
    --------
    register_pandas_matplotlib_converters : Decorator that applies this.
    z'plotting.matplotlib.register_convertersNauto)r   register
deregister)values    r/   r5   r5   _   sn       @AAE 


F??LLLLL ?5F??LLLL s	   ? ANonec                     t                      } | D ]f\  }}|t          j        v r<t          t          j        |         |          st          j        |         }|t          |<    |            t          j        |<   gd S r%   )r0   munitsregistry
isinstancer!   )r.   type_clspreviouss       r/   r?   r?   u   sv    KKE ' '
sFO##Jvu7Ms,S,S#u-H (Ju!$' 'r1   c                 j   t                      D ]R\  } }t          t          j                            |                     |u rt          j                            |            St                                          D ]7\  }}t          |          t          t          t          hvr|t          j        |<   8d S r%   )r0   typerD   rE   getpopr!   itemsr&   r'   r+   )rG   rH   unit	formatters       r/   r@   r@      s    kk ' '
s##E**++s22O&&& &++-- . .i	??#4o}"UUU$-FOD!. .r1   tm	pydt.timefloatc                V    | j         dz  | j        dz  z   | j        z   | j        dz  z   }|S )Ni  <   @B )hourminutesecondmicrosecond)rQ   tot_secs     r/   _to_ordinalfr\      s0    gnry2~-	9BNU<RRGNr1   c                    t          | t                    r0t          |           }t          |                                          S t          | t
          j                  rt          |           S | S r%   )rF   strr
   r\   r*   r(   )dparseds     r/   time2numra      sZ    !S +1FKKMM***!TY AHr1   c                  T    e Zd Zed             Zedd            Zed	d            ZdS )
r+   c                v   t           t          j        f}t          | |          st	          |           st          |           rt          |           S t          | t                    r|                     t                    S t          | t          t          t          j        t          f          rd | D             S | S )Nc                ,    g | ]}t          |          S  )ra   ).0xs     r/   
<listcomp>z)TimeConverter.convert.<locals>.<listcomp>   s    ///AHQKK///r1   )r^   r(   r*   rF   r   r   ra   r   maplisttupler,   ndarray)rA   rO   axisvalid_typess       r/   convertzTimeConverter.convert   s    DI&e[)) 	#Z->-> 	#(5// 	#E??"eU## 	'99X&&&edE2:u=>> 	0//////r1   r"   munits.AxisInfo | Nonec                    | dk    rd S t           j                                        }t          |          }t	          j        ||d          S )Nr*   )majlocmajfmtlabel)mpltickerAutoLocatorTimeFormatterrD   AxisInfo)rO   rm   rr   rs   s       r/   axisinfozTimeConverter.axisinfo   sG    6>>4''))v&&fV6JJJJr1   r^   c                    dS )Nr*   re   )rg   rm   s     r/   default_unitszTimeConverter.default_units   s    vr1   N)r"   rp   )r"   r^   )__name__
__module____qualname__staticmethodro   rz   r|   re   r1   r/   r+   r+      sq          \ K K K \K    \  r1   r+   c                       e Zd Zd
dZdddZd	S )rx   r"   rB   c                    || _         d S r%   )locs)selfr   s     r/   __init__zTimeFormatter.__init__   s    			r1   r   pos
int | Noner^   c                R   d}t          |          }t          ||z
  dz            }|dz  }|dz  }t          |d          \  }}t          |d          \  }	}t          |	d          \  }
}	|dk    r*t          j        |	|||                              |          S |dk    r2t          j        |	|||                              |          dd         S |dk    r)t          j        |	||                              d	          S t          j        |	|                              d
          S )a  
        Return the time of day as a formatted string.

        Parameters
        ----------
        x : float
            The time of day specified as seconds since 00:00 (midnight),
            with up to microsecond precision.
        pos
            Unused

        Returns
        -------
        str
            A string in HH:MM:SS.mmmuuu format. Microseconds,
            milliseconds and seconds are only displayed if non-zero.
        z%H:%M:%S.%frV     rU      r   N%H:%M:%S%H:%M)introunddivmodr(   r*   strftime)r   rg   r   fmtsmsusmsusmh_s              r/   __call__zTimeFormatter.__call__   s   $ FFa!eu_%%T\D[a}}1a}}1a}}1779Q1d++44S9991WW9Q1d++44S99#2#>>!VV9Q1%%..z:::yA''000r1   Nr"   rB   r   r   r   r"   r^   )r}   r~   r   r   r   re   r1   r/   rx   rx      sA           !1 !1 !1 !1 !1 !1 !1r1   rx   c                  V    e Zd Zed	d            Zed
d            Zed
d            ZdS )r'   rm   r   c                    t          |d          st          d          t          |j        d          }t                              | |          S )Nfreqz/Axis must have `freq` set to convert to PeriodsT	is_period)hasattr	TypeErrorr   r   r'   convert_from_freq)valuesrO   rm   r   s       r/   ro   zPeriodConverter.convert   sP     tV$$ 	OMNNNd33300>>>r1   r   r   c                z    t          |           rfd| D             } nt                              |           } | S )Nc                F    g | ]}t                               |          S re   )r'   _convert_1d)rf   vr   s     r/   rh   z5PeriodConverter.convert_from_freq.<locals>.<listcomp>   s)    KKKqo11!T::KKKr1   )r   r'   r   )r   r   s    `r/   r   z!PeriodConverter.convert_from_freq   sH    v&& 	?KKKKFKKKFF$00>>Fr1   c                   t           t          t          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          |           cd d d            S t          | t                    r&|                               j        cd d d            S t          | t$                    r$|                     fd          cd d d            S t)          j        | d          dk    r"t          | 	          j        cd d d            S t          | t,          t.          t
          j        f          rfd
| D             cd d d            S 	 d d d            n# 1 swxY w Y   | S )Nignore#Period with BDay freq is deprecatedcategoryPeriodDtype\[B\] is deprecatedc                $    t          |           S r%   _get_datevalue)rg   r   s    r/   <lambda>z-PeriodConverter._convert_1d.<locals>.<lambda>  s    N1d,C,C r1   F)skipnaperiod)r   c                0    g | ]}t          |          S re   r   )rf   rg   r   s     r/   rh   z/PeriodConverter._convert_1d.<locals>.<listcomp>  s#    @@@Aq$//@@@r1   )r^   r   r   r(   r)   r,   r-   warningscatch_warningsfilterwarningsFutureWarningrF   r   r   r   r   asfreqasi8r   ri   r	   infer_dtyperj   rk   rl   )r   r   rn   s    ` r/   r   zPeriodConverter._convert_1d   s   HfdiG$&& 	A 	A#?-    #;m    6;//Af%%A F##A
 &fd33	A 	A 	A 	A 	A 	A 	A 	A FK00 	A}}T**/	A 	A 	A 	A 	A 	A 	A 	A FE** Azz"C"C"C"CDD!	A 	A 	A 	A 	A 	A 	A 	A" 666(BB #6555:)	A 	A 	A 	A 	A 	A 	A 	A* FT5"*$=>> A@@@@@@@-	A 	A 	A 	A 	A 	A 	A 	A*A+	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A. s*   A6G .G =,G 6/G 24G  GGNrm   r   r   r   )r}   r~   r   r   ro   r   r   re   r1   r/   r'   r'      sr        
? 
? 
? \
?    \    \  r1   r'   r   r   c                \   t          | t                    r|                     |          j        S t          | t          t
          t          j        t          j	        f          rt          | |          j        S t          |           st          |           r| S | d S t          d|  d          )NzUnrecognizable date '')rF   r   r   ordinalr^   r   r(   r)   r,   r-   r   r   
ValueError)r)   r   s     r/   r   r     s    $ {{4  ((	D3$)R]C	D	D dD!!))	D		 Xd^^ 	t
4T444
5
55r1   c                  T    e Zd Zedd            Zed             Zedd	            Zd
S )r&   rm   r   c                    t          |           rfd| D             } nt                              |           } | S )Nc                H    g | ]}t                               |          S re   )r&   r   )rf   r   rm   rO   s     r/   rh   z-DatetimeConverter.convert.<locals>.<listcomp>-  s,    SSSq'33AtTBBSSSr1   )r   r&   r   )r   rO   rm   s    ``r/   ro   zDatetimeConverter.convert#  sQ     v&& 	GSSSSSFSSSFF&2264FFFr1   c                   d }t          | t          t          j        t          j        t          j        f          rt          j        |           S t          |           st          |           r| S t          | t                    r ||           S t          | t          t          t          j        t          t           f          rt          | t                     rt          |           } t          | t                    r| j        } t          | t          j                  st%          j        |           } t)          |           st+          |           r| S 	 t-          j        |           } n# t0          $ r Y nw xY wt          j        |           } | S )Nc                t    	 t          j        t          j        |                     S # t          $ r | cY S w xY wr%   )mdatesdate2numtoolsto_datetime	Exception)r   s    r/   	try_parsez0DatetimeConverter._convert_1d.<locals>.try_parse4  sF    u'8'@'@AAA   s   %( 77)rF   r   r(   r)   r,   r-   r*   r   r   r   r   r^   rj   rk   rl   r   r   r   comasarray_tuplesafer   r   r   r   r   )r   rO   rm   r   s       r/   r   zDatetimeConverter._convert_1d2  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rO   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     i   )rr   rs   rt   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr(   r)   rD   ry   )rO   rm   r   rr   rs   datemindatemaxs          r/   rz   zDatetimeConverter.axisinfoV  sx     &"---(B777)D!Q'')D!Q''&GWCU
 
 
 	
r1   Nr   )rO   r   r"   r   )r}   r~   r   r   ro   r   rz   re   r1   r/   r&   r&   "  sn           \ ! ! \!F 
 
 
 \
 
 
r1   r&   c                      e Zd Zdd	dZdS )
r   N%Y-%m-%d
defaultfmtr^   r"   rB   c                J    t           j                            | |||           d S r%   )r   AutoDateFormatterr   )r   locatorr   r   s       r/   r   z PandasAutoDateFormatter.__init__k  s%     ))$ZHHHHHr1   )Nr   )r   r^   r"   rB   )r}   r~   r   r   re   r1   r/   r   r   j  s4        I I I I I I Ir1   r   c                      e Zd Zd Zd ZdS )r   c                   ||z
                                   }t          |          | j        k     rd| _        t	          | j                  }|                    | j                    |j        j        | j        	                                   |j        j
        | j                                          |S t          j                            | ||          S )z*Pick the best locator based on a distance.)total_secondsabsminticks_freqMilliSecondLocatorr   set_axisrm   set_view_intervalget_view_intervalset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)r   dmindmaxr[   r   s        r/   r   z!PandasAutoDateLocator.get_locatorp  s    $;--//w<<$-''DJ(11GTY''' +GL*,,..  +GL*,,..  N%11$dCCCr1   c                @    t                               | j                  S r%   )r   get_unit_genericr   r   s    r/   	_get_unitzPandasAutoDateLocator._get_unit  s    !224:>>>r1   N)r}   r~   r   r   r   re   r1   r/   r   r   o  s5        D D D*? ? ? ? ?r1   r   c                  H    e Zd ZdZddZd Zed             Zd Zd Z	d	 Z
d
S )r   gLH>r"   rB   c                T    t           j                            | |           d| _        d S )Ng      ?)r   DateLocatorr   	_interval)r   r   s     r/   r   zMilliSecondLocator.__init__  s&    ##D"---r1   c                ,    |                      d          S )Nr   )r   r   s    r/   r   zMilliSecondLocator._get_unit  s    $$R(((r1   c                h    t           j                            |           }|dk     rt          j        S |S )Nr   )r   RRuleLocatorr   r   UNIT)r   rO   s     r/   r   z#MilliSecondLocator.get_unit_generic  s/    "33D99!88%**r1   c                   	 |                                  \  }}n# t          $ r g cY S w xY wt          j        ||f          \  }}||z
  dz  dz  }d}dD ]}|||dz
  z  k    r	|| _         nd| _        ||z
  |                                 |                                 z  z  }|| j        dz  k    r&t          d|d	d
| d| d| j        dz  d	d	          |                                 }| d}	| j	        
                    d           }
|                    d           }|                    d           }t          |||	|
                              t                    }	 t          |          dk    r)|                     t          j        |                    }|S n# t"          $ r Y nw xY wt          j        ||g          }|S )NiQ r      )r   
   2   d      i  r   g     @@   z)MillisecondLocator estimated to generate r_   z ticks from z to z: exceeds Locator.MAXTICKS* 2 (z) r   )r   )startendr   r   r   )viewlim_to_dtr   r   r   r   r   _get_intervalMAXTICKSRuntimeErrorr   tznamereplacer   astypeobjectlenraise_if_exceedsr   )r   r   r   nmaxnminnummax_millis_ticksintervalestimater   r   sted	all_datesr   limss                   r/   r   zMilliSecondLocator.__call__  s:   	++--JD$$ 	 	 	III	 _dD\22
dd{e#d*2 	$ 	$Hh"2Q"6777!)#DNN4KDNN$4$4t7I7I7K7K$KLdma'''0U0 0+/0 0590 0)/0 0 0   %%''W^^D!!\\\&&\\\&&RRdrBBBII&QQ		9~~!!,,V_Y-G-GHH "  	 	 	D	 d|,,s    ))!;F 
F+*F+c                    | j         S r%   )r   r   s    r/   r
  z MilliSecondLocator._get_interval  s
    ~r1   c                    |                                  \  }}t          j        |          }t          j        |          }|                     ||          S )z@
        Set the view limits to include the data range.
        )datalim_to_dtr   r   nonsingular)r   r   r   vminvmaxs        r/   	autoscalezMilliSecondLocator.autoscale  sM    
 ''))
dt$$t$$d+++r1   Nr   )r}   r~   r   r   r   r   r   r   r   r
  r#  re   r1   r/   r   r     s        #D   ) ) )   \+ + +Z  
, 
, 
, 
, 
,r1   r   tuple[int, int]c                    | dk     rd\  }}nN| dk     rd\  }}nB| dk     rd\  }}n6| dk     rd\  }}n*| d	k     rd
\  }}n| dk     rd\  }}n| dz  dz   }|dz  |dz  }}||fS )zN
    Returns a default spacing between consecutive ticks for annual data.
       )r   r      )r   r  r  )r      r  )r(  r  r  )r(     iX  )r  r  r   r   re   )nyearsmin_spacingmaj_spacingfactors       r/   _get_default_annual_spacingr.    s     {{%+"kk	"%+"kk	"%+"kk	#%,"kk	#%,"kk	#%-"kk4!#&,rk6C<k%%r1   datesr   r   r^   npt.NDArray[np.intp]c                V    t          | |          }t          j        |          d         S )z
    Returns the indices where the given period changes.

    Parameters
    ----------
    dates : PeriodIndex
        Array of intervals to monitor.
    period : str
        Name of the period to monitor.
    r   )_period_break_maskr,   nonzero)r/  r   masks      r/   _period_breakr5    s(     eV,,D:dAr1   npt.NDArray[np.bool_]c                d    t          | |          }t          | d| j        z  z
  |          }||k    S )Nr   )getattrr   )r/  r   currentrI   s       r/   r2  r2    s6    eV$$Guq5:~-v66Hhr1   label_flagsr!  boolc                `    | j         dk    s | j         dk    r| d         dk    r|dz  dk    rdS dS )z
    Returns true if the ``label_flags`` indicate there is at least one label
    for this level.

    if the minimum view limit is not an exact integer, then the first tick
    label won't be shown, so we must adjust for that.
    r   r           FTsize)r:  r!  s     r/   has_level_labelr@  	  sD     1A+a.A"5"5$(S..utr1   tuple[int, int, int]c                   | j         }t          j        |          }d}|t          j        j        k    rt          | j                  }d|z  }d|z  }n|t          j        k    rd}d}n{|t          j        k    rd}d}nf|t          j	        k    rd}d}nQ|t          j
        k    rd}d	}n<|t          j        k    rd}d
}n'|t          j        k    rd}d}nt          d|           |||fS )Nr      im     i     4   r         Unsupported frequency: )_period_dtype_coder   from_period_dtype_codeFR_HRrA   r   _cresoFR_BUSFR_DAYFR_WKFR_MTHFR_QTRFR_ANNNotImplementedError)r   
dtype_code
freq_groupppdppmppys         r/   _get_periods_per_ymdrZ    s   (J1*==J
CY_***dk**3hCi	y'	'	'	y'	'	'	y	&	&	y'	'	'	y'	'	'	y'	'	'!"HJ"H"HIIIS=r1   r"  
np.ndarrayc           	         |j         }t          |          \  }}}| t          |           t          |          }} || z
  dz   }t          j                    5  t          j        ddt                     t          j        ddt                     t          t          | |          t          ||          |          d d d            n# 1 swxY w Y   t          j
        |dt          j        fd	t          fd
t          fdg          }j        |d         d d <   d|d         d d <   d|d	         ddg<   |d	         |d
         |d         fd||k    rt          d          t          d          }	t          d          dBfd}
dCfd}dCfd}||dz  k     r |d           n3||d z  k     r |d!           n||d"z  k     r |d#           n||d$z  k     r |d%           n||d&z  k     r |d'           n||d(z  k     r |d)           n||d*z  k     r |d           n||d+z  k     r |d!           n||d,z  k     r |d#           n||d-z  k     r |d'           nm||d.z  k     r |d)           nW||d/z  k     r |
dd0           n@||d1z  k     r |
d!d0           n)||d2z  k     r |
d3d0           n||d/z  k     r |
d.d           n||d4z  k     r |
d-d           nd|	<   d<   d5<   d6|	<   d7<   t                    s.t          |	          sd7           <   nd7 |	          <   n||d4z  k    rt          d          }	d|	<   |t           j        j        k     rd|d
<   nt          d          d|d
         <   t          d8          }t          d          d5|<   d9|	<   d:<   t                    s.t          |	          sd: |          <   nd: |	          <   n|d;|z  k    rnt          d          t          d          }	t          d8          }d|	<   d|<   d0<   d0|	<   d<|	<   d=<   t                    sd= |	          <   nQ|d/|z  k    rFt          d          t          d>          }t          d          }	d|<   d|	<   d<|<   d=<   n|d4|z  k    rZt          d          t          d          }	d<   d|	<   d0<   |	         j        }|	|dk    |d?k    z           }d<|<   d=<   n|d@|z  k    r5t          d          t          d>          }d<   d|<   d0<   dA<   nat          d                   j        }||z  }t+          |          \  }}||z  dk             }d|<   ||z  dk             }d|<   dA|<   |S )DNr   r   r   r   r   r   r   )r  r  r   valmajmin)r   z|S20dtyper   r   Tr   r   c                d    | d         dk    r| j         dk    rdz  dk    r| d         S | d         S )Nr   r   r=  r>  )r:  	vmin_origs    r/   first_labelz"_daily_finder.<locals>.first_labelb  sB    Nak&6&:&:)a-SVAVAVq>!q>!r1   daymonthyearlabel_intervalr   force_year_startr;  r"   rB   c                    j         }t          d          }d<   d	||| z  dk    z  <   d||| z  dk    z  <   d<   d<   |r t          
          sd           <   d S d S d S )NrW   Tr   r   %H:%M
%d-%b%H:%M
%d-%b
%Y)rW   r2  r@  )ri  rj  targetr4  dates_	day_startre  info_fmtinfo_majinfo_minrd  
year_starts       r/   _hour_finderz#_daily_finder.<locals>._hour_findern  s    [F%ff55D"&HY>BHTVn49:;>EHTVn49:;"0HY#5HZ  F
I(N(N F3EY//000F F F Fr1   c                    j         }t          d          }t          d          }d|<   d||| z  dk    z  <   d||| z  dk    z  <   d<   d	<   d S )NrW   rX   Tr   r   rl  rm  )rX   r5  r2  )
ri  rn  
hour_startr4  ro  rp  rq  rr  rs  rt  s
       r/   _minute_finderz%_daily_finder.<locals>._minute_findery  s~    ]F&vv66J%fh77D#'HZ >BHTVn49:;>EHTVn49:;"0HY#5HZ   r1   c                    j         }t          d          }t          d          }d|<   d||| z  dk    z  <   d||| z  dk    z  <   d<   d	<   d S )NrX   rY   Tr   r   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rY   r5  r2  )
ri  rn  minute_startr4  ro  rp  rq  rr  rs  rt  s
       r/   _second_finderz%_daily_finder.<locals>._second_finder  s~    ]F(::L%fh77D%)H\">BHTVn49:;>HHTVn49:;"3HY#8HZ   r1   i.  ip  r  i`	  r(  i  r  i      i        F   r   rG  r        @Fg      ?g      ?rE  rH  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r&  %Y)ri  r   rj  r;  r"   rB   )ri  r   r"   rB   )rJ  rZ  r   r   r   r   r   r   r   r,   zerosint64r;  r   r5  r@  r   rL  rA   rg  rh  r.  )r!  r"  r   rU  periodsperdayperiodspermonthperiodsperyearspaninfomonth_startru  rx  r{  
week_startquarter_startmonth_break
jan_or_jul
year_breakr*  
min_anndef
maj_anndef	major_idx	minor_idxro  rp  re  rq  rr  rs  rd  rt  s                          @@@@@@@@r/   _daily_finderr  =  s    (J5I$5O5O2M?N IIIs4yy4T$;?D		 	"	" 
 
;m	
 	
 	
 	
 	7-	
 	
 	
 	
 D111t$///
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8eRX&t}oV  D [DKNDKNDKBE{HE{HE{H" " " " " !&%00	#FG44"6622
		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 -%'''N1MD(((N1MD(((N1MD(((N2MC'''N2MC'''N2MC'''N1MB&&&N1MB&&&N1MB&&&N2MA%%%N2MC'''LE""""MC'''LE""""MD(((LE""""MC'''LD!!!!MA%%%LT""""$(H[!"&HY"&HY$,H[!#/HZ ":y99 F&{I>> F7CH[[33449EH[[556 
1$	$	$#FG44 $	---DKK%fe44I%)DK	""6622
"6622
# (+z955 	B";	:: B4@Z00115A[112	&	&	&"6622
#FG44"6622
 $#$ % $'z955 	:19H[[--.	~%	%	%"6622
%fi88#FG44"& $"&'	^#	#	#"6622
#FG44# $$[)/ +"2{a7G!HI
#'	n$	$	$"6622
%fi88#"&$# #6622
J',
&#>v#F#F Z
Z 71 <>	"
Z 71 <>	""Ks   A)CCCc                "   t          |          \  }}}| }t          |           t          |          }} || z
  dz   }t          j        |dt          fdt          fdt          fdg          }t          j        | |dz             |d<   |d         }d|d<   |d	z  d
k                                    d
         }	|d         }
|d         }|d|z  k    r=d|
|	<   d|d<   d|d d <   d||	<   t          |	|          s|j        dk    rd}nd
}d||<   n|d|z  k    r;|dz  d
k                                    }d|
|	<   d|d         |<   d|d<   d||<   d||	<   n|d|z  k    r(d|
|	<   d|d<   |d	z  d
k    |d	z  dk    z  }d||<   d||	<   n|d|z  k    r1|dz  d
k                                    }d|
|	<   d|d         |<   d||	<   nV||z  }t          |          \  }}||	         d	z  dz   }|	||z  d
k             }d|
|<   d|d         |	||z  d
k             <   d||<   |S )Nr   r^  r_  r`  r   z|S8ra  r   r   rG  r   r  Tr  r  r  rE  rH  r  r&  r  
rZ  r   r,   r  r;  aranger3  r@  r?  r.  )r!  r"  r   r   r  rd  r  r  ro  rt  rr  rq  idxr  r  r*  r  r  yearsr  s                       r/   _monthly_finderr    s   /55Aq.IIIs4yy4T$;?D 8eS\E4=5$-P  D )D$(++DK%[FDK2+"++--a0JE{HE{Htn$$$#U'z955 	%{Q$HSM	~%	%	%!q1133# &*UM"U"&'	^#	#	##UrkQ&6B;!+;<
#'	n$	$	$!q1133#%)UM"# &#>v#F#F Zz"b(1,
 2a 79	"=AUJ
 2a 79:"Kr1   c                   t          |          \  }}}| }t          |           t          |          }} || z
  dz   }t          j        |dt          fdt          fdt          fdg          }t          j        | |dz             |d<   d|d<   |d         }|d         }	|d         }
|d	z  d
k                                    d
         }|d|z  k    r<d|	|<   d|d<   d|
d d <   d|
|<   t          ||          s|j        dk    rd}nd
}d|
|<   no|d|z  k    rd|	|<   d|d<   d|
|<   nV||         d	z  dz   }||z  }t          |          \  }}|||z  d
k             }d|	|<   d|d         |||z  d
k             <   d|
|<   |S )Nr   r^  r_  r`  r  ra  r   r   rH  r   g      @TzQ%qzQ%q
%Fr&  z%Fi  r  )r!  r"  r   r   r  rd  r  r  ro  rr  rq  rt  r  r  r*  r  r  r  s                     r/   _quarterly_finderr  M  s   /55Aq.IIIs4yy4T$;?D8eS\E4=5$-P  D )D$(++DKDK%[FE{HE{H1*/**,,Q/Js^####U(z955 	&{Q%HSM	n$	$	$#U# z"a'$.&#>v#F#F Z
 2a 79	"=AUJ
 2a 79:"Kr1   c                   t          |           t          |dz             }} || z
  dz   }t          j        |dt           fdt          fdt          fdg          }t          j        | |dz             |d<   d|d<   |d         }t          |          \  }}||z  d	k    }||z  d	k    }	d
|d         |<   d
|d         |	<   d|d         |<   |S )Nr   r^  r_  r`  r  ra  r   r   r   Tr  )r   r,   r  r;  r  r.  )
r!  r"  r   r  r  ro  r  r  r  r  s
             r/   _annual_finderr  }  s     IIs4!8}}4T$;?D8eS\E4=5$-P  D )D$(++DKDK%[F:4@@Z#q(I#q(I!DK	!DK	!DK	Kr1   c                >   | j         }t          j        |          }|t          j        k    rt          S |t          j        k    rt          S |t          j        k    rt          S |t          j	        j
        k    s|t          j        k    rt          S t          d|           )NrI  )rJ  r   rK  rS  r  rR  r  rQ  r  rN  rA   rP  r  rT  )r   rU  fgroups      r/   
get_finderr    s    (J-j99F!!!	9#	#	#  	9#	#	#
	(.
.
.6Y_3L3L!"HJ"H"HIIIr1   c                  H    e Zd ZU dZded<   	 	 	 	 	 	 	 dddZd Zd Zd ZdS )TimeSeries_DateLocatora  
    Locates the ticks along an axis controlled by a :class:`Series`.

    Parameters
    ----------
    freq : BaseOffset
        Valid frequency specifier.
    minor_locator : {False, True}, optional
        Whether the locator is for minor ticks (True) or not.
    dynamic_mode : {True, False}, optional
        Whether the locator should work in dynamic mode.
    base : {int}, optional
    quarter : {int}, optional
    month : {int}, optional
    day : {int}, optional
    r   rm   FTr   Nr   r   minor_locatorr;  dynamic_modebaser   r  rg  rf  r"   rB   c	                    t          |d          }|| _        || _        |||c| _        | _        | _        || _        || _        d| _        || _	        t          |          | _        d S NTr   r   )r   r   r  r  rg  rf  isminor	isdynamicoffsetplot_objr  finder)	r   r   r  r  r  r  rg  rf  r  s	            r/   r   zTimeSeries_DateLocator.__init__  si     ...		07,tz48$%  &&r1   c                    |                      ||| j                  }| j        r!t          j        |d         |d                   S t          j        |d         |d                   S )z'Returns the default locations of ticks.r`  r^  r_  )r  r   r  r,   compress)r   r!  r"  r   s       r/   _get_default_locsz(TimeSeries_DateLocator._get_default_locs  sW    ++dD$)44< 	?;wu~wu~>>>{75>75>:::r1   c                2   t          | j                                                  }|\  }}||k     r||}}| j        r|                     ||          }nC| j        }t          ||          \  }}|dz   |z  }t          t          ||dz   |                    }|S )z"Return the locations of the ticks.r   )	rk   rm   r   r  r  r  r   rj   range)r   vir!  r"  r   r  r_   r   s           r/   r   zTimeSeries_DateLocator.__call__  s     49..0011
d$;;t$D> 	5))$55DD9DD$''FQET>D dD1Hd3344Dr1   c                    | j                                         \  }}|                     ||          }|ddg         \  }}||k    r
|dz  }|dz  }t          j                            ||          S )zf
        Sets the view limits to the nearest multiples of base that contain the
        data.
        r   r   r   )rm   r   r  ru   
transformsr   )r   r!  r"  r   s       r/   r#  z TimeSeries_DateLocator.autoscale  st     y2244t%%dD11QG}t4<<AIDAID~))$555r1   )FTr   r   r   r   N)r   r   r  r;  r  r;  r  r   r  r   rg  r   rf  r   r"   rB   )	r}   r~   r   __doc____annotations__r   r  r   r#  re   r1   r/   r  r    s          " JJJ
 $!' ' ' ' '*; ; ;  &6 6 6 6 6r1   r  c                  F    e Zd ZU dZded<   	 	 	 dddZd ZddZdddZdS )TimeSeries_DateFormattera  
    Formats the ticks along an axis controlled by a :class:`PeriodIndex`.

    Parameters
    ----------
    freq : BaseOffset
        Valid frequency specifier.
    minor_locator : bool, default False
        Whether the current formatter should apply to minor ticks (True) or
        major ticks (False).
    dynamic_mode : bool, default True
        Whether the formatter works in dynamic mode or not.
    r   rm   FTNr   r   r  r;  r  r"   rB   c                    t          |d          }d | _        || _        g | _        d | _        || _        || _        d| _        || _        t          |          | _
        d S r  )r   formatr   r   
formatdictr  r  r  r  r  r  )r   r   r  r  r  s        r/   r   z!TimeSeries_DateFormatter.__init__  sa     ...	!	15$%  &&r1   c                   |                      ||| j                  }| j        r7t          j        |d         t          j        |d                   z  |          }nt          j        |d         |          }d |D             | _        | j        S )z"Returns the default ticks spacing.r`  r_  c                    i | ]
\  }}}}||S re   re   )rf   rg   r   fs       r/   
<dictcomp>z@TimeSeries_DateFormatter._set_default_format.<locals>.<dictcomp>)  s"    ;;;LQ1a1a;;;r1   )r  r   r  r,   r  logical_notr  )r   r!  r"  r  r  s        r/   _set_default_formatz,TimeSeries_DateFormatter._set_default_format!  s    {{4ty11< 	4[er~d5k/J/J!JDQQFF[ed33F;;F;;;r1   c                    || _         t          | j                                                  \  }}||k     r||}}|                     ||           dS )zSets the locations of the ticksN)r   rk   rm   r   r  )r   r   r!  r"  s       r/   set_locsz!TimeSeries_DateFormatter.set_locs,  sX    
 	TY88::;;t$;; $4T  t,,,,,r1   r   r   r   r^   c                   | j         dS | j                             |d          }t          |t          j                  r|                    d          }t          j                    5  t          j        ddt                     t          t          |          | j                  }d d d            n# 1 swxY w Y   t          |t                    sJ |                    |          S )Nr   zutf-8r   r   r   r]  )r  rM   rF   r,   bytes_decoder   r   r   r   r   r   r   r   )r   rg   r   r   r   s        r/   r   z!TimeSeries_DateFormatter.__call__8  s)   ?"2/%%a,,C#ry)) *jj))(** @ @'9*   
  ATY???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ff-----??3'''s   'A B33B7:B7)FTN)r   r   r  r;  r  r;  r"   rB   r   r   r   )	r}   r~   r   r  r  r   r  r  r   re   r1   r/   r  r    s           JJJ
 $!' ' ' ' '$	 	 	
- 
- 
- 
-( ( ( ( ( ( (r1   r  c                  V     e Zd ZU dZdd fdZded<   eddd            ZdddZ xZ	S )TimeSeries_TimedeltaFormatterzR
    Formats the ticks along an axis controlled by a :class:`TimedeltaIndex`.
    nsrO   r   c                V    || _         t                                                       d S r%   )rO   superr   )r   rO   	__class__s     r/   r   z&TimeSeries_TimedeltaFormatter.__init__O  s&    	r1   r   rm   	   
n_decimalsr   expr"   r^   c                   t          | d|z            \  }}t          |d          \  }}t          |d          \  }}t          |d          \  }}t          |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'
        r  rU   r   02d:r   .0r_   z days )r   r   )
rg   r   r  r  r   r  r   r   r_   decimalss
             r/   format_timedelta_ticksz4TimeSeries_TimedeltaFormatter.format_timedelta_ticksU  s    
 q"c'""2a}}1a}}1a}}1rB:#344551vv555CFF555Q555>>.X.
......A66q66&&&1&&Ar1   r   r   r   c                \   ddddd| j                  }t          | j                                                  \  }}t	          t          t          j        t          j        dd|z  z  t          ||z
            z                                |          }| 
                    ||||          S )Nr  r  rE  r   )r  r   r   r   r  r  )rO   rk   rm   r   r`  r   r,   ceillog10r   r  )r   rg   r   r  r!  r"  r  s          r/   r   z&TimeSeries_TimedeltaFormatter.__call__f  s    aqq11$)<TY88::;;tRWRXcBGmc$+>N>N.N%O%OPPQQSVWW
**1c:sCCCr1   )r  )rO   r   )r  )r  r   r  r   r"   r^   r   r   )
r}   r~   r   r  r   r  r   r  r   __classcell__)r  s   @r/   r  r  J  s                 JJJ    \ D D D D D D D D Dr1   r  )r"   r#   )r2   r   r"   r   )r"   r<   r   )rQ   rR   r"   rS   r   )r"   r$  )r/  r   r   r^   r"   r0  )r/  r   r   r^   r"   r6  )r:  r0  r!  rS   r"   r;  )r   r   r"   rA  )r!  rS   r"  rS   r   r   r"   r[  )g
__future__r   
contextlibr   r(   r   r9   typingr   r   r   r   
matplotlibru   matplotlib.datesr/  r   matplotlib.unitsunitsrD   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   r   r!   r  r0   r;   contextmanagerr5   r?   r@   r\   ra   ConversionInterfacer+   rv   	Formatterrx   DateConverterr'   r   r&   r   r   r   r   r   r   r.  r5  r2  r@  rZ  cacher  r  r  r  r  Locatorr  r  r  re   r1   r/   <module>r      s   " " " " " " "                            
      ! ! ! ! ! ! ! ! ! ! ! !                               
                      
 !                 4 4 4 4 4 4         
 , + + + + + + + + + + + ())))))$$$$$$666666'''''' 
    	 	 	 	
 
 
 
    *' ' ' '. . . .   
      F.   6%1 %1 %1 %1 %1CJ( %1 %1 %1V0 0 0 0 0f* 0 0 0f	6 	6 	6 	6E
 E
 E
 E
 E
, E
 E
 E
PI I I I If6 I I I
? ? ? ? ?F2 ? ? ?4K, K, K, K, K,+ K, K, K,j& & & &,          ! ! ! !H D D D DN D D D DN , , , ,^    ,J J J J"Q6 Q6 Q6 Q6 Q6SZ/ Q6 Q6 Q6rI( I( I( I( I(sz3 I( I( I(X D  D  D  D  DCJ$8  D  D  D  D  Dr1   