U
    sVc`                     @   sl   d dl Zd dlZd dlm  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 G dd dZdS )    N)CategoricalIndex	DataFrameIndexNaTSeries
date_rangeoffsetsc                   @   s  e Zd Zejdejddg fejddej	dgfgdd Z
d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dd Zdd Zejdddgd d! Zejd"ddd#d$gd%d& Zd'd( Zejd)d*d+d,d-gd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC Z dDdE Z!dFdG Z"dHdI Z#dJdK Z$dLdM Z%e&j'dNdO Z(ej)dPdQdR Z*dSdT Z+dUdV Z,dWdX Z-dYdZ Z.d[d\ Z/e&j'd]d^ Z0ejd_ej1d`ejj2dadbdcddgejjdeedfddedfddgdhe3j4dfddide3j5djddide3j6dd#ddej1e3j7ddgdkdlejj2dadbdcej1e3j7ddgdmdlejj2dadbdcgdndo dpej)dqdrds Z8dtdu Z9dvdw Z:dxS )yTestDataFrameShiftzinput_data, output_data)r   )shape)         ?c                 C   s\   |j dd ||d}|tk	r@||tt|tddd}n||dd}t|| d S )NF)write   Zfloat64)indexcolumnsdtyper   )Zsetflagsshiftr   rangelentmassert_equal)selfZ
input_dataZoutput_dataframe_or_seriesresultexpected r   I/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/frame/methods/test_shift.pytest_shift_non_writable_array   s    
z0TestDataFrameShift.test_shift_non_writable_arrayc                 C   sz   |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| d S )N   1/1/2000Hperiodsfreqr   r   Z5Tr$   Z4H   )
nprandomrandnr   r   r   r   assert_index_equalr   ZHour)r   r   tsr   Z	exp_indexr   r   r   test_shift_mismatched_freq*   s    
 z-TestDataFrameShift.test_shift_mismatched_freqobjr   z1/1/2011   r!   r"   Z2017r#   r%   
shift_sizer   r   r   c                 C   s&   |t k	r| }|||k	s"td S N)r   to_framer   AssertionError)r   r.   r1   r   r   r   r   test_shift_always_copy8   s    z)TestDataFrameShift.test_shift_always_copyc              	   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 )N   zfill_value must be a scalarmatchr   
fill_valuer   )r   r   )r   r   pytestraises
ValueErrorr   r3   r(   arangeastypeobjectr4   iloc)r   serdfZobj_serr   Zobj_dfr   r   r   !test_shift_object_non_scalar_fillG   s    
z4TestDataFrameShift.test_shift_object_non_scalar_fillc                 C   s<   t ||t}|d}|td}t || d S )Nr   )r   get_objr?   intr   floatr   )r   datetime_framer   r,   shiftedr   r   r   r   test_shift_intY   s    
z!TestDataFrameShift.test_shift_intr   Zint32int64c           	      C   sb   t ddd}tjd|d}|||d}|d }|j|d}|tjdddd	g|d}t|| d S )
Nz
2000-01-01r   r0   r   r%   r   r   r   r6   )r   r(   r>   r   nanr   r   )	r   r   r   r   Zarrs1pr   r   r   r   r   test_shift_32bit_take_   s    z(TestDataFrameShift.test_shift_32bit_taker#   r6   r'   c                 C   sP   |t |td|ddd}|dd}|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   r   )r   r#   r   r.   r   r   r   r   r   test_shift_preserve_freqstrk   s    z.TestDataFrameShift.test_shift_preserve_freqstrc                 C   s   t ddddd}||}|d}t|| t|dks@t|d}tg|tj	
 d d	  }||}t|| t|dkst|d
}|tj	
 dd  ttg }||}t|| t|dkstd S )N
2016-11-06r!   
   
US/Easternr$   r#   tzr   datetime64[ns, US/Eastern]r   	   r   )r   r   r   r   	get_dtyper4   r   r?   r@   valuestolist)r   r   datesr.   resZexp_valsexpr   r   r   test_shift_dst{   s    


 z!TestDataFrameShift.test_shift_dstexrR   i   ic                 C   sV   t ddddd}||}||}|tgd dd}t|| t|dksRtd S )NrQ   r!   rR   rS   rT   rV   r   )r   r   r   r   r   rY   r4   )r   r   r`   r\   r.   r]   r^   r   r   r   test_shift_dst_beyond   s    
z(TestDataFrameShift.test_shift_dst_beyondc                 C   s&   t ||}|d}t || d S Nr   )r   rE   r   r   )r   rH   r   r.   	unshiftedr   r   r   test_shift_by_zero   s    
z%TestDataFrameShift.test_shift_by_zeroc                 C   s   |d }| d}t|j|j | d}t|d | | d}t|j|j | d}t|d | | d d}t| j|jd d  | d d}t| j|jd d  d S )NAr   )r   r   r+   r   assert_series_equalassert_numpy_array_equaldropnarZ   )r   rH   rB   rI   Zshifted_serrd   Zunshifted_serr   r   r   
test_shift   s     



 zTestDataFrameShift.test_shiftc           
      C   s   t ||}t }|jd|d}t|t|ks6t|jd|d}t || |jddd}t || |jd|d}t || |jd }||d  }	|t	krt j
||||	dd nt |j| |j|	  d S )Nr   r&   rg   Br   F)Zcheck_names)r   rE   r   BDayr   r   r4   r   r   r   rh   xsZassert_almost_equalat)
r   rH   r   r.   offsetrI   rd   shifted2dZ	shifted_dr   r   r   test_shift_by_offset   s    
z'TestDataFrameShift.test_shift_by_offsetc           
   	   C   s@  t  }t ||}|d}|d}t |j|j t |j|j |tkrt |jd d df 	 j
|jd ddf j
 n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 |	| d S )	Nr   r   rl   zdoes not match PeriodIndex freqr7   Dr&   )r   makePeriodFramerE   r   r+   r   r   ri   rA   rj   rZ   r   rm   r   r;   r<   r=   )
r   r   psrI   rd   rq   shifted3msgZshifted4Zshifted5r   r   r   test_shift_with_periodindex   s.    

 z.TestDataFrameShift.test_shift_with_periodindexc                 C   sf   t tjdd}tjt tj|jdgd|jd d ddf gddd}|j	ddd	}t
|| d S )
NrR   r   r   r   r   rt   Tr   Zignore_indexaxisr}   r   r(   r)   randpdconcatrL   r   rA   r   r   assert_frame_equalr   rC   r   r   r   r   r   test_shift_other_axis   s    (z(TestDataFrameShift.test_shift_other_axisc                 C   sf   t tjdd}tjt tj|jdgd|jd d ddf gddd}|j	dd	d
}t
|| d S )NrR   r   r   r{   rt   Tr   r|   r   r~   r   r   r   r   r   test_shift_named_axis   s    (z(TestDataFrameShift.test_shift_named_axisc                 C   sR   |j }t }|jd|dd}t|t|ks2t|jd|dd}t|| d S )Nr   r   )r$   r}   rg   )Tr   rm   r   r   r4   r   r   )r   rH   r.   rp   rI   rd   r   r   r   test_shift_other_axis_with_freq  s    z2TestDataFrameShift.test_shift_other_axis_with_freqc                 C   sZ   t ddgddgd}|d}t tjtjtjgddggtdddgd}t|| d S )	NTF)highlowr   r   r   r   r   )r   r   r(   arrayrL   r@   r   r   )r   rC   rsxpr   r   r   test_shift_bool  s    
z"TestDataFrameShift.test_shift_boolc                 C   sD  |ddddgdd}| d d}t|jd d |  d	d
 }||}| d}t|j|j t||j	d d dkst
t|j	d d ||j	dd  kst
| d}t|j|j t||j	dd  dkst
t|j	dd  ||j	d d kst
t|j||j t|j||j d S )Nabcrr   categoryr   r   rt   c                 S   s   | j jd S rc   )_mgrarrays)Zndframer   r   r   get_cat_values   s    zBTestDataFrameShift.test_shift_categorical1.<locals>.get_cat_valuesrX   r   )r   r   r   rA   rj   r+   r   r(   allcodesr4   
categories)r   r   r.   rtr   catZsp1Zsn2r   r   r   test_shift_categorical1  s    
 *
 ,z*TestDataFrameShift.test_shift_categorical1c                 C   sf   t dddgdd}t dddgdd}t||d	}|d
}t|d
|d
d	}t|| d S )Nr   r   r   r   r   rf   rl   C)ZoneZtwor   )r   r   r   r   r   )r   rM   s2rC   r   r   r   r   r   test_shift_categorical4  s    
z)TestDataFrameShift.test_shift_categoricalc              	   C   s   |ddddgdd}|j ddd}|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 )Nr   r   r   rr   r   r   r   r9   F)r   Zorderedz9Cannot setitem on a Categorical with a new category \(f\)r7   f)r   r   ZCategoricalr   r   r;   r<   	TypeError)r   r   r,   r]   r   ry   r   r   r   !test_shift_categorical_fill_value=  s    
 
 z4TestDataFrameShift.test_shift_categorical_fill_valuec                 C   s2  t dddd}|ddddd	g|d
}|dddddg|d
}|jddd}t|| |dddddg|d
}|jddd}t|| |dddg}|jddd}t|t|kst|dddddg|d
}|dddddg|d
}|jddd}t|| |dddddg|d
}|jddd}t|| d S )Nr    r   r!   r"   r   g       @g      @g      @g      @r%   g        r   r9   r   r6   r   r'   )r   r   r   r   rY   r4   )r   r   Zdtir,   r^   r   r]   r.   r   r   r   test_shift_fill_valueL  s$    z(TestDataFrameShift.test_shift_fill_valuec                 C   s&   t dg i}|d}t|| d S )Nfoort   )r   r   r   r   )r   rC   r   r   r   r   test_shift_emptyh  s    
z#TestDataFrameShift.test_shift_emptyc                 C   s  t tddgd dddddgg}tjdd}d }|r<t}g }|D ]~}t| |d}tdD ]L}d}	tj	||	d0 |j
d d |f |d |j
d d |f< W 5 Q R X q`td|_|| qD|d   }
t|
ttdd	d
d t|d |d  t|d |d  d S )Nr   r   r   ra   r   z&will attempt to set the values inplacer7   r      rK   r   )listr   r(   r)   r*   DeprecationWarningr   copyr   assert_produces_warningrA   r   r   appendZisnasumrh   r   r   )r   using_array_managerZcolumn_listsdatawarnrI   r   rC   sry   Znullsr   r   r   test_shift_duplicate_columnso  s$    "6
z/TestDataFrameShift.test_shift_duplicate_columnsc                 C   s$  t tjjddd}t tjjddd}tj||gdd}|sRt|jjdksRt	|j
ddd}|jddd	ddgdd}tj|jd d d df< |j|_t|| tj||gdd}|st|jjdkst	|j
d
dd}|jdddddgdd}tj|jd d d
d f< |j|_t|| d S )N  r   r6   sizer   r   r   r~   r   rt   r   rX   r6   r'   )r   r(   r)   randintr   r   r   r   blocksr4   r   takerL   rA   r   r   r   )r   r   df1df2df3r   r   r   r   r    test_shift_axis1_multiple_blocks  s$    z3TestDataFrameShift.test_shift_axis1_multiple_blocksc                 C   sz  t tjjddd}t tjjddd}tj|jd dddf |jd dd d f gdd}|jd	dtd
d}t	|j
jd	kst|jddd
dgdd}td
|jd d d d	f< |j|_t|| tj|jd dddf |jd dd d f gdd}|jddtd
d}t	|j
jd	ks0t|jd	dddgdd}td
|jd d dd f< |j|_t|| d S )Nr   r   r   r   r'   r   r6   r~   r   r   r}   r:   rt   rX   )r   r(   r)   r   r   r   rA   r   int_r   r   r   r4   r   r   r   r   )r   r   r   r   r   r   r   r   r   .test_shift_axis1_multiple_blocks_with_int_fill  s     66zATestDataFrameShift.test_shift_axis1_multiple_blocks_with_int_fillz)ignore:tshift is deprecated:FutureWarningc              	   C   s  t  }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 t ||}	|	d}|d}t |	| |	j|	j
jd}t || t|jtt|j
|jd}
t |
|}
|
d}|	d}|j
d |_
t || |d}t ||
 |	jd	d
dg }d}tjt	|d |  W 5 Q R X d S )Nr   rt   rl   r&   .Given freq M does not match PeriodIndex freq Br7   Mr   r   r      6Freq was not set in the index hence cannot be inferred)r   rv   rE   tshiftr   r   rm   r;   r<   r=   r   r$   r   rZ   r   r(   asarrayr   
_with_freqrA   )r   rH   r   rw   rI   rd   rq   rx   ry   dtobjinferred_tsr   no_freqr   r   r   test_tshift  sD    






zTestDataFrameShift.test_tshiftc              	   C   s.   t ||}t t |  W 5 Q R X d S r2   )r   rE   r   FutureWarningr   )r   rH   r   r   r   r   r   test_tshift_deprecated  s    z)TestDataFrameShift.test_tshift_deprecatedc                 C   st   t  }t ||}|jddd}|jddd}t || |jdd}t || |jt d}t || d S )Nr   inferr&   rt   rl   )r   rv   rE   r   r   r   rm   )r   r   rw   rI   rd   rq   rx   r   r   r   'test_period_index_frame_shift_with_freq  s    z:TestDataFrameShift.test_period_index_frame_shift_with_freqc           	      C   s   t ||}|jddd}|jddd}t || |j|jjd}t || t|jtt	
|j|jd}t ||}|jddd}|jddd}|jd |_t || |jddd}t || d S )Nr   r   r&   rt   r   )r   rE   r   r   r   r$   r   rZ   r   r(   r   r   r   )	r   rH   r   r   rI   rd   rq   r   r   r   r   r   #test_datetime_frame_shift_with_freq
  s$    z6TestDataFrameShift.test_datetime_frame_shift_with_freqc              	   C   sB   t  }t ||}d}tjt|d |jdd W 5 Q R X d S )Nr   r7   r   r&   )r   rv   rE   r;   r<   r=   r   )r   r   rw   ry   r   r   r   -test_period_index_frame_shift_with_freq_error!  s
    z@TestDataFrameShift.test_period_index_frame_shift_with_freq_errorc              	   C   sJ   t ||}|jdddg }d}tjt|d |jdd W 5 Q R X d S )Nr   r   r   r   r7   r   r&   )r   rE   rA   r;   r<   r=   r   )r   rH   r   r   r   ry   r   r   r   )test_datetime_frame_shift_with_freq_error(  s
    z<TestDataFrameShift.test_datetime_frame_shift_with_freq_errorc              	   C   sh  t tdtdg}tt |jddd}W 5 Q R X t td|d g}t|| | }tt |jddd}W 5 Q R X | }t	|| t
||d}|  tt |jdddd}W 5 Q R X t
tdtdg|d d}t	|| t
d|i}||d	< t|jjd
ks2t|jdddd}t
ddg|d d}t	|| d S )N
2020-01-01z
2020-01-02r   r   r9   rf   rl   r   rf   rl   r   )r   r   Z	Timestampr   r   r   r   rh   r3   r   r   _consolidate_inplacer   r   r   r4   )r   rB   r   r   rC   r   r   r   r   r   )test_shift_dt64values_int_fill_deprecated1  s,    "z<TestDataFrameShift.test_shift_dt64values_int_fill_deprecatedas_catTz1_can_hold_element incorrectly always returns True)reason)ZmarksFvalsr   z
US/Pacific)r#   rU   ru   z	2020 DaysZInt64r   ZFloat32c                 C   s
   t | jS r2   )strr   )xr   r   r   <lambda>v      zTestDataFrameShift.<lambda>)idsz"ignore:Index.ravel.*:FutureWarningc           	      C   s   t |}|r|d}td|i}|jdddd}tdddgi}t|| t||d}|  |jdddd}t|d ddgd}t|| td|i}||d< t|jj	d	kst
|jdddd}t|| d S )
Nr   rf   rt   r   r   r   r   rl   r   )r   r?   r   r   r   r   r   r   r   r   r4   )	r   r   r   rB   rC   r   r   r   r   r   r   r   (test_shift_dt64values_axis1_invalid_fillU  s"    '
z;TestDataFrameShift.test_shift_dt64values_axis1_invalid_fillc                 C   s   t dddg}tddgddgdd	gd
|d d |d}|jdd}ttjtjgddgddgd
|d d |d}t|| |jddd}ttjtjgtjtjgddgd
|d d |d}t|| d S )Nr   r   r   r   r6   r   r'   r   r   )r   r   r   rt   r{   r~   )r   r   r   r(   rL   r   r   )r   cirC   r   r   r   r   r   $test_shift_axis1_categorical_columns  s(     
  
 
z7TestDataFrameShift.test_shift_axis1_categorical_columnsc                 C   sX   t tjdd}|jddd d}|tj }t|| |jddd d}t|| d S )Nr   r6   r   r   r   i)r   r(   r)   r   r   rL   r   r   )r   rC   rI   r   rq   r   r   r   test_shift_axis1_many_periods  s    
z0TestDataFrameShift.test_shift_axis1_many_periodsN);__name__
__module____qualname__r;   markZparametrizer(   emptyZonesrL   r   r-   r   r>   r   r   r5   rD   rJ   rO   rP   r_   rb   re   rk   rs   rz   r   r   r   r   r   r   r   r   r   r   r   tdZ&skip_array_manager_not_yet_implementedr   filterwarningsr   r   r   r   r   r   r   paramZxfailr   Zperiod_rangeZtimedelta_rangeZinterval_ranger   r   r   r   r   r   r   r   r	      s   $



	 
		


3	
#

r	   )Znumpyr(   r;   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r   r   r   Zpandas._testingZ_testingr   r	   r   r   r   r   <module>   s   $	