U
    f/e3                     @   sr   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mZ d dlmZ d dlmZ G dd dZdS )    N)NullFrequencyError)DatetimeIndexIndexNaTSeriesTimedeltaIndex
date_rangeoffsets)BDayc                   @   sf  e Zd Zejdeedge	ddddee
de	dddd	gejd
dddgdd Zejdededgdd Zdd Zdd Zdd Zdd Zdd Zejdd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zejd4ddd5d6gd7d8 Zejd9ej d:d;g fej!d<d;ej"d=gfgd>d? Z#d@S )A	TestShiftser   z1/1/2011   Hperiodsfreq2017r   index
shift_sizer         c                 C   s   | ||k	std S N)shiftAssertionError)selfr   r    r   J/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/series/methods/test_shift.pytest_shift_always_copy   s    z TestShift.test_shift_always_copymove_by_freqZ1DZ1minc                 C   s0   t tdtdddd}|j|d|k	s,td S )Nr   r   r   r   r   )r   ranger   r   r   )r   r!   r   r   r   r   test_datetime_shift_always_copy#   s    z)TestShift.test_datetime_shift_always_copyc              	   C   s  | d}| d}t|j|j t|j|j t| j|jd d  t }|j d|d}|j d|d}t|| |j d|d}t|| |j ddd}|j ddd}t|| | d}t|| t	 }| d}| d}t|j|j t|j|j t| j|jd d  | dd}| dt }t|| t|| dd d}t
jt|d |j dd W 5 Q R X |j ddd}	t||	 |j dt d}
t|
|	 td	d
d}dD ]V}ttjd
|d|d}|jd }|j |d}ttjddddg|d}t|| qttdd
dddd}||   }ttdgdgd  dd}t|| ttdd
dddd}d}t
jt|d ||  W 5 Q R X d S )Nr   r"   r   Bz.Given freq D does not match PeriodIndex freq BmatchD
2000-01-01r   r   )Zint32Zint64dtyper   r      z2000-01-01 09:00:00
US/Eastern)r   tzZfoonamer   z1 days   ZCETzFDatetimeArray subtraction must have the same timezones or no timezones)r   tmassert_index_equalr   Zassert_numpy_array_equaldropnavaluesr
   assert_series_equalmakePeriodSeriespytestraises
ValueErrorr   r   nparangeilocnanr   	TypeError)r   datetime_seriesshifted	unshiftedoffsetpsshifted2shifted3msgZshifted4Zshifted5r   r,   s1presultexpectedsexps2r   r   r   
test_shift)   sl    

 



 zTestShift.test_shiftc              	   C   s   t tjdtddddd}|jddd}|jjddd}t|j| |jdd	d}|jt	
d
 }t|j| tdddg}d}tjt|d |d W 5 Q R X d S )Nr   1/1/2000r   r   r   r   Z5Tr"   Z4Hr2   r*   z
2000-01-02z
2000-01-04zCannot shift with no freqr'   )r   r<   randomZrandnr   r   r   r3   r4   r	   ZHourr   r9   r:   r   )r   tsrK   Z	exp_indexidxrH   r   r   r   test_shift2w   s    
 zTestShift.test_shift2c                 C   s   t dddddgtdddd	d
}t dddddgtdddd	d
}|jddd}t|| t dddddgtdddd	d
}|jddd}t|| t dddg}|jddd}|j|jkstd S )N      ?g       @g      @g      @g      @rQ   r   r   r   r   g        r   Z
fill_valuer   r-   r   )r   r   r   r3   r7   r,   r   )r   rS   rN   rK   resr   r   r   test_shift_fill_value   s&       zTestShift.test_shift_fill_valuec              	   C   s   t ddddgdd}|jddd}t tjddddgddddgd	d
}t|| d}tjt|d |jddd W 5 Q R X d S )Nabcdcategoryr+   r   rW   F)
categoriesZorderedz>'fill_value=f' is not present in this Categorical's categoriesr'   f)	r   r   pdZCategoricalr3   Zassert_equalr9   r:   r@   )r   rS   rX   rL   rH   r   r   r   !test_shift_categorical_fill_value   s    
 
 z+TestShift.test_shift_categorical_fill_valuec                 C   s  t ddddd}t|}|d}t|| |jdks<t|d}tg|t	j
 d d	  }t|}t|| |jdkst|d
}|t	j
 dd  ttg }t|}t|| |jdkstdD ]:}||}ttgd dd}t|| |jdkstqd S )Nz
2016-11-06r   
   r.   )r   r   r/   r   zdatetime64[ns, US/Eastern]r   	   r   )rc   i   ir+   )r   r   r   r3   r7   r,   r   r   astypeobjectr6   tolist)r   datesrM   rX   Zexp_valsrN   exr   r   r   test_shift_dst   s(    


 
zTestShift.test_shift_dstz)ignore:tshift is deprecated:FutureWarningc              	   C   sX  t  }|d}|d}t || |jdd}t || |jt d}t || d}tjt|d |jdd W 5 Q R X |d}|d}t || |j|jj	d}t || t
|jtt|jdd	}|d}|d}	|	jd |	_t ||	 |d}t || |d
ddg }
d}tjt|d |
  W 5 Q R X d S )Nr   r%   r&   r"   .Given freq M does not match PeriodIndex freq Br'   MrS   r0   r   r      6Freq was not set in the index hence cannot be inferred)r3   r8   tshiftr7   r
   r9   r:   r;   r   r   r   r6   r   r<   asarray
_with_freq)r   rA   rE   rB   rC   rF   rG   rH   inferred_tsrL   no_freqr   r   r   test_tshift   s>    



  


zTestShift.test_tshiftc              	   C   s"   t t |  W 5 Q R X d S r   )r3   assert_produces_warningFutureWarningrq   )r   rA   r   r   r   test_tshift_deprecated   s    z TestShift.test_tshift_deprecatedc                 C   sf   t  }|jddd}|jddd}t || |jdd}t || |jt d}t || d S )Nr   inferr"   r%   r&   )r3   r8   r   r7   r
   )r   rE   rB   rC   rF   rG   r   r   r   (test_period_index_series_shift_with_freq   s    z2TestShift.test_period_index_series_shift_with_freqc                 C   s   |j ddd}|j ddd}t|| |j |jjd}t|| t|jtt	|jdd}|j ddd}|j ddd}|j
d |_t|| |j ddd}t|| d S )Nr   rz   r"   r%   rS   r0   )r   r3   r7   r   r   r   r6   r   r<   rr   rs   )r   rA   rB   rC   rF   rt   rL   r   r   r   $test_datetime_series_shift_with_freq  s       z.TestShift.test_datetime_series_shift_with_freqc              	   C   s6   t  }d}tjt|d |jdd W 5 Q R X d S )Nrm   r'   rn   r"   )r3   r8   r9   r:   r;   r   )r   rE   rH   r   r   r   .test_period_index_series_shift_with_freq_error  s    z8TestShift.test_period_index_series_shift_with_freq_errorc              	   C   s<   |dddg }d}t jt|d |jdd W 5 Q R X d S )Nr   r   ro   rp   r'   rz   r"   )r9   r:   r;   r   )r   rA   ru   rH   r   r   r   *test_datetime_series_shift_with_freq_error$  s    z4TestShift.test_datetime_series_shift_with_freq_errorc                 C   s4   | t}|d}| td}t|| d S )Nr   )rg   intr   floatr3   r7   )r   rA   rS   rB   rL   r   r   r   test_shift_int*  s    

zTestShift.test_shift_intc              	   C   s   t td}tjtdd |jdg d W 5 Q R X | }tjtdd |jdtdd W 5 Q R X |	t
}|jdi d}|d i kst| }|jdi d}|jd i kstd S )Nr-   zfill_value must be a scalarr'   r   rW   r   )r   r   )r   r#   r9   r:   r;   r   Zto_framer<   r=   rg   rh   r   r>   )r   r   ZdfZobj_serrK   Zobj_dfr   r   r   !test_shift_object_non_scalar_fill0  s    
z+TestShift.test_shift_object_non_scalar_fillc                 C   s*  t ddddgdd}t|jd d |dd  |d}t|j|j t	|j
jd d dksrtt	|j
jd d |j
jdd  kst|d	}t|j|j t	|j
jd	d  dkstt	|j
jd
d  |j
jd d	 kstt|j
j|j
j t|j
j|j
j d S )NrZ   r[   r\   r]   r^   r+   r%   r   re   r   )r   r3   r7   r>   r   r5   r4   r   r<   allr6   codesr   r_   )r   rM   Zsp1Zsn2r   r   r   test_shift_categoricalB  s    &
*
*z TestShift.test_shift_categoricalc              	   C   sb   t tdtdg}tt |jddd}W 5 Q R X t td|d g}t|| d S )Nz
2020-01-01z
2020-01-02r   r   rW   )r   ra   Z	Timestampr3   rw   rx   r   r7   )r   r   rK   rL   r   r   r   )test_shift_dt64values_int_fill_deprecatedU  s
    z3TestShift.test_shift_dt64values_int_fill_deprecatedr   r-   r2   c                 C   sP   t t|td|ddd}|dd}t t|td|ddd}t|| d S )Nz2016-1-1 00:00:00r   r   r   r   Z2Hz2016-1-1 02:00:00)r   r#   r   r   r3   r7   )r   r   r   rK   rL   r   r   r   test_shift_preserve_freqstr_  s    z%TestShift.test_shift_preserve_freqstrzinput_data, output_data)r   )shape)r   rV   c                 C   s6   |j dd t|d}t|dd}t|| d S )NF)writer   Zfloat64r+   )Zsetflagsr   r   r3   r7   )r   Z
input_dataZoutput_datarK   rL   r   r   r   test_shift_non_writable_arrayo  s    z'TestShift.test_shift_non_writable_arrayN)$__name__
__module____qualname__r9   markZparametrizer   r<   r=   r   r#   r    ra   Z	Timedeltar$   rP   rU   rY   rb   rl   filterwarningsrv   ry   r{   r|   r}   r~   r   r   r   r   r   emptyZonesr?   r   r   r   r   r   r      sD   
N

-

$r   )Znumpyr<   r9   Zpandas.errorsr   Zpandasra   r   r   r   r   r   r   r	   Zpandas._testingZ_testingr3   Zpandas.tseries.offsetsr
   r   r   r   r   r   <module>   s   $	