U
    sVc                     @   sV  d dl m Z  d dlmZ d dlZd dlZd dlmZ d dlZ	d dlm
Z
mZmZmZmZmZmZmZ d dlmZ d dlmZ ejddd	d
gddd Zdd ZG dd dZdd Zdd Zdd Zdd Zdd Zdd Z dd Z!d d! Z"d"d# Z#ej$%d$d%d&gd'd( Z&d)d* Z'eed+d,d- Z(d.d/ Z)d0d1 Z*d2d3 Z+d4d5 Z,d6d7 Z-dS )8    )datetime)givenN)	is_scalar)	DataFrameDatetimeIndexIndexSeriesStringDtype	Timestamp
date_rangeisna)OPTIONAL_ONE_OF_ALLdefaultfloat_stringmixed_float	mixed_int)paramsc                 C   sT   | j dkr&ttjdddddgdS | j dkr4|S | j d	krB|S | j d
krP|S d S )Nr         ABCcolumnsr   r   r   )paramr   nprandomrandn)requestfloat_string_frameZmixed_float_frameZmixed_int_frame r    J/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/frame/indexing/test_where.pywhere_frame   s    



r"   c                    s&   dd  t t fdd|  D S )Nc                 S   s    t | jjtjtjfo| jdkS )NZuint8)
issubclassdtypetyper   integerZfloating)sr    r    r!   is_ok&   s    z_safe_add.<locals>.is_okc                 3   s.   | ]&\}} |r||d  fn||fV  qdS )   Nr    ).0cr'   r(   r    r!   	<genexpr>+   s     z_safe_add.<locals>.<genexpr>)r   dictitemsdfr    r,   r!   	_safe_add$   s    r2   c                   @   s8  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
deeejgdd Ze	j
ddgdgdggedgdgdggeddddgidgdgdggedgejgedgggdd Ze	j
dddgddgddggeddgddgddggddgddgddggedddgdddgd ejedgedejged!ed!gg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&dBdC Z'e	j
dDi dEdFigdGdH Z(dIdJ Z)dKdL Z*dMdN Z+dOdP Z,e	j
dQdRdSdTdUgdVdW Z-dFS )XTestDataFrameIndexingWherec              	   C   sV   ddd}|}||kr@d}t jt|d |dk W 5 Q R X d S |dk}||| d S )NTc           	      S   s   t | }| ||}| |j|}| D ]<\}}tt|| | | || |jd}tj||dd q*t	|| |r|j
| j
k std S )NindexF)Zcheck_names)r2   wherevaluesr/   r   r   r5   tmassert_series_equalassert_frame_equaldtypesallAssertionError)	r1   condcheck_dtypesother1rsZrs2kvexpr    r    r!   
_check_get0   s    $z=TestDataFrameIndexingWhere.test_where_get.<locals>._check_get6'>' not supported between instances of 'str' and 'int'matchr   )Tpytestraises	TypeError)selfr"   r   rE   r1   msgr>   r    r    r!   test_where_get/   s    
z)TestDataFrameIndexingWhere.test_where_getc                 C   sn   t dd dD }d|jdd d f< |j}ttdtdtdtd	gdddd	gd
}t|| d S )Nc                 S   s    i | ]}|t d gd |dqS )r)   r   r$   )r   )r*   r+   r    r    r!   
<dictcomp>J   s    zCTestDataFrameIndexingWhere.test_where_upcasting.<locals>.<dictcomp>)float32float64int32int64r   r)   rR   rS   rT   rU   r4   )r   ilocr;   r   r   r$   r8   r9   rM   r1   resultexpectedr    r    r!   test_where_upcastingG   s     
z/TestDataFrameIndexingWhere.test_where_upcastingc              	   C   s   ddd}|}||kr@d}t jt|d |dk W 5 Q R X d S |dkdd  }|||t| |dk}|||t|j |dk}tdd	 |jD }|||tj|d
 d S )NTc                 S   s   |  ||}t|jD ]\}}|| }| | j}|| | | jdj}	t|rZ|}
n4t|t	j
rt|d d |f |jdj}
n
|| j}
|	 r|nt	 |	||
}t||j|d}tj||dd q|rt|t	j
s|j| jk std S )NFr4   )r5   name)Zcheck_dtype)r6   	enumerater   r7   reindexr5   fillnar   
isinstancer   Zndarrayr   r<   r8   r9   r;   r=   )r1   r>   otherr?   rA   irB   rX   dr+   oZ
new_valuesrY   r    r    r!   _check_alignc   s    

zETestDataFrameIndexingWhere.test_where_alignment.<locals>._check_alignrF   rG   r   r)   c                 s   s   | ]}t |jtj V  qd S )N)r#   r%   r   r&   )r*   r'   r    r    r!   r-      s     zBTestDataFrameIndexingWhere.test_where_alignment.<locals>.<genexpr>)r?   )T)	rJ   rK   rL   r2   r7   r<   r;   r   nan)rM   r"   r   rd   r1   rN   r>   r?   r    r    r!   test_where_alignmenta   s    
z/TestDataFrameIndexingWhere.test_where_alignmentc              	   C   s   t tjdddddgd}|dk}|d jdd	d d f }d
}tjt|d ||| W 5 Q R X |j	d d	d d f j}t
|}d}tjt|d ||| W 5 Q R X tjt|d |d W 5 Q R X tjt|d |d W 5 Q R X d S )Nr   r   r   r   r   r   r   r)      z4other must be the same shape as self when an ndarrayrG   ,Array conditional must be same shape as selfT)r   r   r   r   r7   rJ   rK   
ValueErrorr6   rV   r2   mask)rM   r1   r>   Zerr1rN   Zerr2r@   r    r    r!   test_where_invalid   s    z-TestDataFrameIndexingWhere.test_where_invalidc              	   C   s   ddd}|}||kr@d}t jt|d |dk W 5 Q R X d S |dk}||| |dk}||| |dkdd  }||| d S )	NTc           	      S   s   |   }|| d}|| }|j|tjdd}|d ksBtt	|| |r| j
 D ]>\}}t|jtjr||  std}|| j|ks\tq\d S )NTinplacerS   )copyZreindex_liker^   rj   r6   r   re   r=   r8   r:   r;   r/   r#   r%   r&   r<   r$   )	r1   r>   r?   ZdfiZecondrY   return_valuerB   rC   r    r    r!   
_check_set   s    
z=TestDataFrameIndexingWhere.test_where_set.<locals>._check_setrF   rG   r   r)   )TrI   )rM   r"   r   rp   r1   rN   r>   r    r    r!   test_where_set   s    


z)TestDataFrameIndexingWhere.test_where_setc                 C   sR   t tdtddd}||d dk}||d dk |j}t|| d S )Nr         abru   r)   )r   ranger6   r]   r5   r8   r:   rW   r    r    r!   test_where_series_slicing   s    z4TestDataFrameIndexingWhere.test_where_series_slicingklassc                 C   s   t ddddgi}dgdgdgg}t dtjddgi}|||}t|| d|d< dtjdg|d< ddgddgddgg}|||}t|| d S )Nru   r)   rg   r   FTrv   )r   r   re   r6   r8   r:   )rM   ry   r1   r>   rY   rX   r    r    r!   test_where_array_like   s    z0TestDataFrameIndexingWhere.test_where_array_liker>   r)   r   rg   r   rs   ru   TrueFalsez
2017-01-01z
2017-01-02c              	   C   s>   t ddddgi}d}tjt|d || W 5 Q R X d S )Nru   r)   rg   r   (Boolean array expected for the conditionrG   r   rJ   rK   ri   r6   rM   r>   r1   rN   r    r    r!   test_where_invalid_input_single   s    z:TestDataFrameIndexingWhere.test_where_invalid_input_singlerr      	   rt   z
2017-01-03c              	   C   sF   t dddgdddgd}d}tjt|d || W 5 Q R X d S )Nr)   rg   r   rt   r}   rG   r~   r   r    r    r!   !test_where_invalid_input_multiple   s    z<TestDataFrameIndexingWhere.test_where_invalid_input_multiplec                 C   s   t dddgdddgg}t dddgdddgg}||}t d	tjdgtjtjdgg}t|| d
ddg|_||}t tj|j|jd}t|| d S )Nr)   rg   r   rr   r      TF      ?ru   rv   r+   r5   r   )r   r6   r   re   r8   r:   r   r5   )rM   r1   r>   rX   rY   r    r    r!   test_where_dataframe_col_match  s    

z9TestDataFrameIndexingWhere.test_where_dataframe_col_matchc              	   C   s   d}t dddgdddgg}dg}tjt|d	 || W 5 Q R X t dddgtjtjtjgg}|t|}t	|| t
d
dd
dg}tjt|d	 || W 5 Q R X t tjtjtjgdddgg}|t|}t	|| d S )Nrh   r)   rg   r   rr   r   r   TrG   F)r   rJ   rK   ri   r6   r   re   r   r8   r:   array)rM   rN   r1   r>   rY   outr    r    r!   test_where_ndframe_align  s    z3TestDataFrameIndexingWhere.test_where_ndframe_alignc                 C   s   t ddddgddddgddd}t tjtjddgddtjtjgddd}||dktj}t|| | }|j|dktjd	d
}|d kstt|| d S )Nr          @      @      @rt   rS   rP   rg   Trl   )r   r   re   r6   r8   r:   rn   r=   )rM   r1   rY   rX   ro   r    r    r!   test_where_bug1  s      z)TestDataFrameIndexingWhere.test_where_bugc                 C   s   t tjddddg|dtjdddd	gd
dd}t tjtjddgddtjtjgdd
d}||dktj}t|| | }|j|dktjdd}|d kstt|| d S )Nr)   rg   r   rr   rP   r   r   r   r   rS   rt   Trl   )	r   r   r   re   r6   r8   r:   rn   r=   )rM   Zany_signed_int_numpy_dtyper1   rY   rX   ro   r    r    r!   test_where_bug_mixedB  s     z/TestDataFrameIndexingWhere.test_where_bug_mixedc                 C   s   t ddgddgddgd}t tjdgd	tjgtjtjgd}| ||kB }| }||| < |||}t|| t ddgdd
gd}t tjdgdtjgd}| ||kB }| }||| < |||}t|| d S )Nr)   rg   r   rr   r   r   )r   r)   rg   r   r   r   r   r)   )r   r   re   r   rn   r6   r8   r:   )rM   ru   rv   Zdo_not_replacerY   rX   r    r    r!   test_where_bug_transpositionX  s    $

z7TestDataFrameIndexingWhere.test_where_bug_transpositionc              	   C   s   t tdddtdddtjdd}tddd}d	}tjt|d
 ||k W 5 Q R X ||j	d d d df |k }|
 }tj|jddgdf< |rtnd }d}tj||d
 tj|jd d df< W 5 Q R X t|| d S )NZ20130102r   periodsZ20130104r   r   r   i  r)   r   zF'>' not supported between instances of 'float' and 'datetime.datetime'rG   r   r   &will attempt to set the values inplacer   )r   r   r   r   r   r   rJ   rK   rL   rV   rn   re   locDeprecationWarningr8   assert_produces_warningr:   )rM   using_array_managerr1   ZstamprN   rX   rY   warnr    r    r!   test_where_datetimen  s$    


z.TestDataFrameIndexingWhere.test_where_datetimec                 C   s   t dttdit}d ||dk< t dtdddddd	d
dtjtjg
i}t|| t dtjddtjdtjdg}d}t	j
t|d |jt| d dd W 5 Q R X d S )NZseries
   rs   r   r)   rg   r   rr   r   r   ZTestr   zboolean setting on mixed-typerG   Trl   )r   r   rw   astypefloatr   re   r8   r:   rJ   rK   rL   r6   r   )rM   r1   rY   rN   r    r    r!   test_where_none  s    "z*TestDataFrameIndexingWhere.test_where_nonec                 C   s<   t dgd}|}|jtk s"t||}t|| d S )Nru   r   )r   r;   objectr<   r=   r6   r8   r:   )rM   r1   r>   rX   r    r    r!   9test_where_empty_df_and_empty_cond_having_non_bool_dtypes  s
    
zTTestDataFrameIndexingWhere.test_where_empty_df_and_empty_cond_having_non_bool_dtypesc                 C   s   dd }| }| | }|jt|| dd}t|| |jt|| ddd}|d ksjtt|| |  d}|jdd	 |d d
}|j|dk|d dd}t|| |j|dk|d dd}t|| | }| d}|t|t	d|j
|jd}t|| d S )Nc                  S   sR   t tjdd} tj| jdddf< tj| jdddf< tj| jddd	f< | S )
Nr   r   r   r   rr   r   r)   r   rg   )r   r   r   r   re   rV   r0   r    r    r!   create  s
    z;TestDataFrameIndexingWhere.test_where_align.<locals>.creater   axisTrm   r   r   c                 S   s   |  | dk|S Nr   )r6   )xyr    r    r!   <lambda>      z=TestDataFrameIndexingWhere.test_where_align.<locals>.<lambda>r   r5   Zrowsr)   r   )r^   Zmeanr6   pdnotnar8   r:   r=   applyr   r5   r   )rM   r   r1   rY   rX   ro   r    r    r!   test_where_align  s*    
 z+TestDataFrameIndexingWhere.test_where_alignc                 C   s\   t ddgtjdggddgd}t ddgddggddgd}tj|| dk< t|| d S )	Ny      ?      ?rg   y      @      ?ru   rv   r   y      @      ?r   )r   r   re   absr8   r:   )rM   rY   r1   r    r    r!   test_where_complex  s    z-TestDataFrameIndexingWhere.test_where_complexc                 C   s  t tjdd}t ddgddgg}tddg}t ddgddggdd}|j||dd}t|| | }|j||dd	d
}|d kst	t|| t ddgddggdd}|j||dd}t|| | }|j||dd	d
}|d kst	t|| d S )Nrg   Fr   r)   rS   rP   r5   r   Tr   rm   r   )
r   r   r   r   r   r6   r8   r:   rn   r=   )rM   r   r1   rj   serrY   rX   ro   r    r    r!   test_where_axis  s"    z*TestDataFrameIndexingWhere.test_where_axisc                 C   s>  t ddgddggdd}t ddgddgg}tdtjg}t ddgtjtjggd	d}|j||d
d}t|| | }|j||d
dd}|d kstt|| t dtjgdtjgg}|j||dd}t|| t tj	ddgddtj	tjtjgd	dd}| }|j||ddd}|d ks.tt|| d S )Nr)   rg   r   rr   rU   rP   Fr   rS   r5   r   Tr   r   r   )
r   r   r   re   r6   r8   r:   rn   r=   r   )rM   r1   rj   r   rY   rX   ro   r    r    r!   test_where_axis_with_upcast  s,    z6TestDataFrameIndexingWhere.test_where_axis_with_upcastc              	   C   s0  t jttjddttjjddddddgdd	d
}td|j|jd}t	d	|jd}t	d|jd}|j
||dd}td|j|jd}|d d|d< |d d|d< t|| | }|j
||ddd}|d kstt|| |j
||dd}td|j|jd}|d d|d< |d d|d< t|| | }|j
||ddd}|d ksdtt|| | jd	dd}	| }tj|jd	d d f< |
||	}t|| |j
||	dd}t|| | }|j
||	dd}|d kstt|| | }|j
||	ddd}|d ks,tt|| | jd	d	d}
| }|r\tnd }d}tj||d tj|jd d d	f< W 5 Q R X |
||
}t|| |j
||
dd}t|| | }|j
||
dd}|d kstt|| | }|j
||
ddd}|d ks tt|| d S )Nr   rg   r   )r   rg   )sizerU   rP   Tr)   )Zignore_indexr   F)r   r5   r4   r   r   r   r   r   r5   r   rl   r   r   rG   )r   concatr   r   r   r   randintr   r5   r   r6   r   r8   r:   rn   r=   Zdropre   r   r   r   )rM   r   r1   rj   s1s2rX   rY   ro   d1Zd2r   rN   r    r    r!   test_where_axis_multiple_dtypes  sz    z:TestDataFrameIndexingWhere.test_where_axis_multiple_dtypesc                 C   sH  t dddgdddgddd	gg}|d
d dd }t dddgdddgddd	gg}t|| t|||dk|d  |dd dd }t dddgdddgdddgg}t|| t|||d dkd |d dd dd }t dddgdddgd	ddgg}t|| t||d |d dk|d d  d S )Nr)   rg   r   rr   r   r   rs   r   r   c                 S   s   | dkS )Nrr   r    r   r    r    r!   r   S  r   z@TestDataFrameIndexingWhere.test_where_callable.<locals>.<lambda>c                 S   s   | d S Nr)   r    r   r    r    r!   r   S  r   c                 S   s   | d dkj S )Nrg   r   )r7   r   r    r    r!   r   Y  r   c                 S   s   dS )Nc   r    r   r    r    r!   r   Y  r   r   r   c                 S   s   | dkS )Nr   r    r   r    r    r!   r   _  r   c                 S   s   | d S )Nr   r    r   r    r    r!   r   _  r                     r      )r   r6   r8   r:   )rM   r1   rX   rD   r    r    r!   test_where_callableP  s        z.TestDataFrameIndexingWhere.test_where_callablec                 C   s   t tdddg|ddgd}t tdddg|ddgd}t d	d	d
gdgd}t tdddg|ddgd}|tkr|d }|d }|d }|d }|||}t|| d S )NZ20150101Z20150102Z20150103)tzdater   Z20150104Z20150105TF)r   r   r   r6   r8   assert_equal)rM   Ztz_naive_fixtureframe_or_seriesZobj1obj2rj   rD   rX   r    r    r!   test_where_tz_valuesd  s(    z/TestDataFrameIndexingWhere.test_where_tz_valuesc                 C   sz   t tdddtdd}tdddgdddgg}||}t dtjtjgtjtjd	ggtdd}t	|| d S )
Nr   rg   r   ABCr   TFr   r   )
r   r   arangereshapelistr   r6   re   r8   r:   )rM   r1   rj   rX   rY   r    r    r!   test_df_where_change_dtype{  s    
 z5TestDataFrameIndexingWhere.test_df_where_change_dtypekwargsr`   Nc           	      C   s  t tdddtdd}tdddgdddgg}|jd|_|jd|_|j	d|_	|j
|f|}tjd	tjgd	dgd
}tjtjtjgddgd
}tjtjdgddgd
}t |||d}t|| |jj
|d d d	f f|}t|dd}t|| d S )Nr   rg   r   r   r   TFcategoryr   )
categoriesr)   rr   r   r   r   )r[   )r   r   r   r   r   r   r   r   r   r   r6   r   ZCategoricalre   r8   r:   r   r9   )	rM   r   r1   rj   rX   r   r   r   rY   r    r    r!   test_df_where_with_category  s    z6TestDataFrameIndexingWhere.test_df_where_with_categoryc                 C   sl   t ddgddggddgd}|d d|d< ||d dk}| }tj|jdd d f< t|| d S )Nr   r)   ru   rv   datar   r   )	r   r   r6   rn   r   re   r   r8   r   rW   r    r    r!    test_where_categorical_filtering  s    z;TestDataFrameIndexingWhere.test_where_categorical_filteringc                 C   s   t dddgdddgd}tdtjd	g}t|}tj|jtd
}d|dd d f< |j	||dd}t dtjdgdtjdgd
t}t|| t|d d ddgd}t dddgdtjdgd}|d 
t|d< |j	||dd}t|| d S )Nr)   rg   r   rr   r   r   r   r   rs   r   rP   Fr   r   r   r   r4   )r   r   r   NAr   r   Zonesshapeboolr6   r   r   r8   r:   )rM   r1   arrr   rj   rX   rY   Zser2r    r    r!   test_where_ea_other  s    $z.TestDataFrameIndexingWhere.test_where_ea_otherc                 C   sR   t tddg}|| }t|| |d }|| }t|| d S r   )r   r   Intervalr6   r   r8   r:   r9   )rM   r1   resr   r    r    r!   test_where_interval_noop  s    z3TestDataFrameIndexingWhere.test_where_interval_noopc                 C   sr   |t ddgd }|ddg}||  |}t||tj |j	| |dd t||t
 d S )Nr   rg   r   r   Trl   )r   r   r6   r   r8   r   r   r   rU   rj   r   )rM   r   objr`   r   r    r    r!   #test_where_interval_fullop_downcast  s    z>TestDataFrameIndexingWhere.test_where_interval_fullop_downcastr$   ztimedelta64[ns]zdatetime64[ns]zdatetime64[ns, Asia/Tokyo]z	Period[D]c                 C   s   t tdd tjd|}| }tdddg}|| d}t	|| |
dd}|| d}t|| ||d}t	|| ||d}	t|	| ||d}
td|j|jd	}t|
| |j| dd
d t||t d S )Nr   i ʚ;rP   FZfoor   r)   rr   r   Trl   )r   r   r   rU   viewZto_framer   r6   r8   r9   r   r:   rj   r   r5   r   r   r   )rM   r$   r   r1   rj   r   Zmask2Zres2Zres3Zres4Zres5rY   r    r    r!   test_where_datetimelike_noop  s"    z7TestDataFrameIndexingWhere.test_where_datetimelike_noop).__name__
__module____qualname__rO   rZ   rf   rk   rq   rx   rJ   markparametrizer   tupler   r   rz   r   r   r
   r   NaTr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r3   .   s|   2$



	!J

	r3   c              	   C   sP   t tjdd}t|| }|dk}tt |j|ddd W 5 Q R X d S )Nrr   r   r   r   F)Ztry_cast)	r   r   r   r   r8   get_objr   FutureWarningr6   r   r   rj   r    r    r!   test_where_try_cast_deprecated  s
    r   c                  C   s   t dt jdd} t| }t j| jtd}d|d d df< |	|d}t| d d df t j
dgd t jdd}t|| d S )	Nr   r   rg   rP   Tr   i   r   )r   r   r   Zint16r   r   zerosr   r   r6   r   rT   r8   r:   )r   r1   rj   r   rY   r    r    r!   %test_where_int_downcasting_deprecated
  s    ,r   c                 C   s~   | ddddg}|  }| tkr(|d n|}||dk }|d9 }t|| ||dkddddg}|d9 }t|| d S )Nr)   rg   r   rr   r   r   )rn   r   r6   r8   r   )r   rX   rY   colZ	where_resr    r    r!   test_where_copies_with_noop  s    r   c                 C   s   | ddddgddddgt  d	}| ddgddgt  d	}td
ddd
g}|||}| tjddtjgddddgt  d	}t|| || |}t|| |j| |dd t|| d S )Nru   rv   r+   rb   Zid1Zid2Zid3Zid4)r5   r$   FTrl   )r	   r   r6   r   r   r8   r   rj   )r   r   Zfiltered_objZ
filter_serrX   rY   r    r    r!   test_where_string_dtype)  s,    
 
   
r   c                  C   sv   t dgd dgd ddddgd} | | dk}t tjtjgd tddgd tjdtjdgd}t|| d S )NTrr   F)ZAAAZBBBZCCCrP   )r   r6   r   r   re   r   r8   r:   )Zdf_maskrX   rY   r    r    r!   test_where_bool_comparisonB  s    r   c                  C   sF   t tdtjtdgddtjgd} | |  d }t	||  d S )NZ20130101Z20130103r)   rg   r   )
r   r
   r   r   r   re   r6   notnullr8   r:   )rY   rX   r    r    r!   test_where_none_nan_coerceR  s    
r   c                  C   s   t dtjggtddgd} | j\}}t ddgg||d}| t|}| d|}| j|jj}| |}t	
|d|d t	
|d|d t	
|d|d d S )Nr   r   r   T)r   r   r5   Zf8)r   r   re   r   Zaxesr   r   r6   Tr8   r:   )rX   r5   r   rj   ru   rv   r+   rb   r    r    r!   &test_where_duplicate_axes_mixed_dtypes^  s    

r   c              	   C   sh   | t d}d| j d}tjt|d ||dkdd}W 5 Q R X | dddd	d
g}t|| d S )Nr   z/In a future version of pandas all arguments of zG.where except for the arguments 'cond' and 'other' will be keyword-onlyrG   r)   r   Frg   r   rr   )rw   r   r8   r   r   r6   r   )r   r   rN   rX   rY   r    r    r!   "test_where_non_keyword_deprecationm  s    r   c                  C   sB   t ddgdtjgd} |  }| t| d }t|| d S )Nr   r   r   rt   )	r   r   re   rn   r6   r   r   r8   r:   )r1   rY   rX   r    r    r!   test_where_columns_casting{  s    r   as_catTFc           
   	   C   sH  t jdddd}|r|d}| |}t jd}tjdddg|jd	j}|rTd
}nd}|rt	j
t|d ||| W 5 Q R X t	j
t|d ||| W 5 Q R X t	j
t|d |j||dd W 5 Q R X np|t||}|||}	t|	| |t||}|||}	t|	| |j||dd t|| d S )N
2016-01-01r   D)r   freqr   m8[ns]TFZndminzUCannot setitem on a Categorical with a new category \(NaT\), set the categories firstzvalue should be a 'Period'rG   rl   )r   Zperiod_ranger   r   Zto_numpyr   r   ndimr   rJ   rK   rL   r6   rj   r   r8   r   )
r   r   r   idxr   Ztdnatrj   rN   rY   rX   r    r    r!   test_where_period_invalid_na  s2    
r  c              
   C   s   t jdddg|d}| |}tjdddg|jdj}d}tjt jg D ]P}tj	t
|d	 ||| W 5 Q R X tj	t
|d	 ||| W 5 Q R X qFd S )
Nr)   rg   r   rP   TFr  z1Invalid value '.*' for dtype (U?Int|Float)\d{1,2}rG   )r   r   r   r  r   r8   ZNP_NAT_OBJECTSr   rJ   rK   rL   r6   rj   )r   Zany_numeric_ea_dtyper   r   rj   rN   nullr    r    r!   test_where_nullable_invalid_na  s    r	  )r   c                 C   sH   t d| i}|t|d  }|jt|d dd t|| d S )Nru   Trl   )r   r6   r   r   rn   r8   r   )r   r1   Zdf_copyr    r    r!   test_where_inplace_casting  s    r
  c                  C   sX   t dddg} tdddg}tjdd}| ||}t |||gdd}t|| d S )Nr)   rg   r   F)daysr  rP   )r   r   r   r   Z	Timedeltar6   r8   r9   )r   rj   tdr   rY   r    r    r!   test_where_downcast_to_td64  s    r  c                 C   s~   |  ||}t|| | | |}t|| |  } | j| |dd | sn| }|d t|d< t| | d S )NTrl   r   )r6   r8   r:   rj   rn   r<   r   r   )r1   rj   r`   rY   r   r    r    r!   _check_where_equivalences  s    r  c                  C   s   t ddd} | jdd}||d  }t|ddgd	}t| }d
|d d df< t|d d df |d d df d}t|||| d
|d< ttj|d |d |d gt	d|d d df d}t|||| d
|d d < |}t|||| d S )Nr   r   r   r   rg   )r   r   r   r   r   Tr)   r   r   )r)   r   )rg   r   rP   )
r   _datar   r   r   Zasarrayr   r  r   r   )ZdtiZdtar`   r1   rj   rY   r    r    r!   test_where_dt64_2d  s$    &r  c              	   C   sv   t tjdd}t|| }|dk}tt |j|ddd W 5 Q R X tt |j	|ddd W 5 Q R X d S )Nrr   r   r   r   raise)errors)
r   r   r   r   r8   r   r   r   r6   rj   r   r    r    r!   test_where_mask_deprecated  s    r  c                  C   sj   t tdtjdgdddddgd} | dd }t ttjtjdgddtjddgd}t|| d S )	Nr)   rg   ZInt64rP   r   rt   c                 S   s   | j dd ddS )Nc                 S   s   | dkS r   r    r   r    r    r!   r     r   zMtest_where_producing_ea_cond_for_np_dtype.<locals>.<lambda>.<locals>.<lambda>r)   r   )r   r   r    r    r!   r     r   z;test_where_producing_ea_cond_for_np_dtype.<locals>.<lambda>)	r   r   r   r   r6   r   re   r8   r:   )r1   rX   rY   r    r    r!   )test_where_producing_ea_cond_for_np_dtype  s    $"r  ).r   Z
hypothesisr   Znumpyr   rJ   Zpandas.core.dtypes.commonr   Zpandasr   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr8   Zpandas._testing._hypothesisr   Zfixturer"   r2   r3   r   r   r   r   r   r   r   r   r   r   r   r  r	  r
  r  r  r  r  r  r    r    r    r!   <module>   sH   (


     V

-
