U
    >vf;                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlm  m	Z
 d dlZd dlmZ d dlmZ ejejgZddgZddgZejdd	 Zejd
ejejejg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ddg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.d/ge+d-d.d/g,d0e+d-d.d/gj-d1d2e.d3d4d5ge/e0d d%e0d'd&e0d%d'gg	d6d7 d8d9d: Z1G d;d< d<Z2ejd=e3ee4gd>d? Z5d@dA Z6dBdC Z7dDdE Z8dFdG Z9e
j:dHdI Z;dS )J    )dequeN)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   B/tmp/pip-unpacked-wheel-vdrwu74i/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_array1   s    r/   c                 C   s   |\}}|r4t |tddd}t |tddd}d}tj||d}tj||dd}||f}	||f}
| r~t|	}	t|
}
tj||	 |d}||
 }t|| d S r(   )	r   r   r   r   IndexZastyper*   r    r!   r+   r   r   r   test_binary_ufunc_with_indexK   s    r1   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takeZalignr   tupler*   r    r!   )r'   r2   r   r   r   r   r   r   r#   r,   idxr   r-   r.   r%   r$   r   r   r   test_binary_ufunc_with_seriesh   s,    

r6   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   r4   r*   r    r!   )r   r   r'   r   r"   _r,   r#   r.   r-   r%   r$   r   r   r   test_binary_ufunc_scalar   s    r8   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
isinstancer4   AssertionErrorr    r!   )
r   r   r2   r   r   r   s1s2r%   r$   r   r   r   "test_multiple_output_binary_ufuncs   s     	



r@   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   r9   )
r   r   r   r   modfr<   r4   r=   r    r!   )r   r   r"   r7   r#   r$   r%   r   r   r   test_multiple_output_ufunc   s    

rB   c                 C   s@   |\}}t j|dd}t j|dd}| ||}|jd ks<td S )Nar)   b)r   r   r   r=   )r   r   r   r   r   r>   r?   r$   r   r   r   #test_binary_ufunc_drops_series_name   s
    
rE   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ddZdd ZdS )z$test_object_series_ok.<locals>.DummyNreturnc                 S   s
   || _ d S NvalueselfrJ   r   r   r   __init__   s    z-test_object_series_ok.<locals>.Dummy.__init__c                 S   s   | j |j  S rH   rI   rL   r,   r   r   r   __add__   s    z,test_object_series_ok.<locals>.Dummy.__add__)__name__
__module____qualname__rM   rO   r   r   r   r   Dummy   s   rS   r   r9   )r   arrayr   r   r    r!   add)rS   r"   serr   r   r   test_object_series_ok   s
    
"rW   r9   r
   r   r   ZInt64ZFloat32r   zSparse[int]2000Z2010Z2001ZCETD)freqz1 Dayz3 Daysz2 Daysc                 C   s
   t | jS rH   )strr	   )xr   r   r   <lambda>      r]   )paramsr   c                 C   s   | j S rH   )param)requestr   r   r   values_for_np_reduce   s    rb   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestNumpyReductionsc              	   C   s   |}|}t d  ||}W 5 Q R X t|tjjjrPtjj	dd}|j
| |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 )NzSparseArray has no 'prod')reasonZiufFZnumeric_only|does not support reductionunsupported operand typez$ufunc 'multiply' cannot use operandsmatch)r    assert_produces_warningr<   r   coreZarraysr   pytestmarkZxfailnodeZ
add_markerr	   kindr   multiplyreduce	DataFrameprodr!   r0   _valuesr=   joinraises	TypeError)rL   rb   box_with_arrayra   boxvaluesobjrn   r$   r%   msgr   r   r   test_multiply  s2    


z!TestNumpyReductions.test_multiplyc           	   	   C   s   |}|}t d  ||}W 5 Q R X |jjdkrtj|}|tjkrb|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 )	NZmiufFre   rf   rg   rh   zufunc 'add' cannot use operandsri   )r    rk   r	   rp   r   rU   rr   r   rs   sumr!   r0   ru   r=   rv   rm   rw   rx   )	rL   rb   ry   rz   r{   r|   r$   r%   r}   r   r   r   test_add4  s,    


zTestNumpyReductions.test_addc           	   	   C   s   |}|}d}|t jkr&|jjdkr&d}td  ||}W 5 Q R X tj|}|t j	krt|j
dd}t|| n,|d }||kst|rt|t|kstd S )NTifFre   r9   )r   r0   r	   rp   r    rk   r   maximumrr   rs   maxr!   r=   type	rL   rb   ry   rz   r{   Z	same_typer|   r$   r%   r   r   r   test_maxR  s    
zTestNumpyReductions.test_maxc           	   	   C   s   |}|}d}|t jkr&|jjdkr&d}td  ||}W 5 Q R X tj|}|t j	krt|j
dd}t|| n,|d }||kst|rt|t|kstd S )NTr   Fre   r   )r   r0   r	   rp   r    rk   r   Zminimumrr   rs   minr!   r=   r   r   r   r   r   test_minj  s    
zTestNumpyReductions.test_minN)rP   rQ   rR   r~   r   r   r   r   r   r   r   rc     s   "rc   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 )Nr9   r   r
   r   r)   r      )r   r   r   rU   Zto_numpyr    r!   )r   rC   rD   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                       sB   e Zd Zdd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>.ThingNrF   c                 S   s
   || _ d S rH   rI   rK   r   r   r   rM     s    z,test_object_dtype_ok.<locals>.Thing.__init__c                 S   s   t |d|}t| | j| S )NrJ   )getattrr   rJ   rN   r   r   r   rO     s    z+test_object_dtype_ok.<locals>.Thing.__add__c                    s   t | ko| j|jkS rH   )r   rJ   rN   Thingr   r   __eq__  s    z*test_object_dtype_ok.<locals>.Thing.__eq__c                 S   s   d| j  dS )NzThing()rI   )rL   r   r   r   __repr__  s    z,test_object_dtype_ok.<locals>.Thing.__repr__)	rP   rQ   rR   rM   rO   boolr   r[   r   r   r   r   r   r     s   r   r9   r   r
   )r   r   r   rU   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 )Nr9   r   r
   ri   )r   r   r   rT   rm   rw   NotImplementedErrorr    ZEMPTY_STRING_PATTERNsubtractouter)rV   r|   r   r   r   
test_outer  s    r   c                  C   sP   t jdddggd} t jdddgd}t jdgd}t| |}t|| d S )Nr9   r   )dataf   )r   rs   r   matmulr    Zassert_frame_equal)Zdf1Zdf2r%   r$   r   r   r   test_np_matmul  s
    r   c               	   C   s   dd } t | dd}tddg}|||d}tjddgtd}t|| tddgg}d}tj	t
t|d	 |||| W 5 Q R X d S )
Nc                 S   s   | | | S rH   r   )r\   yzr   r   r   add3  s    z2test_array_ufuncs_for_many_arguments.<locals>.add3r
   r9   r   r   r   zTCannot apply ufunc <ufunc 'add3 (vectorized)'> to mixed DataFrame and Series inputs.ri   )r   Z
frompyfuncr   r   objectr    r!   rs   rm   rw   r   reescape)r   r   rV   r$   r%   Zdfr}   r   r   r   $test_array_ufuncs_for_many_arguments  s    r   c                  C   s>   t ddddg} t| }t ddddg}t|| d S )	Ng      g      g      ?g      ?g      g       g        g      ?)r   r   r   Zfixr    r!   )rV   r$   r%   r   r   r   test_np_fix  s    
r   )<collectionsr   r   r   Znumpyr   rm   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   Zpandas._testingZ_testingr    Zpandas.arraysr   rU   Z	logaddexpZBINARY_UFUNCSZSPARSEZ
SPARSE_IDSZfixturer   rn   ZparametrizeZpositivefloorexpr&   r/   r1   r6   r8   divmodfilterwarningsr@   rB   rE   rW   rT   r   Zto_datetimeZtz_localizeZ	to_periodZto_timedeltaZIntervalIndexZIntervalrb   rc   r   r4   r   r   r   r   r   Z&skip_copy_on_write_not_yet_implementedr   r   r   r   r   <module>   s   
&


&
s
		
