o
    dj                  
   @   s  d dl mZmZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlZd dlZd dlmZm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$ G dd dZ%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g dg dgdd Z.d d! Z/ej&'d"e 0d#e1d d$ie j2e1d d$d#d%gd&d' Z3d(d) Z4d*d+ Z5ej&'d,g d-d.d/ Z6ej&'d0d1gd2 d3fd1gd2 d4fg d5d4fg d5d3fgd6d7 Z7d8d9 Z8d:d; Z9ej&'d<ed=d>gd?ed@d=d>gid?ee:dAee:dAgdBdC Z;ej&'d<ed=d>gd?ed@d=d>gid?ee:dAee:dAgdDdE Z<ej=ej&'dFg dGej&'dHg dIdJdK Z>ej=ej&'dFg dGej&'dHg dIdLdM Z?ej=dNdO Z@dS )P    )abcdeque)datetime)Decimal)Iterator)catch_warningssimplefilterN)InvalidIndexErrorPerformanceWarning)	DataFrameIndex
MultiIndexPeriodIndexSeriesconcat
date_range)SparseArray)
to_decimalc                   @   s   e Zd Zdd Z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/d0 Zd1S )2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	s6J |jd |jd ksBJ 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   )selfZd1Zd2s1s2result r    [/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/reshape/concat/test_concat.pytest_append_concat&   s   z"TestConcatenate.test_append_concatc                    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}|s=|jj	D ]	  j
d u s;J q2n|jj	D ]	  j
d usJJ qAt|||gddd}|jj	D ]A  jjdkrn j
|jj	d j
u smJ qY jjdv r j
|jj	d j
u sJ qY jtkr|r |jj	d u sJ qY j
d usJ qYt tjdd}t||||gddd}|jj	D ]Q  jjdkr|s|rt fdd|jj	|jj	 D sJ q j
d u sJ q jjdv r j
|jj	d j
u sJ q jtkrt fdd|jj	D sJ qd S )N      r   r   )size      foor   T)axiscopyFf)iuc                 3       | ]	}t  |V  qd S Nr   Zshares_memory.0otherarrr    r!   	<genexpr>[   s
    

z3TestConcatenate.test_concat_copy.<locals>.<genexpr>c                 3   r/   r0   r1   r2   r5   r    r!   r7   f   s    )r   r   r   r   randintreshaperanger   Z_mgrarraysbasedtypekindobjectany)r   Zusing_array_managerZusing_copy_on_writedfdf2Zdf3r   Zdf4r    r5   r!   test_concat_copy6   sH   
 z TestConcatenate.test_concat_copyc                 C   sd  t tjdd}t tjdd}t||gddgd}tg dg dg}t tj|j|jf |d}t	
|| t||gddgd}tg d	g d
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   r&   r&   r&   r&   )r   r&      r   r&   rF   r$   r)   )r   r   r   r&   r&   r&   )r   r&   rF   r   r&   rF   rE   r*   columns)r   r   r   r   r   r   Zfrom_arraysZr_valuestmassert_frame_equalZc_)r   rA   rB   r   	exp_indexexpectedZ
exp_index2r    r    r!   test_concat_with_group_keysh   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}g d}t|dg d|gd	gd
}t|jj	d t
|d	d t|jj	d t
g d |jjd	d gks^J d S )Nr   r#   r   r&   rF   r$   )threetwoonezero)rR   rQ   rP   Z	group_key)r*   rE   levelsnamesname)r   r&   rF   r$   )r   r   r   r   ilocr   rK   assert_index_equalrI   rT   r   rU   )r   rA   pieceslevelr   r    r    r!    test_concat_keys_specific_levels   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	|| g d}t |d}t fdd|D |d}t	|| d S )Nr^   r#   r$   )r(   barbazZquxc                       g | ]} | qS r    r    r3   kframesr    r!   
<listcomp>       z7TestConcatenate.test_concat_mapping.<locals>.<listcomp>rD   r&   r*   c                    ra   r    r    rb   rd   r    r!   rf      rg   rG   )r`   r(   r_   c                    ra   r    r    rb   rd   r    r!   rf      rg   )
r^   r   r   r   r   listrE   r   rK   rL   )r   r]   Znon_dict_mapping_subclassconstructorZsorted_keysr   rN   rE   r    rd   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g d
||d}t||||g}t|dgg g dg dg dg|d g d}||_t|| t||||gg d
|d}|jj	dksiJ t||||gg d
dd	gd}|jj	dksJ t
|jjd tddgdd d S )Nr&   r$   r#   r(   r`   rR   rQ   firstsecond))r(   rR   )r(   rQ   )r`   rR   )r`   rQ   )rE   rT   rU   r   )r   r   r&   r&   )r   r&   r   r&   r   r   r   r   )rT   codesrU   rE   rT   )NNNrE   rU   )rl   rm   NrV   )r   r   r   r   r   r   r   rK   rL   rU   rY   rT   r   )r   rA   rB   rT   rU   r   rN   rM   r    r    r!   test_concat_keys_and_levels   sB   



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g dgd W d    n1 s:w   Y  d}tjt|d t||gd	d
gg dgd W d    d S 1 sbw   Y  d S )Nr&   r$   ar)   r#   bz Values not found in passed levelmatchrR   rQ   )r(   r_   r`   rp   zKey one not in level)r   r   r   r   pytestraises
ValueErrorr   )r   rA   rB   msgr    r    r!   "test_concat_keys_levels_no_overlap   s   "z2TestConcatenate.test_concat_keys_levels_no_overlapc                 C   s<  g d}t tjg dddtjg dddtjg dddtjg dddd|d}t tjg dddtjg dddtjg dddtjg dddd|d}t||g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sJ d S )N)ABCDr&   rF   r$   r#   Zf8r=   i8rH   Tignore_indexr   rh   r&   r$   rs   r)   r#   rt   rR   rQ   rl   rm   rq   )rl   rm   )r   r   arrayr   ZconcatenaterJ   rK   rL   r   r   r   rU   )r   rI   df1rB   ZappendedrN   rA   r   r    r    r!    test_crossed_dtypes_weird_corner   s4   

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(   r_   )r|   r}   r&   rF   r)   )r}   r   sort)r   r:   r   )r   r   r   rB   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|g dd}t|||gd	d}t	|| tt|ddd|g dd}t|||||gd	d}t	|| d|_
tt|ddd|g dd}t|||gd	d}t	|| d|_
tt|ddd|g dd}t|||gd	d}t	|| tt|ddd|g d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   int64r   r)   r&   rF   r   r   rI   rh   r$   r   r&   rF   r'   )r   r   r&   rF   r$   r(   )r(   r   r   r_   )r(   r   r_   T)r*   r   rH   r   )r   r   aranger   r   r9   repeatr   rK   rL   rW   Ztiletolist)r   r   r6   r   r   rA   rN   r   r    r    r!   test_concat_mixed_objs  sd    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	 t dt
dddt
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  rF   textz
some words	   )r   pd	TimestampZtz_localizeNaTr   rX   rK   assert_series_equalZdtypesr   )r   rA   r   r    r    r!   test_dtype_coerceionU  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(   rD   r_   )r   r   r   r   r   rK   rL   )r   rA   r   rN   r    r    r!   test_concat_single_with_keyf  s   z+TestConcatenate.test_concat_single_with_keyc                 C   s<   t jtdd tg  W d    d S 1 sw   Y  d S )NzNo objects to concatenateru   )rw   rx   ry   r   r   r    r    r!   test_concat_no_items_raisesm  s   
"z+TestConcatenate.test_concat_no_items_raisesc                 C   s   t tjdd}|d d d d |dd  g}t|}t|| tjt	dd td d g W d    d S 1 s:w   Y  d S )Nr   r#   r'   zAll objects passed were Noneru   )
r   r   r   r   r   rK   rL   rw   rx   ry   )r   rA   rZ   r   r    r    r!   test_concat_exclude_noneq  s   "z(TestConcatenate.test_concat_exclude_nonec                 C   s   t g dg dg dg}td ||d d |d d |d}t||d d |d d |d}t|| td ||d d |d d |gg dd}t||d d |d d |gg dd}t|| d S )N)r         rF   r&   )rs   rt   cde)rt   r   r   r   rD   r   r   rK   rL   )r   Zdf0r   rN   r    r    r!   test_concat_keys_with_nonez  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s)J d S )NrF   outerr&   )joinr*   )rK   ZmakeTimeSeriesr   len)r   ts1Zts2leftrightr    r    r!   test_concat_bug_1719  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&   rh   r   r&   )
r   r   ZzerosZonesrW   r   r   rI   rK   rL   )r   Zts0r   r   rN   r    r    r!   test_concat_bug_2972  s   
z$TestConcatenate.test_concat_bug_2972c                 C   s   t g dg dg dd}t g dg dg dd}t g dg d	g d
g dg}g d|_t||gdd}t|| d S )Nrn   )   r   r   r   )rrrr   r   r   )firmNoprc	stringvar)r   r         r   )r~   miscr   )r   r   r   r   r&   r   )r   r   r   r   rF   r   )r   r   r   r   r$   r   )r   r   r   r   r#   r   )r   r   r   r~   r   r   r&   rh   )r   rI   r   rK   rL   )r   r   rB   rN   r   r    r    r!   test_concat_bug_3602  s&   
z$TestConcatenate.test_concat_bug_3602c                    s   t g d t g dt g d}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 )Nr&   rF   r$   r#   r'   r   r&   rF   r$   r#   r'   r   Tr   c                 s   s    | ]}|V  qd S r0   r    )r3   rA   r    r    r!   r7     s    z8TestConcatenate.test_concat_iterables.<locals>.<genexpr>c                       s(   e Zd ZdefddZ fddZdS )z>TestConcatenate.test_concat_iterables.<locals>.CustomIterator1returnc                 S   s   dS )NrF   r    r   r    r    r!   __len__  s   zFTestConcatenate.test_concat_iterables.<locals>.CustomIterator1.__len__c              
      s0   z d| W S  t y } zt|d }~ww )Nr   )KeyError
IndexError)r   r   errr   rB   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def fddZdS )z>TestConcatenate.test_concat_iterables.<locals>.CustomIterator2r   c                 3   s     V  V  d S r0   r    r   r   r    r!   __iter__  s   
zGTestConcatenate.test_concat_iterables.<locals>.CustomIterator2.__iter__N)r   r   r   r   r   r    r   r    r!   CustomIterator2  s    r   )r   rK   rL   r   r   r   Iterable)r   rN   r   r   r    r   r!   test_concat_iterables  s   
z%TestConcatenate.test_concat_iterablesc                 C   sV   t tdg ddg}|dd tdD 7 }t|ddj}tg d	}t|| d S )
Nr$   )rs   r&   Nr   c                 S   s    g | ]}t td g ddqS )r$   )Nr&   rs   r   )r   r:   )r3   _r    r    r!   rf     s     z5TestConcatenate.test_concat_order.<locals>.<listcomp>d   Tr   )r&   rs   N)r   r:   r   rI   r   rK   rY   )r   dfsr   rN   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&   rF   Int64r   Tr   )	r   r   r   r   r   r   r?   rK   r   )r   rs   rt   r   rN   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AnotherrD   )r   r   )r   r   r:   rK   r   )r   rN   r   r    r    r!   test_concat_ordered_dict  s
   z(TestConcatenate.test_concat_ordered_dictc                 C   s   t tjdg ddgd}t tjdg ddgd}d}tjt|d t||gd	d
 W d    d S 1 s9w   Y  d S )Nr'   )r   r&   rF   r$   r$   rs   r   )r   r&   rF   rF   r#   rt   z8Reindexing only valid with uniquely valued Index objectsru   r&   rh   )r   r   r   r   rw   rx   r	   r   )r   r   rB   rz   r    r    r!   #test_concat_duplicate_indices_raise  s   "z3TestConcatenate.test_concat_duplicate_indices_raiseN)r   r   r   r"   rC   rO   r\   rw   markparametrizerk   rr   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r   %   s2    2
)!	D	
 	r   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s3J d S )Nr   r&   r=   ndminr'   )r?   ndimr   r   nanr   rJ   r=   )r   Zframe_or_seriesdimsr   xr    r    r!   !test_concat_no_unnecessary_upcast  s   r   pdtr   c              	   C   s   t dd9 | j}|tjdg| |d|tjtjg|d|tjdg| |dg}t|}|jjdks6J W d    d S 1 sAw   Y  d S )NT)recordr&   r   )r   r'   float64)r   r   r   r   r   r   rJ   r=   )r   r   r   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   )r   rB   rN   r   r    r    r!   0test_concat_empty_and_non_empty_frame_regression  s
   r   c                  C   s\   t tg d} 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&   rF   datarh   )r   r   r   astyper   SparseDtyper   r   r   rK   rL   )rs   rN   r   r    r    r!   test_concat_sparse  s   r   c                  C   sn   t tjd } tt jdd g| d}tdgtd}tg dg dd| }t	||gdd}t
|| d S )Nr&   r   )r&   Nr&   )r   r&   r   r   r   r   rh   )r   r   r   r   r   r;   r   r   r   r   rK   r   )r=   rs   rt   rN   r   r    r    r!   test_concat_dense_sparse(  s   r   rE   )r   r,   r,   )r,   r   r,   c                 C   s   t g dg dd}tg ddd}tg ddd}t|||gd	| d
}g dg dg dg}t| d df| d df| d	 df| d dfg}t ||d}t|| d S )Nr   r   rs   rt   )      r   r   rV   )r   r   r   r   r&   r*   rE   )r&   r#   r   r   )rF   r'   r   r   )r$   r   r   r   r   rs   rt   rF   rH   )r   r   r   r   from_tuplesrK   rL   )rE   rA   r   r   r   expected_valuesexpected_columnsrN   r    r    r!   test_duplicate_keys2  s   *r   c                  C   s   ddg} t g dg dd}t||gd| d}g dg dg d	g}t| d
 df| d
 df| d df| d dfg}t ||d}t  tdt t|| W d    d S 1 s\w   Y  d S )Nr   r   r   r   r&   r   )r&   r#   r&   r#   )rF   r'   rF   r'   )r$   r   r$   r   r   rs   rt   rH   ignore)	r   r   r   r   r   r   r
   rK   rL   )rE   rA   r   r   r   rN   r    r    r!   test_duplicate_keys_same_frameA  s   *
"r   objr|   r   rV   c                 C   s"   t | | g}t|t| sJ d S r0   )r   r   type)r   r   r    r    r!   test_concat_preserves_subclassQ  s   
r   c                  C   s   t dtjg dddi} t dtg di}t| |gdd}t dg didd}t|| t|| gdd}t dg d	idd}t|| d S )
Nrs   r   r   r   r   Tr   r   )r#   r'   r   r&   rF   r$   )r   r   r   r   r   rK   rL   r   rB   r   rN   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 )
Nrs   r   r   r   rt   r&   Tr   r   r   )Zdf_aZdf_br   rN   r    r    r!   +test_concat_preserves_extension_int64_dtypem  s
   r   zdtype1,dtype2,expected_dtype))boolr   r   )booleanr   r   )r   r   r   )r   r   r   c                 C   sP   t ddg| d}t ddg|d}t||gdd}t g d|d}t|| d S )NTFr   r   )TFFT)r   r   rK   r   )Zdtype1Zdtype2Zexpected_dtypeZser1Zser2r   rN   r    r    r!   test_concat_bool_typesv  s
   r  )rE   	integrityredr$   TF)r  bluer  c                 C   sh   t ddit ddit ddig}t|| |d}tt| g d}t g d	t|d
}t|| d S )Nrs   r&   rt   rF   r   r$   )rE   Zverify_integrity)rs   rt   r   r   r)   )r   r   ri   zipr   r   rK   r   )rE   r  Zseries_listr   ZtuplesrN   r    r    r!   test_concat_repeated_keys  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))r=   rW   r~   g!u?r   r?   zMaybe Time (UTC))r|   r}   rI   rh   r   r   )r|   r}   r~   r)   )
r   ZDatetimeIndexr   r   r   r   r   r?   rK   rL   )Zdtir   idxr   r   rM   rN   r    r    r!    test_concat_null_object_with_dti  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 )Nr   )r~   r&   r&   rF   rH   r   r   )
r   r   r   r   Z
RangeIndexr   r   r   rK   rL   )mir   rB   r   rN   r    r    r!   ,test_concat_multiindex_with_empty_rangeindex  s   r
  r   r&   rF   r   Zcol1r   c                 C   sF   |   }ddi|_|   }ddi|_t||g}t|jdks!J d S )Nr&   rF   r   )r+   attrsr   r   r   r   rB   rA   r    r    r!   test_concat_drop_attrs     

r  c                 C   sF   |   }ddi|_|   }ddi|_t||g}|jd dks!J d S )Nr&   )r+   r  r   r  r    r    r!   test_concat_retain_attrs  r  r  df_dtype)r   r   zdatetime64[ns]empty_dtype)Nr   r?   c                 C   sp   t ddgddgd|d}t ddg| d}t||g}|}|dkr0| d	kr+|d	}n|d
}t|| d S )Nr&   rF   r(   r_   r   r(   r_   )rI   r=   r   r   r?   )r   r   r   rK   rL   r  r  rA   emptyr   rN   r    r    r!   %test_concat_ignore_empty_object_float  s   
r  c                 C   s   t ddgddgd|d}t tjgtjgd| d}t||gdd}|dkr/| dkr-d}nd	}t g d
g d
d|d}t|| d S )Nr&   rF   r  r   Tr   r   r?   r   )Nr&   rF   )r   r   r   r   rK   rL   r  r    r    r!   &test_concat_ignore_all_na_object_float  s   r  c                  C   sr   t dgtdgd} t ddgi}t| |j| jdgdd}t ddgtdtjgd }} t|| d S )	Nr&   z
2012-01-01r   rs   rF   rH   Tr   )	r   r   r   r   ZreindexrI   r   rK   rL   r   r    r    r!   %test_concat_ignore_empty_from_reindex  s
   "r  )Acollectionsr   r   r   decimalr   typingr   warningsr   r   numpyr   rw   Zpandas.errorsr	   r
   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   r   r   r   r   Zpandas._testingZ_testingrK   Zpandas.core.arraysr   Zpandas.tests.extension.decimalr   r   r   r   Zsctypesr   r   r   r   r   r   r   ZSubclassedDataFramer   ZSubclassedSeriesr   r   r   r  r  r  r
  r   r  r  Zskip_array_manager_invalid_testr  r  r  r    r    r    r!   <module>   s    $	   W
	



	
		


		



