U
    cN                     @   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-g7fro6k3/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| d|d jd	< |  |snt|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ilocZ_clear_item_cachetmZ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   r8   r   )r4   r8   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 ]8\}}||d  || |d  }
|
||d  ||< q|sRt|| 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?   r@   )	r   r   r   Ziterrowsr9   r(   assert_frame_equalassert_series_equalcopy)r*   r+   expectedoutr,   r2   ZeixixrowZout_originalvr   r   r   "test_setitem_cache_updating_slicesN   s6     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 }d|jks8td
|d< t|dksPtd|jks^t|d |k	sntt|d dkstd S )Nr   r   r3      r6   r7   r<   B)r=   r   r   r8   )r   Z_item_cacher:   r   r*   r,   Zserr   r   r   (test_altering_series_clears_parent_cachev   s    "z4TestCaching.test_altering_series_clears_parent_cacheN)
__name__
__module____qualname__r-   pytestmarkparametrizer;   rI   rM   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}d|j|< |rdt|t d|i nt|t d|i tjj|gdgd}t |}|jdk}d|j|< |rt|t d|i nt|t d|i t ||d}| }|jdk}d|j|< |rt|| nt|t ||d t dtj	d	d
dd	gi}t dtdd	d
dd	gi}tj	|d j
d< | }	|rt ddd	d
dd	gi}nt dtj	d	d
dd	gi}t|	| t dtdd	d
dd	gi}tj	|jj
d< | }	t|	| d S )Nrightlefttimeoutnoneresponse)names)rY   Z	response1r<   barZbahfoor   )r   r   arrayrY   r(   rA   ZrecZ
fromarraysrC   nanr'   headr<   )
r*   r+   dataZmdatar,   maskZrecarraydf_originalrD   resultr   r   r   test_setitem_chained_setfault   sD    





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d|d d< d|d d< |rt	
|| nt	
|| W 5 Q R X d S )Nr   raiser   r3   ABr   rJ   r   int64)r   dtyper<   r   )r	   r   listr   r%   reshaperC   _is_copyr:   r(   rA   )r*   r+   rD   r,   rb   r   r   r   test_detect_chained_assignment   s      z+TestChaining.test_detect_chained_assignmentc              	   C   s*  t ttdddtjtddtjdd}| }|jd ksDt	|rnd|d d< d	|d d
< 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   ri   rj   rJ   r<   rK   rf   r<   r   rg   r   matchr3   rh   r   rK   float64)r   r   ranger   r]   r%   rs   rC   rm   r:   r(   rA   rQ   raisesr   msgr^   rk   Zastype)r*   using_array_managerr+   r,   rb   rD   r   r   r   %test_detect_chained_assignment_raises   s,    z2TestChaining.test_detect_chained_assignment_raisesc              	   C   sn   t ttdddtjtddtjdd}|rBd|jd d< n(tj	t
td	 d|jd d< W 5 Q R X d S )
Nr   ri   ro   rJ   rp   rf   r   r<   rq   )r   r   rt   r   r]   r%   rs   r9   rQ   ru   r   rv   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|rV|jjd	}d
|| d< n4tj	t
td  |jjd	}d
|| d< W 5 Q R X d S )Nr/   r0   r1   r2   r4   ri   ro   )r6   r8   o*   r8   rq   )r   r   rt   rm   r:   r6   str
startswithrQ   ru   r   rv   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 |rd|d d
< 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   r3   rp   aaarq   r   r<   )r   r<   )	r   rC   rQ   ru   r   rv   r9   r(   rA   )r*   rw   r+   rD   r,   rb   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__picklerK   )r   rm   r:   r(   Zensure_cleanZ	to_picklepdZread_pickle)r*   r,   pathdf2r   r   r   -test_detect_chained_assignment_is_copy_pickle2  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   rJ   c                 S   s   t | dkS N
   r   r   r   r   r   <lambda>N      zSTestChaining.test_detect_chained_assignment_setting_entire_column.<locals>.<lambda>r   )
r   r'   rm   r:   r   applyr9   rC   r|   lower)r*   r,   r   r   r   r   r   4test_detect_chained_assignment_setting_entire_column?  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   Y  r   zKTestChaining.test_detect_chained_assignment_implicit_take.<locals>.<lambda>r   )r   r   r   r9   rm   r:   r|   r   r*   r,   r   r   r   r   ,test_detect_chained_assignment_implicit_takeT  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   e  r   zLTestChaining.test_detect_chained_assignment_implicit_take2.<locals>.<lambda>r   )
rQ   skipr   r   r   r9   rm   r:   r|   r   r~   r   r   r   -test_detect_chained_assignment_implicit_take2_  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   u  r   zATestChaining.test_detect_chained_assignment_str.<locals>.<lambda>r   )r   r   r   r9   r|   r   r   r   r   r   "test_detect_chained_assignment_strq  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 )Nr6   r   )r   Zdropnarm   r:   r*   r,   r   r   r   &test_detect_chained_assignment_is_copyx  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   rJ   r   )r   r   r   randnr'   Zsort_valuesr(   rB   rL   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 )
Nr6   rJ      	   )column1column2r   r7   r   r8   )r   r|   r   r   r   r   .test_detect_chained_assignment_false_positives  s    z;TestChaining.test_detect_chained_assignment_false_positivesc              	   C   sz   t tdddgd}d|d< | }|rJd|jdd d< t|| n,tjt	t
d	 d|jdd d< W 5 Q R X d S )
Nr   r   countr   r7   groupr6   r   rq   )r   r   r%   rC   r'   r(   rA   rQ   ru   r   rv   )r*   r+   r,   rb   r   r   r   /test_detect_chained_assignment_undefined_column  s    z<TestChaining.test_detect_chained_assignment_undefined_columnc              	   C   s  t tdddtjdtjddddddd	d
gd}| }|rvd|jd d< d|jd d< d|d d< t	|| |st
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 |st
jttd d|d d< W 5 Q R X n d|d d< |jd dkstd S )NZ20130101r   )Zperiodsri   ro   r6   r7   r8   de)r<   rK   r?   r@   r\   r   r@   r?   rq   )r   r?   )r   r   r   r   r   r%   rC   r9   r(   rA   rQ   ru   r   rv   r:   )r*   rw   r+   r,   rb   r   r   r   -test_detect_chained_assignment_changing_dtype  s.    

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}|rd|dg | |dg |< t	
|| n2tjttd |dg | |dg |< W 5 Q R X d S )	NrJ   zab..r6   r7   r   r5   r8   rq   )r   rk   rt   r   r^   rC   r   Zisnar8   r(   rA   rQ   ru   r   rv   )r*   r+   r,   rb   ra   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 )Nr6   r7   r8   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}|r0d|jd	 d
< 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   r3   rp   r   r   r<   r   warnre   rq   )
r   r9   r	   r(   assert_produces_warningr   rQ   ru   r   rv   r)   r   r   r   .test_detect_chained_assignment_warnings_errors  s    "z;TestChaining.test_detect_chained_assignment_warnings_errorsrhsr3   r   r   r   rJ   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   r3   r   r   r   r   )r   r   r%   rl   rC   r9   r	   r(   r   r   filename__file__r:   rA   )r*   r   r+   r,   rb   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   r3   rp   r<   r   )r   r<   )r   r   zerosZonesr'   r9   r(   Zassert_numpy_array_equal)r*   r,   rD   rc   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 FriendrK   )r(   ZmakeDataFramer'   r9   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< 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   ri   ro   r6   r7   r8   r   r   r   )r   r=   r   r   r   r3   r   )r      )r3   r   name)r   r   r   rt   r   valuesatr(   rA   r   rB   )r*   r,   rD   r   r   r   test_cache_updating2&  s"    
z!TestChaining.test_cache_updating2c              	   C   s   t dd  ttddgd d}d|d< dgt| }d|d	 jd
< |j|  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   rt   r   r'   r:   )r*   r+   r,   Zckr   r   r   $test_iloc_setitem_chained_assignment;  s    
z1TestChaining.test_iloc_setitem_chained_assignmentc                 C   s\   t ddddgi}d|d jd< t|t ddddgi t|d tdddgdd d S )Nr6   r         (   rJ   r   )r   r9   r(   rA   rB   r   r   r   r   r   'test_getitem_loc_assignment_slice_stateN  s    z4TestChaining.test_getitem_loc_assignment_slice_stateN)#rN   rO   rP   rd   rQ   rR   Zarm_slowrn   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   tdZ&skip_array_manager_not_yet_implementedr   r   r   r   r   r   r   r   r   rT      sT   0

#













%	 

	rT   )r
   )stringr   r   Znumpyr   rQ   Zpandas.errorsr   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r   r	   Zpandas._testingZ_testingr(   rv   r   r   rT   r   r   r   r   <module>   s   
	d