U
    sVcN                     @   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/SparseSeriesparamrequest r   O/tmp/pip-unpacked-wheel-xj8nt62q/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st| ||	|||| | ||	d ||d || t|d||d}|jt|kst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stt|d||d}	|	jt|dd	kst| ||	|||| 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st| |	|
|||| 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st| |||| 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st
t| |  | || }t	|tst
t|| | | |}	t	|	tst
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   Z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
	     

