U
    f/e2                     @   sB  d dl mZm Z  d dlZd dlZd dlZd dlZd dlm  m	Z
 d dlmZmZ d dlm  mZ d dlmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZm Z m!Z!m"Z" zd dl#m$Z$ W n e%k
r   Y nX e&d e&d	Z'ej(j)Z*d
d Z+dd Z,G dd dZ-G dd dZ.G dd dZ/G dd dZ0dS )    )datedatetimeN)is_platform_windowsnp_datetime64_compat)IndexPeriodSeries	Timestamp
date_range) deregister_matplotlib_convertersregister_matplotlib_converters)DayMicroMilliSecond)	convertermatplotlib.pyplotmatplotlib.datesc                  C   s   d} t jd| g}t| d S )Nzimport matplotlib.units as units; import matplotlib.dates as mdates; n_conv = len(units.registry); import pandas as pd; pd.plotting.register_matplotlib_converters(); pd.plotting.deregister_matplotlib_converters(); assert len(units.registry) == n_conv-c)sys
executable
subprocesscheck_output)codecall r   H/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/plotting/test_converter.pytest_registry_mpl_resets5   s    	r   c                   C   s   t dt dkstd S )Nz00:01)r   Ztime2numAssertionErrorr   r   r   r   test_timtetonum_accepts_unicodeD   s    r   c                   @   sl   e Zd Zdd Zejddddd Zejj	e
 dd	d
dd Zdd Zejddddd Zdd ZdS )TestRegistrationc                 C   s&   d}t jd|g}t|dks"td S )Nzwimport matplotlib.units; import pandas as pd; units = dict(matplotlib.units.registry); assert pd.Timestamp not in unitsr   r   )r   r   r   
check_callr   )selfr   r   r   r   r   test_dont_register_by_defaultI   s    z.TestRegistration.test_dont_register_by_defaultZ
matplotlibz3.1.3)min_versionc                 C   sP   t d}ttdtdddd}| \}}t  ||j|j	 |
  d S )Nr      2017Zperiodsindex)pytestimportorskipr   ranger
   subplotsr   plotr)   valuesclose)r"   plts_axr   r   r   test_registering_no_warningT   s    
z,TestRegistration.test_registering_no_warningz1Getting two warnings intermittently, see GH#37746F)reasonstrictc              	   C   sd   t d}ttdtdddd}td }|  W 5 Q R X zt	|dksRt
W 5 |  X d S )Nr   r%   r&   r'   r(   r   )r*   r+   r   r,   r
   tmZassert_produces_warningr.   r0   lenr   )r"   r1   r2   wr   r   r   test_pandas_plots_register_   s    
z+TestRegistration.test_pandas_plots_registerc              
   C   sZ   t d}tdd: tdd t|jks4tW 5 Q R X t|jksLtW 5 Q R X d S )Nmatplotlib.units'plotting.matplotlib.register_convertersTF)r*   r+   cfoption_contextr	   registryr   )r"   unitsr   r   r   test_matplotlib_formattersp   s
    
z+TestRegistration.test_matplotlib_formattersc              	   C   s   t d tdd}t d}ttdtdddd}| \}}| ||j	|j
 W 5 Q R X t  | ||j	|j
 W 5 Q R X |  d S )Nr   r=   Fr%   r&   r'   r(   )r*   r+   r>   r?   r   r,   r
   r-   r.   r)   r/   r   r0   )r"   ctxr1   r2   r3   r4   r   r   r   test_option_no_warning|   s    

z'TestRegistration.test_option_no_warningc              
   C   s   t d}t d}t|j}zZ|j  | }||jt< ||jt< t	  |jt |k	s^t
t  |jt |ksvt
W 5 |j  | D ]\}}||j|< qX d S )Nr<   r   )r*   r+   dictr@   clearitemsZDateConverterr   r   r   r   r   )r"   rA   datesoriginalkvZdate_converterr   r   r   test_registry_resets   s    






z%TestRegistration.test_registry_resetsN)__name__
__module____qualname__r#   tdZ
skip_if_nor5   r*   markZxfailr   r;   rB   rD   rL   r   r   r   r   r    H   s   



r    c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
ddddddgdd Zdd Zdd Zdd ZdS )TestDateTimeConverterc                 C   s   t  | _t d | _d S N)r   ZDatetimeConverterdtcZTimeFormattertc)r"   methodr   r   r   setup_method   s    
z"TestDateTimeConverter.setup_methodc                 C   s4   | j dd d }| j dd d }||ks0tdd S )Nz12:22z/DatetimeConverter.convert should accept unicoderT   convertr   r"   Zr1Zr2r   r   r   test_convert_accepts_unicode   s    z2TestDateTimeConverter.test_convert_accepts_unicodec                 C   s  | j dgd d d }ttddd}||ks4t| j dd d }||ksPt| j tdddd d }||kstt| j dd d }||kst| j tdd d }||kst| j tdd d }||kst| j tdd d }||kst| j t	
tdtdgd d }|d |ks$ttddd	}| j |d d }||ksVt| j | d d }||ksxt| j t|td |gd d }|d |kst| j t|td |g d d }|d |kstd S )
N2012-1-1r        
2012-01-012012-01-01 00:00:00+00002012-01-02 00:00:00+0000UTCz
US/Eastern)rT   rY   rH   date2numr   r   r   r	   r   nparrayZtz_localizeZ
tz_convertZto_pydatetimer   r   )r"   rsxptsr   r   r   test_conversion   sL      
 $z%TestDateTimeConverter.test_conversionc              	   C   s   d}| j tdddd d }tjtddd}tj|||d | j tdddd d }tj|||d | j tdd	d	d	d
dd d }tj|||d d S )Ng&.>z2012-1-1 01:02:03rb   )tzrtolz2012-1-1 09:02:03zAsia/Hong_Kongr]   r^         )	rT   rY   r	   r   rH   rc   r8   assert_almost_equalr   )r"   rl   rf   rg   r   r   r   test_conversion_float   s    
  z+TestDateTimeConverter.test_conversion_floatc                 C   s   t dddt dddg}| j|d d }tj|}t|| | j|d d d }tj|d }||ksptt	ddddt	ddddg}| j|d d }tj|}t|| | j|d d d }tj|d }||kstd S )Ni  r^   rm   r   r%   )
r   rT   rY   r   rH   rc   r8   Zassert_numpy_array_equalr   r   )r"   r/   rf   rg   r   r   r   $test_conversion_outofbounds_datetime   s    z:TestDateTimeConverter.test_conversion_outofbounds_datetimeztime,format_expected)r   z00:00)g@z23:59:59.999999)i_ z01:00)i  z01:02:03)gfffffe@z11:02:03.200c                 C   s   |  |}||kstd S rS   )rU   r   )r"   timeformat_expectedresultr   r   r   test_time_formatter  s    
z)TestDateTimeConverter.test_time_formatterc                 C   sP   d}dD ]B}t jd|d}| j|d d }tj| }t j|||d qd S )Ng&.>)BLS
   )rJ   freqrk   )	r8   ZmakeDateIndexrT   rY   r   rH   rc   Z	_mpl_reprro   )r"   rl   rz   Z	dateindexrf   rg   r   r   r   test_dateindex_conversion  s    z/TestDateTimeConverter.test_dateindex_conversionc                    sJ    fdd}t d}|||t   |||t   |||td  d S )Nc                    s@    j | d d } j |d d }||k s<t| d| dd S )Nz is not less than .rX   )Zts1Zts2Zval1Zval2r"   r   r   _assert_less!  s    z;TestDateTimeConverter.test_resolution.<locals>._assert_lessr\   2   )r	   r   r   r   )r"   r~   rh   r   r}   r   test_resolution   s
    z%TestDateTimeConverter.test_resolutionc                    sT   t dt dg}||g} j|d d } fdd|D }t||k sPtd S )Nz
2017-01-01z
2017-01-02c                    s   g | ]} j |d d qS rS   )rT   rY   ).0xr}   r   r   
<listcomp>2  s     z=TestDateTimeConverter.test_convert_nested.<locals>.<listcomp>)r	   rT   rY   rd   re   allr   )r"   innerdatart   expectedr   r}   r   test_convert_nested.  s
    z)TestDateTimeConverter.test_convert_nestedN)rM   rN   rO   rW   r[   ri   rp   rq   r*   rQ   parametrizeru   r{   r   r   r   r   r   r   rR      s$   5

	rR   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestPeriodConverterc                 C   s,   t  | _G dd d}| | _d| j_d S )Nc                   @   s   e Zd ZdS )z.TestPeriodConverter.setup_method.<locals>.AxisN)rM   rN   rO   r   r   r   r   Axis:  s   r   D)r   ZPeriodConverterpcaxisrz   )r"   rV   r   r   r   r   rW   7  s    
z TestPeriodConverter.setup_methodc                 C   s4   | j dd | j}| j dd | j}||ks0td S )Nr\   r   rY   r   r   rZ   r   r   r   r[   @  s    z0TestPeriodConverter.test_convert_accepts_unicodec                 C   sj  | j dgd | jd }tdj}||ks.t| j dd | j}||ksLt| j tdddgd | jd }||ksxt| j tdddd | j}||kst| j tdgd | jd }||kst| j tdd | j}||kst| j tdd | j}||kst| j tdd | j}||ks0t| j t	
tdtdgd | j}|d |ksftd S )Nr\   r   r]   r^   r_   r`   ra   )r   rY   r   r   Zordinalr   r   r	   r   rd   re   r"   rf   rg   r   r   r   ri   E  s>    
   
z#TestPeriodConverter.test_conversionc                 C   s.   | j ddgd | j}ddg}||ks*td S )Nr   r^   r   r   r   r   r   test_integer_passthroughm  s    z,TestPeriodConverter.test_integer_passthroughc                    sF   ddg j   gd j} fddtdD }||ksBtd S )Nr\   z2012-1-2c                    s   g | ]}j  d jqS rS   )r   rY   r   )r   r3   r   r"   r   r   r   v  s     z;TestPeriodConverter.test_convert_nested.<locals>.<listcomp>rm   )r   rY   r   r,   r   rZ   r   r   r   r   s  s    z'TestPeriodConverter.test_convert_nestedN)rM   rN   rO   rW   r[   ri   r   r   r   r   r   r   r   6  s
   	(r   c                   @   sH   e Zd ZdZejdddddgdd Zejd	d
dgdd ZdS )TestTimeDeltaConverterzTest timedelta converterzx, decimal, format_expected)        r   z00:00:00)l    xqAsr^   z
01:06:12.3)l    62" rm   z8 days 06:07:13.43)l    KVu   z09:00:23.4320c                 C   s&   t j}|j|d |d}||ks"td S )N)posZ
n_decimals)r   TimeSeries_TimedeltaFormatterZformat_timedelta_ticksr   )r"   r   decimalrs   tdcrt   r   r   r   test_format_timedelta_ticks}  s    
z2TestTimeDeltaConverter.test_format_timedelta_ticksview_interval)r^   rm   )rm   r^   c                    s8   G  fddd}t  }||d|  |dd d S )Nc                       s   e Zd Z fddZdS )zNTestTimeDeltaConverter.test_call_w_different_view_intervals.<locals>.mock_axisc                    s    S rS   r   r}   r   r   r   get_view_interval  s    z`TestTimeDeltaConverter.test_call_w_different_view_intervals.<locals>.mock_axis.get_view_intervalN)rM   rN   rO   r   r   r   r   r   	mock_axis  s   r   r   r   r   )r   r   setattr)r"   r   Zmonkeypatchr   r   r   r   r   $test_call_w_different_view_intervals  s    z;TestTimeDeltaConverter.test_call_w_different_view_intervalsN)	rM   rN   rO   __doc__r*   rQ   r   r   r   r   r   r   r   r   z  s   	
r   )1r   r   r   r   Znumpyrd   r*   Zpandas._config.config_configconfigr>   Zpandas.compatr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsrP   Zpandasr   r   r   r	   r
   Zpandas._testingZ_testingr8   Zpandas.plottingr   r   Zpandas.tseries.offsetsr   r   r   r   Zpandas.plotting._matplotlibr   ImportErrorr+   rH   rQ   ZslowZ
pytestmarkr   r   r    rR   r   r   r   r   r   r   <module>   s2   

` D