o
    g}f                     @   s   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 d dlmZ ejg d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S )    )datetimeN)	is_scalar)	DataFrameDatetimeIndexSeriesStringDtype	Timestamp
date_rangeisna)defaultfloat_stringmixed_float	mixed_int)paramsc                 C   sR   | j dkrttjddg ddS | j dkr|S | j dkr |S | j dkr'|S d S )	Nr         ABCcolumnsr   r   r   )paramr   nprandomrandn)requestfloat_string_framemixed_float_framemixed_int_frame r    d/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/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 )Nuint8)
issubclassdtypetyper   integerfloating)sr    r    r!   is_ok#   s   z_safe_add.<locals>.is_okc                 3   s0    | ]\}} |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   r4   c                   @   s  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g d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g dg d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&e	j
dBi dCdDigdEdF Z'dGdH Z(dIdJ Z)dDS )KTestDataFrameIndexingWherec                 C   sl   ddd}|}||u r+d}t jt|d |dk W d    d S 1 s$w   Y  d S |dk}||| d S )NTc           	      S   s   t | }| ||}| |j|}| D ]\}}tt|| | | || |jd}tj||dd qt	|| |rF|j
| j
k sHJ d S d S )NindexF)check_names)r4   wherevaluesr1   r   r   r7   tmassert_series_equalassert_frame_equaldtypesall)	r3   condcheck_dtypesother1rsrs2kvexpr    r    r!   
_check_get-   s   $z=TestDataFrameIndexingWhere.test_where_get.<locals>._check_get6'>' not supported between instances of 'str' and 'int'matchr   Tpytestraises	TypeError)selfr"   r   rH   r3   msgr@   r    r    r!   test_where_get,   s   


z)TestDataFrameIndexingWhere.test_where_getc                 C   sj   t dd dD }d|jdd d f< |j}ttdtdtdtd	gg d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>G   s    zCTestDataFrameIndexingWhere.test_where_upcasting.<locals>.<dictcomp>)float32float64int32int64r   r+   rV   rW   rX   rY   r6   )r   ilocr>   r   r   r%   r;   r<   rQ   r3   resultexpectedr    r    r!   test_where_upcastingD   s    z/TestDataFrameIndexingWhere.test_where_upcastingc                 C   s   ddd}|}||u r+d}t jt|d |dk W d    d S 1 s$w   Y  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 ]Y\}}|| }| | j}|| | | jdj}	t|r-|}
nt|t	j
rBt|d d |f |jdj}
n|| j}
|	 rM|nt	 |	||
}t||j|d}tj||dd q|rwt|t	j
sy|j| jk s{J d S d S d S )NFr6   )r7   name)check_dtype)r9   	enumerater   r:   reindexr7   fillnar   
isinstancer   ndarrayr   r?   r;   r<   r>   )r3   r@   otherrA   rC   irE   r\   dr-   o
new_valuesr]   r    r    r!   _check_align`   s"   

zETestDataFrameIndexingWhere.test_where_alignment.<locals>._check_alignrI   rJ   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>)rA   rL   )	rN   rO   rP   r4   r:   r?   r>   r   nan)rQ   r"   r   rk   r3   rR   r@   rA   r    r    r!   test_where_alignment^   s"   


z/TestDataFrameIndexingWhere.test_where_alignmentc                 C   sN  t tjddg dd}|dk}|d jddd d f }d}tjt|d	 ||| W d    n1 s8w   Y  |j	d dd d f j}t
|}d
}tjt|d	 ||| W d    n1 sgw   Y  tjt|d	 |d W d    n1 sw   Y  tjt|d	 |d W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r+      z4other must be the same shape as self when an ndarrayrJ   ,Array conditional must be same shape as selfT)r   r   r   r   r:   rN   rO   
ValueErrorr9   rZ   r4   mask)rQ   r3   r@   err1rR   err2rB   r    r    r!   test_where_invalid   s&   "z-TestDataFrameIndexingWhere.test_where_invalidc                 C   s   ddd}|}||u r+d}t jt|d |dk W d    d S 1 s$w   Y  d S |dk}||| |dk}||| |dkdd  }||| d S )	NTc           	      S   s   |   }|| d}|| }|j|tjdd}|d u s!J t|| |rN| j	
 D ]!\}}t|jtjrD||  sDtd}|| j|ksMJ q.d S d S )NTinplacerW   )copyreindex_likerc   rq   r9   r   rl   r;   r=   r>   r1   r$   r&   r'   r?   r%   )	r3   r@   rA   dfiecondr]   return_valuerE   rF   r    r    r!   
_check_set   s   
z=TestDataFrameIndexingWhere.test_where_set.<locals>._check_setrI   rJ   r   r+   rL   rM   )rQ   r"   r   r|   r3   rR   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br   r+   )r   ranger9   rb   r7   r;   r=   r[   r    r    r!   test_where_series_slicing   s   z4TestDataFrameIndexingWhere.test_where_series_slicingklassc                 C   s   t dg d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 )Nr   r+   rn   r   FTrn   r   r   )r   r   rl   r9   r;   r=   )rQ   r   r3   r@   r]   r\   r    r    r!   test_where_array_like   s   z0TestDataFrameIndexingWhere.test_where_array_liker@   r+   r   rn   r   r   r   )rn   r   r   TrueFalsez
2017-01-01z
2017-01-02c                 C   sR   t dg di}d}tjt|d || W d    d S 1 s"w   Y  d S )Nr   r   (Boolean array expected for the conditionrJ   r   rN   rO   rp   r9   rQ   r@   r3   rR   r    r    r!   test_where_invalid_input_single   s
   "z:TestDataFrameIndexingWhere.test_where_invalid_input_singler~   )r~      	   r   z
2017-01-03c                 C   sX   t g dg dd}d}tjt|d || W d    d S 1 s%w   Y  d S )Nr   )rn   rn   rn   r   r   rJ   r   r   r    r    r!   !test_where_invalid_input_multiple   s
   "z<TestDataFrameIndexingWhere.test_where_invalid_input_multiplec                 C   s   t g dg dg}t g dg dg}||}t dtjdgtjtjdgg}t|| g d|_||}t tj|j|jd	}t|| d S )
Nr   r~   r      )TFTFFT      ?r   r   )r   r   r-   r7   r   )r   r9   r   rl   r;   r=   r   r7   )rQ   r3   r@   r\   r]   r    r    r!   test_where_dataframe_col_match
  s   


z9TestDataFrameIndexingWhere.test_where_dataframe_col_matchc                 C   s  d}t g dg dg}dg}tjt|d || W d    n1 s&w   Y  t g dtjtjtjgg}|t|}t	|| t
g d}tjt|d || W d    n1 sdw   Y  t tjtjtjgg dg}|t|}t	|| d S )Nro   r   r   TrJ   )FTFT)r   rN   rO   rp   r9   r   rl   r   r;   r=   array)rQ   rR   r3   r@   r]   outr    r    r!   test_where_ndframe_align  s    z3TestDataFrameIndexingWhere.test_where_ndframe_alignc                 C   s   t g dg d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 u sFJ t|| d S )N)r          @      @      @r   r   r   r   r   rW   rT   r   r   rn   Tru   )r   r   rl   r9   r;   r=   rw   )rQ   r3   r]   r\   r{   r    r    r!   test_where_bug.  s    z)TestDataFrameIndexingWhere.test_where_bugc                 C   s   t tjg d|dtjg d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 u sNJ t|| d S )Nr+   rn   r   r~   rT   r   rW   r   r   r   rn   Tru   )r   r   r   rl   r9   r;   r=   rw   )rQ   
sint_dtyper3   r]   r\   r{   r    r    r!   test_where_bug_mixed?  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+   rn   r   r~   r   r   )r   r+   rn   r   r   r   r   r+   )r   r   rl   r
   rw   r9   r;   r=   )rQ   r   r   do_not_replacer]   r\   r    r    r!   test_where_bug_transpositionU  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 d    n1 s2w   Y  ||j	d d d df |k }|
 }tj|jddgdf< tj|jd d df< t|| d S )N20130102r   )periods20130104r   i  r+   r   zF'>' not supported between instances of 'float' and 'datetime.datetime'rJ   r   r   r   )r   r	   r   r   r   r   rN   rO   rP   rZ   rw   rl   locr;   r=   )rQ   r3   stamprR   r\   r]   r    r    r!   test_where_datetimek  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 d    d S 1 s^w   Y  d S )Nseries
   r   r   r+   rn   r   r~   r   r   Testr   zboolean setting on mixed-typerJ   Tru   )r   r   r   astypefloatr   rl   r;   r=   rN   rO   rP   r9   r
   )rQ   r3   r]   rR   r    r    r!   test_where_none  s   ""z*TestDataFrameIndexingWhere.test_where_nonec                 C   s<   t dgd}|}|jtk sJ ||}t|| d S )Nr   r   )r   r>   objectr?   r9   r;   r=   )rQ   r3   r@   r\   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 u s5J 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   r~   r   r+   r   rn   )r   r   r   r   rl   rZ   r2   r    r    r!   create  s
   z;TestDataFrameIndexingWhere.test_where_align.<locals>.creater   axisTrv   r   r   c                 S   s   |  | dk|S )Nr   )r9   )xyr    r    r!   <lambda>  s    z=TestDataFrameIndexingWhere.test_where_align.<locals>.<lambda>)r   r7   rowsr+   r   )rc   meanr9   pdnotnar;   r=   applyr   r7   r   )rQ   r   r3   r]   r\   r{   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      ?      ?rn   y      @      ?r   r   r   y      @      ?r   )r   r   rl   absr;   r=   )rQ   r]   r3   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 u sFJ t|| t ddgddggdd}|j||dd}t|| | }|j||dd	d
}|d u syJ t|| 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 u sJ 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 u sJ t|| d S )Nrn   Fr   r+   rW   rT   r7   r   Tr   rv   r   r   r~   rY   r   )r   r   r   r   r   r9   r;   r=   rw   rl   r   )rQ   r3   rq   r)   r]   r\   r{   r    r    r!   test_where_axis  sN   z*TestDataFrameIndexingWhere.test_where_axisc           
      C   s   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 u soJ t|| |j
||dd}td|j|jd}|d d|d< |d d|d< t|| | }|j
||ddd}|d u sJ t|| | jd	dd}| }tj|jd	d d f< |
||}t|| |j
||dd}t|| | }|j
||dd}|d u sJ t|| | }|j
||ddd}|d u sJ t|| | jd	d	d}	| }tj|jd d d	f< |
||	}t|| |j
||	dd}t|| | }|j
||	dd}|d u s^J t|| | }|j
||	ddd}|d u sxJ t|| d S )Nr   rn   r   )r   rn   )sizerY   rT   Tr+   )ignore_indexr   F)r   r7   r6   r   r   r   r   r   r7   r   ru   r   )r   concatr   r   r   r   randintr   r7   r   r9   r   r;   r=   rw   droprl   r   )
rQ   r3   rq   s1s2r\   r]   r{   d1d2r    r    r!   test_where_axis_multiple_dtypes  st   z:TestDataFrameIndexingWhere.test_where_axis_multiple_dtypesc                 C   s0  t g dg dg dg}|dd dd }t g dg dg dg}t|| t|||d	k|d
  |dd dd }t g dg dg dg}t|| t|||d dkd |d dd dd }t g dg dg dg}t|| t||d |d dk|d d  d S )Nr   r   )r   r   r   c                 S      | dkS )Nr~   r    r   r    r    r!   r   H      z@TestDataFrameIndexingWhere.test_where_callable.<locals>.<lambda>c                 S      | d S )Nr+   r    r   r    r    r!   r   H  r   )rn   r   r~   )r   r   r   r~   r+   c                 S   s   | d dkj S )Nrn   r   )r:   r   r    r    r!   r   N  s    c                 S   s   dS )Nc   r    r   r    r    r!   r   N  s    )r   rn   r   )r~   r   r   )r   r   r   rn   r   r   c                 S   r   )Nr   r    r   r    r    r!   r   T  r   c                 S   r   )Nr   r    r   r    r    r!   r   T  r   )         )         )r   r      r   r   )r   r9   r;   r=   )rQ   r3   r\   rG   r    r    r!   test_where_callableE  s   ,z.TestDataFrameIndexingWhere.test_where_callablec                 C   s|   t tg d|ddgd}t tg d|ddgd}t g ddgd}t tg d|ddgd}|||}t|| d S )N)201501012015010220150103)tzdater   )r   2015010420150105)TTF)r   r   r   )r   r   r9   r;   r=   )rQ   tz_naive_fixturedf1df2rq   rG   r\   r    r    r!   test_where_tz_valuesY  s   z/TestDataFrameIndexingWhere.test_where_tz_valuesc                 C   sv   t tdddtdd}tg dg dg}||}t dtjtjgtjtjd	ggtdd}t	|| d S )
Nr   rn   r   ABCr   TFFr   r   r   )
r   r   arangereshapelistr   r9   rl   r;   r=   )rQ   r3   rq   r\   r]   r    r    r!   test_df_where_change_dtypej  s   
 z5TestDataFrameIndexingWhere.test_df_where_change_dtypekwargsrf   Nc           	      C   s  t tdddtdd}tg dg dg}|jd|_|jd|_|j	d|_	|j
|fi |}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i |}t|dd}t|| d S )Nr   rn   r   r   r   r   r   categoryr   )
categoriesr+   r~   r   r   r   )r_   )r   r   r   r   r   r   r   r   r   r   r9   r   Categoricalrl   r;   r=   r   r<   )	rQ   r   r3   rq   r\   r   r   r   r]   r    r    r!   test_df_where_with_categoryv  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+   r   r   )datar   r   )	r   r   r9   rw   r   rl   r   r;   assert_equalr[   r    r    r!    test_where_categorical_filtering  s   z;TestDataFrameIndexingWhere.test_where_categorical_filteringc                 C   s   t g dg d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 g ddtjdgd}|d 
t|d< |j	||dd
}t|| d S )Nr   r   r   r   r   r   rT   Fr+   r   r   r   r~   r   rn   r   r   r6   )r+   r   r   )r   r   r   NAr   r   onesshapeboolr9   r   r   r;   r=   )rQ   r3   arrserrq   r\   r]   ser2r    r    r!   test_where_ea_other  s   $z.TestDataFrameIndexingWhere.test_where_ea_other)*__name__
__module____qualname__rS   r^   rm   rt   r}   r   rN   markparametrizer   tupler   r   r   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!   r5   +   sf    2$



	!5G
r5   c                 C   sj   t tjdd}| t ur|d }|dk}tt |j|ddd W d    d S 1 s.w   Y  d S )Nr~   r   r   r   F)try_cast)r   r   r   r   r;   assert_produces_warningFutureWarningr9   )frame_or_seriesobjrq   r    r    r!   test_where_try_cast_deprecated  s   "r
  c                 C   sv   | g d}|  }| tu r|d n|}||dk }|d9 }t|| ||dkg d}|d9 }t|| d S )Nr   r   r   rn   )rw   r   r9   r;   r   )r  r\   r]   col	where_resr    r    r!   test_where_copies_with_noop  s   r  c                 C   sx   | g dg dt  d}| ddgddgt  d}tg d}|||}| tjddtjgg dt  d}t|| d S )	N)r   r   r-   rh   )id1id2id3id4)r7   r%   r   r-   r  r  )FTTF)r   r   r9   r   r   r;   r   )r  r	  filtered_obj
filter_serr\   r]   r    r    r!   test_where_string_dtype  s   r  c                  C   sr   t dgd dgd g d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 )NTr~   F)TFTF)AAABBBCCCrT   )r   r9   r   r   rl   r   r;   r=   )df_maskr\   r]   r    r    r!   test_where_bool_comparison  s   r  c                  C   sF   t tdtjtdgddtjgd} | |  d }t	||  d S )N2013010120130103r+   rn   r   )
r   r   r   r  r   rl   r9   notnullr;   r=   )r]   r\   r    r    r!   test_where_none_nan_coerce  s   
r  c                  C   sl   t td} d}tjt|d | | dkdd}W d    n1 s#w   Y  t g d}t|| d S )Nr   zIn a future version of pandas all arguments of DataFrame.where except for the arguments 'cond' and 'other' will be keyword-onlyrJ   r+   r   F)r   r   rn   r   r~   )r   r   r;   r  r  r9   r=   )r)   rR   r\   r]   r    r    r!   "test_where_non_keyword_deprecation  s   r  )r   numpyr   rN   pandas.core.dtypes.commonr   pandasr   r   r   r   r   r   r	   r
   pandas._testing_testingr;   fixturer"   r4   r5   r
  r  r  r  r  r  r    r    r    r!   <module>   s,    $	

     