U
    f/eZX                  
   @   s  d dl mZmZ d dlmZ d dlmZ d dlZd dl	Z	d dl
m  mZ d dlZd dlmZmZmZmZmZmZm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
Z e	j!"deege	j!"dej#d dd Z$e	j!"deege	j!"dej#d dd Z%dd Z&dd Z'dd Z(e	j!"ddddgdddggdd Z)e	j!"de*de+d d iej,e+d d dd!gd"d# Z-d$d% Z.d&d' Z/e	j!"d(d)gd* d+fd)gd* d,fd)d-d)gd,fd)d-d)gd+fgd.d/ Z0d0d1 Z1d2d3 Z2d4d5 Z3dS )6    )abcdeque)Decimal)catch_warningsN)	DataFrameIndex
MultiIndexPeriodIndexSeriesconcat
date_range)SparseArray)!create_series_with_explicit_dtype)
to_decimalc                   @   s   e Zd Zdd Zejdd Zdd Z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d'd( Zd)d* Zd+d, Zd-d. Zd/S )0TestConcatenatec                 C   s   t dddd}t dddd}ttjd|}ttjd|}| }| }t||g}t|jt	slt
|jd |jd kst
d S )	Nz
12/31/1990z
12/31/1999zA-DEC)freqz
12/31/2000z
12/31/2009
   r   )r   r
   nprandomrandnZ	to_periodr   
isinstanceindexr	   AssertionError)selfd1Zd2s1s2result r   K/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/reshape/concat/test_concat.pytest_append_concat   s    z"TestConcatenate.test_append_concatc                 C   s  t tjdd}t tjjdddddd}t dditdd	}t|||gdd
d}|jj	D ]}|j
jd ks`tq`t|||gddd}|jj	D ]n}|jjdkr|j
j|jj	d j
jkstq|jjdkr|j
j|jj	d j
jkstq|jr|j
jd k	stqt tjdd}t||||gddd}|jj	D ]p}|jjdkrX|j
jd kstnH|jjdkr|j
j|jj	d j
jkstn|jr2|j
jd k	s2tq2d S )N      r   r   )size      foor   T)axiscopyFf)iu)r   r   r   r   randintreshaperanger   Z_mgrblocksvaluesbaser   dtypekindZ	is_object)r   dfdf2Zdf3r   bZdf4r   r   r   test_concat_copy/   s.     z TestConcatenate.test_concat_copyc              
   C   s  t tjdd}t tjdd}t tjdd}t tjdd}t||gddgd}tdddddddgdddddddgg}t tj|j|jf |d}t	
|| t||gddgd}tddddddgddddddgg}t tj|j|jf |d}t	
|| t tjdd}t tjdd}t||gddgdd}t tj|j|jf |d	}t	
|| t||gddgdd}t tj|j|jf |d	}t	
|| d S )
Nr!   r"   r   r$   keys   r'   r:   r(   columns)r   r   r   r   r   r   Zfrom_arraysZr_r1   tmassert_frame_equalZc_)r   r5   r6   r   	exp_indexexpectedZ
exp_index2r   r   r   test_concat_with_group_keysQ   s,    "&z+TestConcatenate.test_concat_with_group_keysc                 C   s   t tjdd}|jd d ddgf |jd d dgf |jd d dgf g}ddd	d
g}t|dd	ddg|gdgd}t|jj	d t
|dd t|jj	d t
ddddg |jjdd gkstd S )Nr   r!   r   r$   r;   r"   ZthreetwooneZzeroZ	group_key)r(   r:   levelsnamesname)r   r   r   r   ilocr   r?   assert_index_equalr>   rF   r   rG   r   )r   r5   pieceslevelr   r   r   r    test_concat_keys_specific_levelsq   s    < z0TestConcatenate.test_concat_keys_specific_levelsmappingdictc              	      s  |dkrt n|}|ttjddttjddttjddttjddd t  }t }t fdd|D |d}t	|| t dd	}t fd
d|D |dd}t	|| dddg}t |d}t fdd|D |d}t	|| d S )NrP   r!   r"   )r&   barbazZquxc                    s   g | ]} | qS r   r   .0kframesr   r   
<listcomp>   s     z7TestConcatenate.test_concat_mapping.<locals>.<listcomp>r9   r$   r(   c                    s   g | ]} | qS r   r   rS   rV   r   r   rX      s     r<   rR   r&   rQ   c                    s   g | ]} | qS r   r   rS   rV   r   r   rX      s     )
rP   r   r   r   r   listr:   r   r?   r@   )r   rO   Znon_dict_mapping_subclassconstructorZsorted_keysr   rB   r:   r   rV   r   test_concat_mapping   s&    	
z#TestConcatenate.test_concat_mappingc                 C   s>  t tjdd}t tjdd}ddgddgg}dd	g}t||||gd
dddg||d}t||||g}t|dgg ddddgddddgddddgg|d g d}||_t|| t||||gd
dddg|d}|jj	dkst
t||||gd
dddgdd	gd}|jj	dkst
t|jjd tddgdd d S )Nr$   r"   r!   r&   rR   rE   rD   firstsecond)r&   rE   )r&   rD   )rR   rE   )rR   rD   )r:   rF   rG   r   )rF   codesrG   r:   rF   )NNNr:   rG   )r]   r^   NrH   )r   r   r   r   r   r   r   r?   r@   rG   r   rK   rF   r   )r   r5   r6   rF   rG   r   rB   rA   r   r   r   test_concat_keys_and_levels   sD    


 




 z+TestConcatenate.test_concat_keys_and_levelsc              	   C   s   t tjdddgd}t tjdddgd}d}tjt|d$ t||gd	d
gdddggd W 5 Q R X d}tjt|d$ t||gd	d
gdddggd W 5 Q R X d S )Nr$   r"   ar'   r!   r7   z Values not found in passed levelmatchrE   rD   r&   rQ   rR   r`   zKey one not in level)r   r   r   r   pytestraises
ValueErrorr   )r   r5   r6   msgr   r   r   "test_concat_keys_levels_no_overlap   s    (z2TestConcatenate.test_concat_keys_levels_no_overlapc              	   C   s`  ddddg}t tjddddgd	d
tjddddgdd
tjddddgd	d
tjddddgdd
d|d}t tjddddgdd
tjddddgd	d
tjddddgdd
tjddddgd	d
d|d}|j|dd}t tj|j|jgdd|d}t|| t tj	dddgd}t tj	dddgd}t
||gddgddgd}|jjdks\td S )NABCDr$   r;   r"   r!   Zf8r3   i8)rk   rl   rm   rn   r=   Tignore_indexr   rY   rc   r'   r7   rE   rD   r]   r^   ra   )r]   r^   )r   r   arrayappendZconcatenater1   r?   r@   r   r   r   r   rG   r   )r   r>   df1r6   ZappendedrB   r5   r   r   r   r    test_crossed_dtypes_weird_corner   s6    

 z0TestConcatenate.test_crossed_dtypes_weird_cornerc                 C   s@   t dddtdd}t dddtdd}t||g|d d S )Nr&   rQ   )rk   rl   r$   r;   r'   )rl   rw   sort)r   r/   r   )r   ry   ru   r6   r   r   r   test_with_mixed_tuples   s    z&TestConcatenate.test_with_mixed_tuplesc                 C   s  t dddd}tjddd}t||d}t||d}t|dd	|d}tt|d
dd
|ddgd}t||gd	d}t	|| tt|d
dd
|dd	gd}t||gd	d}t	|| tt|ddd|dd	d
gd}t|||gd	d}t	|| tt|ddd|ddd	d
dgd}t|||||gd	d}t	|| d|_
tt|ddd|dddgd}t|||gd	d}t	|| d|_
tt|ddd|dddgd}t|||gd	d}t	|| tt|ddd|dd	d
gd}t|||gd	dd}t	|| tt|ddd	| d dgd}t|||g}t	|| tt|ddd	dgd}t|||gdd}t	|| d S )Nz01-Jan-2013r   H)Zperiodsr   int64ro   r'   r$   r;   r   r   r>   rY   r"   r%   r&   rQ   T)r(   rr   r=   rq   )r   r   aranger
   r   r.   repeatr   r?   r@   rI   Ztiletolist)r   r   Zarrr   r   r5   rB   r   r   r   r   test_concat_mixed_objs   s                   
 z&TestConcatenate.test_concat_mixed_objsc                 C   s   t dtddtjgi}t|jdg |jdg g}t|j	|j	 dd l
}t d|
ddd|
dddgi}t|jdg |jdg g}t|j	|j	 t d	d
gd gd  i}t|jdg |jdg g}t|j	|j	 d S )NdateZ20130101UTCr   r$   i  i  r;   textz
some words	   )r   pdZ	TimestampZtz_localizeZNaTr   rJ   r?   assert_series_equalZdtypesdatetime)r   r5   r   r   r   r   r   test_dtype_coerceionB  s    z$TestConcatenate.test_dtype_coerceionc                 C   sN   t tjdd}t|gdgd}t||gddgd}t||d d  d S )Nr   r!   r&   r9   rQ   )r   r   r   r   r   r?   r@   )r   r5   r   rB   r   r   r   test_concat_single_with_keyX  s    z+TestConcatenate.test_concat_single_with_keyc              	   C   s&   t jtdd tg  W 5 Q R X d S )NzNo objects to concatenaterd   )rf   rg   rh   r   r   r   r   r   test_concat_no_items_raises_  s    z+TestConcatenate.test_concat_no_items_raisesc              	   C   sl   t tjdd}|d d d d |dd  g}t|}t|| tjt	dd td d g W 5 Q R X d S )Nr   r!   r%   zAll objects passed were Nonerd   )
r   r   r   r   r   r?   r@   rf   rg   rh   )r   r5   rL   r   r   r   r   test_concat_exclude_nonec  s    z(TestConcatenate.test_concat_exclude_nonec                 C   s   t dddgdddgdddgg}td ||d d |d d |d}t||d d |d d |d}t|| td ||d d |d d |gdd	d
ddgd}t||d d |d d |gd	d
ddgd}t|| d S )Nr         r;   r$   )rc   r7   cde)r7   r   r   r   rc   r7   r   r   r   r9   r   r   r?   r@   )r   Zdf0r   rB   r   r   r   test_concat_keys_with_nonel  s     $" ,z*TestConcatenate.test_concat_keys_with_nonec                 C   sV   t  }t  d d d }t||gddd}t||gddd}t|t|ksRtd S )Nr;   outerr$   )joinr(   )r?   ZmakeTimeSeriesr   lenr   )r   ts1Zts2leftrightr   r   r   test_concat_bug_1719z  s
    z$TestConcatenate.test_concat_bug_1719c                 C   s`   t td}t td}d |_|_t||gdd}t||d}ddg|_t	|| d S )Nr%   z	same namer$   rY   r   r$   )
r
   r   zerosZonesrI   r   r   r>   r?   r@   )r   Zts0r   r   rB   r   r   r   test_concat_bug_2972  s    
z$TestConcatenate.test_concat_bug_2972c              
   C   s   t ddddgddddgddddgd}t ddddgd	d
ddgddddgd}t ddddd	dgddddd
dgddddddgddddddgg}ddddddg|_t||gd	d}t|| d S )Nr      Zrrr)firmNoprc	stringvarr   r         r$   r;   r"   r!   )rm   miscr   r   r   r   rm   r   rY   )r   r>   r   r?   r@   )r   ru   r6   rB   r   r   r   r   test_concat_bug_3602  s&    


"z$TestConcatenate.test_concat_bug_3602c                    s   t dddg t dddgt ddddddg}tt fdd| tt gdd| ttd	d
  fD dd| ttt fdd| G  fddd}tt| dd| G  fdddtj}tt| dd| d S )Nr$   r;   r"   r!   r%   r   Trq   c                 s   s   | ]
}|V  qd S Nr   )rT   r5   r   r   r   	<genexpr>  s     z8TestConcatenate.test_concat_iterables.<locals>.<genexpr>c                       s(   e Zd ZedddZ fddZdS )z>TestConcatenate.test_concat_iterables.<locals>.CustomIterator1)returnc                 S   s   dS )Nr;   r   r   r   r   r   __len__  s    zFTestConcatenate.test_concat_iterables.<locals>.CustomIterator1.__len__c              
      s>   z d| W S  t k
r8 } z
t|W 5 d }~X Y nX d S )Nr   )KeyError
IndexError)r   r   errru   r6   r   r   __getitem__  s    zJTestConcatenate.test_concat_iterables.<locals>.CustomIterator1.__getitem__N)__name__
__module____qualname__intr   r   r   r   r   r   CustomIterator1  s   r   c                       s   e Zd Z fddZdS )z>TestConcatenate.test_concat_iterables.<locals>.CustomIterator2c                 3   s    V  V  d S r   r   r   r   r   r   __iter__  s    zGTestConcatenate.test_concat_iterables.<locals>.CustomIterator2.__iter__N)r   r   r   r   r   r   r   r   CustomIterator2  s   r   )r   r?   r@   r   r   r   Iterable)r   rB   r   r   r   r   r   test_concat_iterables  s     
z%TestConcatenate.test_concat_iterablesc                 C   sV   t tdddd gdg}|dd tdD 7 }t|dd	j}|d
 j}t|| d S )Nr"   rc   r$   r~   c                 S   s"   g | ]}t td dddgdqS )r"   Nr$   rc   r~   )r   r/   )rT   r+   r   r   r   rX     s     z5TestConcatenate.test_concat_order.<locals>.<listcomp>d   Trx   r   )r   r/   r   r>   r?   rK   )r   dfsr   rB   r   r   r   test_concat_order  s
    
z!TestConcatenate.test_concat_orderc                 C   sb   t tjddgdd}t tddg}t||gdd}t ddtdtdgtd}t|| d S )Nr$   r;   Int64ro   Trq   )	r
   r   rs   r   r   r   objectr?   r   )r   rc   r7   r   rB   r   r   r   .test_concat_different_extension_dtypes_upcasts  s
    z>TestConcatenate.test_concat_different_extension_dtypes_upcastsc                 C   sR   t ttdttdgddgd}t ttdttdd}t|| d S )Nr"   r!   FirstAnotherr9   )r   r   )r   r
   r/   r?   r   )r   rB   r   r   r   r   test_concat_ordered_dict  s     z(TestConcatenate.test_concat_ordered_dictN)r   r   r   r    tdZskip_array_manager_invalid_testr8   rC   rN   rf   markparametrizer\   rb   rj   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s0   
! 
)!	E	
 	r   pdtdtfloatc                 C   sj   |t dj}|tjdg| |d|tjtjg| |d|tjdg| |dg}t|}|jj| ksftd S )Nro   r$   r3   ndminr%   )	r   ndimr   rs   nanr   r1   r3   r   r   r   Zdimsr   xr   r   r   !test_concat_no_unnecessary_upcast  s    r   r   c              	   C   sz   t ddf | j}|tjdg| |d|tjtjg|d|tjdg| |dg}t|}|jjdksltW 5 Q R X d S )NT)recordr$   r   )r   r%   float64)	r   r   r   rs   r   r   r1   r3   r   r   r   r   r   test_concat_will_upcast  s    r   c                  C   sD   t ddgi} t dg i}t ddgi}t| |g}t|| d S )Nr&   r$   g      ?r   )ru   r6   rB   r   r   r   r   0test_concat_empty_and_non_empty_frame_regression   s
    r   c                  C   s^   t tdddg} tddgddgddggdttjd}t| | gdd}t	
|| d S )Nr   r$   r;   )datarY   )r
   r   r   astyper   SparseDtyper   r|   r   r?   r@   )rc   rB   r   r   r   r   test_concat_sparse	  s    r   c                  C   sn   t tjdd gtd} t dgtd}t dd dgdddgdttjd }t	| |gdd}t
|| d S )Nr$   ro   r   r   r   rY   )r
   r   Zarraysr   r   r   r   r   r   r   r?   r   )rc   r7   rB   r   r   r   r   test_concat_dense_sparse  s    r   r:   r   r*   c                 C   s   t dddgdddgd}tdd	d
gdd}tdddgdd}t|||gd| d}ddddgddd	dgddd
dgg}t| d df| d df| d df| d dfg}t ||d}t|| d S )Nr$   r;   r"   r!   r%   r   rc   r7         r   r   rH   r   r   r   r   )r(   r:   r   rc   r7   r=   )r   r
   r   r   from_tuplesr?   r@   )r:   r5   r   r   r   Zexpected_valuesZexpected_columnsrB   r   r   r   test_duplicate_keys  s    "*r   objrk   r   rH   c                 C   s"   t | | g}t|t| std S r   )r   r   typer   )r   r   r   r   r   test_concat_preserves_subclass-  s    
r   c                  C   s   t dtjdddgddi} t dtddd	gi}t| |gd
d}t ddddddd	gidd}t|| t|| gd
d}t dddd	dddgidd}t|| d S )Nrc   r$   r;   r"   r   ro   r!   r%   r   Trq   )r   r   rs   r   r   r?   r@   )ru   r6   r   rB   r   r   r   (test_concat_frame_axis0_extension_dtypes;  s    r   c                  C   s^   t ddgidd} t ddgidd}t| |gdd}t dd gd dgd	dd}t|| d S )
Nrc   r}   r   ro   r7   r$   Trq   r   r   )Zdf_aZdf_br   rB   r   r   r   +test_concat_preserves_extension_int64_dtypeI  s
    r   )r:   	integrityZredr"   TFZbluec                 C   sl   t ddit ddit ddig}t|| |d}tt| dddg}t dddgt|d}t|| d S )	Nrc   r$   r7   r;   r   r"   )r:   Zverify_integrityr'   )r
   r   rZ   zipr   r   r?   r   )r:   r   Zseries_listr   ZtuplesrB   r   r   r   test_concat_repeated_keysR  s
    "r   c                  C   s   t jdgddd} tddgi| d}td gdd	d}td gtjgd
|d}t||gdd}td | d gtd}td d gtjtjgtjdgd|d}t	|| d S )Nz2021-04-08 21:21:14+00:00zdatetime64[ns, UTC]z
Time (UTC))r3   rI   rm   g!u?r   r   zMaybe Time (UTC))rk   rl   r>   rY   r   ro   )rk   rl   rm   r'   )
r   ZDatetimeIndexr   r   r   r   r   r   r?   r@   )Zdtir   idxr   r   rA   rB   r   r   r    test_concat_null_object_with_dtid  s      r   c                  C   sl   t ddg} tddgg| d}tdgtdd}t||g}tddgtjtjgg| d}t	|| d S )Nrw   )rm   r$   r$   r;   r=   r   r~   )
r   r   r   r   Z
RangeIndexr   r   r   r?   r@   )miru   r6   r   rB   r   r   r   ,test_concat_multiindex_with_empty_rangeindexx  s    r   c               	   C   s   t dddggdgd} t dddggd	gd}d
}tjt|d t| |gd}W 5 Q R X t dddgdddggdd	gd}t|| d S )Nr$   r;   r"   rc   r'   r!   r%   r   r7   ziIn a future version of pandas all arguments of concat except for the argument 'objs' will be keyword-onlyrd   r   )r   r?   Zassert_produces_warningFutureWarningr   r@   )r5   r6   ri   r   rB   r   r   r   test_concat_posargs_deprecation  s     r   )4collectionsr   r   decimalr   warningsr   Znumpyr   rf   Zpandas.util._test_decoratorsutilZ_test_decoratorsr   Zpandasr   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr?   Zpandas.core.arraysr   Zpandas.core.constructionr   Zpandas.tests.extension.decimalr   r   r   r   Zsctypesr   r   r   r   r   r   ZSubclassedDataFramer   ZSubclassedSeriesr   r   r   r   r   r   r   r   r   r   r   <module>   s^   $	   I	


		
	