U
    ¾mœd ;  ã                   @   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   úW/home/sam/Atlas/atlas_env/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_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takeÚ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,    

r7   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   r5   r*   r    r!   )r   r   r'   r   r"   Ú_r,   r#   r.   r-   r%   r$   r   r   r   Útest_binary_ufunc_scalar’   s    r9   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Ú
isinstancer5   ÚAssertionErrorr    r!   )
r   r   r2   r   r   r   Ús1Ús2r%   r$   r   r   r   Ú"test_multiple_output_binary_ufuncs¬   s     	



rA   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=   r5   r>   r    r!   )r   r   r"   r8   r#   r$   r%   r   r   r   Útest_multiple_output_ufuncÎ   s    

rC   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
    
rF   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©ÚselfrK   r   r   r   Ú__init__ð   s    z-test_object_series_ok.<locals>.Dummy.__init__c                 S   s   | j |j  S rI   rJ   ©rM   r,   r   r   r   Ú__add__ó   s    z,test_object_series_ok.<locals>.Dummy.__add__)Ú__name__Ú
__module__Ú__qualname__rN   rP   r   r   r   r   ÚDummyï   s   rT   r   r:   )r   Úarrayr   r   r    r!   Úadd)rT   r"   Úserr   r   r   Útest_object_series_okî   s
    
"rX   r:   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 rI   )Ústrr	   )Úxr   r   r   Ú<lambda>  ó    r^   )Úparamsr   c                 C   s   | j S rI   )Úparam)Úrequestr   r   r   Úvalues_for_np_reduceü   s    rc   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)rM   rc   Úbox_with_arrayrb   ÚboxÚvaluesÚobjro   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miufFrf   rg   rh   ri   zufunc 'add' cannot use operandsrj   )r    rl   r	   rq   r   rV   rs   r   rt   Úsumr!   r0   rv   r>   rw   rn   rx   ry   )	rM   rc   rz   r{   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ÚfFrf   r:   )r   r0   r	   rq   r    rl   r   Úmaximumrs   rt   Úmaxr!   r>   Útype©	rM   rc   rz   r{   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‚   Frf   r   )r   r0   r	   rq   r    rl   r   Úminimumrs   rt   Úminr!   r>   r‡   rˆ   r   r   r   Útest_minj  s    
zTestNumpyReductions.test_minN)rQ   rR   rS   r   r�   r‰   rŒ   r   r   r   r   rd     s   "rd   Ú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   rV   Zto_numpyr    r!   )r�   rD   rE   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>.ThingNrG   c                 S   s
   || _ d S rI   rJ   rL   r   r   r   rN   Ž  s    z,test_object_dtype_ok.<locals>.Thing.__init__c                 S   s   t |d|ƒ}t| ƒ| j| ƒS )NrK   )Úgetattrr‡   rK   rO   r   r   r   rP   ‘  s    z+test_object_dtype_ok.<locals>.Thing.__add__c                    s   t |ƒˆ ko| j|jkS rI   )r‡   rK   rO   ©ÚThingr   r   Ú__eq__•  s    z*test_object_dtype_ok.<locals>.Thing.__eq__c                 S   s   d| j › d�S )NzThing(ú)rJ   )rM   r   r   r   Ú__repr__˜  s    z,test_object_dtype_ok.<locals>.Thing.__repr__)	rQ   rR   rS   rN   rP   Úboolr“   r\   r•   r   r‘   r   r   r’   �  s   r’   r:   r   r
   )r   r   r   rV   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
   rj   )r   r   r   rU   rn   rx   ÚNotImplementedErrorr    ZEMPTY_STRING_PATTERNÚsubtractÚouter)rW   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éÿÿÿÿr:   r   )Údataéf   )r   rt   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 rI   r   )r]   ÚyÚzr   r   r   Úadd3¶  s    z2test_array_ufuncs_for_many_arguments.<locals>.add3r
   r:   r   rŽ   r   zTCannot apply ufunc <ufunc 'add3 (vectorized)'> to mixed DataFrame and Series inputs.rj   )r   Z
frompyfuncr   r   Úobjectr    r!   rt   rn   rx   r™   ÚreÚescape)r¤   r   rW   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!   )rW   r$   r%   r   r   r   Útest_np_fixË  s    
r©   )<Úcollectionsr   r¦   r   Únumpyr   rn   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr   Zpandas._testingZ_testingr    Zpandas.arraysr   rV   Z	logaddexpZBINARY_UFUNCSZSPARSEZ
SPARSE_IDSZfixturer   ro   ZparametrizeZpositiveÚfloorÚexpr&   r/   r1   r7   r9   ÚdivmodÚfilterwarningsrA   rC   rF   rX   rU   r   Úto_datetimeZtz_localizeZ	to_periodZto_timedeltaZIntervalIndexZIntervalrc   rd   r   r5   r�   r˜   rœ   r¡   r¨   Z&skip_copy_on_write_not_yet_implementedr©   r   r   r   r   Ú<module>   s†   
&


&÷ô
s
		
