U
    sVc%7                     @   sd   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
 d dlmZ d dlmZ G dd deZdS )    N)ExtensionArray)EABackedBlock)BaseExtensionTestsc                   @   sp  e Zd ZdZ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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ejjd&d'gd(d)gd*gd+d, Zejd-ejjd$d%gd.d/ggd.d/gd*ejd&d'd0gejd1d2d3gejd4d5d6d7d8ggejd9d:d;gd<d= Zd>d? Zd@dA ZdBdC ZdDS )EBaseReshapingTestsz&Tests for reshaping and concatenation.in_frameTFc                 C   s   t |}|rt |}t j||gdd}t|t|d ksBt|rR|jd }n|j}||jksftt|j	drt
|j	jd tstt
|j	jd tstd S )NTZignore_index   r   blocks)pdSeries	DataFrameconcatlenAssertionErrordtypesdtypehasattrZ_mgr
isinstancer	   r   Zarraysr   )selfdatar   wrappedresultr    r   I/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/extension/base/reshaping.pytest_concat   s    

zBaseReshapingTests.test_concatc              	   C   s   t j|ddgddgd}t j|ddgddgd}|rXt d|i}t d|i}t ||g}|rt d|ddddgi}| || n$t |ddddg}| || d S )N   r   indexr      a)r
   r   taker   r   assert_frame_equalassert_series_equal)r   Zdata_missingr   Zvalid_blockZna_blockr   expectedr   r   r   test_concat_all_na_block#   s    z+BaseReshapingTests.test_concat_all_na_blockc                 C   s4  t d|d d i}t ddddgi}t ddddgid}|||g}t |}t d	d
 |D }| || t dd
 |D }t dd
 |D }| || t ||tg}t |d|dg}| || t |d |d tg}t |d d|d dg}| || d S )NAr   r   r   r   bccategoryc                 S   s   g | ]}| tqS r   astypeobject.0xr   r   r   
<listcomp>;   s     z?BaseReshapingTests.test_concat_mixed_dtypes.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r%   r   r,   r   r   r   r/   ?   s     c                 S   s   g | ]}|d   tqS r0   r)   r,   r   r   r   r/   @   s     r+   )r
   r   r*   r   r!   r"   r+   )r   r   df1df2Zdf3dfsr   r#   r   r   r   test_concat_mixed_dtypes2   s     

"z+BaseReshapingTests.test_concat_mixed_dtypesc                 C   s*  t d|d d i}t ddddgi}t |d d dddgd}t j||gdd}| || t j|d |d gdd}| || t jddddgidddgd}t |jt|d d |g |jd	tjdddgd}t j||gdd}| || t j|d |d gdd}| || d S )
Nr%   r   Br   r   r%   r5   axisr   r   )	r
   r   r   r!   _from_sequencelistr   npnanr   r   na_valuer1   r2   r#   r   r   r   r   test_concat_columnsL   s"     z&BaseReshapingTests.test_concat_columnsc                 C   s   t d|d d i}t d|dd i}t |jt|d d |g |jd|dd d}t j||gddd	}| || d S )
Nr%   r   r5      r9   r6   r   F)r8   copy)r
   r   r:   r;   r   r   r!   r>   r   r   r   'test_concat_extension_arrays_copy_falsed   s     
z:BaseReshapingTests.test_concat_extension_arrays_copy_falsec                 C   s   t d|d d i}t d|d d i}t j||gdd}t |jttddgd  dd|jdgd ttd ddd}| || d S )	Nr      r&   Tr   )Z
allow_fill)r   r&   )r
   r   r   r    r;   ranger!   )r   r   r   r&   r   r#   r   r   r   test_concat_with_reindexq   s    z+BaseReshapingTests.test_concat_with_reindexc           	      C   s   |d d }|dd }t |t j|dddgd\}}t |jt||g |jd}t |j|gt| |jd}| || | || d S )Nr   r   rD   r   r   r9   )r
   r   alignr:   r;   r   r"   	r   r   r?   r   r&   r1r2e1e2r   r   r   
test_align~   s    $  zBaseReshapingTests.test_alignc           	      C   s   |d d }|dd }t d|it jd|idddgd\}}t d|jt||g |jdi}t d|j|gt| |jdi}| || | || d S )Nr   r   rD   r%   r   r   r9   )r
   r   rH   r:   r;   r   r!   rI   r   r   r   test_align_frame   s    ,z#BaseReshapingTests.test_align_framec                 C   sz   t j|dd}t dtt|d i}||\}}t j|jt||g |j	d|j
d}| || | || d S )Nr   )namecolr   r9   )r
   r   r   r<   Zaranger   rH   r:   r;   r   rP   r"   r!   )r   r   r?   serdfrJ   rK   rL   r   r   r   test_align_series_frame   s    z*BaseReshapingTests.test_align_series_framec                 C   sJ   t ddgt| i}||d< t dgt| |d}| || d S Nr%   r   r5   r6   r
   r   r   r!   r   r   rS   r#   r   r   r   ,test_set_frame_expand_regular_with_extension   s    z?BaseReshapingTests.test_set_frame_expand_regular_with_extensionc                 C   sJ   t d|i}dgt| |d< t |dgt| d}| || d S rU   rV   rW   r   r   r   ,test_set_frame_expand_extension_with_regular   s    z?BaseReshapingTests.test_set_frame_expand_extension_with_regularc                 C   s<   t jddgt| itd}||d< |jd |jks8td S )Nr%   r   r9   )r
   r   r   r+   r   r   r   )r   r   rS   r   r   r   test_set_frame_overwrite_object   s    z2BaseReshapingTests.test_set_frame_overwrite_objectc                 C   s6  t |d d dddgdddgd}t ddddgddddgd}t ||}t dddgdddgdddg|j|d |d |d g|jdd	}| ||d
dddg  t j||dd}t ddddtjgdddtjdgdddddg|j|d |d |d |d |g|jdd	}| ||d
dddg  d S )Nr   r   r   r   )extint1key   )int2r]   r9   )r\   r_   r]   r[   r[   r\   r]   r_   outer)how)r
   r   merger:   r   r!   r<   r=   )r   r   r?   r1   r2   resexpr   r   r   
test_merge   s4    &  
 
zBaseReshapingTests.test_mergec                 C   s   |d d \}}t |j||g|jd}t|ddgd}tj||dd}t|ddgddgd}| || tj|jddg |dd}|jddg jd	d
}| || d S )Nr   r9   r   r]   valr]   onr]   Zval_xZval_yr   T)Zdrop)	typer:   r   r
   r   rb   r!   ilocZreset_index)r   r   r   r&   r]   rS   r   r#   r   r   r   test_merge_on_extension_array   s    z0BaseReshapingTests.test_merge_on_extension_arrayc           	   	   C   s   |d d \}}t |j|||g|jd}t|dddgd}t|dddgd}tj||dd}t|dddddgdddddgdddddgd	}| || d S )
Nr   r9   r   r   rf   r]   rh   r   rj   )rk   r:   r   r
   r   rb   r    r!   )	r   r   r   r&   r]   r1   r2   r   r#   r   r   r   (test_merge_on_extension_array_duplicates   s    z;BaseReshapingTests.test_merge_on_extension_array_duplicatescolumnsr%   r5   )r%   r   )r%   r&   r`   inner)namesc                 C   s   t |d d |d d d}||_| }|t }|t}t|t jrr|j|j	d d df jkst
n"t|j|j	d d df jkst
|t}| || d S )NrD   r6   r   )r
   r   ro   stackr*   r+   r   r   r   rl   r   allr   Zassert_equal)r   r   ro   rS   r   r#   r   r   r   
test_stack   s    
 
 "
zBaseReshapingTests.test_stackr   r   r&   )r5   r&   r6   )r   r&   r'   )r   r   r   )r%   r   r   )r%   r&   r   )r%   r   r   )r5   r   r   )r5   r'   r   objseriesframec              
      s   d t |  |dkr(tj |d}ntj  d|d}|j}tt|tj	fddtd|D }|D ]$}|j
|dt fddjD st|dkr| }|j
|djd	dd
}	| |	 |dkrt|jtj}
nt|jjd	 tj}
|
s
d nt}tj|dd |t}W 5 Q R X |j
| jjd}|dkrh|
sh|jtk shttj|dd tW 5 Q R X | | qrd S )Nrv   r   r6   c                 3   s   | ]}t  |V  qd S N)	itertoolspermutations)r-   i)levelsr   r   	<genexpr>1  s    z2BaseReshapingTests.test_unstack.<locals>.<genexpr>r   )levelc                 3   s"   | ]}t | jt V  qd S rx   )r   arrayrk   )r-   rQ   )r   r   r   r   r}   7  s    r   r7   zastype from Sparse)match)r~   Z
fill_value)r   r
   r   r   Znlevelsr;   rF   ry   chainfrom_iterableZunstackrs   ro   r   Zto_frameZ	droplevelr!   r   r   ZSparseDtyper   ZiatFutureWarningtmZassert_produces_warningr*   r+   r?   )r   r   r   ru   rR   ncombinationsr~   rS   ZaltZ	is_sparsewarnZobj_serr#   r   )r   r|   r   r   test_unstack  s<    
zBaseReshapingTests.test_unstackc                 C   s@   |  }t|t|kst|d |d< |d |d ks<td S )Nr   r   )Zravelrk   r   r   r   r   r   r   r   
test_ravelU  s    zBaseReshapingTests.test_ravelc                 C   sf   |  }t|t|kst||k	s(t|j|jd d d ksBt|d |d< |d |d ksbtd S )NrE   r   r   )	transposerk   r   shaper   r   r   r   test_transpose^  s    z!BaseReshapingTests.test_transposec                 C   s  t j|d d |d d dddddgd}|j}t jt|j|d gd	 |jd
t|j|d gd	 |jd
t|j|d	 gd	 |jd
t|j|d gd	 |jd
dddgd}| || | tt|| | tt|dg |dg  d S )Nr^   r6   r   r&   r'   dr   r   r   r9   r   r   )r   r&   r'   r   r%   r5   )	r
   r   Trk   r:   r   r!   r<   r   )r   r   rS   r   r#   r   r   r   test_transpose_framel  s    ,	z'BaseReshapingTests.test_transpose_frameN)__name__
__module____qualname____doc__pytestmarkZparametrizer   r$   r4   r@   rC   rG   rN   rO   rT   rX   rY   rZ   re   rm   rn   r
   Z
MultiIndexfrom_tuplesrt   Zfrom_productr   r   r   r   r   r   r   r   r      s`   

 	
/	r   )ry   Znumpyr<   r   Zpandasr
   Zpandas._testingZ_testingr   Zpandas.api.extensionsr   Zpandas.core.internals.blocksr   Z pandas.tests.extension.base.baser   r   r   r   r   r   <module>   s   