U
    Cvf                     @  s4  d dl mZ d dlZd dlmZ d dlmZ d dlZd dl	Z
d dlZd dlmZ d dlZd dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d	Z erd dl!Z!ee!j"ed
krdZ ndZ dgddZ#de#ddfde#dddfde#dddfde#ddddfde#ddddfde#dddddfde#dddddfde#dddddfde#ddddddfd e#ddddddfd!e#ddddddfd"e#dddddd#d$fd%e#dddddd#d$fd&e#dddddd#d$fd'Z$ej%j&d(e'e$( e'e$) d)d*d+ Z*d,d-d.d/d0dd1gZ+ej,e+d2d3d4 Z-ej,d5d6 Z.ej,d7d8 Z/ej,d9d: Z0ej,d;d< Z1ej,d=d> Z2ej,d?d@ Z3ej,dAdB Z4ej,dCdD Z5ej,dEdF Z6eej%&dGdHdIgdJdK Z7edLdM Z8eej%&dNdOdPdPdQdQgfdRdPdQdPdQgfdSdPdPdPdPgfdTd d d d gfdUd d d d gfdVd d d d gfdWd d d d gfgdXdY Z9edZd[ Z:ed\d] Z;ed^d_ Z<eej%&d`dadbdcdddedfgdgdh Z=edidj Z>edkdl Z?edmdn Z@eej%&dodpdqdrdsgdtdu ZAedvdw ZBedxdy ZCedzd{ ZDed|d} ZEed~d ZFedd ZGedd ZHedd ZIedd ZJdeKddddddgdZLeej%j&de'eL( e'eL) d)dd ZMedd ZNedd ZOedd ZPeej%&dddideddddedddgdd ZQeej%&dddidedddgdd ZReej%&dddidedddgdd ZSeej%&ddeddddeddddedddgdd ZTeej%&dddidedddgdd ZUeej%&dddidedddgdd ZVeej%&dddidedddgdd ZWeej%&ddeddddeddddedddgdd ZXedd ZYej,dd ZZej,dd Z[edd Z\edd Z]edd Z^edd Z_edd Z`eddÄ Zaeddń ZbeddǄ ZceddɄ Zdeej%&de+dd̜dd΄Zeeej%&dddgej%&ddddddgej%&de+dd̜ddلZfedd̜ddۄZgeej%&dddddddddgdd̜ddZhedd Zieej%&de+dd̜ddZjedd Zkeej%j&deldedPdg eledPdgddgd)dd Zmeej%&de+dd̜ddZneej%&de+dd Zoeej%&de+dd Zpeej%&de+dd Zqeej%&de+dd̜ddZreej%&de+dd Zseej%&de+dd  Ztedd Zueej%&dܐdedPdgdd̜ddZvedd̜ddZwedd̜dd	Zxeej%&d
ddddde fde fdgdd Zyeej%&d
ddddde fde fdgdd Zzeej%&ddQdgdd Z{eej%&dʐdd-dgej%&dܐddgdd Z|eej%&ddQde  dfdde  d fd!d"e  d fgd#d$ Z}eej%&d%dd&d'gej%&ddQd(dd'd!gd)d* Z~eej%&dd+d,d'gd-d. Zed/d0 Zeej%&ded1d2 Zeej%&deej%&d3ddgd4d5 Zeej%&ded6d7 Zeej%&dd/d-gd8d9 Zeej%jd:d;d<d= Zeej%&dܐd>d?d@gej%&ddAdBdCgdDdE Zeej%&ddAdBdCgdFdG Zej,dHdI ZedJdK ZedLdM ZedNdO ZedPdQ ZedRdS ZedTdU ZedVdW Zeej%&dܐdXdYdZd[d\d]dd^d_dd`dadbgej%&de+dcdd Zeej%&de+dedf ZdS (h      )annotationsN	timedelta)dedent)Version)CFTimeIndex_parse_array_of_cftime_strings_parse_iso8601_with_reso_parsed_string_to_boundsassert_all_valid_date_typeparse_iso8601_like)assert_array_equalassert_identical
has_cftimerequires_cftime)_ALL_CALENDARS_NON_STANDARD_CALENDARS_all_cftime_date_types z1.5.2standardZ	gregorianc                 C  s   t | |||||dS )Nyearmonthdayhourminutesecond)dictr    r   A/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_cftimeindex.py	date_dict,   s         r    1999)r   Z199901Z01)r   r   z1999-01Z19990101)r   r   r   z
1999-01-01Z19990101T12Z12)r   r   r   r   z1999-01-01T12z1999-01-01 12Z19990101T1234Z34)r   r   r   r   r   z1999-01-01T12:34z1999-01-01 12:34Z19990101T123456Z56r   z1999-01-01T12:34:56z1999-01-01 12:34:56)r   r   z
month-dashr   zday-dashr   z	hour-dashzhour-space-separatorr   zminute-dashzminute-space-separatorr   zsecond-dashzsecond-space-separator)stringexpected)idsc              	   C  sF   t | }||ksttt t | d  t | d  W 5 Q R X d S )N3z.3)r   AssertionErrorpytestraises
ValueError)r"   r#   resultr   r   r   test_parse_iso8601_likeb   s
    r+   365_day360_dayjulianZall_leapZ366_dayproleptic_gregorian)paramsc                 C  s   t  | j S N)r   param)requestr   r   r   	date_type{   s    r4   c                 C  s4   | ddd| ddd| ddd| dddg}t |S )N      r   r4   datesr   r   r   index   s    



r:   c                 C  s4   | ddd| ddd| ddd| dddg}t |S )Nr6   r5   r7   r8   r   r   r   monotonic_decreasing_index   s    



r;   c                 C  s   | dddg}t |S Nr5   r7   r8   r   r   r   length_one_index   s    r=   c                 C  s   t jddddg| gdgdS )Nr5   r6         timeZcoordsZdims)xr	DataArrayr:   r   r   r   da   s    rE   c                 C  s   t jddddg| dS Nr5   r6   r>   r?   rD   )pdSeriesrD   r   r   r   series   s    rI   c                 C  s   t jddddg| dS rF   )rG   	DataFramerD   r   r   r   df   s    rK   c                 C  s,   dd l }| |jkrdS | |jkr$dS dS d S )Nr            )cftimeDatetimeAllLeapDatetime360Dayr4   rO   r   r   r   feb_days   s    

rS   c                 C  s   dd l }| |jkrdS dS d S )Nr   rM      )rO   rQ   rR   r   r   r   dec_days   s    
rU   c                 C  s8   | ddd| ddd| ddd| dddg}t |ddS )Nr5   r6   foonamer7   r8   r   r   r   index_with_name   s    



rY   )rX   expected_name)barr[   )NrV   c                 C  s   t | |dj}||kstd S )NrW   )r   rX   r&   )rY   rX   rZ   r*   r   r   r   test_constructor_with_name   s    r\   c              	   C  s   dd l }| |jkr4t| ddd|dddg}n t| ddd|dddg}tt t| W 5 Q R X tt  ttd| dddg W 5 Q R X tt| ddd| dddg d S )Nr   r5   r6   )	rO   DatetimeNoLeapnparrayrP   r'   r(   	TypeErrorr   )r4   r:   rO   Zmixed_date_typesr   r   r   test_assert_all_valid_date_type   s    
$ra   )fieldr#   r   r5   r6   r   r   r   r   r   microsecondc                 C  s   t | |}t|| d S r1   )getattrr   )r:   rb   r#   r*   r   r   r    test_cftimeindex_field_accessors   s    
re   c                 C  s"   | j }dd | D }t|| d S )Nc                 S  s   g | ]
}|j qS r   )Zdayofyr.0dater   r   r   
<listcomp>   s     z7test_cftimeindex_dayofyear_accessor.<locals>.<listcomp>)Z	dayofyearr   r:   r*   r#   r   r   r   #test_cftimeindex_dayofyear_accessor   s    rk   c                 C  s"   | j }dd | D }t|| d S )Nc                 S  s   g | ]
}|j qS r   )Zdayofwkrf   r   r   r   ri     s     z7test_cftimeindex_dayofweek_accessor.<locals>.<listcomp>)Z	dayofweekr   rj   r   r   r   #test_cftimeindex_dayofweek_accessor  s    rl   c                 C  s"   | j }dd | D }t|| d S )Nc                 S  s   g | ]
}|j qS r   )Zdaysinmonthrf   r   r   r   ri     s     z;test_cftimeindex_days_in_month_accessor.<locals>.<listcomp>)Zdays_in_monthr   rj   r   r   r   'test_cftimeindex_days_in_month_accessor  s    rm   )r"   	date_argsreso)r!   )  r5   r5   r   )Z199902)rp   r6   r5   r   )Z19990202)rp   r6   r6   r   )Z19990202T01)rp   r6   r6   r5   r   )Z19990202T0101)rp   r6   r6   r5   r5   r   )Z19990202T010156)rp   r6   r6   r5   r5   8   r   c                 C  s6   | | }|}t | |\}}||ks&t||ks2td S r1   )r	   r&   )r4   r"   rn   ro   Zexpected_dateZexpected_resoZresult_dateZresult_resor   r   r   test_parse_iso8601_with_reso  s
    rr   c                 C  s`   | ddddddd}| ddd}| dd|dddd	}t | d
|\}}||ksPt||ks\td S )Nr6   
         r5         ;   ?B r   r
   r&   r4   rU   parsedexpected_startexpected_endresult_start
result_endr   r   r    test_parse_string_to_bounds_year#  s    r   c                 C  s`   | ddddddd}| ddd}| dd|dddd}t | d	|\}}||ksPt||ks\td S )
Nr6   rs   rt   ru   r5   rw   rx   ry   r   rz   )r4   rS   r|   r}   r~   r   r   r   r   r   %test_parse_string_to_bounds_month_feb-  s    r   c                 C  sX   | ddd}| ddd}| dd|dddd}t | d|\}}||ksHt||ksTtd S )Nr6   rv   r5   rw   rx   ry   r   rz   r{   r   r   r   %test_parse_string_to_bounds_month_dec7  s    r   )ro   ex_start_argsex_end_args)r   )r6   r6   rs   )r6   r6   rs   rw   rx   rx   ry   )r   )r6   r6   rs   rt   )r6   r6   rs   rt   rx   rx   ry   )r   )r6   r6   rs   rt   r6   )r6   r6   rs   rt   r6   rx   ry   )r   )r6   r6   rs   rt   r6   ru   )r6   r6   rs   rt   r6   ru   ry   c           	      C  sP   | ddddddd}| | }| | }t | ||\}}||ks@t||ksLtd S )Nr6   rs   rt   ru   @ rz   )	r4   ro   r   r   r|   r}   r~   r   r   r   r   r   (test_parsed_string_to_bounds_sub_monthlyA  s    r   c              	   C  s.   t t t| d| ddd W 5 Q R X d S )Nar5   )r'   r(   KeyErrorr
   r4   r   r   r   #test_parsed_string_to_bounds_raisesW  s    r   c              	   C  s~   | d}|tddkst| | ddd}|dks:t| d}|tddksVttjtdd | d W 5 Q R X d S )N0001r   r6   r5   z
0001-02-01Z1234match)get_locslicer&   r'   r(   r   )r4   r:   r*   r   r   r   test_get_loc]  s    

r   c                 C  s   t tjt dk rd}nd}|jd| }d}||ks:t|jd| }d}||ksXt|j| d	d
d	df| }d}||kst|j| d	d
d	df| }d}||kstd S )N1.3getitemr   r   leftr   rightr6   r5   r>   )r   r   )r   r   r   rG   __version__Zget_slice_boundr&   )r4   r:   	kind_argsr*   r#   r   r   r   test_get_slice_boundl  s    r   c                 C  s   t tjt dk rd}nd}|jd| }d}||ks:t|jd| }d}||ksXt|j| d	d
d	df| }d}||kst|j| d	d
d	df| }d}||kstd S )Nr   r   r   r   r   r6   r   r?   r5   r>   )r   r   )r   r   r   )r4   r;   r   r*   r#   r   r   r   %test_get_slice_bound_decreasing_index  s2    
 
 r   c                 C  s   t tjt dkrd}nd}|jd
| }d}||ks:t|jd| }d}||ksXt|j| dd	ddf| }d}||kst|j| dd	ddf| }d}||kstd S )Nr   r   r   r   r   r   r   r5   r>   )r   r   )r   r   r   )r4   r=   r   r*   r#   r   r   r   %test_get_slice_bound_length_one_index  s    r   c                 C  s6   t jdg| gdgd}|jtddd}t|| d S )Nr5   r@   rA   r   r@   rB   rC   selr   r   )r=   rE   r*   r   r   r   "test_string_slice_length_one_index  s    r   c                 C  s   |j | kstd S r1   )r4   r&   r4   r:   r   r   r   test_date_type_property  s    r   c                 C  sP   d|kst d|kst d|ks$t | ddd|ks8t | ddd|ksLt d S )N
0001-01-01r   Z0003r5   r>   )r&   r   r   r   r   test_contains  s
    r   c                 C  s:   |  dd}tjddgddggdgd}t|| d S )	Nz
time.monthr@   r?   rt   r5   r6   r   rA   )groupbysumrB   rC   r   )rE   r*   r#   r   r   r   test_groupby  s    r   r   r   
0001-12-30TF)r"   zstring-slicez	bool-listsel_argc                 C  s:   t jddg|d d gdgd}| j|d}t|| d S )Nr5   r6   r@   rA   r   rB   rC   r   r   )rE   r:   r   r#   r*   r   r   r   test_sel_string_or_list  s     r   c                 C  sz   t jddg|d d gdgd}| jt|ddd|dddd}t|| | j|ddd|dddgd}t|| d S )Nr5   r6   r@   rA   rv   rM   r   r   )rE   r:   r4   r#   r*   r   r   r   test_sel_date_slice_or_list  s
     "
 r   c                 C  s8   t dj|d d}| j|dddd}t|| d S )Nr5   r   r   rB   rC   assign_coordsr   r   rE   r4   r:   r#   r*   r   r   r   test_sel_date_scalar  s    r   c                 C  s:   t dj|d d}| j|ddddd}t|| d S )Nr?   r>   r     r5   nearest)r@   methodr   r   r   r   r   test_sel_date_distant_date  s    r   
sel_kwargsr   r   F   days)r   Z	tolerancei@w c                 C  s|   t dj|d d}| jf d|dddi|}t|| t dj|d d}| jf d|dddi|}t|| d S )Nr6   r5   r   r@   r?   r>      r   rE   r4   r:   r   r#   r*   r   r   r   test_sel_date_scalar_nearest  s    

r   padim  c                 C  s|   t dj|d d}| jf d|dddi|}t|| t dj|d d}| jf d|dddi|}t|| d S )Nr6   r5   r   r@   r?   r   r   r   r   r   r   test_sel_date_scalar_pad  s    
r   Zbackfillc                 C  s|   t dj|d d}| jf d|dddi|}t|| t dj|d d}| jf d|dddi|}t|| d S )Nr>   r6   r   r@   r5   r?   r   r   r   r   r   r   test_sel_date_scalar_backfill*  s    
r      c              	   C  s6   t t" | jf d|dddi| W 5 Q R X d S )Nr@   r5      r'   r(   r   r   rE   r4   r   r   r   r   %test_sel_date_scalar_tolerance_raises9  s    
r   c                 C  s  t jddg|d |d ggdgd}| jf d|ddd|dddgi|}t|| t jddg|d |d ggdgd}| jf d|ddd|dddgi|}t|| t jddg|d |d ggdgd}| jf d|ddd|dddgi|}t|| d S )	Nr6   r5   r@   rA   r>   r?   rv   r   r   r   r   r   r   test_sel_date_list_nearestG  s    $(
$(
$(r   c                 C  sZ   t jddg|d |d ggdgd}| jf d|ddd|dddgi|}t|| d S )Nr6   r5   r@   rA   r>   r?   r   r   r   r   r   test_sel_date_list_padZ  s    $(r   c                 C  sZ   t jddg|d |d ggdgd}| jf d|ddd|dddgi|}t|| d S )Nr>   r6   r@   rA   r5   r?   r   r   r   r   r   test_sel_date_list_backfille  s    $(r   c              	   C  sB   t t. | jf d|ddd|dddgi| W 5 Q R X d S )Nr@   r5   r6   r   r   r   r   r   r   #test_sel_date_list_tolerance_raisesp  s    
r   c                 C  sj   t dj|d d}| jdd}t|| t jddg|d d gdgd}| jddgd}t|| d S )Nr5   r   r   r6   r@   rA   )rB   rC   r   Ziselr   )rE   r:   r#   r*   r   r   r   	test_isel~  s    
 r   c                 C  s   | dddgS r<   r   r   r   r   r   scalar_args  s    r   c              
   C  s>   dt ddt d dt | ddd| dddt d | dddgS )Nr   r   r   r5   rv   rM   )r   r   r   r   r   
range_args  s    r   c                 C  sT   |D ]}| | dkst qtjddg|d d d}|D ]}| | |s8t q8d S Nr5   r6   rD   )r&   rG   rH   equalsrI   r:   r   r   argr#   r   r   r   test_indexing_in_series_getitem  s
    r   c                 C  sX   |D ]}| j | dkstqtjddg|d d d}|D ]}| j | |s:tq:d S r   )locr&   rG   rH   r   r   r   r   r   test_indexing_in_series_loc  s
    r   c                 C  sL   d}| j d |ksttjddg|d d d}| j d d |sHtd S )Nr5   r   r6   rD   )ilocr&   rG   rH   r   )rI   r:   r#   r   r   r   test_indexing_in_series_iloc  s    r   c                 C  sB   t jddtjtjg| d}|jd d }| }||s>td S )Ng              ?rD   r6   )rG   rH   r^   nanr   Zdropnar   r&   )r:   rI   r#   r*   r   r   r   test_series_dropna  s    r   c                 C  sv   t jdg|d d}|D ]}| j| }||stqt jddg|d d d}|D ]}| j| }||sTtqTd S Nr5   r   rW   r6   rD   )rG   rH   r   r   r&   rJ   )rK   r:   r   r   r#   r   r*   r   r   r   test_indexing_in_dataframe_loc  s    

r   c                 C  st   t jdg|d d}| jd }||s,t||s:tt jddg|d d d}| jd d }||sptd S r   )rG   rH   r   r   r&   rJ   )rK   r:   r#   r*   r   r   r   test_indexing_in_dataframe_iloc  s    
r   c                 C  s   t jddg| ddd| dddggdgd}t jddg| dd	d| dd
dggdgd}t j||gdd}t|jd  tstd S )Nr          @r5   r6   r@   rA   g      @g      @r>   r?   )Zdim)rB   rC   concat
isinstanceZxindexesZto_pandas_indexr   r&   )r4   Zda1Zda2rE   r   r   r   test_concat_cftimeindex  s        r   c                  C  s   t g } | jd kstd S r1   )r   r4   r&   rD   r   r   r   test_empty_cftimeindex  s    r   c                 C  sh   | j }|ddd|ddd|ddd|dddg}t|}| tdd }||sVtt|tsdtd S Nr5   r6   r   r4   r   r   r   r&   r   r:   r4   expected_datesr#   r*   r   r   r   test_cftimeindex_add  s    



r   calendarNone)returnc                 C  s\   t jdd| d}tdd tdD }|| }|dd}||sJtt|t	sXtd S )N2000r   periodsr   c                 S  s   g | ]}t d dqS r6   r   r   rg   _r   r   r   ri     s     z7test_cftimeindex_add_timedeltaindex.<locals>.<listcomp>r6   D
rB   cftime_rangerG   TimedeltaIndexrangeshiftr   r&   r   r   r   r   Zdeltasr*   r#   r   r   r   #test_cftimeindex_add_timedeltaindex  s    r   nr   g      ?z
freq,units)r   r   )Hr   )Tmin)Sr   )Lmsc                 C  sN   t jdd|dd}|t| | }|| |}||s<tt|tsJtd S )Nr   r>   r   )r   r   freq)	rB   r   rG   Z	Timedeltar   r   r&   r   r   )r   r   Zunitsr   r   r*   r#   r   r   r   test_cftimeindex_shift_float  s
    r   c               	   C  s:   t jdddd} tjtdd | dd W 5 Q R X d S )	Nr   r>   r   r   r   z5Could not convert to integer offset at any resolutionr         @us)rB   r   r'   r(   r)   r   )r   r   r   r   test_cftimeindex_shift_float_us  s     r  r   ZASAZYSYQSQMSMc              	   C  s:   t jdddd}tjtdd |d|  W 5 Q R X d S )Nr   r>   r   r   zunsupported operand typer   r   rB   r   r'   r(   r`   r   )r   r   r   r   r   5test_cftimeindex_shift_float_fails_for_non_tick_freqs"  s    r	  c                 C  sh   | j }|ddd|ddd|ddd|dddg}t|}tdd|  }||sVtt|tsdtd S r   r   r   r   r   r   test_cftimeindex_radd*  s    



r
  c                 C  s\   t jdd| d}tdd tdD }|| }|dd}||sJtt|t	sXtd S )Nr   r   r   c                 S  s   g | ]}t d dqS r   r   r   r   r   r   ri   =  s     z7test_timedeltaindex_add_cftimeindex.<locals>.<listcomp>r6   r   r   r   r   r   r   #test_timedeltaindex_add_cftimeindex9  s    r  c                 C  sv   | j }|ddd|ddd|ddd|dddg}t|}| tdd }|tdd }||sdtt|tsrtd S r   r   r   r   r   r   test_cftimeindex_sub_timedeltaD  s    



r  otherr?   z1d-arrayzscalar-arrayc                 C  sp   | j }|ddd|ddd|ddd|dddg}t|}| tdd }|| }||s^tt|tsltd S r   r   )r:   r  r4   r   r#   r*   r   r   r   $test_cftimeindex_sub_timedelta_arrayT  s    



r  c                 C  s^   t jdd| d}|dd}|| }tdd tdD }||sJtt|tjsZtd S )Nr   r   r   r6   r   c                 S  s   g | ]}t d dqS r   r   r   r   r   r   ri   o  s     z4test_cftimeindex_sub_cftimeindex.<locals>.<listcomp>)	rB   r   r   rG   r   r   r   r&   r   )r   r   br*   r#   r   r   r    test_cftimeindex_sub_cftimeindexi  s    r  c                 C  sV   t jdd| d}||d  }tdd tdD }||sBtt|tjsRtd S )Nr   r   r   r   c                 S  s   g | ]}t |d qS r   r   rg   ir   r   r   ri   y  s     z8test_cftimeindex_sub_cftime_datetime.<locals>.<listcomp>rB   r   rG   r   r   r   r&   r   r   r   r*   r#   r   r   r   $test_cftimeindex_sub_cftime_datetimet  s
    r  c                 C  sV   t jdd| d}|d | }tdd tdD }||sBtt|tjsRtd S )Nr   r   r   r   c                 S  s   g | ]}t | d qS r  r   r  r   r   r   ri     s     z8test_cftime_datetime_sub_cftimeindex.<locals>.<listcomp>r  r  r   r   r   $test_cftime_datetime_sub_cftimeindex~  s
    r  c              	   C  s@   t jdd| d}tjtdd |ddd|  W 5 Q R X d S )Nr   r   r   zdifference exceedsr   r5   )rB   r   r'   r(   r)   r4   r   r   r   r   r   ,test_distant_cftime_datetime_sub_cftimeindex  s    r  c                 C  s\   t jdd| d}tdd tdD }|| }|dd}||sJtt|t	sXtd S )Nr   r   r   c                 S  s   g | ]}t d dqS r   r   r   r   r   r   ri     s     z7test_cftimeindex_sub_timedeltaindex.<locals>.<listcomp>r   r   r   r   r   r   #test_cftimeindex_sub_timedeltaindex  s    r  c                 C  sN   t jdd| d}t|j}|| }|| }||s:tt|tjsJtd S )Nr   r   r   )	rB   r   rG   Indexvaluesr   r&   r   r   )r   r   r  r#   r*   r   r   r   .test_cftimeindex_sub_index_of_cftime_datetimes  s    r  c              	   C  s6   t jdd| d}tjtdd |d  W 5 Q R X d S )Nr   r   r   zunsupported operandr   r5   )rB   r   r'   r(   r`   r  r   r   r   $test_cftimeindex_sub_not_implemented  s    r  c              	   C  s(   t t tdd|   W 5 Q R X d S )Nr5   r   )r'   r(   r`   r   rD   r   r   r   test_cftimeindex_rsub  s    r   r   c                 C  sf   | j }|ddd|ddd|ddd|dddg}t|}| d|}||sTtt|tsbtd S )Nr5   r>   r6   )r4   r   r   r   r&   r   )r:   r   r4   r   r#   r*   r   r   r   test_cftimeindex_shift  s    



r!  c               	   C  s4   t jddd} tt | dd W 5 Q R X d S )Nr   r>   r   r   r   r  rD   r   r   r    test_cftimeindex_shift_invalid_n  s    r#  c               	   C  s4   t jddd} tt | dd W 5 Q R X d S )Nr   r>   r"  r5   r  rD   r   r   r   #test_cftimeindex_shift_invalid_freq  s    r$  )r   r#   )noleapr%  )r,   r%  )r-   r-   )r.   r.   )r/   r/   c                 C  s"   t jdd| d}|j|kstd S )Nr   r>   startr   r   )rB   r   r   r&   )r   r#   r:   r   r   r   "test_cftimeindex_calendar_property  s    r(  c                 C  s<   t jdd| d}| }d| d|ks,td|ks8tdS )z4Test that cftimeindex has calendar property in repr.r   r>   r&  z calendar=''z(2000-01-01 00:00:00, 2000-01-02 00:00:00NrB   r   __repr__r&   )r   r#   r:   repr_strr   r   r   test_cftimeindex_calendar_repr  s    r-  r   (   c                 C  s,   t jd| d}| }d|  |ks(tdS )z3Test that cftimeindex has periods property in repr.r   r'  r   z length=Nr*  )r   r:   r,  r   r   r   test_cftimeindex_periods_repr  s    r0  r%  r   c                 C  s2   t jdd| |d}| }d|  d|ks.tdS )z5Test that cftimeindex has frequency property in repr.r   r>   )r'  r   r   r   z, freq='r)  Nr*  )r   r   r:   r,  r   r   r   test_cftimeindex_freq_in_repr  s    r1  zperiods,expectedzhCFTimeIndex([2000-01-01 00:00:00, 2000-01-02 00:00:00],
            dtype='object', length=2, calendar='z', freq=None)zCFTimeIndex([2000-01-01 00:00:00, 2000-01-02 00:00:00, 2000-01-03 00:00:00,
             2000-01-04 00:00:00],
            dtype='object', length=4, calendar='z', freq='D')e   aP  CFTimeIndex([2000-01-01 00:00:00, 2000-01-02 00:00:00, 2000-01-03 00:00:00,
             2000-01-04 00:00:00, 2000-01-05 00:00:00, 2000-01-06 00:00:00,
             2000-01-07 00:00:00, 2000-01-08 00:00:00, 2000-01-09 00:00:00,
             2000-01-10 00:00:00,
             ...
             2000-04-01 00:00:00, 2000-04-02 00:00:00, 2000-04-03 00:00:00,
             2000-04-04 00:00:00, 2000-04-05 00:00:00, 2000-04-06 00:00:00,
             2000-04-07 00:00:00, 2000-04-08 00:00:00, 2000-04-09 00:00:00,
             2000-04-10 00:00:00],
            dtype='object', length=101, calendar='c                 C  s,   t jd| dd}t|}|t|ks(tdS )zITest that cftimeindex.__repr__ is formatted similar to pd.Index.__repr__.r   r   r'  r   r   N)rB   r   r   reprr&   )r   r#   r:   r   r   r    test_cftimeindex_repr_formatting  s    #r5  display_widthP   d   r>   c              	   C  s   t jd| d}td}t j|dr | }|d}t|D ]P\}}t||ksntt| d| d| |dkr>|d| d| ks>tq>W 5 Q R X dS )	z?Test that cftimeindex is sensitive to OPTIONS['display_width'].r   r/  zCFTimeIndex()r6  
 r   N)rB   r   lenZset_optionsr+  split	enumerater&   )r   r6  r:   Zlen_intro_strr,  Zsplittedr  sr   r   r   &test_cftimeindex_repr_formatting_width4  s    
(r?     2   c                 C  sD   t jddd}t jd| d}| }| }t|t|k s@td S )Nr   r2  r/  )rB   r   r+  r;  r&   )r   Z	index_101Zindex_periodsZindex_101_repr_strZindex_periods_repr_strr   r   r   !test_cftimeindex_repr_101_shorterF  s
    rB  c                  C  s   ddl m}  tddgddgg}t| ddd| ddd	g| ddd
| dddgg}t|| }tj|| td}t| ddd}t|| }tj|| d S )Nr   )r]   
2000-01-01z
2000-01-02z
2000-01-03z
2000-01-04r   r5   r6   r>   r?   )rO   r]   r^   r_   r   testingr   )r]   stringsr#   r*   r   r   r   "test_parse_array_of_cftime_stringsP  s    


rF  c                 C  sN   d}t jdd| d}tjddd}t||}||}||sJtd S )Nz
%Y%m%d%H%Mr   r   r   r"  )rB   r   rG   
date_ranger  strftimer   r&   )r   Zdate_formatZ	cf_valuesZ	dt_valuesr#   r*   r   r   r   test_strftime_of_cftime_arrayf  s    
rI  unsafec              	   C  s   t jdd| d}tjddd}| tkrN|sNtjtdd | }W 5 Q R X n|j|d}|	|sht
tj|| t|tjst
d S )Nr   r   r   r"  znon-standardr   )rJ  )rB   r   rG   rG  r   r'   ZwarnsRuntimeWarningto_datetimeindexr   r&   r^   rD  r   r   ZDatetimeIndex)r   rJ  r:   r#   r*   r   r   r   test_to_datetimeindexq  s    rM  c              	   C  s6   t jdd| d}tjtdd |  W 5 Q R X d S )Nr   r   r   r   rB   r   r'   r(   r)   rL  r   r:   r   r   r   "test_to_datetimeindex_out_of_range  s    rP  c              	   C  s6   t jdd| d}tjtdd |  W 5 Q R X d S )Nz
2001-02-28r6   r   Z29r   rN  rO  r   r   r   test_to_datetimeindex_feb_29  s    rQ  z1https://github.com/pandas-dev/pandas/issues/24263)reasonc                  C  s:   t jdddd} tj| g}|dtddks6td S )Nz
2001-01-01r8  r-   r   z2001-01r   rM   )rB   r   rG   Z
MultiIndexZfrom_arraysr   r   r&   )r:   Zmindexr   r   r   test_multiindex  s    rS  Z3663SZ33TZ2Hfloorceilroundc                 C  sR   t jdddd}t||| }tjdddd}t|||  }||sNtd S )N2000-01-02T01:03:51rs   1777Sr   )rG   rG  rd   rB   r   rL  r   r&   )r   r   r#   r*   r   r   r   +test_rounding_methods_against_datetimeindex  s
    rY  c              	   C  s<   t jdddd}tjtdd t|| d W 5 Q R X d S )NrW  rs   rX  r   Zfixedr   r  )rB   r   r'   r(   r)   rd   )r   r:   r   r   r   "test_rounding_methods_invalid_freq  s    rZ  c                 C  s@   t | ddddddd| ddddddd| ddddddd	gS )
Nr5   rx   iX@ r>   r   i!    rt   i )rB   r   r   r   r   r   rounding_index  s    r\  c                 C  s\   |  d}t|ddddddd|ddddddd|dddddddg}||sXtd S )Nr   r5   r6   r   r>   r[  )rU  rB   r   r   r&   r\  r4   r*   r#   r   r   r   	test_ceil  s    
r^  c                 C  s\   |  d}t|ddddddd|ddddddd|dddddddg}||sXtd S )Nr   r5   rx   r   r>   r[  rt   )rT  rB   r   r   r&   r]  r   r   r   
test_floor  s    
r_  c                 C  s\   |  d}t|ddddddd|ddddddd|dddddddg}||sXtd S )Nr   r5   r6   r   r>   r[  rt   )rV  rB   r   r   r&   r]  r   r   r   
test_round  s    
r`  c                 C  sH   t | ddd| dddg}|j}dtddg }tj|| d S )Ni  r5   r6   l    `;P r   )rB   r   asi8r^   r_   rD  r   )r4   r:   r*   r#   r   r   r   	test_asi8  s    rb  c               
   C  sN   ddl } | j}t|ddddddd	g}|j}td
g}tj|| dS )z)Test that asi8 conversion is truly exact.r   Ni)  r?   r@  r>      -   r   l   "vl)	rO   ZDatetimeProlepticGregorianrB   r   ra  r^   r_   rD  r   )rO   r4   r:   r*   r#   r   r   r   test_asi8_distant_date  s    re  c                  C  s   t jdddd} t | dks"tt t | dks:ttjdddd}t |dks\tt t |dkstttjdddd}t |dkstt t |dkstd S )NrC  r>   r   r   Z1Dr3  )rB   r   
infer_freqr&   rC   rG   rG  Ztimedelta_range)Zcf_indxZpd_indxZ
pd_td_indxr   r   r   test_infer_freq_valid_types  s    rg  c               	   C  s>  t jtdd ttdddg W 5 Q R X tjdddd	} t jtd
d tt| | g W 5 Q R X t jtdd t| d d  W 5 Q R X t| tddddg d kst	t| tddddg d kst	t| tdddg d kst	tjdddd	} t| tdddg d ks:t	d S )Nz"must contain datetime-like objectsr   r   r5   r6   z
1990-02-03r?   r  r   z
must be 1Dz(Need at least 3 dates to infer frequencyr>   r  )
r'   r(   r)   rB   rf  rC   r   r^   r_   r&   )indxr   r   r   test_infer_freq_invalid_inputs  s     $$$ri  z	300AS-JANzA-DECzAS-JULz2AS-FEBzQ-NOVz3QS-DECZ4MZ7DZ30HZ5TZ40Sc                 C  s,   t jdd| |d}t |}|| ks(td S )NrC  r>   r   r   r   )rB   r   rf  r&   )r   r   rh  outr   r   r   test_infer_freq   s    
rl  c                 C  s6   t jddd| d}tt|}||k s2td S )NrC  r>   r   rj  )rB   r   pickleloadsdumpsallr&   )r   idxZidx_pklr   r   r   test_pickle_cftimeindex:  s    rr  )NNNNNN)
__future__r   rm  datetimer   textwrapr   Znumpyr^   ZpandasrG   r'   Zpackaging.versionr   ZxarrayrB   Zxarray.coding.cftimeindexr   r   r	   r
   r   r   Zxarray.testsr   r   r   r   Zxarray.tests.test_coding_timesr   r   r   Zstandard_or_gregorianrO   r   r    ZISO8601_LIKE_STRING_TESTSmarkZparametrizelistr  keysr+   Z_CFTIME_CALENDARSZfixturer4   r:   r;   r=   rE   rI   rK   rS   rU   rY   r\   ra   re   rk   rl   rm   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZSEL_STRING_OR_LIST_TESTSr   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   r  r	  r
  r  r  r_   r  r  r  r  r  r  r  r  r   r!  r#  r$  r(  r-  r0  r1  r5  r?  rB  rF  rI  rM  rP  rQ  ZxfailrS  rY  rZ  r\  r^  r_  r`  rb  re  rg  ri  rl  rr  r   r   r   r   <module>   s                  0















	






	
	
		












	










	
	






	

	
$			
 	
