U
    c,                     @   sp   d dl Zd dlZd dlmZ d dlm  mZ d dl	Z
d dl	mZ d dlmZ d dlmZmZ G dd dZdS )    N)IntIndex)isna)SparseArraySparseDtypec                
   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
deedegdd Zdd Zdd Ze	j
ddeddggdd Zdd Ze	j
deddgdfeddgejfd d!gd!fed"gejfgd#d$ Ze	j
d%d&d'd(ge	j
d)dd*gejd+d, Ze	j
d%d&d'd(gejd-d. Zejd/d0 Ze	j
d1d!ee d!fd2ed3dfded4dfd5ed6d5fgd7d8 Z!d9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'dS )ETestConstructorsc                 C   s  t tjddtjg}|jttjtjks,t|jjtjks>tt|j	sNtt tjddtjgdd}|jttjdks|t|j	dkstt ddddgtjd}|jttjtjkstt|j	stt ddddgtj
d}|jttj
dkst|j	dkstt ddddgdtj
d}|jttj
dks4t|j	dksDtt ddddgd d}|jttj
dkspt|j	dkstt ddddgdd d}|jttj
dkst|j	dkstd S )N      r   
fill_value   dtyper
   r   )r   npnanr   r   float64AssertionErrorsubtypeisnanr
   int64selfarr r   P/tmp/pip-unpacked-wheel-g7fro6k3/pandas/tests/arrays/sparse/test_constructors.pytest_constructor_dtype   s,    z'TestConstructors.test_constructor_dtypec                 C   s4   t dddgdd}t dddgtd}t|| d S )Nr   r      intr   )r   r   tmassert_sp_array_equalr   resultexpectedr   r   r   test_constructor_dtype_str/   s    z+TestConstructors.test_constructor_dtype_strc                 C   sX   t ddddgtddd}t ddddgdtjd}t|| |jjtdksTtd S )Nr   r   r   r   r   )	r   r   r   r   r   r   	sp_valuesr   r   r    r   r   r   test_constructor_sparse_dtype4   s    z.TestConstructors.test_constructor_sparse_dtypec                 C   sP   t ddddgdd}t ddddgtjd}t|| |jjtdksLtd S )Nr   r   zSparse[int32]r   int32)r   r   r'   r   r   r%   r   r   r    r   r   r   !test_constructor_sparse_dtype_str:   s    z2TestConstructors.test_constructor_sparse_dtype_strc                 C   sv   t ddtjdgtd}|jttks(tt|js8tt ddtjdgtdd}|jttdksdt|jdksrtd S )NABr   r   r
   )	r   r   r   objectr   r   r   r   r
   r   r   r   r   test_constructor_object_dtype@   s    z.TestConstructors.test_constructor_object_dtypec                 C   sz   ddddg}t |tdd}|jttdks.t|jdks<ttj|td}dd t||D }tj	|tj
d svtd S )	NFr   g      Y@        r+   r   c                 s   s*   | ]"\}}t |t |ko ||kV  qd S N)type).0xyr   r   r   	<genexpr>Q   s     zKTestConstructors.test_constructor_object_dtype_bool_fill.<locals>.<genexpr>)r   r,   r   r   r   r
   r   arrayzipZfromiterbool_all)r   datar   Zarr_expecteditr   r   r   'test_constructor_object_dtype_bool_fillJ   s    z8TestConstructors.test_constructor_object_dtype_bool_fillr   r   c              	   C   s2   t jtdd tddtjg|d W 5 Q R X d S )NzCannot convertmatchr   r   r   )pytestraises
ValueErrorr   r   r   )r   r   r   r   r   test_constructor_na_dtypeT   s    z*TestConstructors.test_constructor_na_dtypec              	   C   s   t jdddd}ttj|dd}tt t|}W 5 Q R X t|| tt tt 	|}W 5 Q R X t|| d S )Nz
2016-01-01r   z
US/Pacific)Zperiodstzzdatetime64[ns]r   )
pdZ
date_ranger   r   asarrayr   assert_produces_warningUserWarningr   ZSeries)r   Zdtir"   r!   r   r   r   +test_constructor_warns_when_losing_timezoneY   s    z<TestConstructors.test_constructor_warns_when_losing_timezonec                 C   s  t ddgtdddgd}t ddddgdd}t|| |jttjksNt|j	dks\tt dddgtddddgtjdd	}t ddddgtjdd
}t|| |jttjkst|j	dkstt ddgtdddgdtjd}t ddddgdtjd}t|| |jttjks t|j	dks0tt dddgtddddgd dd	}t ddddgd d}t|| |jttjkst|j	dkstd S )Nr   r   r   )r9   sparse_indexr   integer)kindr   )r9   rH   r   r
   r+   r9   rH   r
   r   r   r   
r   r   r   r   r   r   r   r   r   r
   )r   r   r"   expr   r   r   test_constructor_spindex_dtypei   sF       z/TestConstructors.test_constructor_spindex_dtyperH   Nr   c                 C   s   t d|d d}t dgd d}t|| |jttjks<t|jdksJtt dt	ddgd d}t dgd d}t|| |jttjkst|jdkstd S )Nr   )r9   rH   r   r   r   )
r   r   r   r   r   r   r   r   r
   r   )r   rH   r   rM   r   r   r   %test_constructor_spindex_dtype_scalar   s    z6TestConstructors.test_constructor_spindex_dtype_scalarc                 C   sf   t ddgtdddgdd d}t ddddgdd d}t|| |jttjksTt|j	dksbtd S )Nr   r   r   r   rK   r   rL   )r   r   rM   r   r   r   0test_constructor_spindex_dtype_scalar_broadcasts   s       zATestConstructors.test_constructor_spindex_dtype_scalar_broadcastszdata, fill_valuer         ?g       @TFz
2017-01-01c                 C   s0   t |j}t|r t|s,tn||ks,td S r/   )r   r
   r   r   )r   r9   r
   r!   r   r   r   $test_constructor_inferred_fill_value   s    

z5TestConstructors.test_constructor_inferred_fill_valueformatZcoocscZcsrsize
   c                 C   sL   dd l }|jj|dd|d}t|}t|}|  }t	
|| d S )Nr   r         ?ZdensityrS   )scipy.sparsesparserandomr   from_spmatrixr   rD   toarrayravelr   assert_numpy_array_equal)r   rU   rS   scipymatr!   r"   r   r   r   test_from_spmatrix   s    

z#TestConstructors.test_from_spmatrixc                 C   sV   dd l }|jjddd|d}d|jd< t|}t|}| 	 }t
|| d S )Nr   rV   r   rW   rX   )rY   rZ   r[   r9   r   r\   r   rD   r]   r^   r   r_   )r   rS   r`   ra   r!   r"   r   r   r   *test_from_spmatrix_including_explicit_zero   s    


z;TestConstructors.test_from_spmatrix_including_explicit_zeroc              	   C   sB   dd l }|jjdddd}tjtdd t| W 5 Q R X d S )Nr      r   rT   )rS   znot '4'r<   )rY   rZ   Zeyer>   r?   r@   r   r\   )r   r`   ra   r   r   r   test_from_spmatrix_raises   s    z*TestConstructors.test_from_spmatrix_raiseszscalar,dtyper.   r   r   zr,   c              	   C   sl   t jtdd t|dddg|d}W 5 Q R X t|||g|d}t || |j|ksZt|j|kshtd S )Nz&The index argument has been deprecatedr<   r   r   r   )indexr
   r	   )r   rE   FutureWarningr   r   r   r   )r   Zscalarr   r   rM   r   r   r   "test_scalar_with_index_infer_dtype   s     z3TestConstructors.test_scalar_with_index_infer_dtypec              	   C   s2   t jtdd ttdd W 5 Q R X d S )Nzexpected dimension <= 1 datar<   rV   )r   rd   )r>   r?   	TypeErrorr   r   ZarangeZreshape)r   r   r   r   %test_constructor_from_too_large_array   s    z6TestConstructors.test_constructor_from_too_large_arrayc                 C   sJ   t ddddddddddg
dd}t |}|jdks6tt|j|j d S )	Nr   r   r   r   r   rd      r	   )r   r
   r   r   Zassert_almost_equalr%   )r   Zzarrresr   r   r   test_constructor_from_sparse   s     z-TestConstructors.test_constructor_from_sparsec                 C   s   t t jt jdddt jddt jdg
}t|}t|dd}d	|jd d< |jd d d	k rbtt|}d	|jd d< |jd d d	k std S )
Nr   r   r   r   rd   rl   T)copyr   )r   r5   r   r   r%   anyr   r8   )r   Zarr_datar   cpZnot_copyr   r   r   test_constructor_copy   s    &z&TestConstructors.test_constructor_copyc                 C   s   t ddddddg}t|dtd}|jttks6tt|j	t ddg t|j
jt ddgt j | }|jtkstt|| d S )NFTr   r   r   )r   r5   r   boolr   r   r   r   r_   r%   sp_indexindicesr'   to_denser   r9   r   Zdenser   r   r   test_constructor_bool	  s    z&TestConstructors.test_constructor_boolc                 C   s   t dddgd d}|jttjks&t|jr0tt dddgtjd}|jttjksXt|jrbtt dddgtjdd}|jttjdkst|jstd S )NTFr   r+   )r   r   r   r   r7   r   r
   r   r   r   r    test_constructor_bool_fill_value  s    

z1TestConstructors.test_constructor_bool_fill_valuec                 C   s   t jdt jdgt jd}t|t jd}|jtt jks:tt	|j
t jddgt jd t	|jjt jddgt jd | }|jt jkstt	|| d S )NrQ   r   r   r   r   r   )r   r5   r   Zfloat32r   r   r   r   r   r_   r%   rt   ru   r'   rv   rw   r   r   r   test_constructor_float32%  s     z)TestConstructors.test_constructor_float32)(__name__
__module____qualname__r   r#   r&   r(   r-   r;   r>   markZparametrizer   r   rA   rG   rN   r   rO   rP   r   r5   r   rC   Z	TimestampZNaTrR   tdZskip_if_no_scipyrb   rc   re   rs   ri   rk   rn   rr   rx   ry   rz   r   r   r   r   r      s\   


(
	
	


	
r   )Znumpyr   r>   Zpandas._libs.sparser   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   ZpandasrC   r   Zpandas._testingZ_testingr   Zpandas.core.arrays.sparser   r   r   r   r   r   r   <module>   s   