U
    Cvfp                  	   @  s   d dl mZ d dlZd dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ edZejd	d
dddgdd Zejddddgejdddgdd Zeejddddddgdd Zed d! Zd"d# Zejd$d%d&d'd(d)d*gd+d, Zed-d. ZdS )/    )annotationsN)	DataArray
infer_freq)convert_calendarinterp_calendar)
date_range)assert_identical)requires_cftimecftimez source, target, use_cftime, freq)standardnoleapND)r   proleptic_gregorianTr   )r   all_leapNr   )r   r   F4Hc           
      C  s   t tdd|| dddd}t tdd|jdd|id	}t|||d
}|jjj|ksXt	| dkrttdd|||d}n.tdd|||d}tdd|||d}	|
|	}tj|j| d S )N
2004-01-01
2004-12-31freqcalendartimer   dimsnamer      r   Zcoords)
use_cftimer   )r   r   r   z
2004-02-28z
2004-03-01)r   r   nplinspacesizer   r   dtr   AssertionErrorappendtestingassert_array_equal)
sourcetargetr   r   srcda_srcconvZexpected_timesZexpected_times_pre_leapZexpected_times_post_leap r+   B/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_calendar_ops.pytest_convert_calendar   sH    
  
r-   zsource,target,freq)r   360_dayr   )r.   r   r   )r   r.   r   align_ondateyearc                 C  sr  t tdd|| dddd}t tdd|jdd|id	}t|||d
}|jjj|ksXt	|dkrtj
|jjdd jjddddddddddddg nz|dkrtj
|jjdd jjddddddddddddg n8tj
|jjdd jjddddddddddddg | dkrL|dkrL|dkr@|jdksnndsnt	n"|dkrd|jdksnndsnt	d S )Nr   
2004-12-30r   r   r   r   r   r   r   r/   r0   M      r.      r1   r   ih  i  ig  i  )r   r   r   r   r    r   r   r!   r   r"   r$   r%   Zresamplelastday)r&   r'   r   r/   r(   r)   r*   r+   r+   r,   test_convert_calendar_360_daysA   s:    
  $r:   )r   r   r   )r   r   r   )r   r   r4   )r.   r   r   )r   r.   r   c           
      C  s   t td| dkrdnd|| dddd}t td	d
|jdd|id}t||tjdd}t|j|ksht	td|dkrxdnd||d}tj
|j| |dkrt||dd}|j|j|j d}|  st	|j|jd}	t|	| d S )Nr   r.   r   r2   r   r   r   r   r   r   r   r0   )missingr/   r4   r3   )r   r   r   r   r    r   nanr   r   r"   r$   r%   ZiselisinZisnullallselr   )
r&   r'   r   r(   r)   outexpectedZout_without_missingZexpected_nanZexpected_not_nanr+   r+   r,   test_convert_calendar_missingm   s<    
  rB   c               	   C  s   t tdddddddd} tjtd	d
 t| d W 5 Q R X tjtdd
 t| d W 5 Q R X t| ddd}tjtd	d
 t|d W 5 Q R X t dddgddd}tjtdd
 t|ddd W 5 Q R X d S )N
0000-01-01z
0000-12-31r   r   r   r   r   r   z%Argument `align_on` must be specifiedmatchr.   1Source time coordinate contains dates with year 0r   r1   r3   r   r      xrI   z+Coordinate x must contain datetime objects.Zdim)r   r   pytestraises
ValueErrorr   )src_nlZsrc_360dar+   r+   r,   test_convert_calendar_errors   s$     rP   c                  C  s4   t tdddddddd} t| d	}| |ks0td S )
Nz
2000-01-01   Z6HF)periodsr   r   r   r   r   r   )r   r   r   r"   )r(   r@   r+   r+   r,   #test_convert_calendar_same_calendar   s    
rS   zsource,target)r   r   )r   r   )r   r.   )r.   r   )r   r   )r.   r   c                 C  s   t tddd| dddd}t tddd|dddd}t tdd	|jdd|id
}t||}t|j|j tj	|
 d	d | dkstd S )Nr   z
2004-07-30r   r   r   r   r   r   r   r   rG   )r   r   r   r   r    r   r   r   r$   Zassert_almost_equalmaxminr"   )r&   r'   r(   Ztgtr)   r*   r+   r+   r,   test_interp_calendar   s&      
rV   c               
   C  s   t dgd ddtdddddid	} td
dddd}tjtdd t| | W 5 Q R X t dddgddd}|d }tjtdd t||dd W 5 Q R X d S )Nr   d   r   r   rC   ZMSr   )rR   r   r   r   z
0001-01-01z
0001-12-30r   r   rF   rD   r   rG   rH   rI   r   z;Both 'source.x' and 'target' must contain datetime objects.rJ   )r   r   rK   rL   rM   r   )rN   Ztgt_360Zda1Zda2r+   r+   r,   test_interp_calendar_errors   s(       rX   )
__future__r   Znumpyr   rK   Zxarrayr   r   Zxarray.coding.calendar_opsr   r   Zxarray.coding.cftime_offsetsr   Zxarray.testingr   Zxarray.testsr	   Zimportorskipr
   markZparametrizer-   r:   rB   rP   rS   rV   rX   r+   r+   r+   r,   <module>   sj   
	
)#
"


