U
    ¾mœdYX  ã                   @   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(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-ej dZej.d[ejj/d\d]�d^�d_g¡ejjd`edadd�edaddbdc�e0j1dadddd�e0j2dedddd�e0j3dd#dd�ej.e0j4ddgdfdg�ejj/d\d]�d^�ej.e0j4ddgdhdg�ejj/d\d]�d^�gdidj„ dk�dldm„ ƒƒZ5dndo„ Z6dpdq„ Z7drS )sÚ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   ú^/home/sam/Atlas/atlas_env/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s’t‚| ¡ }|jdi d�}|jd i ksºt‚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sŽt‚| d
¡}| t¡j	 
¡ dd … ttg }||ƒ}t ||¡ t |¡dksÞt‚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öÿÿÿé   iìÿÿÿc                 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rÀt 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   Z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r‚t  |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   rp   Ú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   rs   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   rz   rs   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.   ro   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¡sˆt
‚t |j	d d… ||ƒj	dd … k¡s²t
‚|  d¡}t |j|j¡ t ||ƒj	dd … dk¡sìt
‚t |j	dd … ||ƒj	d d… k¡�st
‚t |j||ƒj¡ t |j||ƒj¡ d S )NÚaÚbÚcrq   Úcategoryr   r   rs   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)ÚoneÚ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‘   rq   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   rx   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s¸t‚|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Úfoors   )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¡}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   ra   rŠ   r   é   rK   r   )Úlistr   r(   r)   r*   r   ÚcopyrA   r   r   ÚappendZisnaÚsumr   rh   r   r‚   )r   Zcolumn_listsÚdatarI   r   rC   ÚsZnullsr   r   r   Útest_shift_duplicate_columnso  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�}| d
d„ ¡}tj|jd d …d d…f< |j|_t ||¡ tj||gdd�}|sÜt|jjƒdksÜt	‚|j
ddd�}|jdddddgdd�}| dd„ ¡}tj|jd d …dd …f< |j|_t ||¡ d S )Néè  ©r   r6   ©Úsize©r   r   r   r}   r   rs   r   c                 S   s0   | j t| jd ƒdd� dddœ¡j | jdd�S )Nr   r}   rG   )r   r   ©Zset_axisr   r
   r?   r   ©rC   r   r   r   Ú<lambda>“  s
   ÿ þzETestDataFrameShift.test_shift_axis1_multiple_blocks.<locals>.<lambda>rX   r6   r'   c                 S   s0   | j t| jd ƒdd� dddœ¡j | jdd�S )Nr   r}   rG   )r6   r'   r´   rµ   r   r   r   r¶   §  s
   ÿ þ)r   r(   r)   Úrandintr€   r�   r   r“   Úblocksr4   r   ÚtakeÚpiperL   rA   r   r   r‚   )r   Zusing_array_managerÚdf1Údf2Údf3r   r   r   r   r   Ú test_shift_axis1_multiple_blocks…  s0    ÿÿ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sˆt‚|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:   rs   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_fillc                 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&   rs   rl   )r   ru   rE   r   r   r   rm   )r   r   rv   rI   rd   rp   rw   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&   rs   rŠ   )r   rE   r   r   r   r$   r   rZ   r   r(   Zasarrayr   Z
_with_freq)	r   rH   r   ÚdtobjrI   rd   rp   Zinferred_tsr   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 )Nz.Given freq M does not match PeriodIndex freq Br7   ÚMr&   )r   ru   rE   r;   r<   r=   r   )r   r   rv   rx   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   é   z6Freq was not set in the index hence cannot be inferredr7   rÂ   r&   )r   rE   rA   r;   r<   r=   r   )r   rH   r   rÄ   Zno_freqrx   r   r   r   Ú)test_datetime_frame_shift_with_freq_errorö  s
    z<TestDataFrameShift.test_datetime_frame_shift_with_freq_errorc              	   C   s   t t d¡t d¡gƒ}tjtdd�� |jddd� W 5 Q R X | ¡ }tjtdd�� |jddd� W 5 Q R X t||dœƒ}| 	¡  |jdddd	�}tddg|d
 dœƒ}t
 ||¡ td
|iƒ}||d< t|jjƒdksàt‚|jdddd	�}t
 ||¡ d S )Nú
2020-01-01z
2020-01-02zvalue should be ar7   r   r   r9   ©rf   rl   r¿   rf   rl   r   )r   r€   Ú	Timestampr;   r<   r¢   r   r3   r   Ú_consolidate_inplacer   r‚   r   r“   r”   r4   )r   rB   rC   r¼   r   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#   rU   rt   z	2020 DaysZInt64r   ZFloat32c                 C   s
   t | jƒS r2   )Ústrr   )Úxr   r   r   r¶   :  ó    zTestDataFrameShift.<lambda>)Zidsc           	      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s¾t
‚|jdddd�}t ||¡ d S )
Nr’   rf   rs   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_fill  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‘   rs   rz   r}   )r   r   r   r(   rL   r   r‚   )r   ÚcirC   r   r   r   r   r   Ú$test_shift_axis1_categorical_columnsV  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   rp   r   r   r   Útest_shift_axis1_many_periodsl  s    
z0TestDataFrameShift.test_shift_axis1_many_periodsN)8Ú__name__Ú
__module__Ú__qualname__r;   ÚmarkZparametrizer(   ÚemptyZonesrL   r   r-   r   r>   r   r   r5   rD   rJ   rO   rP   r_   rb   re   rk   rr   ry   r„   r…   r‡   rŽ   r›   r    r£   r¤   r¦   r®   r¾   ÚtdZ&skip_array_manager_not_yet_implementedrÁ   rÃ   rÅ   rÇ   rÉ   rÎ   ÚparamZxfailr€   Zperiod_rangeZtimedelta_rangeZinterval_ranger‹   rÕ   r×   rØ   r   r   r   r   r	      s¤   $þ
ýþ


	 
		+
	ÿþùþ
ÿþÿþôë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   $	