U
    NZf:X                     @   s   d dl mZ d dlZd dlZd dlmZmZ d dl	m
  mZ d dlZd dlmZmZmZmZmZ d dlmZ dZdddZG d	d
 d
ZG dd dZdS )    )ascii_lettersN)SettingWithCopyErrorSettingWithCopyWarning)	DataFrameSeries	Timestamp
date_rangeoption_contextzAA value is trying to be set on a copy of a slice from a DataFramed   c                 C   s@   t jjtt| dfd}|jdd dd |D }t|dgdS )	N   )size   )Zaxisc                 S   s    g | ]}t |d  |d  qS )r   r   )letters).0x r   S/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/indexing/test_chaining_and_caching.py
<listcomp>   s     zrandom_text.<locals>.<listcomp>r   columns)nprandomrandintlenr   sortr   )ZnobsZidxsstringsr   r   r   random_text   s    r   c                   @   s>   e Zd Zdd Zejdddgdd Zdd	 Zd
d Z	dS )TestCachingc              
   C   s   t dd  ttddgd d}d|d< |d  t| |rft  d|d jd	< W 5 Q R X nd|d jd	< |  |st	|d d	 d nt	|d d	 d W 5 Q R X d S )
Nchained_assignment   皙@Zaabb        ccr"   g(\?r   )
r	   r   r   arangereprtmraises_chained_assignment_errorilocZ_clear_item_cacheZassert_almost_equalselfusing_copy_on_writedfr   r   r   ,test_slice_consolidate_invalidate_item_cache#   s    
z8TestCaching.test_slice_consolidate_invalidate_item_cachedo_refTFc                 C   s|   dddddddg}t ||dd  |d d  td	d
}|rJ|jd  d|jd< |jd dksft|jd dksxtd S )NonetwothreeZfourZfivesixZseven      abc)r   r9   r   )r5   r9   r#   g      ?)r   r   r%   locAssertionError)r+   r/   Zcontr-   r   r   r   test_setitem_cache_updating?   s    *

z'TestCaching.test_setitem_cache_updatingc              
   C   s  t ddddgitddd}t ddddgitddd}t dddgddd	gd
}td}td}| D ]8\}}|j|||d f |d  |j|||d f< qjt|| t|d |d  t ddddgitddd}| }	| D ]h\}}||d  || |d  }
|rDt	  |
||d  ||< W 5 Q R X q|
||d  ||< q|st|| t|d |d  n t||	 t|d |	d  t ddddgitddd}| D ],\}}|j|||d f  |d 7  < qt|| t|d |d  d S )NAiX  z5/7/2014z5/9/2014)indexr   r
      i,  )CDr@   rA   )
r   r   r   Ziterrowsr:   r'   assert_frame_equalassert_series_equalcopyr(   )r+   r,   expectedoutr-   r3   ZeixixrowZout_originalvr   r   r   "test_setitem_cache_updating_slicesP   s<     2
 &z.TestCaching.test_setitem_cache_updating_slicesc                 C   s   t ddgddggddgddgd	}|d }|r>d|jksLtnd|jksLtd
|d< t|dksdtd|jksrt|d |k	stt|d dkstd S )Nr   r   r4      r7   r8   r=   B)r>   r   r   r9   )r   Z_item_cacher;   r   )r+   r,   r-   serr   r   r   (test_altering_series_clears_parent_cache|   s    "z4TestCaching.test_altering_series_clears_parent_cacheN)
__name__
__module____qualname__r.   pytestmarkparametrizer<   rJ   rN   r   r   r   r   r   "   s
   
,r   c                
   @   st  e Zd Zdd Zejjdd Zejjdd Zejjdd Z	ejjd	d
 Z
ejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd  Zd!d" Zd#d$ Zd%d& Zejd'd(ed)d*d+d(d,gigd-d. Zejd/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9S ):TestChainingc           
   	   C   s  dddddddg}dddddddg}t dt|i}|jdk}|rxt  d|j|< W 5 Q R X t|t d|i nd|j|< t|t d|i tjj|gdgd}t |}|jdk}|rt  d|j|< W 5 Q R X t|t d|i nd|j|< t|t d|i t ||d}|	 }|jdk}|rdt  d|j|< W 5 Q R X t|| n d|j|< t|t ||d t dtj
d	d
dd	gi}t dtdd	d
dd	gi}|rt  tj
|d jd< W 5 Q R X t ddd	d
dd	gi}n(tj
|d jd< t dtj
d	d
dd	gi}| }	t|	| t dtdd	d
dd	gi}|r|t  tj
|jjd< W 5 Q R X ntj
|jjd< | }	t|	| d S )Nrightlefttimeoutnoneresponse)names)rZ   Z	response1r=   barZbahfoor   )r   r   arrayrZ   r'   r(   rB   ZrecZ
fromarraysrD   nanr)   headr=   )
r+   r,   dataZmdatar-   maskZrecarraydf_originalrE   resultr   r   r   test_setitem_chained_setfault   sZ    










z*TestChaining.test_setitem_chained_setfaultc              
   C   s   t dd tddgddggtdd}ttd	d
d
tddd}| }|jd ks^t|rt	
  d|d d< W 5 Q R X t	
  d|d d< W 5 Q R X t	|| n$d|d d< d|d d< t	|| W 5 Q R X d S )Nr   raiser   r4   ABr   rK   r   int64)r   dtyper=   r   )r	   r   listr   r%   reshaperD   _is_copyr;   r'   r(   rB   )r+   r,   rE   r-   rc   r   r   r   test_detect_chained_assignment   s$      

z+TestChaining.test_detect_chained_assignmentc              	   C   sR  t ttdddtjtddtjdd}| }|jd ksDt	|rt
  d|d d< W 5 Q R X t
  d	|d d
< W 5 Q R X t
|| n|stjttd d|d d< W 5 Q R X tjttd tj|d d
< W 5 Q R X |d jd kst	nRd|d d< d	|d d
< t ddgd	dggtdd}|d d|d< t
|| d S )Nr   rj   rk   rK   r=   rL   rg   r=   r   rh   r   matchr4   ri   r   rL   float64)r   r   ranger   r^   r%   rt   rD   rn   r;   r'   r(   rB   rR   raisesr   msgr_   rl   Zastype)r+   using_array_managerr,   r-   rc   rE   r   r   r   %test_detect_chained_assignment_raises   s0    

z2TestChaining.test_detect_chained_assignment_raisesc              	   C   s   t ttdddtjtddtjdd}|rVt  d|j	d d< W 5 Q R X n(t
jttd	 d|j	d d< W 5 Q R X d S )
Nr   rj   rp   rK   rq   rg   r   r=   rr   )r   r   ru   r   r^   r%   rt   r'   r(   r:   rR   rv   r   rw   r*   r   r   r   $test_detect_chained_assignment_fails  s    
z1TestChaining.test_detect_chained_assignment_failsc              	   C   s   t dddddddgttdddd}|jd ks6t|rj|jjd	}t	  d
|| d< W 5 Q R X n4t
jttd  |jjd	}d
|| d< W 5 Q R X d S )Nr0   r1   r2   r3   r5   rj   rp   )r7   r9   o*   r9   rr   )r   r   ru   rn   r;   r7   str
startswithr'   r(   rR   rv   r   rw   r+   r,   r-   indexerr   r   r   *test_detect_chained_assignment_doc_example  s    
z7TestChaining.test_detect_chained_assignment_doc_examplec              	   C   s   t dddgdddgd}t dddgdddgd}| }|shtjttd	 d|jd
 d< W 5 Q R X |rt  d|d d
< W 5 Q R X t	|| nZ|stjttd	 d|d d
< W 5 Q R X d|jd< t	|| nd|d d
< t	|| d S )No   bbbcccr   r   r4   rq   aaarr   r   r=   )r   r=   )
r   rD   rR   rv   r   rw   r:   r'   r(   rB   )r+   rx   r,   rE   r-   rc   r   r   r   +test_detect_chained_assignment_object_dtype+  s"    

z8TestChaining.test_detect_chained_assignment_object_dtypec              	   C   sd   t dddgi}|jd ksttd2}|| t|}|d |d< |d |d< W 5 Q R X d S )Nr=   r   r   Z__tmp__picklerL   )r   rn   r;   r'   Zensure_cleanZ	to_picklepdZread_pickle)r+   r-   pathdf2r   r   r   -test_detect_chained_assignment_is_copy_pickleG  s    

z:TestChaining.test_detect_chained_assignment_is_copy_picklec                 C   s   t d}|jdddg }|jd k	s&t|jddddg }|jd k	sFt|jdd }|j|  }|jd ksrt|d tj	|d< d S )	N順 r   r   r   rK   c                 S   s   t | dkS N
   r   r   r   r   r   <lambda>a      zSTestChaining.test_detect_chained_assignment_setting_entire_column.<locals>.<lambda>r   )
r   r)   rn   r;   r   applyr:   rD   r}   lower)r+   r-   r   r   r   r   r   4test_detect_chained_assignment_setting_entire_columnS  s    zATestChaining.test_detect_chained_assignment_setting_entire_columnc                 C   sH   t d}|jdd }|j| }|jd k	s0t|d tj|d< d S )Nr   c                 S   s   t | dkS r   r   r   r   r   r   r   k  r   zKTestChaining.test_detect_chained_assignment_implicit_take.<locals>.<lambda>r   )r   r   r   r:   rn   r;   r}   r   r+   r-   r   r   r   r   ,test_detect_chained_assignment_implicit_takeg  s
    
z9TestChaining.test_detect_chained_assignment_implicit_takec                 C   s   |rt d td}|jdd }|j| }|jd k	s>t|d tj	|jd d df< |jd k	sjt|d tj	|d< |jd kstd S )Nz"_is_copy is not always set for CoWr   c                 S   s   t | dkS r   r   r   r   r   r   r   w  r   zLTestChaining.test_detect_chained_assignment_implicit_take2.<locals>.<lambda>r   )
rR   skipr   r   r   r:   rn   r;   r}   r   r   r   r   r   -test_detect_chained_assignment_implicit_take2q  s    

z:TestChaining.test_detect_chained_assignment_implicit_take2c                 C   s<   t d}|jdd }|j|df tj|j|df< d S )Nr   c                 S   s   t | dkS r   r   r   r   r   r   r     r   zATestChaining.test_detect_chained_assignment_str.<locals>.<lambda>r   )r   r   r   r:   r}   r   r   r   r   r   "test_detect_chained_assignment_str  s    z/TestChaining.test_detect_chained_assignment_strc                 C   s4   t ddgi }|jd ks t|d  d7  < d S )Nr7   r   )r   Zdropnarn   r;   r+   r-   r   r   r   &test_detect_chained_assignment_is_copy  s    z3TestChaining.test_detect_chained_assignment_is_copyc                 C   s^   t tjdd}|jd d df  }t||jd d df   t||d   d S )Nr   rK   r   )r   r   r   randnr)   Zsort_valuesr'   rC   )r+   r-   rM   r   r   r   &test_detect_chained_assignment_sorting  s    z3TestChaining.test_detect_chained_assignment_sortingc                 C   sn   t dddgdddgd}t| |d d |d< t| ||d dk }t| |d d	 |d< t| d S )
Nr7   rK      	   )column1column2r   r8   r   r9   )r   r}   r   r   r   r   .test_detect_chained_assignment_false_positives  s    z;TestChaining.test_detect_chained_assignment_false_positivesc              	   C   s   t tdddgd}d|d< | }|r^t  d|jdd d< W 5 Q R X t|| n,tj	t
td	 d|jdd d< W 5 Q R X d S )
Nr   r   countr   r8   groupr7   r   rr   )r   r   r%   rD   r'   r(   r)   rB   rR   rv   r   rw   )r+   r,   r-   rc   r   r   r   /test_detect_chained_assignment_undefined_column  s    
z<TestChaining.test_detect_chained_assignment_undefined_columnc              	   C   sZ  t tdddtjdtjddddddd	d
gd}| }|rt  d|j	d d< W 5 Q R X t  d|j	d d< W 5 Q R X t  d|d d< W 5 Q R X t
|| |sVtjttd d|j	d d< W 5 Q R X tjttd d|j	d d< W 5 Q R X |s6tjttd d|d d< W 5 Q R X n d|d d< |j	d dksVtd S )NZ20130101r   )Zperiodsrj   rp   r7   r8   r9   de)r=   rL   r@   rA   r]   r   rA   r@   rr   )r   r@   )r   r   r   r   r   r%   rD   r'   r(   r:   rB   rR   rv   r   rw   r;   )r+   rx   r,   r-   rc   r   r   r   -test_detect_chained_assignment_changing_dtype  s4    




z:TestChaining.test_detect_chained_assignment_changing_dtypec              	   C   s   t ttdtdddtjdgd}| }t|j}|rxt	
  |dg | |dg |< W 5 Q R X t	|| n2tjttd |dg | |dg |< W 5 Q R X d S )	NrK   zab..r7   r8   r   r6   r9   rr   )r   rl   ru   r   r_   rD   r   Zisnar9   r'   r(   rB   rR   rv   r   rw   )r+   r,   r-   rc   rb   r   r   r   test_setting_with_copy_bug  s     
"z'TestChaining.test_setting_with_copy_bugc                 C   s>   t tdddgtdddgd}|dg }d	d
dg|d< d S )Nr7   r8   r9   r   r   f)r   yr   ghir   )r   r   )r+   Zdf1r   r   r   r   %test_setting_with_copy_bug_no_warning  s    "
z2TestChaining.test_setting_with_copy_bug_no_warningc              
   C   s   t dddgdddgd}|rDt  d|jd	 d
< W 5 Q R X d S tdd* tt d|jd	 d
< W 5 Q R X W 5 Q R X tdd. tjt	t
d d|jd	 d
< W 5 Q R X W 5 Q R X d S )Nr   r   r   r   r   r4   rq   r   r   r=   r   warnrf   rr   )r   r'   r(   r:   r	   assert_produces_warningr   rR   rv   r   rw   r*   r   r   r   .test_detect_chained_assignment_warnings_errors  s    
"z;TestChaining.test_detect_chained_assignment_warnings_errorsrhsr4   r   r   r   rK   c              
   C   s   t tddd}| }|jd d }tddf |sntt	 }||d< |d j
tksbtW 5 Q R X n*td  ||d< W 5 Q R X t|| W 5 Q R X d S )N   r   r4   r   r   r   r   )r   r   r%   rm   rD   r:   r	   r'   r   r   filename__file__r;   rB   )r+   r   r,   r-   rc   Zchainedtr   r   r   1test_detect_chained_assignment_warning_stacklevel  s    z>TestChaining.test_detect_chained_assignment_warning_stacklevelc                 C   s   t dtdg dtdg d}|d jd }|jd }t|| |jd d }t|| |d jd }t|| |d jd }t|| d S )Nr   r4   rq   r=   r   )r   r=   )r   r   zerosZonesr)   r:   r'   Zassert_numpy_array_equal)r+   r-   rE   rd   Zresult2Zresult3Zresult4r   r   r   test_chained_getitem_with_lists  s    &
z,TestChaining.test_chained_getitem_with_listsc                 C   sH   t  }|d  |jd |jd< d|d jks2td|d jksDtd S )Nr=   r   zHello FriendrL   )r'   ZmakeDataFramer)   r:   r>   r;   r   r   r   r   test_cache_updating-  s
    z TestChaining.test_cache_updatingc              	   C   s   t tjddddddddgtd	d
}d|d< | }|rptjtdd d|jj	d< W 5 Q R X t
|| d S d|jj	d< d|jj	d< t tjdddddddddgtd	d
}d|jd< t
|| tdddddgdd}t
|j| d S )N)r   r   rj   rp   r7   r8   r9   r   r   r   )r   r>   r   r   z	read-onlyrr   r   r4   r   )r      )r4   r   name)r   r   r   ru   rD   rR   rv   
ValueErrorr   valuesr'   rB   atr   rC   )r+   r,   r-   Zdf_origrE   r   r   r   test_cache_updating26  s.    
z!TestChaining.test_cache_updating2c              
   C   s   t dd  ttddgd d}d|d< dgt| }|rbt  d|d	 jd
< W 5 Q R X nd|d	 jd
< |j|  |rt  d|d	 jd
< W 5 Q R X nd|d	 jd
< |s|d	 jd
 dkstn|d	 jd
 dkstW 5 Q R X d S )Nr   r   r    r!   r#   r$   Tgp=
ף?r"   r   g333333?)r	   r   ru   r   r'   r(   r)   r;   )r+   r,   r-   Zckr   r   r   $test_iloc_setitem_chained_assignmentR  s     


z1TestChaining.test_iloc_setitem_chained_assignmentc              	   C   s   t ddddgi}|r:t  d|d jd< W 5 Q R X nd|d jd< t|t ddddgi t|d tdddgdd d S )Nr7   r         (   rK   r   )r   r'   r(   r:   rB   rC   r   r*   r   r   r   'test_getitem_loc_assignment_slice_staten  s    
z4TestChaining.test_getitem_loc_assignment_slice_stateN)#rO   rP   rQ   re   rR   rS   Zarm_slowro   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   tdZ&skip_array_manager_not_yet_implementedr   r   r   r   r   r   r   r   r   rU      sT   ;

$





	






'	 

	rU   )r
   )stringr   r   Znumpyr   rR   Zpandas.errorsr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r	   Zpandas._testingZ_testingr'   rw   r   r   rU   r   r   r   r   <module>   s   
	m