U
    *if^                     @   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dd Zejdddd d!g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d4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#e$j%dBdC Z&ej'dDdEdF Z(dGdH Z)dIdJ Z*dKdL Z+dMdN Z,dOdP Z-e$j%dQdR Z.ejdSej/dTejj0dUdVdWdXgejjdYedZddedZdd[d\e1j2dZdd]de1j3d^dd]de1j4dd ddej/e1j5ddgd_d`ejj0dUdVdWej/e1j5ddgdad`ejj0dUdVdWgdbdc ddej'dedfdg Z6dhdi Z7e$j%djdk Z8dlS )m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   X/home/mars/bis/venv/lib/python3.8/site-packages/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_intc           	      C   sl   t ddd}dD ]V}tjd|d}|||d}|d }|j|d}|tjddd	d
g|d}t|| qd S )Nz
2000-01-01r   r0   )Zint32int64r   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D ]>}||}|tgd dd}t|| t|dkstqd S )Nz
2016-11-06r!   
   z
US/Eastern)r$   r#   tzr   zdatetime64[ns, US/Eastern]r   	   r   )rQ   i   ir   )r   r   r   r   	get_dtyper4   r   r?   r@   valuestolist)r   r   datesr.   resZexp_valsexpexr   r   r   test_shift_dst{   s(    


 
z!TestDataFrameShift.test_shift_dstc                 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dropnarW   )r   rH   rB   rI   Zshifted_serr_   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&   rb   Br   F)Zcheck_names)r   rE   r   BDayr   r   r4   r   r   r   rc   ZxsZassert_almost_equalat)
r   rH   r   r.   offsetrI   r_   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   rg   zdoes not match PeriodIndex freqr7   Dr&   )r   makePeriodFramerE   r   r+   r   r   rd   rA   re   rW   r   rh   r   r;   r<   r=   )
r   r   psrI   r_   rk   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 )
NrQ   r   r   r   r   rn   Tr   Zignore_indexaxisrw   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 )NrQ   r   r   ru   rn   Tr   rv   r   rx   ry   r~   r   r   r   test_shift_named_axis   s    (z(TestDataFrameShift.test_shift_named_axisc                 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crl   categoryr   r   rn   c                 S   s   | j jd S r^   )_mgrarrays)Zndframer   r   r   get_cat_values  s    zBTestDataFrameShift.test_shift_categorical1.<locals>.get_cat_valuesrT   r   )r   r   r   rA   re   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   ra   rg   C)onetwor   )r   r   r   r   r}   )r   rM   s2rC   r   r   r   r   r   test_shift_categorical&  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   rl   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,   rZ   r   rs   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   rV   r4   )r   r   Zdtir,   r[   r   rZ   r.   r   r   r   test_shift_fill_value>  s$    z(TestDataFrameShift.test_shift_fill_valuec                 C   s&   t dg i}|d}t|| d S )Nfoorn   )r   r   r   r}   )r   rC   r   r   r   r   test_shift_emptyZ  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}g }|D ]`}t| |d}tdD ].}|jd d |f |d |jd d |f< qTtd|_	|
| q8|d   }t|ttdddd	 t|d |d  t|d |d  d S )
Nr   r   r   rU   r   r      rK   r   )listr   r(   r)   r*   r   copyrA   r   r   appendZisnasumr   rc   r   r}   )r   Zcolumn_listsdatarI   r   rC   sZnullsr   r   r   test_shift_duplicate_columnsa  s    ",
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   rx   r   rn   r   rT   r6   r'   )r   r(   r)   randintr{   r|   r   r   blocksr4   r   takerL   rA   r   r   r}   )r   using_array_managerdf1df2df3r   r   r   r   r    test_shift_axis1_multiple_blocksw  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   rx   r   r   rw   r:   rn   rT   )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   rn   rg   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   rp   rE   tshiftr   r   rh   r;   r<   r=   r   r$   r   rW   r   r(   asarrayr   
_with_freqrA   )r   rH   r   rq   rI   r_   rk   rr   rs   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   assert_produces_warning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&   rn   rg   )r   rp   rE   r   r   r   rh   )r   r   rq   rI   r_   rk   rr   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&   rn   r   )r   rE   r   r   r   r$   r   rW   r   r(   r   r   r   )	r   rH   r   r   rI   r_   rk   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   rp   rE   r;   r<   r=   r   )r   r   rq   rs   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   rs   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   ra   rg   r   ra   rg   r   )r   r{   	Timestampr   r   r   r   rc   r3   r}   r   _consolidate_inplacer   r   r   r4   )r   rB   r   r   rC   r   r   r   r   r   )test_shift_dt64values_int_fill_deprecated  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#   rR   ro   z	2020 DaysZInt64r   ZFloat32c                 C   s
   t | jS r2   )strr   )xr   r   r   <lambda>b      zTestDataFrameShift.<lambda>)Zidsz"ignore:Index.ravel.*:FutureWarningc                 C   s   |rt jjtd}|j| t|}|r4|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 )N)r<   r   ra   rn   r   r   r   r   rg   r   )r;   markxfailNotImplementedErrornodeZ
add_markerr   r?   r   r   r   r}   r   r   r   r   r4   )r   r   r   r   requestr   rB   rC   r   r   r   r   r   r   r   (test_shift_dt64values_axis1_invalid_fillA  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   rn   ru   rx   )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)   rz   r   rL   r   r}   )r   rC   rI   r   rk   r   r   r   test_shift_axis1_many_periods  s    
z0TestDataFrameShift.test_shift_axis1_many_periodsN)9__name__
__module____qualname__r;   r   Zparametrizer(   emptyZonesrL   r   r-   r   r>   r   r   r5   rD   rJ   rO   rP   r]   r`   rf   rm   rt   r   r   r   r   r   r   r   r   r   r   tdZ&skip_array_manager_not_yet_implementedr   filterwarningsr   r   r   r   r   r   r   paramr   r{   Zperiod_rangeZtimedelta_rangeZinterval_ranger   r   r   r   r   r   r   r   r	      s   $

 		


3	
#

 r	   )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   $	