U
    sVc&                     @   s   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ejejdddejddejdg
Ze	eZG d	d
 d
ZG dd dZG dd dZG dd dZdS )    N)SparseArraySparseDtype                  c                   @   sP  e Zd Zdd Zdd Zejdej	dd ej	dd ej	dd	 ej	dd ej	dd
 ej	dd ej	dd ej	dd ej	dd ej	ddd ej	ddd ej	ddd ej	ddd ej	ddd ej	ddd gejdej
gd dgd ej
gd dgd  g gdd Zdd Zdd Zdd Zdd Zd d! ZdS )"TestGetitemc                 C   sJ   t  }ttt D ]0}tt | ||  tt |  ||   qd S N)arrZto_denserangelentmZassert_almost_equal)selfdensei r   L/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/sparse/test_indexing.pytest_getitem   s    zTestGetitem.test_getitemc                 C   s8   t dddg}|dddg }t ddg}t|| d S )Nr   r   r   TF)r   r   assert_sp_array_equal)r   r   resultexpectedr   r   r   test_getitem_arraylike_mask   s    z'TestGetitem.test_getitem_arraylike_maskslcNr   
   d   ir   r   r	   as_denser   c                 C   s6   t |}t|}|| }t|| }t|| d S r   )nparrayr   r   r   )r   r   r#   r   r   r   r   r   r   test_getslice   s
    
zTestGetitem.test_getslicec                 C   s   t t jdddddt jt jdg	}t|}|tdd f }t|dd  }t|| t|dd}|tdd f }t|dd  dd}t|| d}tjt	|d |dd d d f  W 5 Q R X tjt	|d |dd d d f  W 5 Q R X d S )Nr   r   r   r   
fill_valueztoo many indices for arraymatch)
r$   r%   nanr   slicer   r   pytestraises
IndexError)r   r   sparseresexpmsgr   r   r   test_getslice_tuple<   s    "zTestGetitem.test_getslice_tuplec                 C   s0   t dddg}|dddg }|j|jks,td S )Nr   r   r   F)r   dtypeAssertionError)r   r   r1   r   r   r   test_boolean_slice_emptyQ   s    z$TestGetitem.test_boolean_slice_emptyc                 C   s   t ddgd tjdd}t tjdtjddg}tt| | | }t| }t tjddd	tjg}t|| t ddtjgd tjtjd}t| }t tjddg}t|| d S )
NFTr   )r5   r(   r   r	   r   r   r   )r   r$   Zbool_r+   r   r   r   )r   Z	spar_boolr2   r1   r   r   r   test_getitem_bool_sparse_arrayV   s      z*TestGetitem.test_getitem_bool_sparse_arrayc                 C   sL   t ddddtjtjgtjd}||dk }t ddgtjd}t|| d S )Nr   r   r   r   r'   g      @g      @)r   r$   r+   r   r   )r   r   r1   r2   r   r   r   ,test_getitem_bool_sparse_array_as_comparisonh   s    z8TestGetitem.test_getitem_bool_sparse_array_as_comparisonc                 C   s   t ddddddddddg
dd}ttd s2ttd dksBttd	 dksRt|d dksbt|d dksrt|d	 dkstd
}tjt|d td  W 5 Q R X tjt|d td  W 5 Q R X td tttd  kstd S )Nr   r   r   r   r   r   r	   r'      z%must be an integer between -10 and 10r)      ir    )	r   r$   isnanr   r6   r-   r.   r/   r   )r   Zzarrerrmsgr   r   r   test_get_itemo   s     zTestGetitem.test_get_item)__name__
__module____qualname__r   r   r-   markparametrizer$   Zs_r+   r&   r4   r7   r8   r9   r>   r   r   r   r   r
      s>    *	r
   c                   @   s   e Zd Zdd ZdS )TestSetitemc              	      sh   t t   fdd} fdd}tjtdd |  W 5 Q R X tjtdd |  W 5 Q R X d S )Nc                      s   d d< d S )Nr   r   r   r   r   r   r   setitem   s    z*TestSetitem.test_set_item.<locals>.setitemc                      s   d dd< d S )Nr   r   r   r   r   rE   r   r   setslice   s    z+TestSetitem.test_set_item.<locals>.setslicezassignment via setitemr)   )r   arr_datacopyr-   r.   	TypeError)r   rF   rG   r   rE   r   test_set_item   s    zTestSetitem.test_set_itemN)r?   r@   rA   rK   r   r   r   r   rD      s   rD   c                   @   sf   e Z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gdd ZdS )TestTakec              	   C   s,   d}t jt|d td W 5 Q R X d S )Nz-'indices' must be an array, not a scalar '2'.r)   r   )r-   r.   
ValueErrorr   take)r   r3   r   r   r   test_take_scalar_raises   s    z TestTake.test_take_scalar_raisesc                 C   s\   t ttddg}ttddg| t ttdddg}ttdddg| d S )Nr   r   r   r   r   r$   rN   rH   r   r   r   r   r2   r   r   r   	test_take   s    zTestTake.test_takec                 C   s<   t jddgtdd}|jddgdtjd}t|| d S )Nr   Zint64)r5   r   T
allow_fillr(   )pdr%   r   rN   r$   r+   r   r   )r   ar   r   r   r   test_take_all_empty   s    zTestTake.test_take_all_emptyc                 C   s   t dt jdddg}t|dd}tt |dgdd}t|dg| tt |dddgdd}t|dddg| d S )Nr   r   r   r'   r   )r$   r%   r+   r   rN   r   r   )r   datar0   r2   r   r   r   test_take_fill_value   s    zTestTake.test_take_fill_valuec                 C   sX   t ttdg}ttdg| t ttdddg}ttdddg| d S )Nr    r   r   r!   rP   rQ   r   r   r   test_take_negative   s    zTestTake.test_take_negativec              	   C   s*   t jtdd tdg W 5 Q R X d S )NZboundsr)   r;   )r-   r.   r/   r   rN   )r   r   r   r   test_bad_take   s    zTestTake.test_bad_takec              	   C   s  t tjtjdtjdg}|tdddg}t tjtjdg}t|| |jtdddgdd}t tjtjtjg}t|| |jtdddgddd}t tjtjdg}t|| d	}tjt	|d
  |jtdddgdd W 5 Q R X tjt	|d
  |jtdddgdd W 5 Q R X d}tjt
|d
 |tddg W 5 Q R X tjt
|d
 |tddg W 5 Q R X tjt
|d
 |jtddgdd W 5 Q R X d S )Nr   r   r   r    TrT   FrS   zInvalid value in 'indices'r)   r!   r    out of bounds value in 'indices'r"   r   r   r$   r+   rN   r%   r   r   r-   r.   rM   r/   r   r0   r   r   r3   r   r   r   test_take_filling   s,    $$zTestTake.test_take_fillingc              	   C   s  t tjddddgdd}|tdddg}t dtjdgdd}t|| |jtdddgdd}t dtjtjgdd}t|| |jtdddgddd	}t dtjdgdd}t|| d
}tjt	|d  |jtdddgdd W 5 Q R X tjt	|d  |jtdddgdd W 5 Q R X d}tjt
|d |tddg W 5 Q R X tjt
|d |tddg W 5 Q R X tjt
|d |jtddgdd W 5 Q R X d S )Nr   r   r   r'   r    Tr\   FrS   zInvalid value in 'indices'.r)   r!   r   r]   r"   r   r^   r_   r   r   r   test_take_filling_fill_value   s,    $$z%TestTake.test_take_filling_fill_valuekindblockintegerc              	   C   s.  t tjtjtjtjtjg|d}|tdddg}t tjtjtjg|d}t|| |jtdddgdd}t tjtjtjg|d}t|| d}tjt	|d |tdd	g W 5 Q R X tjt	|d |tdd
g W 5 Q R X tjt	|d |jtdd
gdd W 5 Q R X d S )N)rb   r   r   r    Tr'   r]   r)   r"   r   )
r   r$   r+   rN   r%   r   r   r-   r.   r/   )r   rb   r0   r   r   r3   r   r   r   test_take_filling_all_nan  s     z"TestTake.test_take_filling_all_nanN)r?   r@   rA   rO   rR   rW   rY   rZ   r[   r`   ra   r-   rB   rC   re   r   r   r   r   rL      s   
!#rL   c                   @   s   e Zd Zdd ZdS )	TestWherec                 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 )Ng      ?r   r'   TFr   )r   r$   r+   r%   Z_wherer   r   rU   ZSerieswhereZassert_series_equal)r   r   maskr1   r2   Zserr   r   r   test_where_retain_fill_value  s    
z&TestWhere.test_where_retain_fill_valueN)r?   r@   rA   ri   r   r   r   r   rf     s   rf   )Znumpyr$   r-   ZpandasrU   Zpandas._testingZ_testingr   Zpandas.core.arrays.sparser   r   r%   r+   rH   r   r
   rD   rL   rf   r   r   r   r   <module>   s   &v