
    *g                       d dl mZ d dlZd dlZd dlmZmZmZ d dlZd dlm	Z	m
Z
mZ d dlZd dlmZ d dlmZmZmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZmZ d d	l m!Z!m"Z" d d
l#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1c m2Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m1c m;c m<Z; e	rd dl=m>Z> d dl?m@Z@ d dlAmBZB i ZCd ZDd9dZEej                  d:d       ZGd;dZHd;dZId<dZJd ZK G d dej                        ZM G d de      ZN G d dej                        ZPd ZQ G d  d!ej                        ZR G d" d#ej                        ZT G d$ d%ej                        ZV G d& d'ej                        ZXd=d>d(ZYd?d)ZZd@d*Z[dAd+Z\dBd,Z]dCd-Z^ej                  dDd.       Z`ej                  dDd/       Zaej                  dDd0       Zbej                  dDd1       ZcdEd2Zd G d3 d4e      Ze G d5 d6e      Zf G d7 d8e      Zgy)F    )annotationsN)datetime	timedeltatzinfo)TYPE_CHECKINGAnycast)AutoLocator	FormatterLocator)nonsingular)lib)	Timestamp	to_offset)	FreqGroupperiods_per_day)Fnpt)is_floatis_float_dtype
is_integeris_integer_dtypeis_nested_list_like)IndexSeries
get_option)
date_range)PeriodPeriodIndexperiod_range)	Generator)Axis)
BaseOffsetc                     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    o/var/www/html/articles-backend/trend/venv/lib/python3.12/site-packages/pandas/plotting/_matplotlib/converter.py	get_pairsr0   K   sT    	%&	!	)*	%&	M"	)*E L    c                ^     t        j                          fd       }t        t        |      S )z/
    Decorator applying pandas_converters.
    c                 T    t               5   | i |cd d d        S # 1 sw Y   y xY wr%   )pandas_converters)argskwargsfuncs     r/   wrapperz6register_pandas_matplotlib_converters.<locals>.wrapper\   s+      	)((	) 	) 	)s   ')	functoolswrapsr	   r   )r7   r8   s   ` r/   %register_pandas_matplotlib_convertersr;   W   s/    
 __T) ) 7r1   c               #     K   t        d      } | r
t                	 d | dk(  rt                yy# | dk(  rt                w w xY ww)z
    Context manager registering pandas' converters for a plot.

    See Also
    --------
    register_pandas_matplotlib_converters : Decorator that applies this.
    z'plotting.matplotlib.register_convertersNauto)r   register
deregister)values    r/   r4   r4   d   sE      @AE
F?L 5F?L s   A0 AAAc                     t               } | D ]h  \  }}|t        j                  v r9t        t        j                  |   |      st        j                  |   }|t        |<    |       t        j                  |<   j y r%   )r0   munitsregistry
isinstance
_mpl_units)r.   type_clspreviouss       r/   r>   r>   z   sb    KE '
sFOO#Jvu7Ms,Su-H (Ju!$'r1   c                 T   t               D ]O  \  } }t        t        j                  j	                  |             |u s1t        j                  j                  |        Q t        j                         D ]5  \  }}t        |      t        t        t        hvs#|t        j                  |<   7 y r%   )r0   typerB   rC   getpoprE   itemsr&   r'   r+   )rF   rG   unit	formatters       r/   r?   r?      s    k '
s##E*+s2OO&' &++- .i	?#4o}"UU$-FOOD!.r1   c                ~    | j                   dz  | j                  dz  z   | j                  z   | j                  dz  z   }|S )Ni  <   @B )hourminutesecondmicrosecond)tmtot_secs     r/   _to_ordinalfrY      s8    ggnryy2~-		9BNNU<RRGNr1   c                    t        | t              r$t        |       }t        |j	                               S t        | t
        j                        rt        |       S | S r%   )rD   strr   rY   r*   r(   )dparseds     r/   time2numr^      sC    !S1FKKM**!TYYAHr1   c                  @    e Zd Zed        Zedd       Zedd       Zy)r+   c                f   t         t        j                  f}t        | |      st	        |       st        |       rt        |       S t        | t              r| j                  t              S t        | t        t        t        j                  t        f      r| D cg c]  }t        |       c}S | S c c}w r%   )r[   r(   r*   rD   r   r   r^   r   maplisttupler,   ndarray)r@   rN   axisvalid_typesxs        r/   convertzTimeConverter.convert   s    DII&e[)Z->(5/E?"eU#99X&&edE2::u=>)./AHQK// 0s   B.c                h    | dk7  ry t               }t        |      }t        j                  ||d      S )Nr*   )majlocmajfmtlabel)r
   TimeFormatterrB   AxisInfo)rN   re   rj   rk   s       r/   axisinfozTimeConverter.axisinfo   s0    6>v&fV6JJr1   c                     y)Nr*    rg   re   s     r/   default_unitszTimeConverter.default_units   s    r1   N)returnzmunits.AxisInfo | None)rt   r[   )__name__
__module____qualname__staticmethodrh   ro   rs   rq   r1   r/   r+   r+      s>      K K  r1   r+   c                      e Zd ZddZdddZy)rm   c                    || _         y r%   )locs)selfr{   s     r/   __init__zTimeFormatter.__init__   s	    	r1   c                   d}t        |      }t        ||z
  dz        }|dz  }|dz  }t        |d      \  }}t        |d      \  }	}t        |	d      \  }
}	|dk7  r't        j                  |	|||      j                  |      S |dk7  r*t        j                  |	|||      j                  |      dd S |dk7  r&t        j                  |	||      j                  d	      S t        j                  |	|      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.%frR     rQ      r   N%H:%M:%S%H:%M)introunddivmodr(   r*   strftime)r|   rg   posfmtsmsusmsusmh_s              r/   __call__zTimeFormatter.__call__   s    $ Fa!eu_%T\D[a}1a}1a}1799Q1d+44S991W99Q1d+44S9#2>>!V99Q1%..z::yyA''00r1   Nrt   Noner   r   z
int | Nonert   r[   )ru   rv   rw   r}   r   rq   r1   r/   rm   rm      s    !1r1   rm   c                  ,    e Zd Zed        Zed        Zy)r'   c                    t        |       r&| D cg c]  }t        j                  |||       } }| S t        j                  | ||      } | S c c}w r%   )r   r'   _convert_1d)valuesunitsre   vs       r/   rh   zPeriodConverter.convert   sT    v&KQRao11!UDARFR  %00EF S   A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$                        j*                  cd d d        S t        | t,              r| j/                  fd      cd d d        S t1        j2                  | d	      d
k(  r*t'        | j$                        j*                  cd d d        S t        | t4        t6        t        j8                  t,        f      r-| D cg c]  }t#        |j$                         c}cd d d        S 	 d d d        | S c c}w # 1 sw Y   | S xY w)Nfreqz/Axis must have `freq` set to convert to Periodsignore#Period with BDay freq is deprecatedcategoryPeriodDtype\[B\] is deprecatedc                0    t        | j                        S r%   )get_datevaluer   rr   s    r/   <lambda>z-PeriodConverter._convert_1d.<locals>.<lambda>  s    M!TYY,G r1   F)skipnaperiod)r   )hasattr	TypeErrorr[   r   r   r(   r)   r*   r,   r-   warningscatch_warningsfilterwarningsFutureWarningrD   r   r   r   r   r   asfreqasi8r   ra   r   infer_dtyperb   rc   rd   )r   r   re   rf   rg   s     `  r/   r   zPeriodConverter._convert_1d   s   tV$MNNHfdiiBMMR$$& 	E##?- ##;m 6;/f%F#$VTYY7	E 	E FK0}}TYY/44	E 	E FE*zz"GH!	E 	E" 6(B #6		:??)	E 	E* FT5"**e$DE=CDa3D-	E 	E* F+	E.  E-	E. s7   +A0G;%4G;##G;:G;.G;G6G;6G;;HN)ru   rv   rw   rx   rh   r   rq   r1   r/   r'   r'      s(       r1   r'   c                   t        | t              r| j                  |      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 | y t!        d|  d      )N   zUnrecognizable date '')rD   r   r   ordinalr[   r   r(   r)   r*   r,   r-   r   r   rd   r   size
ValueError)r)   r   s     r/   r   r     s    ${{4 (((	D3$))TYYN	OdD!)))4D>tbjj%01tyyA~	
,TF!4
55r1   c                  >    e Zd Zed        Zed        Zedd       Zy)r&   c                    t        |       r&| D cg c]  }t        j                  |||       } }| S t        j                  | ||      } | S c c}w r%   )r   r&   r   )r   rN   re   r   s       r/   rh   zDatetimeConverter.convert!  sW     v&LRSq'33AtTBSFS  '2264FF Tr   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.                  |       } t        j                  |       } | S # t0        $ r Y "w xY w)Nc                v    	 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_parse,  s5    u'8'8'@AA s   '* 88)rD   r   r(   r)   r,   r-   r*   r   r   r   r   r[   rb   rc   rd   r   r   r   comasarray_tuplesafer   r   r   r   r   )r   rN   re   r   s       r/   r   zDatetimeConverter._convert_1d*  s   	 fxBMM499MN??6**8F#3M$V$$ubjj% HI&&) v&%(fbjj1..v6'>&+A**62 __V,F  s   5E! !	E-,E-c                    | }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   )rj   rk   rl   default_limits)PandasAutoDateLocatorPandasAutoDateFormatterr(   r)   rB   rn   )rN   re   r   rj   rk   datemindatemaxs          r/   ro   zDatetimeConverter.axisinfoN  sb     &"-(B7))D!Q'))D!Q'&GWCU
 	
r1   N)rN   tzinfo | Nonert   zmunits.AxisInfo)ru   rv   rw   rx   rh   r   ro   rq   r1   r/   r&   r&      s=      ! !F 
 
r1   r&   c                      e Zd ZdddZy)r   Nc                H    t         j                  j                  | |||       y r%   )r   AutoDateFormatterr}   )r|   locatorr   
defaultfmts       r/   r}   z PandasAutoDateFormatter.__init__c  s      ))$ZHr1   )Nz%Y-%m-%d)r   r[   rt   r   )ru   rv   rw   r}   rq   r1   r/   r   r   b  s    Ir1   r   c                      e Zd Zd Zd Zy)r   c                   ||z
  j                         }t        |      | j                  k  rd| _        t	        | j
                        }|j                  | j                          |j                  j                  | j                  j                            |j                  j                  | j                  j                           |S t        j                  j                  | ||      S )z*Pick the best locator based on a distance.)total_secondsabsminticks_freqMilliSecondLocatorr   set_axisre   set_view_intervalget_view_intervalset_data_intervalget_data_intervalr   AutoDateLocatorget_locator)r|   dmindmaxrX   r   s        r/   r   z!PandasAutoDateLocator.get_locatorh  s    $;--/w<$--'DJ(1GTYY' +GLL**,,. +GLL**,,. N%%11$dCCr1   c                @    t         j                  | j                        S r%   )r   get_unit_genericr   r|   s    r/   	_get_unitzPandasAutoDateLocator._get_unit}  s    !224::>>r1   N)ru   rv   rw   r   r   rq   r1   r/   r   r   g  s    D*?r1   r   c                  @    e Zd ZdZd	dZd Zed        Zd Zd Z	d Z
y)
r   gLH>c                R    t         j                  j                  | |       d| _        y )Ng      ?)r   DateLocatorr}   	_interval)r|   r   s     r/   r}   zMilliSecondLocator.__init__  s    ##D"-r1   c                $    | j                  d      S )Nr   )r   r   s    r/   r   zMilliSecondLocator._get_unit  s    $$R((r1   c                n    t         j                  j                  |       }|dk  rt        j                  S |S )Nr   )r   RRuleLocatorr   r   UNIT)r   rN   s     r/   r   z#MilliSecondLocator.get_unit_generic  s0    ""33D9!8%***r1   c                F   	 | j                         \  }}t        j                  ||f      \  }}||z
  dz  dz  }d}dD ]  }|||dz
  z  k  r	|| _         n	d| _         ||z
  | j                         | j                         z  z  }|| j                  dz  kD  r't        d|d	d
| d| d| j                  dz  d	d	      | j                         }| d}	| j                  j                  d       }
|j                  d       }|j                  d       }t        |||	|
      j                  t              }	 t        |      dkD  r&| j!                  t        j                  |            }|S 	 t        j                  ||g      }|S # t        $ r g cY S w xY w# t"        $ r Y 5w xY w)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$
 __dD\2
dd{e#d*2 	$Hh"2Q"677!)#DN	$ 4KDNN$4t7I7I7K$KLdmma'';A,l4&TF ;)!,B0  %%'2WW^^D!\\\&\\\&RRdrBII&Q		9~!,,V__Y-GH " d|,O  	I	F  		s#   F 53F FF	F F c                    | j                   S r%   )r   r   s    r/   r   z MilliSecondLocator._get_interval  s    ~~r1   c                    | j                         \  }}t        j                  |      }t        j                  |      }| j                  ||      S )z@
        Set the view limits to include the data range.
        )datalim_to_dtr   r   r   )r|   r   r   vminvmaxs        r/   	autoscalezMilliSecondLocator.autoscale  sE    
 '')
dt$t$d++r1   Nr   )ru   rv   rw   r   r}   r   rx   r   r   r   r  rq   r1   r/   r   r     s5    #D)  +Z
,r1   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        |      |      }||j                  |      }|dkD  r|t        d|z
        z  }|S )	Nr   r   rQ   rR   r   r   i6B )microseconds)
r   r   fromordinalfloatr   yearmonthday
astimezoner   )	rg   r   ixdt	remainderrS   rT   rU   rV   s	            r/   _from_ordinalr    s    	QB			b	!Ba2IR)^Q/OD)rI~q1FIrI~q1FIi)+,KR	
2663t9c&k3v;
B 
~]]2V
iY%<==Ir1   c                    | dk  r	d\  }}||fS | dk  r	d\  }}||fS | dk  r	d\  }}||fS | dk  r	d\  }}||fS | d	k  r	d
\  }}||fS | dk  r	d\  }}||fS | 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   rq   )nyearsmin_spacingmaj_spacingfactors       r/   _get_default_annual_spacingr'    s     {%+"k %% 
"%+"k %% 
"%+"k %% 
#%,"k %% 
#%,"k %% 
#%-"k %% 4!#&,rk6C<k%%r1   c                J    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)datesr   masks      r/   _period_breakr-    s$     eV,D::dAr1   c                \    t        | |      }t        | d| j                  z  z
  |      }||k7  S )Nr   )getattrr   )r+  r   currentrH   s       r/   r)  r)    s2    eV$Guq5::~-v6Hhr1   c                b    | j                   dk(  s| j                   dk(  r| d   dk(  r	|dz  dkD  ryy)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   )label_flagsr  s     r/   has_level_labelr5    s;     1A+a.A"5$(S.r1   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}nn|t        j                  k(  rd}d}nV|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_HRr@   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_ymdrN  '  s   ((J11*=J
CY__***dkk*3hCi	y''	'	y''	'	y	&	y''	'	y''	'	y''	'!$;J<"HIIS=r1   c           	     N
   |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        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  rt        d      t        d      }	t        d      d<fd}
d=fd}d=fd}||dz  k  r
 |d       |S ||dz  k  r
 |d       |S ||dz  k  r
 |d       |S ||dz  k  r
 |d       |S ||d z  k  r
 |d!       |S ||d"z  k  r
 |d#       |S ||d$z  k  r
 |d       |S ||d%z  k  r
 |d       |S ||d&z  k  r
 |d       |S ||d'z  k  r
 |d!       |S ||d(z  k  r
 |d#       |S ||d)z  k  r |
dd*       |S ||d+z  k  r |
dd*       |S ||d,z  k  r |
d-d*       |S ||d)z  k  r |
d(d       |S ||d.z  k  r |
d'd       |S d|	<   d<   d/<   d0|	<   d1<   t              s$t        |	      sd1       <   |S d1 |	      <   |S ||d.z  k  rt        d      }	d|	<   |t         j"                  j$                  k  rd|d
<   nt        d      d|d
   <   t        d2      }t        d      d/|<   d3|	<   d4<   t              s$t        |	      sd4 |      <   |S d4 |	      <   |S |d5|z  k  r[t        d      t        d      }	t        d2      }d|	<   d|<   d*<   d*|	<   d6|	<   d7<   t              sd7 |	      <   |S |d)|z  k  r:t        d      t        d8      }t        d      }	d|<   d|	<   d6|<   d7<   |S |d.|z  k  rPt        d      t        d      }	d<   d|	<   d*<   |	   j&                  }|	|dk(  |d9k(  z     }d6|<   d7<   |S |d:|z  k  r.t        d      t        d8      }d<   d|<   d*<   d;<   |S t        d         j(                  }||z  }t+        |      \  }}||z  dk(     }d|<   ||z  dk(     }d|<   d;|<   |S # 1 sw Y   gxY w)>Nr   r   r   r   r   r   r   )r   r   r   valmajmin)r   z|S20dtyper   r   Tr   r   c                V    | d   dk(  r| j                   dkD  rdz  dkD  r| d   S | d   S )Nr   r   r2  r3  )r4  	vmin_origs    r/   first_labelz"_daily_finder.<locals>.first_labelp  s<    Nak&6&6&:)a-SVAVq>!q>!r1   r  r  r  c                    j                   }t        d      }d<   d	||| z  dk(  z  <   d||| z  dk(  z  <   d<   d<   |rt        
      sd       <   y y y )NrS   Tr   r   %H:%M
%d-%b%H:%M
%d-%b
%Y)rS   r)  r5  )label_intervalforce_year_starttargetr,  dates_	day_startrX  info_fmtinfo_majinfo_minrW  
year_starts       r/   _hour_finderz#_daily_finder.<locals>._hour_finder|  s    [[F%ff5D"&HY>BHTVn49:;>EHTVn49:;"0HY#5HZ 
I(N3EY/0 )Or1   c                    j                   }t        d      }t        d      }d|<   d||| z  dk(  z  <   d||| z  dk(  z  <   d<   d	<   y )NrS   rT   Tr   r   rZ  r[  )rT   r-  r)  )
r\  r^  
hour_startr,  r_  r`  ra  rb  rc  rd  s
       r/   _minute_finderz%_daily_finder.<locals>._minute_finder  st    ]]F&vv6J%fh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	<   y )NrT   rU   Tr   r   z%H:%M:%S
%d-%bz%H:%M:%S
%d-%b
%Y)rU   r-  r)  )
r\  r^  minute_startr,  r_  r`  ra  rb  rc  rd  s
       r/   _second_finderz%_daily_finder.<locals>._second_finder  st    ]]F(:L%fh7D%)H\">BHTVn49:;>HHTVn49:;"3HY#8HZ r1   i.  ip  r   i`	  r!  i  r   i      i        F   r   r;  r         @Fg      ?g      ?r9  r<  z%dz%d
%bz%d
%b
%Yweekz

%bz

%b
%Yffffff?%b%b
%Yquarter   r  %Y)r\  r   r]  boolrt   r   )r\  r   rt   r   )r>  rN  r   r   r   r   r   r    r   r,   zerosint64rx  r   r-  r5  r   r@  r@   r  r  r'  )r  r  r   rI  periodsperdayperiodspermonthperiodsperyearspaninfomonth_startre  rh  rk  
week_startquarter_startmonth_break
jan_or_jul
year_breakr#  
min_anndef
maj_anndef	major_idx	minor_idxr_  r`  rX  ra  rb  rc  rW  rd  s                          @@@@@@@@r/   _daily_finderr  K  s9    ((J5I$5O2M?N IIs4y4T$;?D		 	 	" 
;m	
 	7-	
 D1t$/

 88eRXX&t}oVD [[DKNDKNDKBE{HE{HE{H" !&%0	#FG4"662
		F 		F	6 	6	9 	9 -%''1h Kg MD((1d Kc MD((1` K_ MD((2\ K[ MC''2X KW MC''2T KS MC''1P KO MB&&1L KK MB&&1H KG MB&&2D KC MA%%2@ K MC''E"| K{ MC''E"x Kw MD((E"t Ks MC''D!p Ko MA%%T"l Ki %)H[!"&HY"&HY$,H[!#/HZ ":y9&{I>7CH[34Z KW :FH[56V KQ 
1$	$#FG4 $	---DK%fe4I%)DK	""662
"662
# (+z95";	:4@Z01r Ko 6B[12n Kk 
&	&"662
#FG4"662
 $#$ % $'z9519H[-.T KQ 
~%	%"662
%fi8#FG4"& $"&'B K? 
^#	#"662
#FG4# $$[)// +"2{a7G!HI
#'* K' 
n$	$"662
%fi8#"&$# K #662
J',,
&#>v#F Z
Z 71 <>	"
Z 71 <>	""Ks
 
s   ATT$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(  j                         d
   }	|d   }
|d   }|d|z  k  r;d|
|	<   d|d<   d|d d  d||	<   t        |	|      s|j                  dkD  rd}nd
}d||<   |S |d|z  k  r4|dz  d
k(  j                         }d|
|	<   d|d   |<   d|d<   d||<   d||	<   |S |d|z  k  r'd|
|	<   d|d<   |d	z  d
k(  |d	z  dk(  z  }d||<   d||	<   |S |d|z  k  r*|dz  d
k(  j                         }d|
|	<   d|d   |<   d||	<   |S ||z  }t        |      \  }}||	   d	z  dz   }|	||z  d
k(     }d|
|<   d|d   |	||z  d
k(     <   d||<   |S )Nr   rQ  rR  rS  r   z|S8rT  r   r   r;  r   rr  Trs  rt  rp  r9  r<  r   r  rw  
rN  r   r,   ry  rx  aranger*  r5  r   r'  )r  r  r   r   r}  rW  r~  r  r_  rd  rb  ra  idxr  r  r#  r  r  yearsr  s                       r/   _monthly_finderr    s   /5Aq.IIs4y4T$;?D 88eS\E4=5$-PD ))D$(+DK%[FDK2+"++-a0JE{HE{Htn$$#U'z95{{Q$HSML KI 
~%	%!q113# &*UM"U"&'6 K3 
^#	##UrkQ&6B;!+;<
#'& K# 
n$	$!q113#%)UM"# K &#>v#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(  j                         d
   }|d|z  k  r;d|	|<   d|d<   d|
d d  d|
|<   t        ||      s|j                  dkD  rd}nd
}d|
|<   |S |d|z  k  rd|	|<   d|d<   d|
|<   |S ||   d	z  dz   }||z  }t        |      \  }}|||z  d
k(     }d|	|<   d|d   |||z  d
k(     <   d|
|<   |S )Nr   rQ  rR  rS  r  rT  r   r   r<  r   g      @TzQ%qzQ%q
%Fr  z%Fi  r  )r  r  r   r   r}  rW  r~  r  r_  rb  ra  rd  r  r  r#  r  r  r  s                     r/   _quarterly_finderr  [  s   /5Aq.IIs4y4T$;?D88eS\E4=5$-PD ))D$(+DKDK%[FE{HE{H1*/**,Q/Js^###U(z95{{Q%HSM" K 
n$	$#U# K z"a'$.&#>v#F Z
 2a 79	"=AUJ
 2a 79:"Kr1   c                Z   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   rQ  rR  rS  r  rT  r   r   r   Trw  )r   r,   ry  rx  r  r'  )
r  r  r   r~  r  r_  r  r  r  r  s
             r/   _annual_finderr    s     Is4!8}4T$;?D88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                b   | 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|       )Nr=  )r>  r   r?  rG  r  rF  r  rE  r  rB  r@   rD  r  rH  )r   rI  fgroups      r/   
get_finderr    s    ((J--j9F!!!	9##	#  	9##	#
	((..
.6Y__3L!$;J<"HIIr1   c                  d    e Zd ZU dZded<   	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZd Zd Zd Zy)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"   re   Nc	                    t        |d      }|| _        || _        |||c| _        | _        | _        || _        || _        d| _        || _	        t        |      | _        y NT)	is_periodr   )r   r   baseru  r  r  isminor	isdynamicoffsetplot_objr  finder)	r|   r   minor_locatordynamic_moder  ru  r  r  r  s	            r/   r}   zTimeSeries_DateLocator.__init__  s\     .		07,tz48$%  &r1   c                    | j                  ||| j                        }| j                  rt        j                  |d   |d         S t        j                  |d   |d         S )z'Returns the default locations of ticks.rS  rQ  rR  )r  r   r  r,   compress)r|   r  r  r   s       r/   _get_default_locsz(TimeSeries_DateLocator._get_default_locs  sQ    ++dD$))4<<;;wu~wu~>>{{75>75>::r1   c                    t        | j                  j                               }|\  }}||k  r||}}| j                  r| j	                  ||      }|S | j
                  }t        ||      \  }}|dz   |z  }t        t        ||dz   |            }|S )z"Return the locations of the ticks.r   )	rc   re   r   r  r  r  r   rb   range)r|   vir  r  r{   r  r\   r   s           r/   r   zTimeSeries_DateLocator.__call__  s     499..01
d$;t$D>>))$5D  99DD$'FQET>D dD1Hd34Dr1   c                    | j                   j                         \  }}| 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   )re   r   r  r   )r|   r  r  r{   s       r/   r  z TimeSeries_DateLocator.autoscale  sc     yy224t%%dD1QG}t4<AIDAID4&&r1   )FTr   r   r   r   N)r   r#   r  rx  r  rx  r  r   ru  r   r  r   r  r   rt   r   )	ru   rv   rw   __doc____annotations__r}   r  r   r  rq   r1   r/   r  r    s    " J
 $!'' ' 	'
 ' ' ' ' 
'*;&'r1   r  c                  R    e Zd ZU dZded<   	 	 	 d		 	 	 	 	 	 	 d
dZd ZddZdddZy)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"   re   Nc                    t        |d      }d | _        || _        g | _        d | _        || _        || _        d| _        || _        t        |      | _
        y r  )r   formatr   r{   
formatdictr  r  r  r  r  r  )r|   r   r  r  r  s        r/   r}   z!TimeSeries_DateFormatter.__init__  sT     .	!	15$%  &r1   c           	     P   | j                  ||| j                        }| j                  r3t        j                  |d   t        j
                  |d         z  |      }nt        j                  |d   |      }|D ci c]
  \  }}}}|| c}}}| _        | j                  S c c}}}w )z"Returns the default ticks spacing.rS  rR  )r  r   r  r,   r  logical_notr  )r|   r  r  r  r  rg   r   fs           r/   _set_default_formatz,TimeSeries_DateFormatter._set_default_format/  s    {{4tyy1<<[[er~~d5k/J!JDQF[[ed3F4:;;LQ1a1a4; <s   <B!c                    || _         t        | j                  j                               \  }}||k  r||}}| j	                  ||       y)zSets the locations of the ticksN)r{   rc   re   r   r  )r|   r{   r  r  s       r/   set_locsz!TimeSeries_DateFormatter.set_locs:  sF    
 	TYY88:;t$; $4T  t,r1   c                   | j                   y| j                   j                  |d      }t        |t        j                        r|j                  d      }t        j                         5  t        j                  ddt               t        t        |      | j                        }d d d        t        t              sJ |j                  |      S # 1 sw Y   ,xY w)Nr   zutf-8r   r   r   rP  )r  rL   rD   r,   bytes_decoder   r   r   r   r   r   r   r   )r|   rg   r   r   r   s        r/   r   z!TimeSeries_DateFormatter.__call__F  s    ??"//%%a,C#ryy)jj)((* @''9*
  ATYY?@ ff---??3''@ @s   )=CC)FTN)r   r#   r  rx  r  rx  rt   r   r   r   r   )	ru   rv   rw   r  r  r}   r  r  r   rq   r1   r/   r  r    sS     J
 $!'' ' 	' 
'$	
-(r1   r  c                  8    e Zd ZU dZded<   edd       Zdd	dZy)
TimeSeries_TimedeltaFormatterzR
    Formats the ticks along an axis controlled by a :class:`TimedeltaIndex`.
    r"   re   c                F   t        | d      \  }}t        |d      \  }}t        |d      \  }}t        |d      \  }}t        |d|dz
  z  z        }t        |      ddt        |      ddt        |      d}|dkD  r|d	|d
| dz  }|dk7  rt        |      dd| }|S )z8
        Convert seconds to 'D days HH:MM:SS.F'
        i ʚ;rQ   r   r   	   02d:r   .0r\   z days )r   r   )	rg   r   
n_decimalsr   nsr   r   r\   decimalss	            r/   format_timedelta_ticksz4TimeSeries_TimedeltaFormatter.format_timedelta_ticks_  s    
 q% 2a}1a}1a}1rB:>2231vcl!CF3<qQ5>1Xa
|1_-..A6q6!*F1#&Ar1   c                   t        | j                  j                               \  }}t        t	        t        j                  t        j                  dt        ||z
        z                    d      }| j                  |||      S )Nl    h] r  )
rc   re   r   rS  r   r,   ceillog10r   r  )r|   rg   r   r  r  r  s         r/   r   z&TimeSeries_TimedeltaFormatter.__call__p  sd    TYY88:;tRWWRXXkCt<L.L%MNOQRS
**1c:>>r1   N)r  r   rt   r[   r   r   )ru   rv   rw   r  r  rx   r  r   rq   r1   r/   r  r  X  s%     J  ?r1   r  )r7   r   rt   r   )rt   zGenerator[None, None, None]r   )rW   z	pydt.timert   r  r%   )r   r   rt   r   )rt   ztuple[int, int])r+  r   r   r[   rt   npt.NDArray[np.intp])r+  r   r   r[   rt   znpt.NDArray[np.bool_])r4  r  r  r  rt   rx  )r   r#   rt   ztuple[int, int, int])r  r  r  r  r   r#   rt   z
np.ndarray)r   r#   )h
__future__r   
contextlibr   r(   r   r   r9   typingr   r   r	   r   matplotlib.datesr+  r   matplotlib.tickerr
   r   r   matplotlib.transformsr   matplotlib.unitsr   rB   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#   rE   r0   r;   contextmanagerr4   r>   r?   rY   r^   ConversionInterfacer+   rm   DateConverterr'   r   r&   r   r   r   r   r   r   r  r'  r-  r)  r5  rN  cacher  r  r  r  r  r  r  r  rq   r1   r/   <module>r     s   "   
  
  ! 
 . !  
  
 !   4 
 , +)$6 
	
  *'.
F.. 6%1I %1V%f** %P6"?
,, ?
DIf66 I
?F22 ?4K,++ K,\:&, !H D DN D DN , ,^  ,J"Q'W Q'rI(y I(X?I ?r1   