U
    sVc01                     @   s  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
 d dlmZ dd Zdd Zejdejejfejejfejejfejejfejejfejejfgd	d
 Zdd Zdd Zdd Zejdeeejegdd Zejddd dgedddgdddgedej edggdd Z!dd  Z"d!d" Z#ejd#e$dd$ejd%d&d'd'd'd'gd&d'gd'ggejd(d)ej%e&e'j(e&e'j)gejd*d+d, d-d, d.d, gd/d0 Z*d1d2 Z+d3d4 Z,d5d6 Z-ejd7d8d9gd:d; Z.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dDdE Z3dS )F    N)
is_integer)Series	Timestamp
date_rangeisnac                 C   s\   t td| d}|dk }tdd||< t ttddttdd | d}t|| d S N
   dtype         r   nparangerangelisttmassert_series_equal)Zany_signed_int_numpy_dtypesmaskexpected r   K/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/series/indexing/test_where.pytest_where_unsafe_int   s    r   c                 C   s`   t td| d}|dk }tdd||< ttddttdd }t || d}t|| d S r   r   )Zfloat_numpy_dtyper   r   datar   r   r   r   test_where_unsafe_float   s    r   zdtype,expected_dtypec                 C   sZ   t td| d}dddddg}|dk }t |ttdd |d}|||< t|| d S )	Nr   r	         @      @      @      @g      @r   )r   r   r   r   r   r   r   )r
   Zexpected_dtyper   valuesr   r   r   r   r   test_where_unsafe_upcast(   s    r"   c               	   C   s:  t tddd} ddddg}| dk}t ttd	| d
d}|| |< t| | t tddd} | dk }tdd| |< t ttddttdd dd}t| | | j|jkstt tddd} | dk}dgd | |< t ddddddgdgd  dd}t| | t td} | dk}d}t	j
t|d dddddg| |< W 5 Q R X t	j
t|d dgd | |< W 5 Q R X t ddddg} | | dktj}t tjtjddg}t|| t tdt} d | d< | d }t|stt tdt} d | | dk< | t|  }t tjdgd}t|| d S )Nr   int64r	   r   r   r   r    r      float64r   r   r            Kcannot set using a list-like indexer with a different length than the valuematch   	   index)r   r   r   r   r   r   r   r
   AssertionErrorpytestraises
ValueErrorwherenanastypefloatr   )r   r!   r   r   msgresultr   r   r   test_where_unsafe=   sJ    $"r:   c                  C   s  t tjd} | dk}| | }| | }t|| | ||  }t||   | |}| j	|j	ksrt
|| k	s~t
t dddddg| jd}|   }|| |jd d |j}||d d }t|| | }|d |jd< ||d d | }t|| d S )Nr   r   TFr.   r(   )r   r   randomrandnr4   dropnar   r   absshaper0   r/   ZreindexZiloc)r   condrsZrs2s2r   r   r   r   
test_wheret   s&    

 rC   c               	   C   s   t tjd} | dk}d}tjt|d | d W 5 Q R X tjt|d | |d d j|   W 5 Q R X t ddg} ddg| dd	g< t ddg}t	
| | d
}tjt|d dddg| dd	g< W 5 Q R X tjt|d g | dd	g< W 5 Q R X d S )Nr   r   ,Array conditional must be same shape as selfr*   r'   r(   r   TFr)   )r   r   r;   r<   r1   r2   r3   r4   r!   r   r   )r   r@   r8   r   r   r   r   test_where_error   s     "rE   klassc                 C   sF   t dddg}dddg}t tjddg}|| |}t|| d S )Nr'   r   r(   FT)r   r   r5   r4   r   r   )rF   r   r@   r   r9   r   r   r   test_where_array_like   s
    
rG   r@   r'   r   r   r   TrueFalsez
2017-01-01z
2017-01-02c              	   C   sd   t dddg}d}tjt|d ||  W 5 Q R X d}tjt|d |dg W 5 Q R X d S )Nr'   r   r(   z(Boolean array expected for the conditionr*   rD   T)r   r1   r2   r3   r4   )r@   r   r8   r   r   r   test_where_invalid_input   s    rJ   c               	   C   s   d} t dddg}dg}tjt| d || W 5 Q R X t dtjtjg}|t |}t|| t	ddddg}tjt| d || W 5 Q R X t tjdtjg}|t |}t|| d S )NrD   r'   r   r(   Tr*   F)
r   r1   r2   r3   r4   r   r5   r   r   array)r8   r   r@   r   outr   r   r   test_where_ndframe_align   s    rM   c               	   C   s2  dd } t td}tjt| dd ttd|dd< W 5 Q R X ttd|dd< t dd	d
g}t|t	j
| t td}tjt| dd ttd|ddd
< W 5 Q R X t td}ttd
|ddd
< t ddd	dddg}t|| t td}tjt| dd ttd|d d< W 5 Q R X ttd
|dd< t ddddd	dg}t|| t td}tjt| dd ttd|dd	d
g< W 5 Q R X t td}tjt| dd ttd
|dd	d
g< W 5 Q R X t td}ttd|d< t ttdddg}t|| d S )Nc                 S   s   d|  dS )Nzcannot set using a z/ indexer with a different length than the valuer   xr   r   r   <lambda>       z,test_where_setitem_invalid.<locals>.<lambda>abcslicer*      r   r(   r'   r   Zabcdefr&   bdefacz	list-liker   )r   r   r1   r2   r3   r   r   r   r6   r   r#   )r8   r   r   r   r   r   test_where_setitem_invalid   s>       r]   sizer$   r   TFitemg       @boxc                 C   s   t | gS N)r   rK   rN   r   r   r   rP   %  rQ   rP   c                 C   s   | gS ra   r   rN   r   r   r   rP   %  rQ   c                 C   s   | fS ra   r   rN   r   r   r   rP   %  rQ   c                    s   t || }t j| td t fddt|D }t }||< t|| t }|| |}t|| t }|	||}t|| d S )Nr	   c                    s    g | ]\}}|rn | qS r   r   ).0iZuse_itemr   r_   r   r   
<listcomp>0  s     z"test_broadcast.<locals>.<listcomp>)
r   resizer   r7   r   	enumerater   r   r4   r   )r^   r   r_   r`   Z	selectionr   r   r9   r   rd   r   test_broadcast  s    rh   c                  C   s   t tjd} | dk}|  }|j|dd t| | |  t|| | |  }|j||  dd t|| ||   d S )Nr   r   T)Zinplace)	r   r   r;   r<   copyr4   r   r   r=   )r   r@   rA   r   r   r   test_where_inplaceA  s    rj   c                  C   s   t ttd} t ttd}t| |g}||dk }t ddtjddtjgddddddgd}t	|| d||dk < t ddddddgddddddgd}t	|| ||dk   d7  < t ddddddgddddddgd}t	|| d S )	Nr(   r   r   r'   r.   r   r      )
r   r   r   pdconcatr4   r   r5   r   r   )s1rB   combr9   r   r   r   r   test_where_dupsP  s    ($$rp   c                  C   sN  t dddg} | | dkd}t|d r.tt|d s>tt|d sNtt|d ts`t|jdksnt| | dkdddg}t|d rtt|d stt|d stt|d tst|jdkst| | dktdddg}t|d rtt|d stt|d s&tt|d ts:t|jdksJtd S )	Nr'   r   r(   Xr   objectYZ)	r   r4   r   r0   
isinstancestrr
   r   rK   )r   wr   r   r   test_where_numeric_with_stringe  s&    rx   r
   ztimedelta64[ns]zdatetime64[ns]c                 C   s   t ddg| d}t ddg}tddg}||ddg}t|| ||d}t|| ||d}t|| ||ddg}t|| ||dtjg}t dd gdd}t|| d S )Nr'   r   r	   r   Fg      $@rr   )r   r   rK   r4   r   r   r5   )r
   serr   r   rA   r   r   r   test_where_datetimelike_coerce  s    rz   c                  C   sV   ddg} t dd | D dd}|t ddg}t tj|d	 gdd}t|| d S )
Nz2016-12-31 12:00:04+00:00z 2016-12-31 12:00:04.010000+00:00c                 S   s   g | ]}t |qS r   )r   )rb   tr   r   r   re     s     z)test_where_datetimetz.<locals>.<listcomp>zdatetime64[ns, UTC]r	   FTr'   )r   r4   rl   NaTr   r   )Z
timestampsry   rA   r   r   r   r   test_where_datetimetz  s
    r}   c                  C   sH   t tjddg} | | dkd}t tjddg}t|| d S )Nr'   r   r   )r   rl   ZarraysZSparseArrayr4   r   r   )ry   r9   r   r   r   r   test_where_sparse  s    r~   c                  C   s&   t g td} | g }t||  d S )Nr	   )r   r7   r4   r   r   )ry   r9   r   r   r   =test_where_empty_series_and_empty_cond_having_non_bool_dtypes  s    
r   c                 C   s\   | t jddddtjgdddgddd}| dddddgdd}||dk}t|| d S )NABC)
categoriescategoryr	   )rl   Categoricalr   r5   r4   r   Zassert_equal)Zframe_or_seriesexpZdfresr   r   r   test_where_categorical  s    r   c                 C   s   | }t dd|dd }t|d |d tjg}t|d tj|d g}tdddg}|||}t	
|| |j||}t	||j t|||}t	|t| t||d d d f t|}t	|t| d S )	Nz
2001-01-01r(   )Zperiodstzr   r'   r   TF)r   Z
_with_freqrl   ZDatetimeIndexr|   r   r   rK   r4   r   Zassert_index_equal_dataZ_whereZassert_datetime_array_equalr   r   Z	DataFrameZassert_frame_equal)Ztz_naive_fixturer   ZdrZlvalsZrvalsr   r   r   r   r   #test_where_datetimelike_categorical  s    $r   )4Znumpyr   r1   Zpandas.core.dtypes.commonr   Zpandasrl   r   r   r   r   Zpandas._testingZ_testingr   r   r   markZparametrizeZint8r%   Zint16Zint32r#   Zfloat32r"   r:   rC   rE   r   tuplerK   rG   r|   rJ   rM   r]   r   r5   Zfinfor7   maxminrh   rj   rp   rx   rz   r}   r~   r   r   r   r   r   r   r   <module>   st   







7

	
9   
	