U
    FvfI                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ dd Zejde  dddd dde  dddd dde  ddddddge  dddd dde  ddddddge  dddd	dde  dddd
ddgggejdddddgdd Zejdddddgdd Zejdddddgdd Zdd Zdd Zdd  Zd!d" Z ed#gd$d% Z!ed&gd'd( Z"ed)gd*d+ Z#ed,gd-d. Z$d/d0 Z%d1d2 Z&ed3gd4d5 Z'd6d7 Z(d8d9 Z)ed:gd;d< Z*d=d> Z+d?d@ Z,ejdAe j-dBdCdDdE e.dFdGdHD fe j-dIdJdKdE e.ddLd
D fe j-dHdMdNdE e.d dOd	D fe j-dPdQdRdE e.d dSD fgdTdU Z/dVdW Z0e&dXdY Z1e&dZd[ Z2d\d] Z3d^d_ Z4ejd`e j-dadbdcfe j-ddQddfe j-ddMdefe j-ddJdffe j-ddCdgfe j-dhdCdife j-djdCdifgdkdl Z5dmdn Z6dodp Z7ejd`e j-dBdCdqdE e.drdsdHD fe j-dtdJdudvdwdxdydzd{d|d}dvdwgfe j-dtdMd~ddddddddddgfe j-d	dbdddddddgfgdd Z8dd Z9dd Z:dd Z;dd Z<edgdd Z=dd Z>dd Z?dd Z@dd ZAdd ZBejjCdd ZDejjCdd ZEdd ZFdd ZGdd ZHejdde j-ddJfddge j-ddJe j-ddJgfgdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQejdd¡ddĄ ZRddƄ ZSejddejTfdejUfdejVfdtejWfdejXfdejYffdd̈́ ZZddτ Z[ejddѡddӄ Z\ddՄ Z]ddׄ Z^dS )    N)_api
rc_contextstyle)image_comparisonc                     s   t  ddd  fddtddD } tj| dd}td	d
dg}tjdd}|ddd}|| |\}|||\}tj	|j
dd|j
dd tjdd}|ddd}||| \}|||\}tj	|jdd|jdd d S )N     c                    s   g | ]} t j|d  qS )daysdatetime	timedelta).0xbase ?/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_dates.py
<listcomp>   s     z$test_date_numpyx.<locals>.<listcomp>r      datetime64[ns]dtype               @      ?)
      )ZfigsizeF)orig)r   rangenparraypltfigureadd_subplotplottestingassert_equalZ	get_xdataZ	get_ydata)timeZtimenpdatafigaxhZhnpr   r   r   test_date_numpyx   s    r,   t0r   r   r   r   r   zdatetime64[s]zdatetime64[us]zdatetime64[ms]r   c                 C   s4   t | }tj| |d}t |}tj|| d S )Nr   )mdatesdate2numr   r    r%   r&   )r-   r   r'   tnpnptimer   r   r   test_date_date2num_numpy"   s    

r2   c                 C   sR   t  dddddd}t|tjg}tj|dg| d}t|}tj|| d S )Nr   r   r   NaTr   )r   r.   r/   r   nanr    r%   assert_array_equal)r   r-   tmplr0   r1   r   r   r   test_date2num_NaT6   s
    
r7   unitssmsusnsc                 C   s$   t td| }t|s td S )Nr3   )r.   r/   r   
datetime64isnanAssertionError)r8   r6   r   r   r   test_date2num_NaT_scalarB   s    r@   c               	      s   t  ddd tjj fddtdD dddddddgd	} t| }tjtj	|d
 t j dddtj
d tjj fddtdD dddddddgd	} t| }tjtj	|d
 d S )N        c                    s    g | ]} t jd | d qS r   r   r
   r   ir   r   r   r   K   s   z(test_date2num_masked.<locals>.<listcomp>   r   r   )mask)FTTFFFTtzinfoc                    s    g | ]} t jd | d qS rD   r
   rE   r   r   r   r   T   s   )r   r   mar    r   r.   r/   r%   r5   ZgetmaskUTC)datesZnpdatesr   r   r   test_date2num_maskedH   s(    

rN   c               	   C   s   t  \} }|  |   tj| t	t
dt	t
dg t  td t  \} }|  |   tj| t	t
dt	t
dg t  d S )N
1970-01-01z
1970-01-02
0000-12-31)r!   subplotsZ
xaxis_datedraw_without_renderingr   r%   assert_allcloseget_xlimr.   r/   r=   _reset_epoch_test_example	set_epochr)   r*   r   r   r   test_date_empty\   s&    
rX   c                  C   sH   t  } |  }|ddgddg |j  tj|	 ddg d S )N2   F   r   r   )
r!   r"   r#   r$   xaxisZ	axis_dater   r%   rS   rT   rW   r   r   r   test_date_not_emptyr   s
    
r\   c               	   C   s   t  \} }|d |tdtdgddg tj| t	
tdt	
tdg t	  t	d t  \} }|d |tdtdgddg tj| t	
tdt	
tdg t	  d S )N      ?z
2016-01-01z
2016-01-02r   r   rP   )r!   rQ   axhliner$   r   r=   r%   rS   rT   r.   r/   rU   rV   rW   r   r   r   test_axhline{   s&    
 

 r_   zdate_axhspan.pngc                  C   sn   t  ddd} t  ddd}t \}}|j| |ddd || t jdd	 |t jdd	  |jdd
 d S )N  r         blue      ?Z	facecoloralpha   r   left)r   r!   rQ   Zaxhspanset_ylimr   subplots_adjustr-   tfr)   r*   r   r   r   test_date_axhspan   s    rn   zdate_axvspan.pngc                  C   sj   t  ddd} t  ddd}t \}}|j| |ddd || t jd	d
 |t jd	d
  |  d S )N  r   ra     rb   rc   rd   re   i  r   )r   r!   rQ   Zaxvspanset_xlimr   autofmt_xdaterl   r   r   r   test_date_axvspan   s    rs   zdate_axhline.pngc                  C   sl   t  ddd} t  ddd}t \}}|j| ddd || t jdd	 |t jdd	  |jd
d d S Nr`   r   ra      rc   r   colorZlwrg   r   rd   rh   )r   r!   rQ   r^   rj   r   rk   rl   r   r   r   test_date_axhline   s    rx   zdate_axvline.pngc                  C   sh   t  ddd} t  ddd}t \}}|j| ddd || t jdd	 |t jdd	  |  d S )
Nro   r   ra   rb   Zredr   rv   rg   r   )r   r!   rQ   Zaxvlinerq   r   rr   rl   r   r   r   test_date_axvline   s    ry   c              	   C   s   |  d tddd}tddd}t \}}tt>}|j||fdd t|dks`t	dt
|d jksvt	W 5 Q R X |g g  |jt  |j  }t|d	kst	| jrtd
d | jD st	t| jdkst	d S )NWARNINGro   r   ra   T)autoz.Attempting to set identical low and high xlimsr     c                 s   s"   | ]}|j d ko|jdkV  qdS )zmatplotlib.tickerrz   N)name	levelname)r   recordr   r   r   	<genexpr>   s   z+test_too_many_date_ticks.<locals>.<genexpr>)Z	set_levelr   r!   rQ   pytestwarnsUserWarningrq   lenr?   strmessager$   r[   set_major_locatorr.   
DayLocatorZget_major_locatorrecordsall)Zcaplogr-   rm   r)   r*   Zrecvr   r   r   test_too_many_date_ticks   s$    
r   c                    s   t   fdd}|S )Nc                      s$   t   t d    t   d S )N
2000-01-01)r.   rU   rV   r   thefuncr   r   wrapper   s    
z%_new_epoch_decorator.<locals>.wrapper)	functoolswraps)r   r   r   r   r   _new_epoch_decorator   s    r   zRRuleLocator_bounds.pngc                  C   s   dd l m  m}  |   tddd}tddd}t }t }|d |j	||gddgdd	 t
jtjjd
d}t
|}|j| |jt
| |  |  d S )Nr   r|   r   ip  Tr   r   omarker  interval)matplotlib.testing.jpl_unitsr%   	jpl_unitsregisterr   r!   r"   subplotset_autoscale_onr$   r.   rrulewrapperdateutilrruleZYEARLYRRuleLocatorr[   r   set_major_formatterAutoDateFormatterautoscale_viewrr   )r8   r-   rm   r)   r*   r   locatorr   r   r   test_RRuleLocator   s    

r   c                  C   s@   t  } tjdddt jd}tjdddt jd}| || d S )Nr   )yearmonthdayrJ      )r.   r   r   rL   tick_values)locx1y1r   r   r   test_RRuleLocator_dayrange   s    r   c               	   C   sn   t jtjjdd} t | }tjdddd}tjddddd}ddg}ttt	t 
||||ksjtd S )	Nrg   r     r   r   r   r   )r   r   r   microsecond2020-01-01 00:00:00+00:00z 2020-01-01 00:00:00.000001+00:00)r.   r   r   r   ZSECONDLYr   r   listmapr   num2dater   r?   )r   r   d1d2expectedr   r   r   test_RRuleLocator_close_minmax  s    
r   z#DateFormatter_fractionalSeconds.pngc                  C   s   dd l m  m}  |   tdddddd}tdddddd}t }t }|d |j	||gddgdd |
  |  d S )	Nr   i  r   Tr   r   r   r   )r   r%   r   r   r   r!   r"   r   r   r$   r   rr   )r8   r-   rm   r)   r*   r   r   r   test_DateFormatter  s    
r   c               	   C   s:  dt jd< tdddddtdddddtdddd	dg} d
ddg}t  \}}|| | |jtd |j	
  dd | D }ddddddg}||kst|jt  |jtd td}|jt| |jtd |j	
  dd |jddD }ddddd g}||ks6td!S )"zh
    Test if setting the locator only will update the AutoDateFormatter to use
    the new locator.
    z%d %H:%Mzdate.autoformatter.minutei  	         r   ;   r   r   r   r   )r   r   c                 S   s   g | ]}|  qS r   get_textr   tlr   r   r   r   9  s     z.test_locator_set_formatter.<locals>.<listcomp>z30 08:00z30 08:30z30 09:00z30 09:30z30 10:00z30 10:30)rg   7   )rB      )rC   -   c                 S   s   g | ]}|  qS r   r   r   r   r   r   r   E  s     minor)whichz30 08:15z30 08:45z30 09:15z30 09:45z30 10:15N)r!   rcParamsr   rQ   r$   r[   r   r.   MinuteLocatorcanvasdrawget_xticklabelsr?   mtickerZNullLocatorZset_minor_locatorZset_minor_formatterr   )tr   r)   r*   Z
ticklabelsr   Z	decoy_locr   r   r   test_locator_set_formatter*  s4    


  

r   c                  C   sN   G dd d} dd }t |  }||jd< |tdddgd	gksJtd S )
Nc                   @   s   e Zd Zdd ZdS )z.test_date_formatter_callable.<locals>._Locatorc                 S   s   dS )Nir   )selfr   r   r   	_get_unitM      z8test_date_formatter_callable.<locals>._Locator._get_unitN)__name__
__module____qualname__r   r   r   r   r   _LocatorL  s   r   c                 S   s   dd | D S )Nc                 S   s   g | ]}| d qS )z	%d-%m//%Y)strftime)r   dtr   r   r   r   P  s     zVtest_date_formatter_callable.<locals>.callable_formatting_function.<locals>.<listcomp>r   )rM   _r   r   r   callable_formatting_functionO  s    zBtest_date_formatter_callable.<locals>.callable_formatting_functioni  rB      z25-12//2014)r.   r   Zscaledr   r?   )r   r   	formatterr   r   r   test_date_formatter_callableJ  s
    
r   zdelta, expected(  weeksc                 C   s   g | ]}d | qS z$\mathdefault{%d}$r   )r   r   r   r   r   r   Y  s     r     i{  ra   r   r   c                 C   s   g | ]}d | qS )z $\mathdefault{1990{-}01{-}%02d}$r   )r   r   r   r   r   r   [  s         hoursc                 C   s   g | ]}d | qS )z$\mathdefault{01{-}01\;%02d}$r   )r   hourr   r   r   r   ]  s     rb   r   minutesc                 C   s   g | ]}d | qS )z$\mathdefault{01\;00{:}%02d}$r   )r   Zminur   r   r   r   _  s        c                    s|   t d tddd}||  }tjdd}|  |jt|t| tj	|dd  fdd	| D |ksxt
d S )
Ndefaultr   r   Finterval_multiplesTZusetexc                    s   g | ]} |qS r   r   )r   r   r   r   r   r   l  s     z.test_date_formatter_usetex.<locals>.<listcomp>)r   Zuser   r.   AutoDateLocatorcreate_dummy_axisaxisset_view_intervalr/   r   r?   )deltar   r   r   r   r   r   r   test_date_formatter_usetexW  s    
r   c                  C   s   t j dddtjd} t j dddtjd}t jdd}tt| ||dksNt|t jdd }tt| ||dksxt|t jdd }tt| ||dkstt j dddtjd}t jd	d}t| ||}t|d
kstt|d || kstdS )zj
    This test should check if drange works as expected, and if all the
    rounding errors are fixed
      r   rI   r   r      microsecondsr         N)r   r.   rL   r   r   Zdranger?   r   )startendr   Z	dateranger   r   r   test_drangeo  s    r  c                  C   s  dd } t  ddd}t jddddd	d
ddddddg
gt jddddddddddddddggt jdddd d!d"d#d$d%ggt jd&dd'd(d)d*d+d,ggt jd&d-dd.d/d0d1d2d3d4d5d6d7ggt jd8d9dd:d;d<d=ggt jd&d>dd?d@dAdBdCdDdEdFg	gt jdGdHdIddJdKdLdMggf}|D ]<\}}|| }| ||}tttt| |kstqtjdNdO}|j	dPdQdPdQdPdPdRdSks|ttjt
jjdTidU}|j	dPdTdPdQdPdPdRdSksttjdTdU}|j	dTdTdTdTdTdTdTdSkstd S )VNc                 S   s.   t jdd}|  |jjt | |g  |S )NFr   r.   r   r   r   r   r/   date1date2r   r   r   r   _create_auto_date_locator  s    z9test_auto_date_locator.<locals>._create_auto_date_locatorr   r   r   r   z1990-01-01 00:00:00+00:00z2010-01-01 00:00:00+00:00z2030-01-01 00:00:00+00:00z2050-01-01 00:00:00+00:00z2070-01-01 00:00:00+00:00z2090-01-01 00:00:00+00:00z2110-01-01 00:00:00+00:00z2130-01-01 00:00:00+00:00z2150-01-01 00:00:00+00:00z2170-01-01 00:00:00+00:004   z1990-02-01 00:00:00+00:00z1990-03-01 00:00:00+00:00z1990-04-01 00:00:00+00:00z1990-05-01 00:00:00+00:00z1990-06-01 00:00:00+00:00z1990-07-01 00:00:00+00:00z1990-08-01 00:00:00+00:00z1990-09-01 00:00:00+00:00z1990-10-01 00:00:00+00:00z1990-11-01 00:00:00+00:00z1990-12-01 00:00:00+00:00   r   z1990-01-05 00:00:00+00:00z1990-01-26 00:00:00+00:00z1990-02-16 00:00:00+00:00z1990-03-09 00:00:00+00:00z1990-03-30 00:00:00+00:00z1990-04-20 00:00:00+00:00z1990-05-11 00:00:00+00:00(   z1990-01-03 00:00:00+00:00z1990-01-10 00:00:00+00:00z1990-01-17 00:00:00+00:00z1990-01-24 00:00:00+00:00z1990-01-31 00:00:00+00:00z1990-02-07 00:00:00+00:00r   z1990-01-01 04:00:00+00:00z1990-01-01 08:00:00+00:00z1990-01-01 12:00:00+00:00z1990-01-01 16:00:00+00:00z1990-01-01 20:00:00+00:00z1990-01-02 00:00:00+00:00z1990-01-02 04:00:00+00:00z1990-01-02 08:00:00+00:00z1990-01-02 12:00:00+00:00z1990-01-02 16:00:00+00:00ra   r   z1990-01-01 00:05:00+00:00z1990-01-01 00:10:00+00:00z1990-01-01 00:15:00+00:00z1990-01-01 00:20:00+00:00secondsz1990-01-01 00:00:05+00:00z1990-01-01 00:00:10+00:00z1990-01-01 00:00:15+00:00z1990-01-01 00:00:20+00:00z1990-01-01 00:00:25+00:00z1990-01-01 00:00:30+00:00z1990-01-01 00:00:35+00:00z1990-01-01 00:00:40+00:00  r   z 1989-12-31 23:59:59.999500+00:00z 1990-01-01 00:00:00.000500+00:00z 1990-01-01 00:00:00.001000+00:00z 1990-01-01 00:00:00.001500+00:00z 1990-01-01 00:00:00.002000+00:00Fr   r   rB   r   )r   r   r   r   rg   r   rG   rg   )maxticks)r   r   r   r   r   r.   r   r?   r   r  r   r   ZMONTHLY)r  r   resultst_deltar   r   r   r   r   r   test_auto_date_locator  s    
    
     
  
  
    
 
   
8
$  r  c                  C   sh  dd } t jddddddd	d
ddddddggt jddddddddddddddggt jdddd dd!dd"dd#dd$g
gt jd%ddd&d'd(d)d*d+d,dd-d.ggt jd%d/dd0d1d2d3d4d5d6d7d8d9ggt jd:d;dd<d=d>d?ggt jd%d@ddAdBdCdDdEdFdGdHg	gt jdIdJdKddLdMdNdOggf}t  dPdQdQ}|D ]<\}}|| }| ||}tttt| |ks&tq&d S )RNc                 S   s.   t jdd}|  |jjt | |g  |S )NTr   r  r  r   r   r   r    s    zAtest_auto_date_locator_intmult.<locals>._create_auto_date_locatorr   r   1980-01-01 00:00:00+00:002000-01-01 00:00:00+00:00r   2040-01-01 00:00:00+00:002060-01-01 00:00:00+00:002080-01-01 00:00:00+00:002100-01-01 00:00:00+00:002120-01-01 00:00:00+00:002140-01-01 00:00:00+00:002160-01-01 00:00:00+00:002180-01-01 00:00:00+00:002200-01-01 00:00:00+00:00r  z1997-01-01 00:00:00+00:00z1997-02-01 00:00:00+00:00z1997-03-01 00:00:00+00:00z1997-04-01 00:00:00+00:00z1997-05-01 00:00:00+00:00z1997-06-01 00:00:00+00:00z1997-07-01 00:00:00+00:00z1997-08-01 00:00:00+00:00z1997-09-01 00:00:00+00:00z1997-10-01 00:00:00+00:00z1997-11-01 00:00:00+00:00z1997-12-01 00:00:00+00:00r  r   z1997-01-15 00:00:00+00:00z1997-02-15 00:00:00+00:00z1997-03-15 00:00:00+00:00z1997-04-15 00:00:00+00:00z1997-05-15 00:00:00+00:00r	  z1997-01-05 00:00:00+00:00z1997-01-09 00:00:00+00:00z1997-01-13 00:00:00+00:00z1997-01-17 00:00:00+00:00z1997-01-21 00:00:00+00:00z1997-01-25 00:00:00+00:00z1997-01-29 00:00:00+00:00z1997-02-05 00:00:00+00:00z1997-02-09 00:00:00+00:00r   z1997-01-01 04:00:00+00:00z1997-01-01 08:00:00+00:00z1997-01-01 12:00:00+00:00z1997-01-01 16:00:00+00:00z1997-01-01 20:00:00+00:00z1997-01-02 00:00:00+00:00z1997-01-02 04:00:00+00:00z1997-01-02 08:00:00+00:00z1997-01-02 12:00:00+00:00z1997-01-02 16:00:00+00:00ra   r   z1997-01-01 00:05:00+00:00z1997-01-01 00:10:00+00:00z1997-01-01 00:15:00+00:00z1997-01-01 00:20:00+00:00r
  z1997-01-01 00:00:05+00:00z1997-01-01 00:00:10+00:00z1997-01-01 00:00:15+00:00z1997-01-01 00:00:20+00:00z1997-01-01 00:00:25+00:00z1997-01-01 00:00:30+00:00z1997-01-01 00:00:35+00:00z1997-01-01 00:00:40+00:00r  r   z 1996-12-31 23:59:59.999500+00:00z 1997-01-01 00:00:00.000500+00:00z 1997-01-01 00:00:00.001000+00:00z 1997-01-01 00:00:00.001500+00:00z 1997-01-01 00:00:00.002000+00:00  r   r   r   r   r   r   r.   r   r?   )r  r  r   r  r   r   r   r   r   r   test_auto_date_locator_intmult  s    
     
     
    
    
    
 
   
=
r  c                  C   sT   t jdd} t | }d}|||dt j  |dt j  g}|dddgksPtd S )	NTr   g    B@r   i  00:00z00.0005z00.0009)r.   r   ConciseDateFormatterformat_ticksZMUSECONDS_PER_DAYr?   )r   r   Z	year_1996stringsr   r   r    test_concise_formatter_subsecond+  s    
r#  c                  C   sR  dd } t  ddd}t jdddd td	d
dD gt jddddddddddddddggt jddddddddddddg
gt jdddddd d!d"d#d$dddggt jdd%d&d'd(d)d*d+d,d'd(d)d*ggt jdd-d.d/d0d1d2ggt jdd3d.dd4dd5d#d6d7d8g	gt jd9d3d:d.d;d<d=d>d?ggf}|D ]*\}}|| }| ||}||ks"tq"d S )@Nc                 S   sf   t  \}}tjdd}t|}|j| |j| || | |j	
  dd | D }|S )NTr   c                 S   s   g | ]}|  qS r   r   r   str   r   r   r   @  s     zMtest_concise_formatter.<locals>._create_auto_date_locator.<locals>.<listcomp>r!   rQ   r.   r   r   yaxisr   r   rj   r   r   get_yticklabelsr  r  r)   r*   r   r   stsr   r   r   r  7  s    

z9test_concise_formatter.<locals>._create_auto_date_locatorr  r   r   r   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r   r   E  s     z*test_concise_formatter.<locals>.<listcomp>    ra   r  1997FebMarAprMayJunJulAugSepOctNovDecr  r   Jan15r	  05091317212529r   zJan-0104:0008:0012:0016:0020:00zJan-02r   r  00:0500:1000:1500:20r
  1020303540r   59.500.501.001.502.002.5r   r   r   r?   r  r   r  r  r   r   r"  r   r   r   test_concise_formatter6  s`    

   
 
 
    



rZ  zt_delta, expectedg{Gz?r
  z1997-Jan-01 00:00z1997-Jan-01 00:011997-Jan-011997-Jan-021997-Jan      c                 C   s~   t  ddd}||  }t \}}t }t|}|j| |j| |	||gddg |j
  | |ksztd S )Nr  r   r   )r   r!   rQ   r.   r   r   r[   r   r   r$   r   r   
get_offsetr?   )r  r   r   r   r)   r*   r   r   r   r   r   "test_concise_formatter_show_offsetg  s    


rb  c                  C   sz   t  dddt  dddg} ddg}t \}}|| | t  |j_}|jjd ks\t	|j
|   |jj|ksvt	d S )Nro   r   r   r   ra   r   )r   r!   rQ   r$   r.   ZConciseDateConverterr[   	converterr8   r?   rq   )r   yr)   r*   convr   r   r   test_concise_converter_stays  s    

rf  c                  C   s"  t  \} }tddd}|tjdd }t }t|}|j| |j	| |
||gddg |   | dkst|||tjdd  |   | dkst||tjd	d |tjd
d  |   | dkst|||tjdd  |   | dkstd S )Nr  r   r`  r   r   r_  r   r]  rG   r   r/  )r!   rQ   r   r   r.   r   r   r[   r   r   r$   rR   ra  r?   rq   )r)   r*   r   r   r   r   r   r   r   test_offset_changes  s*    
rg  c                 C   s   g | ]}d |f qS r   r   r,  r   r   r   r     s     r-  r.  r	  r;  z$\mathdefault{05}$z$\mathdefault{09}$z$\mathdefault{13}$z$\mathdefault{17}$z$\mathdefault{21}$z$\mathdefault{25}$z$\mathdefault{29}$r0  zJan$\mathdefault{{-}01}$z$\mathdefault{04{:}00}$z$\mathdefault{08{:}00}$z$\mathdefault{12{:}00}$z$\mathdefault{16{:}00}$z$\mathdefault{20{:}00}$zJan$\mathdefault{{-}02}$z$\mathdefault{59.5}$z$\mathdefault{00{:}00}$z$\mathdefault{00.5}$z$\mathdefault{01.0}$z$\mathdefault{01.5}$z$\mathdefault{02.0}$z$\mathdefault{02.5}$c                 C   sj   t  ddd}||  }tjdd}|  |jt|t| tj|dd}|| |ksft	d S )Nr  r   Tr   r   )
r   r.   r   r   r   r   r/   r   r!  r?   )r  r   r   r   r   r   r   r   r   test_concise_formatter_usetex  s    rh  c                     sf  ddddddg  fdd} t  dd	d	}t jd
ddd tdddD gt jddddddddddddddggt jddd d!dd!dd!dd!dd!g
gt jd"dd d#d$d%d&d'd(d)dd#d$ggt jd"d*d+d,d-d.d/d0d1d,d-d.d/ggt jdd2d3d4d5d6d7ggt jd"d8d3d9d:d;d<d=d>d?d@g	gt jdAd8dBd3dCdDdEdFdGggf}|D ]*\}}|| }| ||}||ks6tq6d S )HN%Yz%m/%Yzday: %dz%H hr %M minz	%S.%f secc                    sj   t  \}}tjdd}tj| d}|j| |j| || | |j	
  dd | D }|S )NTr   formatsc                 S   s   g | ]}|  qS r   r   r$  r   r   r   r     s     zUtest_concise_formatter_formats.<locals>._create_auto_date_locator.<locals>.<listcomp>r&  r)  rj  r   r   r    s    
zAtest_concise_formatter_formats.<locals>._create_auto_date_locatorr  r   r   r   c                 S   s   g | ]}t |qS r   r+  r,  r   r   r   r     s     z2test_concise_formatter_formats.<locals>.<listcomp>r-  r.  ra   r  r/  z02/1997z03/1997z04/1997z05/1997z06/1997z07/1997z08/1997z09/1997z10/1997z11/1997z12/1997r  r   z01/1997zday: 15r	  zday: 05zday: 09zday: 13zday: 17zday: 21zday: 25zday: 29r   zday: 01z04 hr 00 minz08 hr 00 minz12 hr 00 minz16 hr 00 minz20 hr 00 minzday: 02r   z00 hr 00 minz00 hr 05 minz00 hr 10 minz00 hr 15 minz00 hr 20 minr
  z05.000000 secz10.000000 secz15.000000 secz20.000000 secz25.000000 secz30.000000 secz35.000000 secz40.000000 secr   z59.500000 secz00.500000 secz01.000000 secz01.500000 secz02.000000 secz02.500000 secrX  rY  r   rj  r   test_concise_formatter_formats  s       
          
        
         
          
      
      
rl  c                     sf  ddddddg  fdd} t  d	d
d
}t jdddd tdddD gt jddddddddddddddggt jdd d!d"d#d"d$d"d%d"dd"g
gt jd&d d!d'd(d)d*d+d,d-d#d'd(ggt jd&d.d/d0d1d2d3d4d5d0d1d2d3ggt jdd6d7d8d9d:d;ggt jd&d<d7d'd=d"d>d,d?d@dAg	gt jdBd<dCdDdEdFdGdHdIggf}|D ]*\}}|| }| ||}||ks6tq6d S )JNr_  z'%yz%Bz%m-%dz%Sz%S.%fc                    sj   t  \}}tjdd}tj| d}|j| |j| || | |j	
  dd | D }|S )NTr   zero_formatsc                 S   s   g | ]}|  qS r   r   r$  r   r   r   r     s     zVtest_concise_formatter_zformats.<locals>._create_auto_date_locator.<locals>.<listcomp>r&  r)  rm  r   r   r  	  s     
zBtest_concise_formatter_zformats.<locals>._create_auto_date_locatorr  r   r   r   c                 S   s   g | ]}t |qS r   r+  r,  r   r   r   r     s     z3test_concise_formatter_zformats.<locals>.<listcomp>r-  r.  ra   r  z'97r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r  r   Januaryr<  FebruaryZMarchZAprilr	  r=  r>  r?  r@  rA  rB  rC  r   z01-01rD  rE  rF  rG  rH  z01-02r   Z00rI  rJ  rK  rL  r
  rM  rN  rO  rP  rQ  r   rR  z00.0rS  rT  rU  rV  rW  rX  rY  r   rm  r   test_concise_formatter_zformats  sr    

     

    
    
    



rq  c            
      C   s   dd } t  dddjt jjd}t jdddd	d
ddddd	d
ddgdgt jdddddddgdgt jdddddddddddg	dgt jd dd!dd"d#d$d%d&gdgf}t t jd'd}|D ]:\}}}|| }| |||\}}	||kst|	|kstqd S )(Nc                 S   sx   t  \}}tjdd}tj||d}|j| |j| || | |j	
  dd | D }||j  fS )NTr   tzc                 S   s   g | ]}|  qS r   r   r$  r   r   r   r   D  s     zPtest_concise_formatter_tz.<locals>._create_auto_date_locator.<locals>.<listcomp>)r!   rQ   r.   r   r   r'  r   r   rj   r   r   r(  Zget_offset_textr   )r  r  rs  r)   r*   r   r   r*  r   r   r   r  ;  s    
z<test_concise_formatter_tz.<locals>._create_auto_date_locatorr  r   rI   r	  r   z03:00z07:00z11:00z15:00z19:00z23:00r\  ra   r   z03:05z03:10z03:15z03:20r[  r
  r=  rM  r<  rN  rB  rO  rP  rQ  z1997-Jan-01 03:00r   rR  rS  rT  rU  rV  rW  r   )r   replacetimezoneutcr   r?   )
r  r   r  Znew_tzr  Zexpected_stringsZexpected_offsetr   r"  offsetr   r   r   test_concise_formatter_tz:  s>    
    


rx  c            	      C   s  dd } t jddddddd	d
ddddddggt jddddddddddddddggt jdddd dd!dd"dd#dd$g
gt jd%ddd&d'd(d)d*d+d,dd-d.ggt jd%d/dd0d1d2d3d4d5d6d7d8d9ggt jd:d;dd<d=d>d?ggt jd%d@ddAdBdCdDdEdFdGdHg	gf}tjdI}t j dJdKdK|dL}|D ]^\}}tdMdNiB || }| |||}tttt	j
| |dO}||ksntW 5 Q R X qd S )PNc                 S   s0   t jd|d}|  |jjt | |g  |S )NTr   rs  r  )r  r  rs  r   r   r   r   r  d  s    zDtest_auto_date_locator_intmult_tz.<locals>._create_auto_date_locatorr   r   z1980-01-01 00:00:00-08:00z2000-01-01 00:00:00-08:00z2020-01-01 00:00:00-08:00z2040-01-01 00:00:00-08:00z2060-01-01 00:00:00-08:00z2080-01-01 00:00:00-08:00z2100-01-01 00:00:00-08:00z2120-01-01 00:00:00-08:00z2140-01-01 00:00:00-08:00z2160-01-01 00:00:00-08:00z2180-01-01 00:00:00-08:00z2200-01-01 00:00:00-08:00r  z1997-01-01 00:00:00-08:00z1997-02-01 00:00:00-08:00z1997-03-01 00:00:00-08:00z1997-04-01 00:00:00-08:00z1997-05-01 00:00:00-07:00z1997-06-01 00:00:00-07:00z1997-07-01 00:00:00-07:00z1997-08-01 00:00:00-07:00z1997-09-01 00:00:00-07:00z1997-10-01 00:00:00-07:00z1997-11-01 00:00:00-08:00z1997-12-01 00:00:00-08:00r  r   z1997-01-15 00:00:00-08:00z1997-02-15 00:00:00-08:00z1997-03-15 00:00:00-08:00z1997-04-15 00:00:00-07:00z1997-05-15 00:00:00-07:00r	  z1997-01-05 00:00:00-08:00z1997-01-09 00:00:00-08:00z1997-01-13 00:00:00-08:00z1997-01-17 00:00:00-08:00z1997-01-21 00:00:00-08:00z1997-01-25 00:00:00-08:00z1997-01-29 00:00:00-08:00z1997-02-05 00:00:00-08:00z1997-02-09 00:00:00-08:00r   z1997-01-01 04:00:00-08:00z1997-01-01 08:00:00-08:00z1997-01-01 12:00:00-08:00z1997-01-01 16:00:00-08:00z1997-01-01 20:00:00-08:00z1997-01-02 00:00:00-08:00z1997-01-02 04:00:00-08:00z1997-01-02 08:00:00-08:00z1997-01-02 12:00:00-08:00z1997-01-02 16:00:00-08:00ra   r   z1997-01-01 00:05:00-08:00z1997-01-01 00:10:00-08:00z1997-01-01 00:15:00-08:00z1997-01-01 00:20:00-08:00r
  z1997-01-01 00:00:05-08:00z1997-01-01 00:00:10-08:00z1997-01-01 00:00:15-08:00z1997-01-01 00:00:20-08:00z1997-01-01 00:00:25-08:00z1997-01-01 00:00:30-08:00z1997-01-01 00:00:35-08:00z1997-01-01 00:00:40-08:00zCanada/Pacificr  r   rI   z_internal.classic_modeFrr  )r   r   r   rs  gettzr   r   r   r   r.   r   r?   )	r  r  rs  r   r  r   r   r   r%  r   r   r   !test_auto_date_locator_intmult_tzc  s    
     
     
    
    
    
 
   5r{  zdate_inverted_limit.pngc                  C   st   t  ddd} t  ddd}t \}}|j| ddd || t jdd	 |t jdd	  |  |jd
d d S rt   )r   r!   rQ   r^   rj   r   Zinvert_yaxisrk   rl   r   r   r   test_date_inverted_limit  s    r|  c                    s   t jd}tj}tjddddd|d}tjddd	}|jd
  d}| |||d}|||}dtt	
d  fddt|D }	tt|}
|
|	kstd S )NzEurope/Brusselsr   r   r   r   rI   !   r   )r   r  iQ r   r   freqZperiodsg    p&ArP   c                    s   g | ]}|   qS r   r   rE   Zinterval_daysr-   r   r   r     s     z&_test_date2num_dst.<locals>.<listcomp>)r   rs  rz  r.   rL   r   r   r  r/   r   r=   r   r   r?   )
date_range
tz_convertZBRUSSELSrL   dtstartr   NZdt_utcZdt_bxlZexpected_ordinalfZactual_ordinalfr   r  r   _test_date2num_dst  s    

r  c                     s4   G dd dt j   fdd} dd }t| | d S )Nc                       sD   e Zd ZdZ fddZ fddZ fddZedd	 Z  Z	S )
z%test_date2num_dst.<locals>.dt_tzawarez
        This bug specifically occurs because of the normalization behavior of
        pandas Timestamp objects, so in order to replicate it, we need a
        datetime-like object that applies timezone normalization after
        subtraction.
        c                    sX   t  |}t|dd }|d k	r>t|dd }|d k	r>||}t|tjrT| |}|S )NrJ   	normalize)super__sub__getattrr  
isinstancer   
mk_tzaware)r   otherrrJ   Z	localizer	__class__r   r   r    s    

z-test_date2num_dst.<locals>.dt_tzaware.__sub__c                    s   |  t |S N)r  r  __add__)r   r  r  r   r   r    s    z-test_date2num_dst.<locals>.dt_tzaware.__add__c                    s   t  |}| |S r  )r  
astimezoner  )r   rJ   r   r  r   r   r    s    z0test_date2num_dst.<locals>.dt_tzaware.astimezonec                 S   s8   i }d}|D ] }t ||d }|d k	r|||< q| f |S )N)r   r   r   r   minutesecondr   rJ   )r  )clsZdatetime_objkwargsattrsattrvalr   r   r   r    s    	
z0test_date2num_dst.<locals>.dt_tzaware.mk_tzaware)
r   r   r   __doc__r  r  r  classmethodr  __classcell__r   r   r  r   
dt_tzaware  s   r  c                    s"    |   fddt|D S )Nc                    s   g | ]} |  qS r   r   rE   r  r  r   r   r     s     z9test_date2num_dst.<locals>.date_range.<locals>.<listcomp>)r  r   r~  r  r  r   r    s    
z%test_date2num_dst.<locals>.date_rangec                    s    fdd| D S )Nc                    s   g | ]}|  qS r   )r  )r   drI   r   r   r     s     z9test_date2num_dst.<locals>.tz_convert.<locals>.<listcomp>r   )Zdt_listrJ   r   rI   r   r    s    z%test_date2num_dst.<locals>.tz_convert)r   r  )r  r  r   r  r   test_date2num_dst  s    1r  c                    s    fdd}t  j| d S )Nc                     s    j j|  tS r  )ZDatetimeIndexr  astypeobject)argspdr   r   r    s    z,test_date2num_dst_pandas.<locals>.tz_convert)r  r  )r  r  r   r  r   test_date2num_dst_pandas  s    r  c                 C   s   |d}| t  dddd|}| t  dddd|}tjtjj|d}|||}t j ddddtj dt j ddd	d
tj dg}||kst	d S )NAustralia/Sydneyr   r   r   r   )r  r     rI   r      )
r   r.   r   r   r   DAILYZbetweenrs  Ztzutcr?   )	attach_tzZget_tzSYDr  dtendruleZactexpr   r   r   _test_rrulewrapper  s    r  c               	   C   s   dd } t | tjj tjd}tdddd}tdddd}tjtjj|||d}|	|tjddd	dd|d
ks|t
||tjddddd|d
kst
|j|kst
|jdkst
d S )Nc                 S   s   | j |dS )NrI   )rt  r   Zzir   r   r   r  '  s    z$test_rrulewrapper.<locals>.attach_tzr  r   r   r   r   )r  r  rJ   Zuntilr   rI   r   )r  r   rs  rz  r   r.   r   r   r  afterr?   beforeZ_base_tzinfoZ	_interval)r  r  r  r  r  r   r   r   test_rrulewrapper&  s"     r  c                  C   s"   t d} dd }t|| j d S )Npytzc                 S   s
   | | S r  )localizer  r   r   r   r  @  s    z)test_rrulewrapper_pytz.<locals>.attach_tz)r   importorskipr  ru  )r  r  r   r   r   test_rrulewrapper_pytz;  s    
r  c                     sf  t d} | d  fddtdD }tjd d}|  |jt	|d d	 t	|d
 d	  t
dddddddg}|t	t
d }t
j||  dddddddg}ttttj|  d}||kstt
||d |d t
ddddd d!d"d#d$g	stt
||d |d |d |d t
ddddd d!d"d#d$g	sbtd S )%Nr  zAmerica/New_Yorkc              	      s*   g | ]"}  td ddt| qS )rp   r   )r  r   r   rE   rr  r   r   r   K  s   z)test_yearlocator_pytz.<locals>.<listcomp>ro   Try  r   r   r   g{ja&Ag{jd&Ag{jtg&Ag{jNj&Ag{j*m&Ag{jp&Ag{jr&ArP   z2009-01-01 00:00:00-05:00z2010-01-01 00:00:00-05:00z2011-01-01 00:00:00-05:00z2012-01-01 00:00:00-05:00z2013-01-01 00:00:00-05:00z2014-01-01 00:00:00-05:00z2015-01-01 00:00:00-05:00rr  r   g@g*@g:@gJ@gZ@gj@gz@g@g@)r   r  ru  r   r.   r   r   r   r   r/   r   r    r=   r%   rS   r   r   r   r   r?   Zallcloser   Zget_locator)r  r   r   r   r   r%  r   rr  r   test_yearlocator_pytzF  s`    



         &   r  c                  C   s   dd } t  ddd}t jddddddd	d
ddddddddddggt jdddddddddddddddd d!d"ggt jd#ddd$d%dd&d'ggf}|D ]>\}}}|| }| ||f|}tttt| |kstqd S )(Nc                 [   s2   t jf |}|  |jt | t | |S r  )r.   YearLocatorr   r   r   r/   )r  r  r  r   r   r   r   _create_year_locatorh  s    z.test_YearLocator.<locals>._create_year_locatorr   r   r   r   ra   )r   r   r   r  r  r   r  r  r  r  r  r  r  r  r  rg   r   z1980-05-16 00:00:00+00:00z2000-05-16 00:00:00+00:00z2020-05-16 00:00:00+00:00z2040-05-16 00:00:00+00:00z2060-05-16 00:00:00+00:00z2080-05-16 00:00:00+00:00z2100-05-16 00:00:00+00:00z2120-05-16 00:00:00+00:00z2140-05-16 00:00:00+00:00z2160-05-16 00:00:00+00:00z2180-05-16 00:00:00+00:00z2200-05-16 00:00:00+00:00i  r   r   z1980-09-25 00:00:00+00:00z2000-09-25 00:00:00+00:00r  )r  r   r  r   	argumentsr   r   r   r   r   r   test_YearLocatorg  sR    

     	

     	

r  c                	   C   s   t t tjdd W 5 Q R X t t tjdd W 5 Q R X t t tjdd W 5 Q R X t t tjdd W 5 Q R X tjdd d S )Nr   r   g      r   g?r   )r   raises
ValueErrorr.   r   r   r   r   r   test_DayLocator  s    r  c                  C   s(   t j dddtjd} |  dks$td S )N  r   rI   rL   )r   r.   rL   tznamer?   r   r   r   r   test_tz_utc  s    r  z	x, tdeltar]   c                 C   s   t | }||kstd S r  )r.   Znum2timedeltar?   )r   Ztdeltar   r   r   r   test_num2timedelta  s    
r  c                  C   sN   t dt dg} t| }t ddgtt d }t j|| d S )Nr   z
2001-01-01    H&Ag    J&ArP   )r   r=   r.   r/   r    r%   r&   )r   dnr   r   r   r   test_datetime64_in_list  s    
r  c               	   C   s  t d} t  t  tt td W 5 Q R X t  td | t d 	d}|	d}t j
t| t| t  td t j
t| d t  td t j
t| |d	  t  td
 t j
tt dd d S )Nr   z
0000-01-01rO   datetime64[D]intrP   r  z1970-01-01T01:00:00gUUUUUU?1970-01-01T00:00:00z1970-01-01T12:00:00g      ?)r   r=   r.   rU   Z	get_epochr   r  RuntimeErrorrV   r  r%   r&   r/   floatrS   )dater   r   r   r   test_change_epoch  s,    





r  c               	   C   sv   t jdddd} tjdd}dg|jd< |  |jt| d	 t| d
  t	j
tdd | }W 5 Q R X d S )Nz
2001-01-10z
2001-03-04r  r   Fr   r   r   r   r   zAutoDateLocator was unablematch)r   aranger.   r   Z	intervaldr   r   r   r/   r   r   r   )rM   r   Zlocsr   r   r   test_warn_notintervals  s    r  c               	   C   s   dt jd< tjdddd} t  \}}|| tt|  |j  |	 d 
 dks^t|	 d	 
 d
ksvtdt jd< t  \}}|| tt|  |j  |	 d 
 dkst|	 d	 
 dksttt dt jd< W 5 Q R X d S )NZconcisezdate.converterz
2020-01-01
2020-05-01r  r   r   r;  r   r<  r{   zJan 01 2020Jan 15 2020Zboo)r!   r   r   r  rQ   r$   r   r   r   r   r   r?   r   r  r  rM   r)   r*   r   r   r   test_change_converter  s    



r  c                  C   s   dt jd< tjdddd} t  \}}|| tt|  |j  |	 d 
 dks^t|	 d	 
 d
ksvtdt jd< t  \}}|| tt|  |j  |	 d 
 dkst|	 d	 
 dkstd S )NFzdate.interval_multiplesz
2020-01-10r  r  r   r   zJan 10 2020r   zJan 24 2020Truer  zFeb 01 2020)r!   r   r   r  rQ   r$   r   r   r   r   r   r?   r  r   r   r   test_change_interval_multiples  s    



r  c                	   C   s   t tjr t  td tddks2tt	ddksDtt  td tddkshtt	ddksztW 5 Q R X d S )	NrP   g   @ƞBAg    x%Ag    z%Ag   ƞBAr  r   r   )
r   r   r   MatplotlibDeprecationWarningr.   rU   rV   Z
julian2numr?   Z
num2julianr   r   r   r   test_julian2num  s    

r  c               
   C   s  t  } | dtjdkst| dddks2t| dddksFt| dddksZt|   |  tjdddddtj	j
dtjdddddtj	j
dfkst| jt jkstd}tj|}| j|kst| d | j|kst|   | jjt d	d
g  |  tjddddd|dtjddddd|dfks@t|tjd< t  } | j|ksbttjtdd t jdd W 5 Q R X tjtdd t jdd W 5 Q R X d S )Nr   r   r   r   )r   r  rI   r   ZIceland
2022-01-10z
2022-01-08rA   r   r   ru  z Aiceland is not a valid timezoner  ZAicelandrr  z%tz must be string or tzinfo subclass.)r.   ZDateLocatorZnonsingularr   infr?   r   Zdatalim_to_dtr   ru  rv  rs  rL   r   rz  
set_tzinfor   Zset_data_intervalr/   r!   r   r   r  r  	TypeError)r   Ztz_strZ
iceland_tzr   r   r   test_DateLocator  sB    


r  c                  C   s   t ddksttjdddd} t jd| ddks8ttt jdd	g| dtdd
gksbtt g jdksvtt g tjddddjdkstd S )Nr      @rA   r   r   r   z2022-01)r   z2022-02g    @@r   )	r.   Zdatestr2numr?   r   r  r   r   r    sizer  r   r   r   test_datestr2numA  s      
 r  kwarg)rk  rn  Zoffset_formatsc              	   C   sJ   t  }| ddgi}|  d}tjt|d t j|f| W 5 Q R X d S )Nr_  ri  z argument must be a listr  )r.   r   r   r  r  r   )r  r   r  r  r   r   r   !test_concise_formatter_exceptionsM  s
    
r  c                  C   s8   t  } t | }|ddks"t|ddks4td S )Nr  Z2022z2022-01-10 00:00:00)r.   r   r   r?   Zformat_data_short)r   r   r   r   r   test_concise_formatter_callW  s    
r  zspan, expected_locatorg{Gz?      ro   c              	   C   s8   t tj" t| \}}t||s*tW 5 Q R X d S r  )r   r   r   r  r.   Zdate_ticker_factoryr  r?   )spanZexpected_locatorr   r   r   r   r   test_date_ticker_factory^  s    r  c                  C   sh   t dd tddD } t dddddg}t j|d	}t \}}|| | | d
ksdt	d S )Nc                 S   s   g | ]}t  d d|qS )r   r   )r   )r   nr   r   r   r   n  s     z(test_datetime_masked.<locals>.<listcomp>r   r   r   r   r   rg   r   r  )
r   r    r   rK   Zmasked_greaterr!   rQ   r$   rT   r?   )r   rd  mr)   r*   r   r   r   test_datetime_maskedk  s    r  r  )ii c              	   C   s0   t jtd|  dd t|  W 5 Q R X d S )NzDate ordinal z	 convertsr  )r   r  r  r.   r   )r  r   r   r   test_num2date_errorw  s    r  c                   C   sZ   t dtjdddddddtjjdks,tt d	tjdddddd
tjjdksVtd S )Ngj<  j@i  r      r   r   i,B rI   gq<  j@rg   )r.   r   r   ru  rv  r?   r   r   r   r   test_num2date_roundoff}  s&                 r  c               
   C   sV   t tjdddddt jd} t d}|| dks8t|d || dksRtd S )	Nr   r   r   rI   z%Y-%b-%d %H:%Mz2011-Jan-01 00:00zPacific/Kiritimatiz2011-Jan-01 14:00)r.   r/   r   rL   ZDateFormatterr?   r  )r'   r   r   r   r   test_DateFormatter_settz  s    

r  )_r   Zdateutil.tzr   Zdateutil.rruler   Znumpyr   r   Z
matplotlibr   r   r   Zmatplotlib.datesrM   r.   Zmatplotlib.pyplotZpyplotr!   Zmatplotlib.testing.decoratorsr   Zmatplotlib.tickerZtickerr   r,   markZparametrizer2   r7   r@   rN   rX   r\   r_   rn   rs   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  rZ  rb  rf  rg  rh  rl  rq  rx  r{  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   ZHourLocatorr   ZWeekdayLocatorZMonthLocatorr  r  r  r  r  r  r   r   r   r   <module>   sv  	



	






 





 
O
K1	


     
    
  
74)F
A



 '

	 .


