o
    d01                     @   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g deg dg d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#g d$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.d/ Z*d0d1 Z+d2d3 Z,d4d5 Z-ejd6d7d8gd9d: Z.d;d< Z/d=d> Z0d?d@ Z1dAdB Z2dCdD Z3dS )E    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   [/app/.heroku/python/lib/python3.10/site-packages/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   sT   t td| d}g d}|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   sL  t tddd} g d}| 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s[J t tddd} | dk}d
gd | |< t g dd
gd  dd}t| | t td} | dk}d}tj	t
|d g d| |< W d    n1 sw   Y  tj	t
|d d
gd | |< W d    n1 sw   Y  t g d} | | dktj}t tjtjddg}t|| t tdt} d | d< | d }t|sJ 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      )r      r      r&   r   Kcannot set using a list-like indexer with a different length than the valuematch)r   r&   r(   r   r'   )r'   r   r(   r&   r(      	   index)r   r   r   r   r   r   r   r
   pytestraises
ValueErrorwherenanastypefloatr   )r   r!   r   r   msgresultr   r   r   test_where_unsafe=   sN   $r9   c                  C   s  t tjd} | dk}| | }| | }t|| | ||  }t||   | |}| j	|j	ks9J || us?J t g d| j
d}|   }|| |j
d d |j
}||d d }t|| | }|d |jd< ||d d | }t|| d S )Nr   r   )TFFTFr.   r(   )r   r   randomrandnr3   dropnar   r   absshaper/   ZreindexZiloc)r   condrsZrs2s2r   r   r   r   
test_wheret   s&   

 rB   c                  C   sP  t tjd} | dk}d}tjt|d | d W d    n1 s%w   Y  tjt|d | |d d j|   W d    n1 sHw   Y  t ddg} ddg| dd	g< t ddg}t	
| | d
}tjt|d g d| dd	g< W d    n1 sw   Y  tjt|d g | dd	g< W d    d S 1 sw   Y  d S )Nr   r   ,Array conditional must be same shape as selfr*   r'   r(   r   TFr)   )r   r   r(   )r   r   r:   r;   r0   r1   r2   r3   r!   r   r   )r   r?   r7   r   r   r   r   test_where_error   s(   "rD   klassc                 C   sB   t g d}g d}t tjddg}|| |}t|| d S )Nr'   r   r(   )FTTr   r(   )r   r   r4   r3   r   r   )rE   r   r?   r   r8   r   r   r   test_where_array_like   s
   rG   r?   )r'   r   r'   )r   r   r   )TrueFalserH   z
2017-01-01z
2017-01-02c                 C   s   t g d}d}tjt|d ||  W d    n1 sw   Y  d}tjt|d |dg W d    d S 1 s?w   Y  d S )NrF   z(Boolean array expected for the conditionr*   rC   T)r   r0   r1   r2   r3   )r?   r   r7   r   r   r   test_where_invalid_input   s   "rJ   c                  C   s   d} t g d}dg}tjt| d || W d    n1 s"w   Y  t dtjtjg}|t |}t|| t	g d}tjt| d || W d    n1 s[w   Y  t tjdtjg}|t |}t|| d S )NrC   rF   Tr*   r'   )FTFTr   )
r   r0   r1   r2   r3   r   r4   r   r   array)r7   r   r?   r   outr   r   r   test_where_ndframe_align   s    rM   c                  C   s  dd } t td}tjt| dd ttd|dd< W d    n1 s(w   Y  ttd|dd< t g d	}t|t	j
| t td
}tjt| dd ttd|ddd< W d    n1 slw   Y  t td
}ttd|ddd< t g d}t|| t td
}tjt| dd ttd|d d< W d    n1 sw   Y  ttd|dd< t g d}t|| t td}tjt| dd ttd|g d	< W d    n1 sw   Y  t td}tjt| dd ttd|g d	< W d    n	1 sw   Y  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'   r   Zabcdefr&   r   )r   br'   def)arU   cr   r'   rX   z	list-liker   rU   r\   )r   r   r0   r1   r2   r   r   r   r5   r   r#   )r7   r   r   r   r   r   test_where_setitem_invalid   sH   r]   sizer   r$   r   )TFFFFTF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   %      c                 C   s   | fS ra   r   rN   r   r   r   rP   %  rb   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   r6   r   	enumerater   r   r3   r   )r^   r   r_   r`   Z	selectionr   r   r8   r   re   r   test_broadcast  s   ri   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;   copyr3   r   r   r<   )r   r?   r@   r   r   r   test_where_inplaceA  s   rk   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g dd}t	|| d||dk < t g dg dd}t	|| ||dk   d	7  < t g d
g dd}t	|| d S )Nr(   r   r   r'   )r   r'   r   r   r'   r   r.   r   )r   r'   r   r   r'   r   r   )r      r   r   rl   r   )
r   r   r   pdconcatr3   r   r4   r   r   )s1rA   combr8   r   r   r   r   test_where_dupsP  s    rq   c                  C   s>  t g d} | | dkd}t|d rJ t|d sJ t|d s&J t|d ts/J |jdks6J | | dkg d}t|d rHJ t|d sPJ t|d sXJ t|d tsaJ |jdkshJ | | dktg d}t|d r}J t|d sJ t|d sJ t|d tsJ |jdksJ d S )NrF   r'   Xr   r   object)rr   YZ)r   r3   r   
isinstancestrr
   r   rK   )r   wr   r   r   test_where_numeric_with_stringe  s&   ry   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      $@rs   )r   r   rK   r3   r   r   r4   )r
   serr   r   r@   r   r   r   test_where_datetimelike_coerce  s   r{   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   )rc   tr   r   r   rf     s    z)test_where_datetimetz.<locals>.<listcomp>zdatetime64[ns, UTC]r	   FTr'   )r   r3   rm   NaTr   r   )Z
timestampsrz   r@   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   rm   ZarraysZSparseArrayr3   r   r   )rz   r8   r   r   r   r   test_where_sparse  s   r   c                  C   s&   t g td} | g }t||  d S )Nr	   )r   r6   r3   r   r   )rz   r8   r   r   r   =test_where_empty_series_and_empty_cond_having_non_bool_dtypes  s   
r   c                 C   sT   | t jddddtjgg dddd}| g ddd}||dk}t|| d S )	NAB)r   r   C)
categoriescategoryr	   )r   r   r   r   r   r   )rm   Categoricalr   r4   r3   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g d}|||}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   )TTF)r   Z
_with_freqrm   ZDatetimeIndexr}   r   r   rK   r3   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   )4numpyr   r0   Zpandas.core.dtypes.commonr   Zpandasrm   r   r   r   r   Zpandas._testingZ_testingr   r   r   markZparametrizeZint8r%   Zint16Zint32r#   Zfloat32r"   r9   rB   rD   r   tuplerK   rG   r}   rJ   rM   r]   r   r4   Zfinfor6   maxminri   rk   rq   ry   r{   r~   r   r   r   r   r   r   r   r   <module>   sp    







7



	9
	