U
    CvfN                     @  s  d dl m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mZmZmZmZ G dd dZG dd dZdd	d
ddddgZdZejeddd Ze dd Ze dd Ze dd Zeejdddddddgd d!d"d#Zed d!d$d%Zed d!d&d'Zed d!d(d)Zeed d!d*d+Z ed d!d,d-Z!ed d!d.d/Z"eej#d0d d!d1d2Z$eeejdddddddgd d!d3d4Z%eeejdddddddgd d!d5d6Z&e d7d8 Z'ed d!d9d:Z(ejd;d< Z)eeejd=d>d?gd d!d@dAZ*eeejd=d>d?gd d!dBdCZ+eeejd=d>d?gd d!dDdEZ,dS )F    )annotationsN)assert_array_equalassert_chunks_equalassert_equalassert_identicalraise_if_dask_computesrequires_cftimerequires_daskc                   @  s  e Zd Zejdddd Zejddddd	d
ddddddddddddddddddgdddd Zejd!d"d#d$gddd%d&Z	ddd'd(Z
ddd)d*Zddd+d,Zejd-eejddddd	d
ddddddddddddddddddgddd.d/Zeejddddgddd0d1Zeejd2d3d4d5d6gddd7d8Zddd9d:Zejd2d3d4d5gddd;d<Zd=S )>TestDatetimeAccessorTZautousec                 C  s   d}t jdd|}t ddd}t ddd}tjdd|d| _tj|||| jgd	d
dgdd| _	t jj
| jdd|fd| _tj| j||| jgd	d
dgdd| _d S )Nd   
   r         
2000/01/01HstartfreqZperiodslonlattimedatacoordsdimsnamesize)nprandomrandlinspacepd
date_rangetimesxr	DataArrayr   choice	times_arr
times_dataselfntr   lonslats r0   A/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_accessor_dt.pysetup   s$    

zTestDatetimeAccessor.setupfieldyearmonthdayhourminutesecondmicrosecondZ
nanosecondweek
weekofyear	dayofweekweekday	dayofyearZquarterdater   Zis_month_startZis_month_endZis_quarter_startZis_quarter_endZis_year_startZis_year_endZis_leap_yearNonereturnc              	   C  s   |dkr| j  d }nt| j |}tj||| j gdgd}|dkrptjtdd t| jj	j
|}W 5 Q R X nt| jj	j
|}t|| d S )N)r;   r<   r;   r   r   r   r   z.dt.weekofyear and dt.week have been deprecatedmatch)r%   isocalendargetattrr&   r'   pytestZwarnsFutureWarningr   r   dtr   )r,   r3   r   expectedactualr0   r0   r1   test_field_access+   s     z&TestDatetimeAccessor.test_field_accesszfield, pandas_field)r4   r4   )r;   r;   )r>   r6   c                 C  sT   t t| j |t}tj||| jgdgd}| j	j
j | }t|| d S Nr   rD   )r#   IndexrH   r%   rG   astypeintr&   r'   r   r   rK   r   )r,   r3   Zpandas_fieldrL   rM   r0   r0   r1   test_isocalendarZ   s       z%TestDatetimeAccessor.test_isocalendarc                 C  s   | j jjj}|dkstd S )Nproleptic_gregorian)r   r   rK   calendarAssertionError)r,   calr0   r0   r1   test_calendarm   s    z"TestDatetimeAccessor.test_calendarc                 C  s    d| j jjdd kstd S )Nz2000-01-01 01:00:00%Y-%m-%d %H:%M:%S   )r   r   rK   strftimerV   )r,   r0   r0   r1   test_strftimeq   s    z"TestDatetimeAccessor.test_strftimec              	   C  sT   | j  }tt| j jd}|j|d}tj	t
dd |jj W 5 Q R X d S NZint8)r   rK   rE   r   copyr   arangelenr   rQ   Zassign_coordsrI   raises	TypeErrorrK   r,   Znontime_dataZint_datar0   r0   r1   test_not_datetime_typev   s
    
z+TestDatetimeAccessor.test_not_datetime_typez5ignore:dt.weekofyear and dt.week have been deprecatedc              	   C  s   dd l m} t| jj|}|j| jdd}tj|| j	j
| j	jdd}t  t|j|}W 5 Q R X t|j	|jsttt|| t| |  d S Nr   )   rg   2   )chunksr   r   
dask.arrayarrayrH   r*   rK   
from_arrayr)   r&   r'   r   r   r   r   
isinstanceArrayrV   r   r   computer,   r3   darL   dask_times_arrdask_times_2drM   r0   r0   r1   test_dask_field_access}   s       
z+TestDatetimeAccessor.test_dask_field_accessc              	   C  s   dd l m} t| jj |}|j| jdd}tj	|| j
j| j
jdd}t  |j | }W 5 Q R X t|j
|jsztt|| t| |  d S rf   )rk   rl   rH   r*   rK   rG   rm   r)   r&   r'   r   r   r   r   rn   ro   rV   r   r   rp   rq   r0   r0   r1   test_isocalendar_dask   s    
   
z*TestDatetimeAccessor.test_isocalendar_daskmethod, parametersfloorDceilrz   roundrz   )r[   rY   c              	   C  s   dd l m} t| jj||}|j| jdd}tj|| j	j
| j	jdd}t  t|j||}W 5 Q R X t|j	|js|tt|| t| |  d S rf   rj   r,   method
parametersrr   rL   rs   rt   rM   r0   r0   r1   test_dask_accessor_method   s       
z.TestDatetimeAccessor.test_dask_accessor_methodc                 C  sl   t jdddd}|t tdg}t|}tddddddddd	d	d	dd
g}t|j	|j
jj	 d S )Nr   M   r   ZNaTDJFMAMJJASONnan)r#   r$   appendrP   r   Z
datetime64r&   r'   r   valuesrK   season)r,   datesseasonsr0   r0   r1   test_seasons   s(    
z!TestDatetimeAccessor.test_seasonsc                 C  sL   t jdddd}tj|dgd}t|||}t|j||}t|| d S )Nz
2014-01-01z
2014-05-01r   )r   r   r   )r#   r$   r&   r'   rH   rK   r   r,   r   r   r   ZxdatesrL   rM   r0   r0   r1   test_accessor_method   s
    z)TestDatetimeAccessor.test_accessor_methodN)__name__
__module____qualname__rI   fixturer2   markparametrizerN   rS   rX   r\   re   filterwarningsr	   ru   rv   r   r   r   r0   r0   r0   r1   r
      s   


	 r
   c                   @  s   e Zd Zejdddd ZddddZejd	d
dddgddddZ	ejddddgddddZ
eejd	d
dddgddddZeejddddgddddZdS )TestTimedeltaAccessorTr   c                 C  s   d}t jdd|}t ddd}t ddd}tjdd|d| _tj|||| jgd	d
dgdd| _	t jj
| jdd|fd| _tj| j||| jgd	d
dgdd| _d S )Nr   r   r   r   r   1 day6Hr   r   r   r   r   r   r   )r   r    r!   r"   r#   timedelta_ranger%   r&   r'   r   r(   r)   r*   r+   r0   r0   r1   r2     s$    

zTestTimedeltaAccessor.setuprA   rB   c              	   C  sT   | j  }tt| j jd}|j|d}tj	t
dd |jj W 5 Q R X d S r]   r^   rd   r0   r0   r1   re     s
    
z,TestTimedeltaAccessor.test_not_datetime_typer3   dayssecondsmicrosecondsZnanosecondsc                 C  s>   t jt| j||| jgdgd}t| jjj|}t|| d S rO   )r&   r'   rH   r%   r   r   rK   r   )r,   r3   rL   rM   r0   r0   r1   rN   "  s    
   z'TestTimedeltaAccessor.test_field_accessrw   rx   r{   r}   c                 C  sL   t jdddd}tj|dgd}t|||}t|j||}t|| d S )Nr   z30 daysr   )r   endr   r   r   )r#   r   r&   r'   rH   rK   r   r   r0   r0   r1   test_accessor_methods,  s
    z+TestTimedeltaAccessor.test_accessor_methodsc              	   C  s   dd l m} t| jj|}|j| jdd}tj|| j	j
| j	jdd}t  t|j|}W 5 Q R X t|j	|jsttt|| t|| d S rf   )rk   rl   rH   r*   rK   rm   r)   r&   r'   r   r   r   r   rn   ro   rV   r   r   rq   r0   r0   r1   ru   6  s       
z,TestTimedeltaAccessor.test_dask_field_accessc              	   C  s   dd l m} t| jj||}|j| jdd}tj|| j	j
| j	jdd}t  t|j||}W 5 Q R X t|j	|js|tt|| t| |  d S rf   rj   r   r0   r0   r1   r   K  s       
z/TestTimedeltaAccessor.test_dask_accessor_methodN)r   r   r   rI   r   r2   re   r   r   rN   r   r	   ru   r   r0   r0   r0   r1   r     s2   

 
  
 r   Z365_dayZ360_dayZjulianZall_leapZ366_dayZ	gregorianrT   r   )paramsc                 C  s   | j S )N)param)requestr0   r0   r1   rU   l  s    rU   c                 C  s    dd l }|jttd| ddS )Nr   zhours since 2000-01-01T)ZunitsrU   Zonly_use_cftime_datetimes)cftimenum2dater   r`   _NT)rU   r   r0   r0   r1   r%   q  s    r%   c                 C  sJ   t jddt}t ddd}t ddd}tj|||| gdddgdd	S )
Nr   r   r   r   r   r   r   r   r   )r   r    r!   r   r"   r&   r'   )r%   r   r.   r/   r0   r0   r1   r   }  s       r   c                 C  sP   t ddd}t ddd}t jj| ddtfd}tj|||| gdddgd	d
S )Nr   r   r   r   r   r   r   r   r   r   )r   r"   r    r(   r   r&   r'   )r%   r.   r/   r)   r0   r0   r1   times_3d  s       r   r3   r4   r5   r6   r7   r?   r=   rA   rB   c                 C  sJ   t | jj|}tjt tjj| jj||| jj	| jj
d}t|| d S )NrD   )rH   r   rK   r&   r'   codingcftimeindexCFTimeIndexr   r   r   r   )r   r3   resultrL   r0   r0   r1   rN     s    rN   c                 C  s$   | j jd j}| j jj|ks td S )Nr   )r   r   rU   rK   rV   )r   rL   r0   r0   r1   test_calendar_cftime  s    r   c                  C  s,   t jtjddddd} | jjdks(td S )N)   rg   datetime64[ns]Zdtype)xyr   rT   )r&   r'   r   zerosrK   rU   rV   r   r0   r0   r1   test_calendar_datetime64_2d  s    r   c               	   C  sJ   dd l m}  tj| jddddd}t  |jjdks<tW 5 Q R X d S )Nr   r   rg      r   r   r   r   zr   rT   )	rk   rl   r&   r'   r   r   rK   rU   rV   )rr   r   r0   r0   r1    test_calendar_datetime64_3d_dask  s     r   c               	   C  s`   ddl m}  tj| tjjddddddd	d
d }tdd |j	j
dksRtW 5 Q R X d S )Nr   )r   rZ   i@B r   r   zhours since 1970-01-01T00:00Znoleap)rU   r   r      Zmax_computes)r   r   r&   r'   r   r    randintchunkr   rK   rU   rV   )r   r   r0   r0   r1   test_calendar_dask_cftime  s    
r   c              	   C  s*   t jtdd | jj  W 5 Q R X d S )Nz3'CFTimeIndex' object has no attribute 'isocalendar'rE   )rI   rb   AttributeErrorr   rK   rG   r   r0   r0   r1   test_isocalendar_cftime  s
     r   c              	   C  s*   t jtdd | jj  W 5 Q R X d S )Nz}'CFTimeIndex' object has no attribute `date`. Consider using the floor method instead, for instance: `.time.dt.floor\('D'\)`.rE   )rI   rb   r   r   rK   r@   r   r0   r0   r1   test_date_cftime  s
    r   zignore::RuntimeWarningc                 C  sX   d}| j j|}tjtjj| j j	 d| j j
| j jd}|j|}t|| dS )z5compare cftime formatting against datetime formattingz%Y%m%d%HZstftimerD   N)r   rK   r[   r&   r'   r   r   r   r   Zto_datetimeindexr   r   r   )r   Zdate_formatr   Zdatetime_arrayrL   r0   r0   r1   test_cftime_strftime_access  s    r   c                 C  s   dd l m} tjttjj| jj	||dgd}tj| jj	dgd
ddi}t|j|}t|j|jsnt|j|jks~tt| | d S )Nr   r   )r   r   r   rh   )rk   rl   r&   r'   rH   r   r   r   r   r   r   rK   rn   r   ro   rV   ri   r   rp   )r   r3   rr   rL   r%   r   r0   r0   r1   test_dask_field_access_1d  s    r   c                 C  s   dd l m} tjttjj| j	 |
| j|| j| jd}| dddd} t| j|}t|j|jspt|j| jkstt| | d S )Nr   rD   rg   rh   )r   r   r   )rk   rl   r&   r'   rH   r   r   r   r   ZravelZreshapeshaper   r   r   rK   rn   r   ro   rV   ri   r   rp   )r   r   r3   rr   rL   r   r0   r0   r1   ru     s"     ru   c                 C  s   ddl m} | |  S )Nr   )_all_cftime_date_types)Zxarray.tests.test_coding_timesr   )rU   r   r0   r0   r1   cftime_date_type  s    r   c                   s\   t t fddtddD }t ddddddddddddg}t|j|jjj d S )	Nc                   s   g | ]} d |dqS )i     r0   ).0r5   r   r0   r1   
<listcomp>#  s     z test_seasons.<locals>.<listcomp>rZ      r   r   r   r   )	r&   r'   r   rl   ranger   r   rK   r   )r   r   r   r0   r   r1   r      s&    r   c              	   C  s>   t | dddd| ddddg| dddd| ddddggS )NrZ   r      r   )r&   r'   r   r0   r0   r1   cftime_rounding_dataarray9  s
    r   use_daskFTc              	   C  s   dd l m} d}tj|dddd|ddddg|dddd|ddddggdd}|rddi}tdd | |j|}W 5 Q R X ||}t|j	|j
st|j|jkstn| j|}t|| d S )	Nr   rz   rZ   r   ry   r   dim_0r   )rk   rl   r&   r'   r   r   rK   ry   rn   r   ro   rV   ri   r   r   r   r   rr   r   rL   ri   r   r0   r0   r1   test_cftime_floor_accessorC  s"    
r   c              	   C  s   dd l m} d}tj|dddd|ddddg|dddd|ddddggdd}|rddi}tdd	 | |j|}W 5 Q R X ||}t|j	|j
st|j|jkstn| j|}t|| d S )
Nr   rz   rZ   r      r|   r   r   r   )rk   rl   r&   r'   r   r   rK   r|   rn   r   ro   rV   ri   r   r   r0   r0   r1   test_cftime_ceil_accessord  s"    
r   c              	   C  s   dd l m} d}tj|dddd|ddddg|dddd|ddddggdd}|rddi}tdd | |j|}W 5 Q R X ||}t|j	|j
st|j|jkstn| j|}t|| d S )	Nr   rz   rZ   r   r~   r   r   r   )rk   rl   r&   r'   r   r   rK   r~   rn   r   ro   rV   ri   r   r   r0   r0   r1   test_cftime_round_accessor  s"    
r   )-
__future__r   Znumpyr   Zpandasr#   rI   Zxarrayr&   Zxarray.testsr   r   r   r   r   r   r	   r
   r   Z_CFTIME_CALENDARSr   r   rU   r%   r   r   r   r   rN   r   r   r   r   r   r   r   r   r   ru   r   r   r   r   r   r   r0   r0   r0   r1   <module>   s   $ q^	



	
	 
	
  

	