U
    >vfl                     @   s  d dl Zd dlZd dlmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlmZ d dlmZ ejddgdd	d
 Zdd Zdd Zdd Zejjdddgddgddd Zejjdddgddgdejjdeddedddgeddggddd gdejjd!ed"d#edddgd"d#ggddd gdd$d% Zejjdddgddgdejjdedd&edddgeddggddd gdejjd!edd&edddgddggddd gdd'd( Zejjd)ed dedddged dggddd gdd*d+ Zd,d- Zd.d/ Zejjdddgddgdd0d1 Zd2d3 Z ejjdddgddgdd4d5 Z!ejjd)ed6d"edddgd6d"ggddd gdd7d8 Z"ejjd9d:d; d<d; d=d; d>d; d?d; d@d; gdAdBdCdDdEdFgdejjdddgddgddGdH Z#ejjdddgddgddIdJ Z$ejjd9dKd; dLd; dMd; dNd; gdOdPdQdRgddSdT Z%dUdV Z&ejjd9dWd; dXd; dYd; dZd; d[d; gdOdQd\dPd]gdd^d_ Z'ejjd9d`d; dad; dbd; gdOdQdPgddcdd Z(dedf Z)ejjd)ed dedddged dggddd gddgdh Z*didj Z+dkdl Z,dmdn Z-dodp Z.ejjd9dqd; drd; dsd; gdOdQdPgddtdu Z/dvdw Z0ejdxdyd6gejdzej1d{fej2d|fej1d gd6ffej2d gd ffej1edd6ffej2edd ffgd}d~ Z3dd Z4dd Z5dd Z6dS )    N)SettingWithCopyWarning)is_float_dtype)	DataFrameSeries)	get_arraynumpynullable)paramsc                 C   sB   | j dkrdd }dd }n| j dkr6dd }dd }| j ||fS )	Nr   c                  _   s
   t | |S N)r   argskwargs r   H/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/copy_view/test_indexing.pymake_dataframe   s    zbackend.<locals>.make_dataframec                  _   s
   t | |S r
   )r   r   r   r   r   make_series   s    zbackend.<locals>.make_seriesr   c                  _   sT   t | |}| }|jD ]2}t|| jrt|| js|| d||< q| S )NZFloat64)r   convert_dtypescolumnsr   dtypeastypecopy)r   r   dfZdf_nullablecolr   r   r   r      s    

c                  _   s   t | |}|  S r
   )r   r   r   )r   r   serr   r   r   r   *   s    
)param)requestr   r   r   r   r   backend   s    


r   c                 C   s   | \}}}|dddgdddgddd	gd
}|  }|ddg }|rltt|dt|ds`td|jd< n&tt|dt|drtd|jd< tt|dt|drt|dddgddd	gd}t|| t|| d S N                  皙?皙?333333?abcr(   r*   r   r   r   )r(   r*   )r   npshares_memoryr   AssertionErroriloctmassert_frame_equalr   using_copy_on_write_r   r   df_origsubsetexpectedr   r   r   test_subset_column_selection5   s    
"
r8   c                 C   s   | \}}}|dddgdddgddd	gd
}|ddg }|rXt t|dt|dsXtd|jd< t t|dt|dr~t|rt t|dt|dst|dddgddd	gd}t|| d S r   )r,   r-   r   r.   r/   r0   r1   )r   r3   r4   r   r   r6   r7   r   r   r   *test_subset_column_selection_modify_parentQ   s    
"
r9   c                 C   s  | \}}}|dddgdddgddd	gd
}|  }|dd }|j  tt|dt|dsft|rd|jd< tt|dt|drtn
d|jd< |j  |ddgddgdd	gd
tddd}t	
|| |rt	
|| nd|jd< t	
|| d S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r+   index)r   r   )r   _mgr_verify_integrityr,   r-   r   r.   r/   ranger0   r1   r2   r   r   r   test_subset_row_sliceh   s"    
"



&
r?   r   int64Zfloat64zsingle-blockzmixed-block)idsc              
   C   sj  | \}}}|dko|dko| }|dddgdddgt jd	d
dg|dd}| }	|jd d dd f }
|
j  |rt t|
dt|dstd|
jd< t t|
dt|drtnD|rt	nd }t
dd& t| d|
jd< W 5 Q R X W 5 Q R X |dddgt jd	d
dg|dd}t|
| |sZ|sB|rZd|	jd< t||	 nt||	 d S )Nr@   r   r   r   r    r!   r"   r#         	   r   r'   r)   r   r+   chained_assignmentwarnr)   r*   )r   r   )r,   arrayr   r/   r<   r=   r-   r   r.   r   pdoption_contextr0   assert_produces_warningr1   )r   r3   using_array_managerr   dtype_backendr   r4   Zsingle_blockr   r5   r6   rG   r7   r   r   r   test_subset_column_slice   s2    
&

$
rO   row_indexerr   r   FTslicemaskrI   column_indexerr)   r*   c                 C   s   | \}}}|dddgdddgt jddd	g|d
d}	|	 }
|	j||f }d|jd< |ddgt jdd	g|d
dtddd}t|| t|t	rt|t	r|s|dkr|dkr|sd|
jd< t|	|
 d S Nr   r   r    r!   r"   r#   rB   rC   rD   rE   r'   r   r+   rH   r:   r@   r   )r   r   )
r,   rI   r   locr/   r>   r0   r1   
isinstancerQ   r   r   rP   rS   rM   r3   rN   r   r4   r   r5   r6   r7   r   r   r   test_subset_loc_rows_columns   s4    
&
 
rX   r    c                 C   s   | \}}}|dddgdddgt jddd	g|d
d}	|	 }
|	j||f }d|jd< |ddgt jdd	g|d
dtddd}t|| t|trt|tr|s|dkr|dkr|sd|
jd< t|	|
 d S rT   )	r,   rI   r   r/   r>   r0   r1   rV   rQ   rW   r   r   r   test_subset_iloc_rows_columns   s4    
&
 
rY   indexerc              
   C   s6  | \}}}|ddddgddddgdd	d
dgd}|  }|dd }|tjkrpt|tjrp|jdkrptd |rd|||< nL|tjkrt	nd }	t
dd( t|	 d|||< W 5 Q R X W 5 Q R X |dddgdddgdddgdtddd}
t||
 |rt|| nd|dd< t|| d S )Nr   r   r    r!   r"   r#   rB   r$   r%   r&   皙?r'   intz&setitem with labels selects on columnsr   rF   rG           r:   )r   r0   setitemrV   r,   Zndarrayr   pytestskipr   rJ   rK   rL   r>   r1   )r   
indexer_sirZ   r3   r4   r   r   r5   r6   rG   r7   r   r   r    test_subset_set_with_row_indexer-  s4    
(

  rb   c           	   
   C   s  | \}}}|ddddgddddgdd	d
dgd}|  }|dd }|dk}|r\d||< n6tdd$ tt d||< W 5 Q R X W 5 Q R X |dddgdddgd	d
dgdtddd}t|| |rt|| n(d|jd< d|jdddf< t|| d S )Nr   r   r    r!   r"   r#   rB   r$   r%   r&   r[   r'   r   rF   rG   r:   )r    r(   r)   )	r   rJ   rK   r0   rL   r   r>   r1   rU   )	r   r3   r4   r   r   r5   r6   rR   r7   r   r   r   test_subset_set_with_maskW  s(    
(
 
rc   c           
   
   C   s   | \}}}|dddgdddgddd	gd
}|  }|dd }|dkr\tjddgdd}ntjddgdd}|r|||d< n6tdd$ tt ||d< W 5 Q R X W 5 Q R X |j	  |ddgddgdd	gd
t
ddd}	t||	 t|| d S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r   
      r@   rE   ZInt64r(   rF   rG   r:   )r   r,   rI   rJ   rK   r0   rL   r   r<   r=   r>   r1   )
r   r3   rN   r   r4   r   r5   r6   Zarrr7   r   r   r   test_subset_set_columnu  s&    
"

 rf   c           
   
   C   sN  | \}}}|dddgdddgt jddd	g|d
d}| }|dd }|rpt jddgdd
|jd d df< nTtddB tjd | d& t jddgdd
|jd d df< W 5 Q R X W 5 Q R X |j	  |ddgddgt jdd	g|d
dt
ddd}	t||	 |rt|| n,t jddgdd
|jdddf< t|| d S )Nr   r   r    r!   r"   r#   rB   rC   rD   rE   r'   rd   re   r@   r(   rF   rG   Zraise_on_extra_warningsr:   )r,   rI   r   rU   rJ   rK   r0   rL   r<   r=   r>   r1   )
r   r3   rM   r   r4   r   r   r5   r6   r7   r   r   r   test_subset_set_column_with_loc  s0    
&"4
  rh   c           	   
   C   s   | \}}}|ddddgi}|  }|dd }|rHd|jd d df< nFtdd4 tjd | d d|jd d df< W 5 Q R X W 5 Q R X |j  |dddgitddd	}t	|| |rt	|| nd|jdddf< t	|| d S )
Nr(   r   r   r    r   rF   rG   rg   r:   )
r   rU   rJ   rK   r0   rL   r<   r=   r>   r1   )	r   r3   rM   r4   r   r   r5   r6   r7   r   r   r    test_subset_set_column_with_loc2  s&    
&
ri   c           	   
      s.  | \}}}|dddgdddgt jddd	g|d
d}| }|dd  |r\d ddg< n:tdd( tt d ddg< W 5 Q R X W 5 Q R X  j	  |rt
 fdddD st|ddgddgddgdtddd}|dkr|d d|d< |d d|d< t | t|| d S )Nr   r   r    r!   r"   r#   rB   rC   rD   rE   r'   r   r(   r*   rF   rG   c                 3   s   | ]} j |V  qd S r
   )r<   _has_no_reference).0ir6   r   r   	<genexpr>  s     z*test_subset_set_columns.<locals>.<genexpr>)r   r   r:   r   r@   )r,   rI   r   rJ   rK   r0   rL   r   r<   r=   allr.   r>   r   r1   )	r   r3   r   rN   r   r4   r   r5   r7   r   rm   r   test_subset_set_columns  s(    
& 
&
rp   r(   c           	   	   C   s   | \}}}|dddgdddgddd	gd
}|  }|dd }|rXd|jd d |f< n*tdd d|jd d |f< W 5 Q R X |j  |ddgddgdd	gd
tddd}t|| |rt|| n"d|jddddgf< t|| d S )Nr   r   r    r$   r%   r&   r!   r"   r#   r'   r   rF   rG   r]   r:   r(   r)   )	r   rU   rJ   rK   r<   r=   r>   r0   r1   )	r   rZ   r3   r4   r   r   r5   r6   r7   r   r   r   #test_subset_set_with_column_indexer  s    
"
&rq   methodc                 C   s   | ddg dd S Nr(   r)   r   r   r   r   r   r   r   <lambda>       ru   c                 C   s   | dd ddg S Nr   r   r(   r)   r   rt   r   r   r   ru   !  rv   c                 C   s   | ddg j dd S rs   r/   rt   r   r   r   ru   "  rv   c                 C   s   | ddg j dd S )Nr(   r)   r   r   rU   rt   r   r   r   ru   #  rv   c                 C   s   | dd j d d ddf S )Nr   r   rx   rt   r   r   r   ru   $  rv   c                 C   s   | dd j d d ddf S rw   ry   rt   r   r   r   ru   %  rv   zrow-getitem-slicezcolumn-getitemzrow-iloc-slicezrow-loc-slicecolumn-iloc-slicecolumn-loc-slicec                 C   s   |\}}}|dddgdddgt jddd	g|d
d}| }	| jjj}
|sV|
dk}n|
dph|
d}||}d|jd< |s|st	||	 n|jd dkst
||}d|jd< |ddgddgd}|s|st	|| n|jd dkst
d S )Nr   r   r    r!   r"   r#   rB   rC   rD   rE   r'   )z$numpy-single-block-column-iloc-slicez#numpy-single-block-column-loc-slicerz   r{   r   r+   r(   r)   )r,   rI   r   nodeZcallspecidendswithr/   r0   r1   r.   )r   r   rr   r   r3   rM   r4   r   r   r5   Ztest_callspecZsubset_is_viewr6   r7   r   r   r   test_subset_chained_getitem  s0    
&



r   c           
      C   s   | \}}}|dddgdddgt jddd	g|d
d}| }|d d  d dd }|  d|jd< |rzt|| n|jd dkst|d d  d dd }|  d|jd< |ddgdd}	|rt||	 n|jd dkstd S )Nr   r   r    r!   r"   r#   rB   rC   rD   rE   r'   r(   r   r+   name)	r,   rI   r   Z_clear_item_cacher/   r0   r1   r.   assert_series_equal)
r   r   r3   r4   r   r   r   r5   r6   r7   r   r   r   "test_subset_chained_getitem_column_  s$    
&

r   c                 C   s   | dd dd S Nr(   r*   r)   r   sr   r   r   ru     rv   c                 C   s   | j dd j dd S )Nr   r    r   rx   r   r   r   r   ru     rv   c                 C   s   | j dd j dd S r   ry   r   r   r   r   ru     rv   c                 C   s6   | j dd jdd jdd j dd jdd S )Nr(   r*   r   r    r   r)   r   )rU   r/   r   r   r   r   ru     s       getitemr/   rU   z
long-chainc           	      C   s   | \}}}|dddgdddgd}|  }||}d|jd< |rNt|| n|jd dks`t|jdd jdd }d|jd< |ddgddgd}|rt|| n|jd dkstd S 	Nr   r   r    r(   r)   r*   r:   r   )r   r/   r0   r   r.   )	r   rr   r3   r4   r   r   s_origr6   r7   r   r   r   "test_subset_chained_getitem_series  s    


r   c                 C   s   t dddgdddgddd	gd
}| }|d d  jd jdd }d|jd< | sX|rft|| n|jd dksxt|d d  jd jdd }d|jd< tddgddgdd}| s|rt|| n|jd dkstd S )Nr   r   r    r!   r"   r#   rB   rC   rD   r'   r   r+   r(   r)   )r;   r   )r   r   r/   r0   r1   r.   r   r   )r3   rM   r   r5   r6   r7   r   r   r   $test_subset_chained_single_block_row  s    "

r   c                 C   s   | d d  S r
   r   rt   r   r   r   ru     rv   c                 C   s   | j d d d d f S r
   ry   rt   r   r   r   ru     rv   c                 C   s   | j d d  S r
   ry   rt   r   r   r   ru     rv   c                 C   s   | j d d d d f S r
   rx   rt   r   r   r   ru     rv   c                 C   s   | j d d  S r
   rx   rt   r   r   r   ru     rv   zloc-rowsz	iloc-rowsc                 C   sz   | \}}}|dddgdddgddd	gd
}|  }||}||k	sHtd|jd< |rdt|| n|jd dksvtd S )Nr   r   r    r!   r"   r#   rB   rC   rD   r'   r   r+   )r   r.   r/   r0   r1   )r   rr   r3   r4   r   r   r5   df2r   r   r   test_null_slice  s    
"
r   c                 C   s   | d d  S r
   r   r   r   r   r   ru     rv   c                 C   s   | j d d  S r
   ry   r   r   r   r   ru     rv   c                 C   s   | j d d  S r
   rx   r   r   r   r   ru     rv   c                 C   sp   | \}}}|dddgdddgd}|  }||}||k	s>td|jd< |rZt|| n|jd dksltd S r   )r   r.   r/   r0   r   )r   rr   r3   r4   r   r   r   s2r   r   r   test_null_slice_series  s    


r   c                 C   s   | \}}}|dddgdddgd}|  }|d d  }tt|t|sNtd|jd< |rttt|t|rtt|dddgdddgd}t|| |rt|| n|jd dkstd S r   )r   r,   r-   r   r.   r/   r0   r   )r   r3   r4   r   r   r   r6   r7   r   r   r   test_series_getitem_slice  s    

r   c           
      C   s   | \}}}|dddgdddgd}|  }|d d  }d|||< |dddgdddgd}	t||	 |rxt|| nt||	 d S r   )r   r0   r   )
r   ra   rZ   r3   r4   r   r   r   r6   r7   r   r   r   #test_series_subset_set_with_indexer  s    	
r   c                 C   s   | \}}}|dddgdddgddd	gd
}|  }|d d  }tt|dt|ds\t|d= tt|dt|ds~tt|| t||ddg  |j  d|j	d< |rt|| n|j	d dkstd S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   d   r   r(   )
r   r,   r-   r   r.   r0   r1   r<   r=   rU   )r   r3   r4   r   r   r5   r   r   r   r   test_del_frame3  s    
"

r   c                 C   s   | \}}}|dddgdddgd}|  }|d d  }tt|t|sNt|d= tt|t|rltt|| t||ddg  |j}d|jd< |d	 dkstd S )
Nr   r   r    r(   r)   r*   r:   r   r   )	r   r,   r-   r   r.   r0   r   valuesrU   )r   r4   r   r   r   r   r   r   r   r   test_del_seriesO  s    

r   c              
   C   s  | \}}}|dddgdddgddd	gd
}|  }|d }tt|dt|dsXt|s`|rjd|d< nF|dkrvtnd }	tdd$ t	|	 d|d< W 5 Q R X W 5 Q R X |dddgdd}
t
||
 |rt|| t
|d |d  nd|jd< t|| d S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r   rF   rG   r   r+   )r   r,   r-   r   r.   r   rJ   rK   r0   rL   r   r1   r/   )r   r3   rM   rN   r   r   r   r5   r   rG   r7   r   r   r   test_column_as_seriesg  s$    
"

r   c           
   
   C   s6  | \}}}|dddgdddgddd	gd
}|  }|d }|dkrztjtdd d|d< W 5 Q R X |dddgdd}	np|s|rd|d< |dddgtdd}	nJtdd$ tt	 d|d< W 5 Q R X W 5 Q R X |dddgtdd}	t
||	 |rt|| t
|d |d  n|	|d< t|| d S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   zInvalid value)matchZfoor   r   )r   r   rF   rG   )r   r_   Zraises	TypeErrorobjectrJ   rK   r0   rL   r   r   r1   )
r   r3   rM   rN   r   r   r   r5   r   r7   r   r   r   %test_column_as_series_set_with_upcast  s*    
"r   c                 C   s   | d S Nr(   r   rt   r   r   r   ru     rv   c                 C   s   | j d d df S r   ry   rt   r   r   r   ru     rv   c                 C   s   | j d d df S )Nr   rx   rt   r   r   r   ru     rv   c              
   C   s  |\}}}|dddgdddgddd	gd
}|  }	||}
||}d| jjk}|sX|rf|
|k	srtn|
|ksrt|sz|rd|
jd< nH|dkrtnd }tdd& t	| d|
jd< W 5 Q R X W 5 Q R X |rt
||	d  t||	 n|jd dkstd S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r/   r   r   rF   rG   r(   )r   r}   r   r.   r/   r   rJ   rK   r0   rL   r   r1   )r   r   rr   r3   rM   rN   r   r4   r   r5   s1r   Zis_ilocrG   r   r   r   #test_column_as_series_no_item_cache  s&    
"r   c                 C   s   | \}}}|dddgdddgd}|dd	d
g}||d< t t|d|jrRtd|d< |dddgdddgdd	d
gd}t|| d|jd< |dd	d
g}t|| d S )Nr   r   r    r$   r%   r&   r|   rd   re      newr   )r(   r)   r   r   )r   r   )	r,   r-   r   r   r.   r0   r1   rU   r   )r   r4   r   r   r   r   r7   Z
expected_sr   r   r   %test_dataframe_add_column_from_series  s    
"
r   valr   zindexer_func, indexerr   r+   c                 C   s   t dddgdddgddd	gd
}| }|d d  }||||< | rtt|dt|dsbttt|dt|dr~tt|| n^tt|dt|dst|dkrtt|dt|drtntt|dt|dstd S )Nr   r   r    r!   r"   r#   r$   r%   r&   r'   r)   r(   r*   )r   r   r,   r-   r   r.   r0   r1   )r3   Zindexer_funcrZ   r   r   r5   viewr   r   r   )test_set_value_copy_only_necessary_column  s    "r   c                 C   s   t dddgtjdddgdddggd}|d }tt|t|sJtd|jd< | rt dddgtjdddgdddggd}t	
|| d S )	Nr   r   r    r!   r"   r:   r   r   )r   rJ   
MultiIndexZfrom_arraysr,   r-   r   r.   r/   r0   r   r3   r   resultr7   r   r   r   test_series_midx_slice  s    *
 r   c                 C   sv   t ddgddd}| }|d }| r8|jdr8t|sXtt|dt|dsXt| rrd|jd	< t	
|| d S )
Nr   r   )r(   x)r(   y)r)   r   )r(   r   r   r   r   r+   )r   r   r<   rj   r.   r,   r-   r   r/   r0   r1   )r3   rM   r   r5   Znew_dfr   r   r   test_getitem_midx_slice  s    
r   c                 C   s~   t dddgtjdddgd}|d }tt|t|s@td	|jd
< | rzt dddgtjdddgd}t	
|| d S )Nr   r   r    )r   r   r    )r   r!   ))r   r    r!   r:   r   r   r   )r   rJ   r   from_tuplesr,   r-   r   r.   r/   r0   r   r   r   r   r   test_series_midx_tuples_slice*  s    
r   )7r   r,   r_   Zpandas.errorsr   Zpandas.core.dtypes.commonr   ZpandasrJ   r   r   Zpandas._testingZ_testingr0   Zpandas.tests.copy_view.utilr   Zfixturer   r8   r9   r?   markZparametrizerO   rQ   rI   rX   rY   rb   rc   rf   rh   ri   rp   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rU   r/   r   r   r   r   r   r   r   r   <module>   sZ  
##  
'  $/  $/$
%  
%   
 
	  ,  




	
$
"	
$