U
    ùQ”i ;  ã                   @   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-58ppya8e/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}| rÌt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ƒsˆt‚| ||ƒ}	t|	tƒs t‚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rÄtj |¡}|tjkrŒ|jdd�}	t  ||	¡ qú|tjkr®|j ¡ }	||	ksÂt‚qú| ¡ }	||	ksút‚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rštj |¡}|tjkrb|j	dd�}t  
||¡ qÐ|tjkr„|j 	¡ }||ks˜t‚qÐ| 	¡ }||ksÐt‚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sˆt‚|r t|ƒt|ƒks t‚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sˆt‚|r t|ƒt|ƒks t‚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 )Néÿÿÿÿr9   r   )Údataéf   )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
		
