U
    *if:                     @   sr  d dl mZ d dlZd dlZd dlZd dlmZ d dlZ	d dl
mZ d dlmZ ejejejgZejejgZddgZddgZddgZejd	d
 Zejdeejjdeeddd Zejdeejjdeedejjdddgddgddd Zejdeejjdeedejjdddgddgddd Zejdeejjdeedejjdddgddgdejjdddgddgddd Z ejdeejjdeedejdddgdd Z!ejdej"gejjdeedejdeej#ddd Z$ejjdeedd d! Z%ejjdeedejded"d# Z&d$d% Z'eje	j(d&d'd(gej)d)e	j(d&d'd(gd*d)e	j(d&d'd(gd+d)e	j(d&d,d(gd-d)e	*d.d/d0ge	*d.d/d0g+d1e	*d.d/d0gj,d2d3e	-d4d5d6ge	.e	/d d&e	/d(d'e	/d&d(gg	d7d8 d9d:d; Z0G d<d= d=Z1ejd>e2ee3gd?d@ Z4dAdB Z5dCdD Z6dS )E    )dequeN)is_dtype_equal)SparseArrayTFsparseZdensec                  C   sL   t jjddddd} t jjddddd}d| ddd< d|ddd< | |fS )	zO
    A pair of random, length-100 integer-dtype arrays, that are mostly 0.
    r   
   d   int64dtypeN      )nprandomrandint)a1a2 r   Q/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/series/test_ufunc.pyarrays_for_binary_ufunc   s
    r   ufunc)idsc                 C   s   t jjddddd}d|d d d< |r:t|tddd}ttjd d }d}tj	|||d}| |}tj	| |||d}t
|| d S )Nr   r   r   r	      nameindexr   )r   r   r   r   pdSparseDtypeliststringascii_lettersSeriestmassert_series_equal)r   r   arrr   r   seriesresultexpectedr   r   r   test_unary_ufunc    s    r'   flipZflippedZstraightc                 C   s   |\}}|r4t |tddd}t |tddd}d}tj||d}|}||f}	||f}
| rnt|	}	t|
}
tj||	 |d}||
 }t|| d S Nr   r   r	   r   r   )r   r   r   r    reversedr!   r"   )r(   r   r   r   r   r   r   r$   other
array_argsseries_argsr&   r%   r   r   r   test_binary_ufunc_with_array2   s    r/   c              	   C   s   |\}}|r4t |tddd}t |tddd}d}tj||d}|sNd nt}t| tj||dd}	W 5 Q R X ||f}
||	f}| rt	|
}
t	|}tj||
 |d}|| }t
|| d S r)   )r   r   r   r    FutureWarningr!   assert_produces_warningIndexZastyper+   r"   )r(   r   r   r   r   r   r   r$   warnr,   r-   r.   r&   r%   r   r   r   test_binary_ufunc_with_indexL   s"    r4   shuffleZ	unalignedZalignedc                 C   s   |\}}|r4t |tddd}t |tddd}d}tj||d}tj||d}	tjt|}
|r|	|
}	| r|		|d j
}q|	|	d j
}n|j
}||f}||	f}| rtt|}tt|}tj|| ||d}|| }t|| d S )Nr   r   r	   r   r*   r   )r   r   r   r    r   r   ZpermutationlenZtakealignr   tupler+   r!   r"   )r(   r5   r   r   r   r   r   r   r$   r,   idxr   r-   r.   r&   r%   r   r   r   test_binary_ufunc_with_seriesk   s,    

r:   c                 C   s|   |\}}|rt |}d}tj|dd}||f}||f}	|rRtt|}tt|	}	tj| |	 dd}
| | }t||
 d S )Nr   r   r*   )r   r   r    r8   r+   r!   r"   )r   r   r(   r   r#   _r,   r$   r.   r-   r&   r%   r   r   r   test_binary_ufunc_scalar   s    r<   z$ignore:divide by zero:RuntimeWarningc                 C   s   |\}}d||dk< d||dk< |rLt |tddd}t |tddd}t|}t|}|rp|jdd}| ||}	t|	tst| ||}
t|
tstt	|
d t|	d  t	|
d t|	d  d S )N   r   r   r	   )frac)
r   r   r   r    sample
isinstancer8   AssertionErrorr!   r"   )r   r   r5   r   requestr   r   s1s2r&   r%   r   r   r   "test_multiple_output_binary_ufuncs   s     



rE   c                 C   s   |\}}| rt |}tj|dd}t|}t|}t|tsDtt|tsRtt	|d tj|d dd t	|d tj|d dd d S )Nr   r*   r   r=   )
r   r   r    r   modfr@   r8   rA   r!   r"   )r   r   r#   r;   r$   r%   r&   r   r   r   test_multiple_output_ufunc   s    

rG   c                 C   s@   |\}}t j|dd}t j|dd}| ||}|jd ks<td S )Nar*   b)r   r    r   rA   )r   r   r   r   r   rC   rD   r%   r   r   r   #test_binary_ufunc_drops_series_name   s
    
rJ   c               
   C   s~   G dd d} t | d| dg}t|}tt ||tt || tt || dtt || d d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z$test_object_series_ok.<locals>.Dummyc                 S   s
   || _ d S NvalueselfrM   r   r   r   __init__   s    z-test_object_series_ok.<locals>.Dummy.__init__c                 S   s   | j |j  S rK   rL   rO   r,   r   r   r   __add__   s    z,test_object_series_ok.<locals>.Dummy.__add__N)__name__
__module____qualname__rP   rR   r   r   r   r   Dummy   s   rV   r   r=   )r   arrayr   r    r!   r"   add)rV   r#   Zserr   r   r   test_object_series_ok   s
    
"rY   r=   r   r   r	   ZInt64ZFloat32r   Sparse[int]2000Z2010Z2001ZCETD)freqz1 Dayz3 Daysz2 Daysc                 C   s
   t | jS rK   )strr
   )xr   r   r   <lambda>      r`   )paramsr   c                 C   s   | j S rK   )param)rB   r   r   r   values_for_np_reduce  s    rd   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestNumpyReductionsc              	   C   s.  |}|}d }t |jdr&|tjkr&t}d}tj||d ||}W 5 Q R X t|tjj	j
r|tjk	rtjjdd}	|j|	 |jjdkrtj|}
|tjkr|jdd}t|
| n6|tjkr|j }|
|kstn| }|
|kstn6d	d
ddg}tjt|d tj| W 5 Q R X d S )NrZ   !passing a SparseArray to pd.IndexmatchzSparseArray has no 'mul')reasonZiufFZnumeric_only|does not support reductionunsupported operand typez$ufunc 'multiply' cannot use operands)r   r
   r   r2   r0   r!   r1   r@   coreZarraysr   pytestmarkZxfailnodeZ
add_markerkindr   multiplyreduce	DataFrameprodr"   _valuesrA   joinraises	TypeError)rO   rd   box_with_arrayrB   boxvaluesr3   msgobjrp   r%   r&   r   r   r   test_multiply  s:    


z!TestNumpyReductions.test_multiplyc           
   	   C   s   |}|}d }t |jdr&|tjkr&t}d}tj||d ||}W 5 Q R X |jjdkrtj	
|}|tjkr|jdd}	t||	 q|tjkr|j }	||	kstq| }	||	kstn6ddd	d
g}tjt|d tj	
| W 5 Q R X d S )NrZ   rf   rg   ZmiufFrj   rk   rl   rm   zufunc 'add' cannot use operands)r   r
   r   r2   r0   r!   r1   rr   r   rX   rt   ru   sumr"   rw   rA   rx   ro   ry   rz   )
rO   rd   r{   r|   r}   r3   r~   r   r%   r&   r   r   r   test_add>  s4    


zTestNumpyReductions.test_addc              	   C   s   |}|}d}|t jkr&|jjdkr&d}d }t|jdrD|t jkrDt}d}tj||d ||}W 5 Q R X tj	
|}	|t jkr|jdd}
t|	|
 n,|d }
|	|
kst|rt|	t|
kstd S )	NTifFrZ   rf   rg   rj   r=   )r   r2   r
   rr   r   r0   r!   r1   r   maximumrt   ru   maxr"   rA   typerO   rd   r{   r|   r}   Z	same_typer3   r~   r   r%   r&   r   r   r   test_max`  s&    
zTestNumpyReductions.test_maxc              	   C   s   |}|}d}|t jkr&|jjdkr&d}d }t|jdrD|t jkrDt}d}tj||d ||}W 5 Q R X tj	
|}	|t jkr|jdd}
t|	|
 n,|d }
|	|
kst|rt|	t|
kstd S )	NTr   FrZ   rf   rg   rj   r   )r   r2   r
   rr   r   r0   r!   r1   r   minimumrt   ru   minr"   rA   r   r   r   r   r   test_min|  s&    
zTestNumpyReductions.test_minN)rS   rT   rU   r   r   r   r   r   r   r   r   re     s   '"re   type_c                 C   sX   t jdddgdd}| dddg}t||}t jt| |dd}t|| d S )Nr=   r   r   r   r*   r      )r   r    r   rX   Zto_numpyr!   r"   )r   rH   rI   r%   r&   r   r   r   test_binary_ufunc_other_types  s
    r   c                     s^   G  fddd t  d dg} t|  d}t  d dg}t|| d S )Nc                       s<   e Zd Zdd Zdd Zed fddZeddd	Zd
S )z#test_object_dtype_ok.<locals>.Thingc                 S   s
   || _ d S rK   rL   rN   r   r   r   rP     s    z,test_object_dtype_ok.<locals>.Thing.__init__c                 S   s   t |d|}t| | j| S )NrM   )getattrr   rM   rQ   r   r   r   rR     s    z+test_object_dtype_ok.<locals>.Thing.__add__)returnc                    s   t | ko| j|jkS rK   )r   rM   rQ   Thingr   r   __eq__  s    z*test_object_dtype_ok.<locals>.Thing.__eq__c                 S   s   d| j  dS )NzThing()rL   )rO   r   r   r   __repr__  s    z,test_object_dtype_ok.<locals>.Thing.__repr__N)	rS   rT   rU   rP   rR   boolr   r^   r   r   r   r   r   r     s   r   r=   r   r   )r   r    r   rX   r!   r"   )sr%   r&   r   r   r   test_object_dtype_ok  s
    r   c               	   C   sN   t dddg} tdddg}tjttjd tj	
| | W 5 Q R X d S )Nr=   r   r   rg   )r   r    r   rW   ro   ry   NotImplementedErrorr!   ZEMPTY_STRING_PATTERNsubtractouter)r   or   r   r   
test_outer  s    r   )7collectionsr   r   numpyr   ro   Zpandas.core.dtypes.commonr   Zpandasr   Zpandas._testingZ_testingr!   Zpandas.arraysr   ZpositivefloorexpZUNARY_UFUNCSrX   Z	logaddexpZBINARY_UFUNCSZSPARSEZ
SPARSE_IDSZSHUFFLEZfixturer   rp   Zparametrizer'   r/   r4   r:   r<   divmodfilterwarningsrE   rG   rJ   rY   rW   r   to_datetimeZtz_localizeZ	to_periodZto_timedeltaZIntervalIndexZIntervalrd   re   r   r8   r   r   r   r   r   r   r   <module>   s   
&
 

&
 
	