U
    sVc C                     @   sT  d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZ ejdd Zejdd	 Zejd
d ZG dd dZG dd dZdd Zdd Zejddddgdd fd ddgddfd ddgddfd ddddgddfddddgddfg ddfddd d ddgdd fddd d ddgddfddd d ddgddfddd d ddgddfdd d dddgd dfdd d dddgddfgdd Zejd	ddejejgdejdejgddejgejdd d ejdgejd d dddggejdejd dgdd Zdd  Zd!d" Z d#d$ Z!ejdejdgd%d& Z"d'd( Z#dS ))    N)IntIndex)isna)
Int64Index)SparseArraySparseDtypec                   C   s&   t t jt jdddt jddt jdg
S )z<Fixture returning numpy array with valid and missing entries                  )nparraynan r   r   I/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/sparse/test_array.pyarr_data   s    r   c                 C   s   t | S )z-Fixture returning SparseArray from 'arr_data'r   )r   r   r   r   arr   s    r   c                   C   s    t ddddddddddg
ddS )	zEFixture returning SparseArray with integer entries and 'fill_value=0'r   r   r   r	   r
   r   r   
fill_valuer   r   r   r   r   zarr   s    r   c                
   @   sZ  e Zd Zejdddejgdd Zdd Z	ejdd	d
dge
d	d
gdgdd Zdd Zdd Zejddddddgddfg ddfdgddfddejdgdefgdd Zejdejejejejejgd	ejejdejgd	ejdddggejdddgdd Zejdd d!gd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- ZdS ).TestSparseArrayr   r   Nc                 C   sf   t tdddddgdd}|jd|d}t|r:|jj}t t|ddddgdd}t|| d S )Nr   r   r	   g       @r   )	r   r   r   shiftr   dtypeZna_valuetmassert_sp_array_equal)selfr   sparseresexpr   r   r   test_shift_fill_value&   s    z%TestSparseArray.test_shift_fill_valuec                 C   s   t dtjdgtjd}d|_|jdks*tt dddgdtjd}d|_|jdksTtd|_|jdkshttj|_t|jstt d	d
d	gd
tjd}d	|_|jsttj|_t|jstd S )N      ?g       @r   r   r   r   r   r   g@TF)r   r   r   r   AssertionErrorint64isnanbool_r   r   r   r   r   test_set_fill_value0   s    
z#TestSparseArray.test_set_fill_valuevalr   r   r	   )r   r   r	   c              	   C   s>   t dddgdtjd}d}tjt|d ||_W 5 Q R X d S )NTFr#   zfill_value must be a scalarmatch)r   r   r'   pytestraises
ValueErrorr   )r   r*   r   msgr   r   r    test_set_fill_invalid_non_scalarW   s    z0TestSparseArray.test_set_fill_invalid_non_scalarc                 C   s,   |  }|j|jk	st|j|jks(td S N)copyZ	sp_valuesr$   sp_index)r   r   Zarr2r   r   r   	test_copy_   s    zTestSparseArray.test_copyc                 C   s   t | | d S r2   )r   Zassert_almost_equalto_dense)r   r   r   r   r   r   test_values_asarrayd   s    z#TestSparseArray.test_values_asarrayzdata,shape,dtype)r   )r   )r   AB)r
   c                 C   s   t ||d}|j|kstd S )Nr   )r   shaper$   )r   datar;   r   outr   r   r   
test_shapeg   s    zTestSparseArray.test_shapevalsc                 C   s.   t |}t||d}| }t|| d S Nr   )r   r   r   r6   r   assert_numpy_array_equal)r   r?   r   r   r   r   r   r   test_dense_repru   s    

zTestSparseArray.test_dense_reprfixr   r   c                 C   s$   | |}t|}t|| d S r2   )Zgetfixturevaluer   Zround_trip_pickler   )r   rC   requestobjZ	unpickledr   r   r   test_pickle   s    

zTestSparseArray.test_picklec              	   C   s`   t dddg}tjdd<}tjdtd tjdtd |D ]}q<t|dksRtW 5 Q R X d S )	Nr   r   r	   T)recordalways)actioncategoryr   )r   warningscatch_warningsfilterwarningsDeprecationWarningPendingDeprecationWarninglenr$   )r   Zsp_arrw_r   r   r   test_generator_warnings   s    z'TestSparseArray.test_generator_warningsc                 C   sx   t tjdgdd}tddg}|| d}t ddgdd}t|| t|}|	| d}t
|t| d S )Nr"   r   r   TFr   )r   r   r   r   Z_wherer   r   pdSerieswhereZassert_series_equal)r   r   maskr   r    Zserr   r   r   test_where_retain_fill_value   s    
z,TestSparseArray.test_where_retain_fill_valuec                 C   s  t dtjtjdtjg}|d}t dddddgdtjd}t|| t dtjtjdtjgdd}|d}t dddddgdtjd}t|| t dtjdddg}|d}t dddddgdtjd}t|| t dtjdddgdd}|d}t dddddgdtjd}t|| t tjtjtjtjg}|d}t ddddgdtjd}t|| t tjtjtjtjgdd}|d}t ddddgdtjd}t|| t ddddg}|d}t ddddgdd}t|| t ddddg}|jttj	kst
|jdks t
|d}t|| t ddddgdd}|jttj	ks`t
|jdkspt
|d}t ddddgdd}t|| t ddddgtjd}|jttj	tjdkst
t|jst
|d}t ddddgdd}t|| d S )Nr   r	   r#   r   r           )r   r   r   fillnafloat64r   r   r   r   r%   r$   r   r&   r   sr   r    r   r   r   test_fillna   sZ    









zTestSparseArray.test_fillnac                 C   s   t dtjtjdtjg}|d}tjdddddgtjd}t| | t dtjtjdtjgdd}|d}t dddddgdtjd}t	|| d S )Nr   r	   r:   r   r   r#   )
r   r   r   r[   r   r\   r   rA   r6   r   r]   r   r   r   test_fillna_overlap   s    

z#TestSparseArray.test_fillna_overlapc                 C   s   t tdtdddddddddddg}tjdddgtjd}| \}t|| t ddddddddddddg}| \}t|| d S )	Nr   r   r   r   r	   r   	   r:   )r   floatr   r   Zint32Znonzeror   rA   )r   saexpectedresultr   r   r   test_nonzero   s    (
 
zTestSparseArray.test_nonzero)__name__
__module____qualname__r-   markparametrizer   r   r!   r)   r   r1   r5   r7   objectr>   rB   rF   rS   rX   r_   r`   rf   r   r   r   r   r   %   s@   
	'"

	

	<r   c                   @   s   e Zd Zejdejdddddgede	edd	d
ddgfejddej
ddgede	edd	ej
ddgfgejdddgdd Zdd Zdd Zejddej
gdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&S )'TestSparseArrayAnalyticszdata,expectedr   r   r	   r
   r   r:   r"   g      @g      @g      $@g      .@g      @g      (@numpyTFc              	   C   s  |r
t jndd }|t|}t|| |t|t jd}t|| |t|dd}t|| |rd}tjt|d t jt|t j	d W 5 Q R X d}tjt|d t jt||d	 W 5 Q R X n@d
}t
d| d}tjt|d t|j|d W 5 Q R X d S )Nc                 S   s   |   S r2   )cumsum)r^   r   r   r   <lambda>      z6TestSparseArrayAnalytics.test_cumsum.<locals>.<lambda>r   r   z&the 'dtype' parameter is not supportedr+   r:   z$the 'out' parameter is not supported)r=   r   zaxis(=z) out of bounds)axis)r   ro   r   r   r   r   r-   r.   r/   r%   reescape)r   r<   rd   rn   ro   r=   r0   rr   r   r   r   test_cumsum   s$    z$TestSparseArrayAnalytics.test_cumsumc                 C   s  t dtjdtjdg}t dtjdtjdg}tt|| tt|| t ddddgdd}t dddg|jdd}tt|| tt|| t ddddgdd}t ddddgdd}tt|| tt|| t dtjdtjdg}t tdtjdtjdg}tt|| t ddddgdd}t tddddgtdd}tt|| t ddddgdd}t tddddgtdd}tt|| d S )Nr   r   rY   r   )sparse_indexr   r   )r   r   r   r   r   absr4   sin)r   r   re   r    r   r   r   
test_ufunc   s*      z#TestSparseArrayAnalytics.test_ufuncc                 C   s   t dtjdtjdg}t dtjdtjdg}tt|d| t ddddgdd}t ddddgdd}tt|d| t ddddgdd}t ddddgdd}tt|d| d S )Nr   r   rv   r	   rY   r   r   )r   r   r   r   r   add)r   r   re   r   r   r   test_ufunc_args=  s    z(TestSparseArrayAnalytics.test_ufunc_argsr   rZ   c                 C   sh   t |gd ddg |d}t|\}}tt|\}}t|t ||d t|t ||d d S )N
   g?g@r   )r   r   modfasarrayr   r   )r   r   r   Zr1Zr2e1e2r   r   r   	test_modfK  s
    z"TestSparseArrayAnalytics.test_modfc                 C   s,   t dddddgdd}|j}|dks(td S )Nr   r   r   integerkind   r   nbytesr$   r   r   re   r   r   r   test_nbytes_integerT  s    z,TestSparseArrayAnalytics.test_nbytes_integerc                 C   s,   t dddddgdd}|j}|dks(td S )Nr   r   r   blockr   r   r   r   r   r   r   test_nbytes_blockZ  s    z*TestSparseArrayAnalytics.test_nbytes_blockc                 C   s$   t tdd d dg}t| d S )NZ2012Z2013)r   rT   Zto_datetimer   r   )r   r^   r   r   r   test_asarray_datetime64a  s    z0TestSparseArrayAnalytics.test_asarray_datetime64c                 C   s   t ddg}|jdkstd S )Nr   r   g      ?)r   Zdensityr$   r(   r   r   r   test_densitye  s    z%TestSparseArrayAnalytics.test_densityc                 C   s   t ddg}|jdkstd S )Nr   r   )r   Znpointsr$   r(   r   r   r   test_npointsi  s    z%TestSparseArrayAnalytics.test_npointsN)rg   rh   ri   r-   rj   rk   r   r   rb   r   r   ru   rz   r|   r   r   r   r   r   r   r   r   r   r   rm      s*   
rm   c                  C   sN   t dtjdgdd} tj| _|  }t|}tdddg}t|| d S )Nr"   rZ   r   FT)	r   r   r   r   r   r   r   r   rA   r   re   rd   r   r   r   *test_setting_fill_value_fillna_still_worksn  s    
r   c                  C   sT   t dtjgdd} tj| _t jttjgtddgtttjd}t	
| | d S )NrZ   r   r   r   r   )Zsparse_arrayrw   r   )r   r   r   r   Z_simple_newr   r   r   rb   r   r   )r   rd   r   r   r   test_setting_fill_value_updates|  s    

r   zarr,fill_value,locr   r   r	   rY   r   c                 C   s    t | |d }||kstd S r@   )r   Z_first_fill_value_locr$   )r   r   locre   r   r   r   test_first_fill_value_loc  s    r   r   c                 C   sF   t | |d }t|  }t|t s,tt|}t	|| d S r@   )
r   uniquerT   rU   
isinstancer$   r   r   r   rA   )r   r   abr   r   r   test_unique_na_fill  s
    
r   c                  C   s.   t ddg} |  }t dg}t|| d S )Nr   )r   r   r   r   r   r   r   r   test_unique_all_sparse  s    
r   c                  C   s   t dddg} t dddgdd}| dddd}t|| | tdddd}t|| | tdddd}t dddgdd}t|| d S )	Nr   r   r   r}         r   )r   r   r   )r   mapr   r   rT   rU   r   rd   re   r   r   r   test_map  s    r   c                  C   s@   t dddg} t ddd gdd}| ddd}t|| d S )Nr   r   r   r}   r   r   )r   r   )r   r   r   r   r   r   r   r   test_map_missing  s    r   c                 C   st   t tjdg| d}t dg| d}t| | tddg|d}tjdg|dtdgd}t	| | d S )Nr   r   r"   r   )r   r   )index)
r   r   r   r   r   ZdropnarT   	DataFramer   Zassert_equal)r   r   r    dfZexpected_dfr   r   r   test_dropna  s    r   c                  C   sJ   t tddd } |  }t dd tdD }t|| d S )N)r   r   c                 S   s   t | ddS )Nr   r   r   )xr   r   r   rp     rq   z1test_drop_duplicates_fill_value.<locals>.<lambda>c                 S   s   i | ]}|t d gddqS )rZ   r   r   r   ).0ir   r   r   
<dictcomp>  s      z3test_drop_duplicates_fill_value.<locals>.<dictcomp>r   )	rT   r   r   zerosapplyZdrop_duplicatesranger   Zassert_frame_equal)r   re   rd   r   r   r   test_drop_duplicates_fill_value  s    r   )$rs   rK   rn   r   r-   Zpandas._libs.sparser   ZpandasrT   r   Zpandas._testingZ_testingr   Zpandas.core.apir   Zpandas.core.arrays.sparser   r   Zfixturer   r   r   r   rm   r   r   rj   rk   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sl   


 Sw



