U
    ¾mœd�N  ã                   @   s   d dl Z d dlZd dlZd dlZd dlmZ d dl	m
Z
mZ ejddgd�dd„ ƒZejdd	gd�d
d„ ƒZG dd„ dƒZej de je jg¡dd„ ƒZdd„ Zdd„ Zej dejejg¡ej de
d d ddgƒe
ddddgƒg¡dd„ ƒƒZej de
d d d gƒe d ddg¡fe
d d d gdd�e d ddg¡fe
d d d gdd�e d ddg¡fe
d d d gdd�e d ddg¡fe
d d d gdd�e d ddg¡fg¡ej dejejg¡dd„ ƒƒZd d!„ Zd"d#„ Zej d$eeje
g¡d%d&„ ƒZ ej dd'd(d)d*d+d,g¡ej d-ej!d.g¡d/d0„ ƒƒZ"dS )1é    N)ÚSparseArrayÚSparseDtypeÚintegerÚblock)Úparamsc                 C   s   | j S )z!kind kwarg to pass to SparseArray©Úparam©Úrequest© r   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/arrays/sparse/test_arithmetics.pyÚkind   s    r   TFc                 C   s   | j S )z}
    Fixture returning True or False, determining whether to operate
    op(sparse, dense) instead of op(sparse, sparse)
    r   r	   r   r   r   Úmix   s    r   c                   @   s  e Zd Zdd„ Zedœdd„Zdd„ Zdd	„ Zd
d„ Ze	j
 ddddg¡e	j
 ddddg¡dd„ ƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Ze	j
 dd'd(ejg¡d)d*„ ƒZe	j
 dd'd(ejg¡d+d,„ ƒZd-d.„ Zd/d0„ Zd1d2„ ZdS )3ÚTestSparseArrayArithmeticsc                 C   s   t  ||¡ d S ©N)ÚtmÚassert_numpy_array_equal)ÚselfÚaÚbr   r   r   Ú_assert   s    z"TestSparseArrayArithmetics._assert)r   c           	   	   C   s�   t |tjƒr |t |¡|ƒj}n$t |tjƒr@||t |¡ƒj}nt‚tjddd��( |rh|||ƒ ¡ }n|||ƒ ¡ }W 5 Q R X |  	||¡ d S )NÚignore)ÚinvalidÚdivide)
Ú
isinstanceÚnpÚndarrayÚpdZSeriesÚvaluesÚNotImplementedErrorÚerrstateÚto_denser   )	r   r   r   Úa_denseÚb_denser   ÚopÚexpectedÚresultr   r   r   Ú_check_numeric_ops"   s    z-TestSparseArrayArithmetics._check_numeric_opsc                 C   sD   t |tƒst‚t |jtƒst‚|jjtjks0t‚t |jt	ƒs@t‚d S r   )
r   r   ÚAssertionErrorÚdtyper   Úsubtyper   Úbool_Ú
fill_valueÚbool)r   Úresr   r   r   Ú_check_bool_result4   s    z-TestSparseArrayArithmetics._check_bool_resultc              	   C   sæ  t jdd���Î |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k ¡ |  ||k  ¡ ||k ¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k¡ |  ||k ¡ ||k¡ |  ||k ¡ |  ||k  ¡ ||k ¡ W 5 Q R X d S )Nr   )r   )r   r    r/   r   r!   ©r   r   r   r"   r#   r   r   r   Ú_check_comparison_ops:   s2    z0TestSparseArrayArithmetics._check_comparison_opsc                 C   sœ   |   ||@ ¡ |  ||@  ¡ ||@ ¡ |   ||B ¡ |  ||B  ¡ ||B ¡ |   ||@ ¡ |  ||@  ¡ ||@ ¡ |   ||B ¡ |  ||B  ¡ ||B ¡ d S r   )r/   r   r!   r0   r   r   r   Ú_check_logical_opse   s    z-TestSparseArrayArithmetics._check_logical_opsÚscalarr   é   é   r,   Né   c           
      C   sN   |}t  t jdddt jddddt jg
¡}t|||d�}	|  |	|||||¡ d S )Nr4   r6   r   ©r   r,   ©r   ÚarrayÚnanr   r'   )
r   r   r   Úall_arithmetic_functionsr,   r3   r
   r$   r   r   r   r   r   Útest_float_scalars   s    $z,TestSparseArrayArithmetics.test_float_scalarc                 C   sà   t  t jdddt jddddt jg
¡}t||d�}|  |d|d¡ |  |d|d¡ |  |d|d¡ t||dd�}|  |d|d¡ |  |d|d¡ |  |d|d¡ t||dd�}|  |d|d¡ |  |d|d¡ |  |d|d¡ d S )Nr4   r6   r   ©r   r5   r7   ©r   r9   r:   r   r1   )r   r   r   r   r   r   r   Útest_float_scalar_comparison}   s    $z7TestSparseArrayArithmetics.test_float_scalar_comparisonc           	      C   st   |}t  ddddddddddg
¡}t  ddddddddddg
¡}t||dd�}t||dd�}|  ||||||¡ d S )	Nç        ç      ð?ç       @ç      @ç      @ç      @r   r7   )r   r9   r   r'   ©	r   r   r   r;   r$   r   Úrvaluesr   r   r   r   r   Ú"test_float_same_index_without_nans�   s    z=TestSparseArrayArithmetics.test_float_same_index_without_nansc           
      C   s|   |}t  t jdddt jddddt jg
¡}t  t jdddt jddddt jg
¡}t||d�}t||d�}	|  ||	||||¡ d S )Nr4   r6   r   r5   é   r=   r8   )
r   r   r   r;   r
   r$   r   rG   r   r   r   r   r   Útest_float_same_index_with_nansš   s    $$z:TestSparseArrayArithmetics.test_float_same_index_with_nansc                 C   sÜ   t  t jdddt jddddt jg
¡}t  t jdddt jddddt jg
¡}t||d�}t||d�}|  ||||¡ t  ddd	d
dddd	ddg
¡}t  dd	ddddddd	dg
¡}t||dd�}t||dd�}|  ||||¡ d S )Nr4   r6   r   r5   rI   r=   r@   rA   rB   rC   rD   rE   r7   r>   ©r   r   r   rG   r   r   r   r   r   Ú test_float_same_index_comparison¦   s    $$z;TestSparseArrayArithmetics.test_float_same_index_comparisonc           	      C   s&  |}t  t jdddt jddddt jg
¡}t  dt jddt jddddt jg
¡}t||d�}t||d�}|  ||||||¡ |  ||d ||d ||¡ t||dd�}t||d�}|  ||||||¡ t||dd�}t||dd�}|  ||||||¡ t||dd�}t||dd�}|  ||||||¡ d S ©Nr4   r6   r   r5   é   r=   r7   r8   rF   r   r   r   Útest_float_array¶   s     $$z+TestSparseArrayArithmetics.test_float_arrayc                 C   s&  |}t  t jdddt jddddt jg
¡}t  dt jddt jddddt jg
¡}t|dd�}t|dd�}|  ||||||¡ |  ||d ||d ||¡ t|ddd	�}t|dd�}|  ||||||¡ t|ddd	�}t|ddd	�}|  ||||||¡ t|ddd	�}t|ddd	�}|  ||||||¡ d S )
Nr4   r6   r   r5   rN   r   r=   r   r7   r8   )r   r   r;   r$   r   rG   r   r   r   r   r   Útest_float_array_different_kindÍ   s     $$z:TestSparseArrayArithmetics.test_float_array_different_kindc                 C   s  t  t jdddt jddddt jg
¡}t  dt jddt jddddt jg
¡}t||d�}t||d�}|  ||||¡ |  ||d ||d ¡ t||dd�}t||d�}|  ||||¡ t||dd�}t||dd�}|  ||||¡ t||dd�}t||dd�}|  ||||¡ d S rM   r>   rK   r   r   r   Útest_float_array_comparisonä   s    $$z6TestSparseArrayArithmetics.test_float_array_comparisonc           
      C   sÚ  |}t j}t jddddddddddg
|d�}t jddddddddddg
|d�}t|||d�}|jt|ƒksnt‚t|||d�}	|	jt|ƒksŽt‚|  ||	||||¡ |  ||	d ||d ||¡ t|d||d�}|jt|ƒksàt‚t|||d�}	|	jt|ƒk�st‚|  ||	||||¡ t|d||d�}|jt|ƒk�s:t‚t|d||d�}	|	jt|ƒk�s^t‚|  ||	||||¡ t|d||d�}|jt|dd	�k�sšt‚t|d||d�}	|	jt|dd	�k�sÂt‚|  ||	||||¡ d S )
Nr   r4   r6   ©r)   r5   rN   ©r)   r   )r,   r)   r   ©r,   )r   Úint64r9   r   r)   r   r(   r'   )
r   r   r   r;   r$   r)   r   rG   r   r   r   r   r   Útest_int_arrayù   s2    ""z)TestSparseArrayArithmetics.test_int_arrayc                 C   s  d}t jddddddddddg
|d�}t jddddddddddg
|d�}t|||d�}t|||d�}|  ||||¡ |  ||d ||d ¡ t|||dd	�}t|||d�}|  ||||¡ t|||dd	�}t|||dd	�}|  ||||¡ t|||dd	�}t|||dd	�}|  ||||¡ d S )
NrU   r   r4   r6   rR   r5   rN   rS   )r)   r   r,   )r   r9   r   r1   )r   r   r)   r   rG   r   r   r   r   r   Útest_int_array_comparison  s     ""z4TestSparseArrayArithmetics.test_int_array_comparisonTFc                 C   sh   t jddddgt jd�}t jddddgt jd�}t||t j|d�}t||t j|d�}|  ||||¡ d S ©NTFrR   )r   r)   r,   ©r   r9   r+   r   r2   ©r   r   r,   r   rG   r   r   r   r   r   Útest_bool_same_index5  s
    z/TestSparseArrayArithmetics.test_bool_same_indexc                 C   sp   t jddddddgt jd�}t jddddddgt jd�}t||t j|d�}t||t j|d�}|  ||||¡ d S rX   rY   rZ   r   r   r   Útest_bool_array_logical@  s
    z2TestSparseArrayArithmetics.test_bool_array_logicalc                 C   sx  |}d}t  t jdddt jddddt jg
¡}t jddddddddddg
|d�}t||d�}	t||d�}
|
jt|ƒksxt‚|  |	|
||||¡ |  |	|
d ||d ||¡ t||dd	�}	t||d�}
|
jt|ƒksÔt‚|  |	|
||||¡ t||dd	�}	t||dd	�}
|
jt|ƒk�st‚|  |	|
||||¡ t||dd	�}	t||dd	�}
|
jt|dd
�k�s`t‚|  |	|
||||¡ d S ©NrU   r4   r6   r   r5   rN   rR   r=   r7   rT   )r   r9   r:   r   r)   r   r(   r'   )r   r   r   r;   r
   r$   Úrdtyper   rG   r   r   r   r   r   Útest_mixed_array_float_intK  s*    $"z5TestSparseArrayArithmetics.test_mixed_array_float_intc                 C   s`  d}t  t jdddt jddddt jg
¡}t jddddddddddg
|d�}t||d�}t||d�}|jt|ƒkstt‚|  ||||¡ |  ||d ||d ¡ t||dd	�}t||d�}|jt|ƒksÈt‚|  ||||¡ t||dd	�}t||dd	�}|jt|ƒk�st‚|  ||||¡ t||dd	�}t||dd	�}|jt|dd
�k�sLt‚|  ||||¡ d S r]   )r   r9   r:   r   r)   r   r(   r1   )r   r   r^   r   rG   r   r   r   r   r   Útest_mixed_array_comparisong  s(    $"z6TestSparseArrayArithmetics.test_mixed_array_comparisonc                 C   sl   t ddddgƒ}t ddddgƒ}||A }tjjj dtjdddgdd�¡}t dddg|d	�}t 	||¡ d S )
NTFrI   r   r4   r6   Zint32rR   )Zsparse_index)
r   r   ÚcoreZarraysÚsparseZIntIndexr   r9   r   Úassert_sp_array_equal)r   ÚsÚtr&   Zsp_indexr%   r   r   r   Útest_xor„  s    "z#TestSparseArrayArithmetics.test_xor)Ú__name__Ú
__module__Ú__qualname__r   r-   r'   r/   r1   r2   ÚpytestÚmarkÚparametrizer<   r?   rH   rJ   rL   rO   rP   rQ   rV   rW   r   r:   r[   r\   r_   r`   rf   r   r   r   r   r      s0   +$



r   r$   c                 C   s@   t ddgdd�}| |ddgƒ}| |t ddgƒƒ}t ||¡ d S )Nr   r4   rT   )r   r   rc   )r$   Úarrr&   r%   r   r   r   Útest_with_list�  s    rn   c                  C   s@   t ddgdd�} t ddgddgg¡}|  |¡}|tks<t‚d S )Nr   r4   rT   r6   r5   rI   )r   r   Z	DataFrameÚ__add__ÚNotImplementedr(   )rm   Zdfr&   r   r   r   Útest_with_dataframe•  s    
rq   c                  C   s6   t ddgdd�} | t d¡ }| d }t ||¡ d S )Nr   r4   rT   r6   ©r   r   r9   r   rc   )rm   r&   r%   r   r   r   Útest_with_zerodim_ndarray�  s    rs   Úufuncrm   éÿÿÿÿr4   c                 C   s8   | |ƒ}| |j ƒ}t| t |¡ƒ|d�}t ||¡ d S )NrT   )r,   r   r   Úasarrayr   rc   )rt   rm   r&   r,   r%   r   r   r   Útest_ufuncs¦  s    
rw   za, br6   rT   c                 C   sD   | ||ƒ}| t  |¡t  |¡ƒ}t|tƒs.t‚t t  |¡|¡ d S r   )r   rv   r   r   r(   r   r   )rt   r   r   r&   r%   r   r   r   Útest_binary_ufuncs±  s    
rx   c                  C   sL   t ddddgƒ} t ddddg¡}|| 7 }t ddddg¡}t ||¡ d S )Nr   r6   r4   r5   )r   r   r9   r   r   ©Zsparrayr   r%   r   r   r   Útest_ndarray_inplaceÄ  s
    rz   c                  C   sN   t ddddgƒ} t ddddg¡}| |7 } t ddddgdd�}t | |¡ d S )Nr   r6   r4   r5   rT   rr   ry   r   r   r   Útest_sparray_inplaceÌ  s
    r{   Úconsc              	   C   s@   t ddgƒ}| dddgƒ}tjtdd�� ||@  W 5 Q R X d S )NTzoperands have mismatched length)Úmatch)r   rj   ZraisesÚ
ValueError)r|   ÚleftÚrightr   r   r   Útest_mismatched_length_cmp_opÔ  s    r�   ÚaddÚsubÚmulÚtruedivÚfloordivÚpowr,   r5   c              	   C   sz  t t| ƒ} tj d¡}tj d¡}||d d d…< ||d d d…< t||d�}t||d�}tjdd��� | ||ƒ}t| | ¡ | ¡ ƒ|jd�}t	|tƒsšt
‚t | ¡ | ¡ ¡ | || ¡ ƒ}t	|tƒsÊt
‚t ||¡ | | ¡ |ƒ}	t	|	tƒsòt
‚t ||	¡ | |dƒ}
t	|
tƒ�st
‚z| | ¡ dƒ}| |jdƒ}W n tk
�rL   Y n X t |
j|¡ t |
 ¡ |¡ W 5 Q R X d S )Né   r6   r5   rT   r   )ÚallrI   )ÚgetattrÚoperatorr   ÚrandomZrandnr   r    r!   r,   r   r(   r   Zassert_almost_equalrc   r~   )r$   r,   Zdata1Zdata2ÚfirstÚsecondr.   ÚexpZres2Zres3Zres4Zexp_fvr   r   r   Útest_binary_operatorsÜ  s<    

 ÿ
r�   )#r‹   Únumpyr   rj   Zpandasr   Zpandas._testingZ_testingr   Zpandas.core.arrays.sparser   r   Zfixturer   r   r   rk   rl   Úeqr‚   rn   rq   rs   Úabsr�   rw   r9   Zgreaterrx   rz   r{   Úlistr�   r:   r�   r   r   r   r   Ú<module>   sP   

  r
	 ÿ    ûþ

