U
    e»{jÁF ã                   @   s®  d dl mZ d dlmZ d dlZd dlZd dlmZ d dlm	Z
 d dl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mZmZmZmZ d dlmZm Z m!Z! 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, dd„ Z-dd„ Z.G dd„ dƒZ/G dd„ dƒZ0G dd„ dƒZ1G dd„ dƒZ2G dd„ dƒZ3dd „ Z4d!d"„ Z5d#d$„ Z6d%d&„ Z7d'd(„ Z8d)d*„ Z9d+d,„ Z:d-d.„ Z;d/d0„ Z<d1d2„ Z=d3d4„ Z>d5d6„ Z?dS )7é    )ÚOrderedDict)ÚnullcontextN)Útable)Úunits)Ú BaseRepresentationOrDifferentialÚCartesianRepresentationÚSkyCoordÚSphericalRepresentationÚUnitSphericalRepresentationÚsearch_around_3d)ÚEarthLocation)Úskycoord_equal)Úrepresentation_equal)ÚColumnÚMaskedColumnÚQTableÚTableÚTableMergeError)Ú_get_out_classÚjoin_distanceÚjoin_skycoord)ÚTimeÚ	TimeDelta)ÚQuantity)Úmetadata)Ú	HAS_SCIPY)ÚMergeConflictErrorc                 C   s   t | ƒt |ƒkS ©N)Úsorted)Zlist1Zlist2© r   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_operations.pyÚsort_eq   s    r!   c                 C   sB   t | dƒr0t |¡ | jj¡}t | j|k¡}nt |dk¡}|S )zCheck that col.mask == exp_maskÚmaskF)ÚhasattrÚnpÚarrayZastyper"   ÚdtypeÚall)ÚcolZexp_maskÚoutr   r   r    Ú
check_mask#   s
    
r*   c                   @   s~  e Zd Zef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%d&„ Zd'd(„ Zd)d*„ Zejje d+d,�d-d.„ ƒZejje d+d,�ej d/d0eg¡d1d2„ ƒƒZ ejje d+d,�d3d4„ ƒZ!ejje d+d,�d5d6„ ƒZ"ejje d+d,�d7d8„ ƒZ#ejje d+d,�d9d:„ ƒZ$d;d<„ Z%d=d>„ Z&d?d@„ Z'dAS )BÚTestJoinc                 C   sê   dddddg}dddd	d
g}|j |dd�| _|j |dd�| _|| jdd�| _| jj tdddgfdddifdgƒ¡ | jj tdddgfdddifdgƒ¡ | jj tddddgfddgƒ¡ tdddddgfddddœfddgƒ| _d S )Nú a   b   c z  0 foo  L1z  1 foo  L2z  1 bar  L3z  2 bar  L4ú a   b   d z  1 foo  R1z  1 foo  R2z  2 bar  R3ú  4 bar  R4Úascii©ÚformatT©ÚcopyÚbé   é   ÚcÚa©Údr5   é   é   ©r8   r5   ©r4   r;   )r:   r6   ©r8   r4   )ÚreadÚt1Út2Út3ÚmetaÚupdater   Ú
meta_merge)ÚselfÚt_clsÚlines1Úlines2r   r   r    Ú_setup4   s2    ûû(("üÿzTestJoin._setupc                 C   s2   |   |¡ tj| j| jdd�}|j| jks.t‚d S ©NÚinner©Ú	join_type)rK   r   ÚjoinrA   rB   rD   rF   ÚAssertionError©rG   Úoperation_table_typer)   r   r   r    Útest_table_meta_mergeT   s    
zTestJoin.test_table_meta_mergec              	   C   s,  |   |¡ t tj¡�}tj| j| jdd�}W 5 Q R X t	|ƒdksFt
‚|j| jjksXt
‚t tj¡�}tj| j| jddd�}W 5 Q R X t	|ƒdks–t
‚|j| jjks¨t
‚tj| j| jddd�}|j| jjksÐt
‚t t¡� tj| j| jddd�}W 5 Q R X t t¡� tj| j| jddd�}W 5 Q R X d S )	NrM   rN   r;   Úwarn©rO   Zmetadata_conflictsÚsilentÚerrorÚnonsense)rK   ÚpytestÚwarnsr   ÚMergeConflictWarningr   rP   rA   rC   ÚlenrQ   rD   Úraisesr   Ú
ValueError©rG   rS   Úwr)   r   r   r    Útest_table_meta_merge_conflictY   sF    
   ÿ   ÿ   ÿ   ÿz'TestJoin.test_table_meta_merge_conflictc                 C   sà   |   |¡ | j}| j}t ||¡}t|ƒ|ks2t‚t|d ƒt|d ƒksNt‚t|d ƒt|d ƒksjt‚t|d ƒt|d ƒks†t‚t|d ƒt|d ƒks¢t‚|jdks°t‚t| 	¡ dddd	d
gƒsÌt‚|j
| jksÜt‚d S )Nr8   r4   r7   r:   Fú a   b   c   d ú--- --- --- ---ú  1 foo  L2  R1ú  1 foo  L2  R2ú  2 bar  L4  R3)rK   rA   rB   r   rP   ÚtyperQ   Úmaskedr!   ÚpformatrD   rF   ©rG   rS   rA   rB   Út12r   r   r    Útest_both_unmasked_innerz   s(    
ûþz!TestJoin.test_both_unmasked_innerc              
   C   sŠ  |t krt d¡ |  |¡ | j}| j}tj||dd�}|jdksFt	‚|j
dksTt	‚dD ]}t|| ƒtksXt	‚qXt|d ƒtks†t	‚t| ¡ dd	d
ddddgƒs¦t	‚tj||dd�}|jdksÄt	‚|j
dksÒt	‚t| ¡ dd	ddddgƒsðt	‚tj||dd�}|jdk�st	‚|j
dk�s t	‚t| ¡ dd	d
dddddgƒ�sDt	‚tj||dd�}tj||dddgd�}t | ¡ | ¡ k¡�s†t	‚d S )Nú(Quantity columns do not support masking.ÚleftrN   TF©r8   r4   r7   r:   rc   rd   z  0 foo  L1  --z  1 bar  L3  --re   rf   rg   Úrightz  4 bar  --  R4Úouterr8   r4   ©rO   Úkeys)r   rZ   ÚxfailrK   rA   rB   r   rP   Úhas_masked_columnsrQ   ri   rh   r   r   r!   rj   r$   r'   Úas_array)rG   rS   rA   rB   rl   ÚnameZt12aZt12br   r   r    Ú#test_both_unmasked_left_right_outer”   sj    

ùþúþøþ
z,TestJoin.test_both_unmasked_left_right_outerc              	   C   sô   |   |¡ | j}| j}tj||dd�}t|ƒ|ks6t‚t|d ƒt|d ƒksRt‚t|d ƒt|d ƒksnt‚t|d ƒt|d ƒksŠt‚t|d ƒt|d ƒks¦t‚t|d ƒt|d ƒksÂt‚|jdksÐt‚t| 	¡ d	d
dddddgƒsðt‚d S )Nr8   ©rt   Úb_1r4   r7   Úb_2r:   Fú a  b_1  c  b_2  d ú--- --- --- --- ---ú  1 foo  L2 foo  R1ú  1 foo  L2 foo  R2ú  1 bar  L3 foo  R1ú  1 bar  L3 foo  R2ú  2 bar  L4 bar  R3)
rK   rA   rB   r   rP   rh   rQ   ri   r!   rj   rk   r   r   r    Ú#test_both_unmasked_single_key_innerÖ   s,    
ùþz,TestJoin.test_both_unmasked_single_key_innerc                 C   sô   |t krt d¡ |  |¡ | j}| j}tj||ddd�}|jdksHt	‚t
| ¡ dddd	d
dddgƒsjt	‚tj||ddd�}|jdksŠt	‚t
| ¡ ddd	d
ddddgƒs¬t	‚tj||ddd�}|jdksÌt	‚t
| ¡ dddd	d
ddddg	ƒsðt	‚d S )Nrn   ro   r8   rs   Tr}   r~   z  0 foo  L1  --  --r   r€   r�   r‚   rƒ   rq   z  4  --  -- bar  R4rr   )r   rZ   ru   rK   rA   rB   r   rP   rv   rQ   r!   rj   rk   r   r   r    Ú.test_both_unmasked_single_key_left_right_outerñ   s`    

øþøþ÷þz7TestJoin.test_both_unmasked_single_key_left_right_outerc              	   C   s   |t krt d¡ |  |¡ | j}|| jdd�}| j}tj||dd�}|jdksTt	‚t ||¡}t
 | ¡ t
 |¡k¡s|t	‚d|d jd< d|d	 jd
< tj||ddd�}t| ¡ dddddddgƒsÊt	‚tj||ddd�}t| ¡ dddddddgƒsüt	‚d S )Nrn   T©ri   rM   rN   Fr4   r5   r7   r6   r8   rs   r}   r~   ú  1  --  L2 foo  R1ú  1  --  L2 foo  R2ú  1 bar  -- foo  R1ú  1 bar  -- foo  R2rƒ   z a  b_1  d  b_2  c z  1 foo  R2  --  L2z  1 foo  R2 bar  --z  1 foo  R1  --  L2z  1 foo  R1 bar  --z  2 bar  R3 bar  L4)r   rZ   ru   rK   rA   rB   r   rP   ri   rQ   r$   r'   rw   r%   r"   r!   rj   )rG   rS   rA   Út1mrB   Zt1m2rl   Zt21mr   r   r    Útest_masked_unmasked,  sH    

ùþùþzTestJoin.test_masked_unmaskedc           	   	   C   s
  |   |¡ |tkrt d¡ | j}|| jdd�}| j}|| jdd�}tj||dd�}|jdksbt	‚| 
¡ D ]}t|ƒtksjt	‚qjt ||¡}t | ¡ t |¡k¡s¨t	‚d|d jd< d|d	 jd
< d|d jd
< tj||ddd�}t| ¡ dddddddgƒ�st	‚d S )Nrn   Tr†   rM   rN   Fr4   r5   r7   r6   r:   r8   rs   r}   r~   r‡   rˆ   r‰   rŠ   z  2 bar  L4 bar  --)rK   r   rZ   ru   rA   rB   r   rP   ri   rQ   Úitercolsrh   r   r$   r'   rw   r%   r"   r!   rj   )	rG   rS   rA   r‹   rB   Zt2mZt1m2mr(   rl   r   r   r    Útest_masked_masked[  s8    

ùþzTestJoin.test_masked_maskedc           	      C   s.  G dd„ dt ƒ}G dd„ dtƒ}tƒ }|dgƒ|d< |dgƒ|d< |d	gƒ|d
< tƒ }t ddgƒ|d< |d	dgƒ|d< |ddgƒ|d< tj||dd�}d|fd|fd
|fd|fd|ffD ]\}}t|| |kƒs¸t‚q¸tj||dd�}d|fdtfd
|fd|fd|ffD ] \}}t|| |kƒ�st‚�qdS )z:Ensure that classes and subclasses get through as expectedc                   @   s   e Zd ZdS )z$TestJoin.test_classes.<locals>.MyColN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r    ÚMyCol„  s   r“   c                   @   s   e Zd ZdS )z*TestJoin.test_classes.<locals>.MyMaskedColNr�   r   r   r   r    ÚMyMaskedCol‡  s   r”   r5   r8   r6   r4   r;   r7   r<   r:   é   é   ÚerM   rN   ro   N)r   r   r   r   rP   rh   rQ   )	rG   r“   r”   rA   rB   rl   rx   Zexp_typeZt21r   r   r    Útest_classes�  s4    ûûzTestJoin.test_classesc                 C   sJ   |   |¡ | j}| j}tj||dddgdd�}|jddddd	gksFt‚d S )
Nzx_{table_name}_{col_name}_yÚLÚRr8   )Úuniq_col_nameÚtable_namesrt   Zx_L_b_yr7   Zx_R_b_yr:   )rK   rA   rB   r   rP   ÚcolnamesrQ   rk   r   r   r    Útest_col_renameª  s    
ûzTestJoin.test_col_renamec              	   C   sH   |   |¡ | j}| j}d|d< t t¡� tj||dd� W 5 Q R X d S )Nr5   r{   r8   rz   ©rK   rA   rB   rZ   r^   r   r   rP   ©rG   rS   rA   rB   r   r   r    Útest_rename_conflict»  s    
zTestJoin.test_rename_conflictc              	   C   sD   |   |¡ | j}| j}t t¡� tj||ddgd� W 5 Q R X d S )Nr8   z	not thererz   rŸ   r    r   r   r    Útest_missing_keysÇ  s
    
zTestJoin.test_missing_keysc              	   C   s@   |   |¡ | j}| j}t t¡� tj||dd� W 5 Q R X d S )Nzillegal valuerN   ©rK   rA   rB   rZ   r^   r_   r   rP   r    r   r   r    Útest_bad_join_typeÏ  s
    
zTestJoin.test_bad_join_typec              	   C   sT   |   |¡ | j}| j}|d= |d= |d= |d= t t¡� t ||¡ W 5 Q R X d S ©Nr8   r4   rŸ   r    r   r   r    Útest_no_common_keys×  s    
zTestJoin.test_no_common_keysc              	   C   sp   |   |¡ |tkrt d¡ | j}|| jdd�}t ||¡ d|d jd< t 	t
¡� t ||¡ W 5 Q R X d S )Nrn   Tr†   r8   r   )rK   r   rZ   ru   rA   rB   r   rP   r"   r^   r   r    r   r   r    Útest_masked_key_columnã  s    

zTestJoin.test_masked_key_columnc              	   C   sì  |   |¡ | j}| j}| dd¡ tdddgfdddifdgƒ}tddd	gfdddifd
gƒ}d|d _d|d _d|d j_d|d j_||d j_	||d j_	||d j_	d|d j_d|d j_d|d j_d|d j_|t
krøtjtjdd�}ntƒ }|� tj||ddgd�}W 5 Q R X |d jdk�s6t‚|d jjdk�sLt‚|d jjdk�sbt‚|d jj	| jk�szt‚|d jj	|k�s�t‚|d jjdk�s¦t‚|d jjdk�s¼t‚|d jjdk�sÒt‚|d jjdk�sèt‚d S )Nr:   r7   r4   r5   r6   r8   r9   r;   r<   r=   ÚcmÚmÚt1_bú%6sz%3sZt1_cÚt2_czDIn merged column 'a' the 'unit' attribute does not match \(cm != m\)©Úmatchrz   Zc_1Zc_2)rK   rA   rB   Úrename_columnr   ÚunitÚinfoÚdescriptionr1   rD   r   rZ   r[   r   r\   r   r   rP   rQ   rF   )rG   rS   rA   rB   Úmeta1Zmeta2Úctxrl   r   r   r    Útest_col_meta_mergeï  sD    


ýzTestJoin.test_col_meta_mergec                 C   s    |   |¡ |ƒ }dddg|d< t d¡|d< |ƒ }dddg|d< ddd	g|d
< t ||¡}tj |d |d ¡ tj |d |d ¡ tj |d
 |d
 ¡ d S )Nr5   r6   r;   r8   )r;   r<   r4   r<   r•   r–   r7   )rK   r$   Zonesr   rP   ZtestingZassert_allclose)rG   rS   rA   rB   rC   r   r   r    Útest_join_multidimensional#  s    
z#TestJoin.test_join_multidimensionalc           	      C   sn  |   |¡ |tkrt d¡ tjdddgdd�}tjdddgdd�}tjddgddgdd	ggd
ddgddgddggd�}tjddgddgddggdd�}|||gƒ}|||gƒ}tj||dd�}t 	|d
 j
ddgddggk¡sät‚t|d dƒröt‚tj||dd�}t 	|d
 j
ddgddgddgddggk¡�s8t‚t 	|d j
ddgddgddgddggk¡�sjt‚d S )Nrn   r5   r6   r;   r8   )rx   r<   r•   r–   r4   r   )rx   r"   r7   rM   rN   TFr"   rr   )rK   r   rZ   ru   r   r   r   rP   r$   r'   r"   rQ   r#   )	rG   rS   r8   Za2r4   r7   rA   rB   rl   r   r   r    Ú!test_join_multidimensional_masked7  sj    

ýýùýúþÿÿüÿÿ
	üÿÿz*TestJoin.test_join_multidimensional_maskedc              
   C   sê  |d }t |ƒj}t|ƒ}t |¡}tj||gddgd�}tj||gddgd�}|dddg }|dd	dg }tj||d
d�}t|ƒd	ksŒt‚|d j	|j	ks t‚t 
|d ddgk¡sºt‚|dkrøt|d |ddg ƒsÜt‚t|d |ddg ƒsöt‚nšd|k�sd|k�rRt 
t|d |ddg ƒ¡�s.t‚t 
t|d |ddg ƒ¡�s’t‚n@t 
|d |ddg k¡�srt‚t 
|d |ddg k¡�s’t‚t|tttfƒ�r�tj||dd�}t|ƒdk�sÆt‚t 
|d dddgk¡�sät‚t 
|d |d k¡�s t‚t 
|d |d k¡�st‚t|d dddgƒ t|d dddgƒ tj||dd�}t|ƒdk�sft‚t 
|d dd	dgk¡�s„t‚t 
|d |d k¡�s t‚t 
|d |d k¡�s¼t‚t|d dddgƒ t|d dddgƒ tj||dd�}t|ƒdk�st‚t 
|d ddd	dgk¡�s&t‚t 
|d |k¡�s>t‚t 
|d |k¡�sVt‚t|d ddddgƒ�srt‚t|d ddddgƒ�sæt‚nVdD ]P}	t t¡�}
tj|||	d� W 5 Q R X dt|
jƒk�s”dt|
jƒk�s”t‚�q”d S )Nr©   ÚidxÚm1©ÚnamesÚm2r   r5   r;   r6   rM   rN   r   ÚReprÚDiffro   FTrq   rr   r<   )rr   ro   rq   újoin requires maskingzjoin unavailable)rh   r�   r]   r$   Zaranger   r   rP   rQ   Ú	__class__r'   r   r   Ú
isinstancer   r   r   r*   rZ   r^   ÚNotImplementedErrorÚstrÚvalue)rG   Ú
mixin_colsr(   Úcls_nameÚlen_colr¸   rA   rB   r)   rO   Úerrr   r   r    Útest_mixin_functionalityx  sd    

"$   ÿþz!TestJoin.test_mixin_functionalityc              	   C   sÈ   t ddgddgd�}t ddgddgd�}tj||d	d
�}|jddgksJt‚|jddgks\t‚t|ƒt|ƒt|ƒ ksxt‚t|ƒ ¡ ddddddgks˜t‚tj	t
dd�� tj||d	dd�}W 5 Q R X d S )N)r5   r8   )r6   r4   r8   r4   )Úrowsr»   )r;   r7   )r<   r:   r7   Z	cartesianrN   za_1  b  a_2  c rd   z  1   a   3   cz  1   a   4   dz  2   b   3   cz  2   b   4   dz'cannot supply keys for a cartesian joinr­   rs   )r   r   rP   r�   rQ   r]   rÃ   Ú
splitlinesrZ   r^   r_   rk   r   r   r    Útest_cartesian_join¶  s     
ú
	zTestJoin.test_cartesian_joinzrequires scipy)Úreasonc                 C   sž   t ddddgddddgdd�}t ddd	gdddgdd�}t|gd
gd�}t|gd
gd�}tj||d
tdtj ƒid�}ddddddg}t|ƒ ¡ |ksšt	‚d S )Nr   r5   çš™™™™™ñ?r6   Údeg©r°   ç      à?çÍÌÌÌÌÌð?çÍÌÌÌÌÌ @Úscrº   çš™™™™™É?©Ú
join_funcszsc_id   sc_1    sc_2  z      deg,deg deg,deg z----- ------- --------z    1 1.0,0.0 1.05,0.0z    1 1.1,0.0 1.05,0.0z    2 2.0,0.0  2.1,0.0)
r   r   r   rP   r   ÚurÏ   rÃ   rË   rQ   )rG   Úsc1Úsc2rA   rB   rl   Úexpr   r   r    Ú test_join_with_join_skycoord_skyÊ  s    úz)TestJoin.test_join_with_join_skycoord_skyÚdistance_funcr   c           	      C   sØ   t ddddgtj ddddgtj ddddgtj ƒ}t dddgtj dddgtj dddgtj ƒ}t|gdgd	�}t|gdgd	�}tt d
¡tj |d�}tj	||d|id�}dddddg}t
|ƒ ¡ |ksÔt‚d S )Nr   r5   rÎ   r6   rÑ   rÒ   rÓ   rÔ   rº   rÕ   )rÝ   rÖ   zsc_id     sc_1        sc_2    z       deg,deg,m   deg,deg,m  z----- ----------- ------------z    1 1.0,0.0,1.0 1.05,0.0,1.0z    2 2.0,0.0,1.0  2.1,0.0,1.0)r   rØ   rÏ   r©   r   r   r$   Zdeg2radr   rP   rÃ   rË   rQ   )	rG   rÝ   rÙ   rÚ   rA   rB   Ú	join_funcrl   rÛ   r   r   r    Útest_join_with_join_skycoord_3dÛ  s    60ûz(TestJoin.test_join_with_join_skycoord_3dc                 C   sŒ   ddddg}dddg}t |gdgd	�}t |gdgd	�}td
ddiddid�}tj||dd|id�}dddddddg}t|ƒ ¡ |ksˆt‚d S )Nr   r5   rÎ   r6   rÑ   rÒ   rÓ   r(   rº   rÕ   Úleafsizeé    Úp©Zkdtree_argsZ
query_argsrr   ©rO   r×   zcol_id col_1 col_2z------ ----- -----z     1   1.0  1.05z     1   1.1  1.05z     2   2.0   2.1z     3   0.0    --z     4    --   0.5)r   r   r   rP   rÃ   rË   rQ   ©rG   Úc1Úc2rA   rB   rÞ   rl   rÛ   r   r   r    Útest_join_with_join_distance_1dí  s&    
  ÿù	z(TestJoin.test_join_with_join_distance_1dc              	   C   sô   ddl m} dddddg}dddddg}dd	d
ddg}dddg}dddg}dddg}t|||gdddgd�}t|||gdddgd�}	tdƒ}
d|
i}tj||	d|d�}ddddd d!d"d#d$g	}t|ƒ ¡ |ksÐt‚|||	d%|ƒ\}}}|d&ksðt‚d S )'Nr   )Ú_apply_join_funcsr5   rÎ   g333333ó?r6   r;   r8   r4   r7   r:   r—   rÑ   rÒ   rÓ   r<   ÚzÚyÚxr(   ÚidÚo1rº   Úo2rÕ   rr   rä   zcol_id col_1  id  o1 col_2  o2z------ ----- --- --- ----- ---z     1   1.0   1   b    --  --z     1   1.1   2   c  1.05   yz     1   1.2   2   d  1.05   yz     2   2.0   3   e    --  --z     2    --   4  --   2.1   xz     3   0.0   0   a    --  --z     4    --   0  --   0.5   z)r(   rí   )Úcol_idrí   )	Úastropy.table.operationsré   r   r   r   rP   rÃ   rË   rQ   )rG   ré   ræ   Zid1rî   rç   Zid2rï   rA   rB   rÞ   r×   rl   rÛ   ro   rq   rt   r   r   r    Ú(test_join_with_join_distance_1d_multikey  s2    


÷z1TestJoin.test_join_with_join_distance_1d_multikeyc                 C   sà   ddddgt j }dddgt j }t|gdgd	�}t|gdgd	�}td
t j ƒ}tj||d|id�}ddddddg}t|ƒ 	¡ |ksˆt
‚dddg|d< dddg|d< tj||d|id�}ddddddg}t|ƒ 	¡ |ksÜt
‚d S )Nr   r5   rÎ   r6   iô  i  i4  r(   rº   é   rÖ   zcol_id col_1 col_2 z         m     mm  z------ ----- ------z     1   1.0 1050.0z     1   1.1 1050.0z     2   2.0 2100.0rð   Zcol__idz$col___id col_1 col_2  col_id col__idz$           m     mm                 z$-------- ----- ------ ------ -------z$       1   1.0 1050.0      0       0z$       1   1.1 1050.0      0       0z$       2   2.0 2100.0      0       0)rØ   r©   Úmmr   r   r¨   r   rP   rÃ   rË   rQ   rå   r   r   r    Ú(test_join_with_join_distance_1d_quantity!  s2    úúz1TestJoin.test_join_with_join_distance_1d_quantityc                 C   sÆ   t  ddddgddddgg¡ ¡ }t  dddgdddgg¡ ¡ }t|gdgd	�}t|gdgd	�}td
ddiddid�}tj||dd|id�}d|d jj› d�ddddddg}|j	dd�|ksÂt
‚d S )Nr   r5   rÎ   r6   rÑ   rÒ   rÓ   r(   rº   rÕ   rà   rá   râ   rã   rr   rä   zcol_id   col_1       col_2   rð   z  float64[2]  float64[2]z------ ---------- -----------z     1 1.0 .. 0.0 1.05 .. 0.0z     2 2.0 .. 0.0  2.1 .. 0.0z     3 0.0 .. 0.0    -- .. --z     4 1.1 .. 1.0    -- .. --z     5   -- .. --  0.5 .. 0.0T)Z
show_dtype)r$   r%   Z	transposer   r   r   rP   r&   rx   rj   rQ   rå   r   r   r    Útest_join_with_join_distance_2dA  s(    "  ÿø
z(TestJoin.test_join_with_join_distance_2dc              	   C   s6  |   ¡  dD �]"}| j ¡ }| j ¡ }tj||d|d�}|j|d ddd� |j|d dt|jƒd d� |d= | 	dd¡ | 	dd¡ dg}dgg}|dkrÂ| 
|d  ¡ g¡ | 
|d g¡ t||ƒD ]b\}}tj|||||d	�}	|	j|jksøt‚|	 |¡ ¡ D ]}
t |
¡�st‚�q|j|	jksÌt‚qÌqd
S )a  Test using the keys_left and keys_right args to specify different
        join keys. This takes the standard test case but renames column 'a'
        to 'x' and 'y' respectively for tables 1 and 2. Then it compares the
        normal join on 'a' to the new join on 'x' and 'y'.)rM   ro   rq   rr   r8   ©rt   rO   rì   r5   )rx   Úindexrë   rr   )Ú	keys_leftÚ
keys_rightrO   N)rK   rA   r3   rB   r   rP   Ú
add_columnr]   r�   r¯   ÚappendÚtolistÚziprQ   Zvalues_equalr�   r$   r'   rD   )rG   rO   rA   rB   Zt12_expZkeys_left_listZkeys_right_listrù   rú   rl   r(   r   r   r    Útest_keys_left_right_basicW  s6    


ûz#TestJoin.test_keys_left_right_basicc              	   C   sT  |   ¡  | j}| j}d}tjt|d�� tj||ddgd� W 5 Q R X d}tjt|d��  tj||ddggdgd� W 5 Q R X d	}tjt|d�� tj||ddgdd
� W 5 Q R X d}tjt|d�� tj||ddgdgd� W 5 Q R X d}tjt|d�� tj||ddgd� W 5 Q R X d}tjt|d�� tj||dgdgi d� W 5 Q R X dS )zhTest exceptions using the keys_left and keys_right args to specify
        different join keys.
        z'left table does not have key column 'z'r­   rê   r8   )rù   rú   z1left table has different length from key \[1, 2\]r5   r6   z>keys arg must be None if keys_left and keys_right are supplied)rù   rú   rt   z3keys_left and keys_right args must have same lengthr4   z.keys_left and keys_right must both be provided)rù   z7cannot supply join_funcs arg and keys_left / keys_right)rù   rú   r×   Nr£   )rG   rA   rB   Úmsgr   r   r    Útest_keys_left_right_exceptions  s*    $ "z(TestJoin.test_keys_left_right_exceptionsc                 C   s†   t tjddgddgd�ddggdd	gd
�}t tjddgddgd�ddggdd	gd
�}tj||dgdd�}| ¡ dddddgks‚t‚dS )úRegression tests for gh-13271.©ç      ð?r5   ©ç       @r6   ©ÚfZf8©ÚiÚi8©r&   ÚoneÚtwoÚ
structuredÚstringrº   ©ç      @r<   ÚthreeÚfourrr   rN   z#structured [f, i] string_1 string_2z#----------------- -------- --------z#          (1., 1)      one       --z#          (2., 2)      two    threez#          (4., 4)       --     fourN)r   r$   r%   r   rP   rj   rQ   )rG   rA   rB   rl   r   r   r    Útest_join_structured_columnŸ  s(    þûþûûz$TestJoin.test_join_structured_columnN)(r�   r‘   r’   r   rK   rT   rb   rm   ry   r„   r…   rŒ   rŽ   r˜   rž   r¡   r¢   r¤   r¦   r§   rµ   r¶   r·   rÉ   rÌ   rZ   ÚmarkZskipifr   rÜ   Zparametrizer   rß   rè   rò   rõ   rö   rÿ   r  r  r   r   r   r    r+   3   sJ    !B;/&)4A>




( r+   c                   @   sH   e Zd Zefdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚTestSetdiffc                 C   s^   dddddg}dddddg}dd	d
ddg}|j |dd�| _|j |dd�| _|j |dd�| _d S )Nú a   b z  0 foo z  1 foo z  1 bar z  2 bar z  3 foo z  4 bar r-   z  0 foo  R1ú  8 foo  R2z  1 bar  R3r.   r/   r0   )r@   rA   rB   rC   )rG   rH   rI   rJ   Zlines3r   r   r    rK   »  s    ûzTestSetdiff._setupc                 C   sr   |   |¡ t | j| j¡}t|d ƒt| jd ƒks8t‚t|d ƒt| jd ƒksVt‚| ¡ ddddgksnt‚d S )Nr8   r4   r  ú--- ---z  1 barú  1 foo)rK   r   ÚsetdiffrA   rB   rh   rQ   rj   rR   r   r   r    Útest_default_same_columnsÉ  s
    
z%TestSetdiff.test_default_same_columnsc                 C   sn   |   |¡ t | j| j¡}t|d ƒt| jd ƒks8t‚t|d ƒt| jd ƒksVt‚| ¡ ddgksjt‚d S )Nr8   r4   r  r  )rK   r   r  rA   rh   rQ   rj   rR   r   r   r    Útest_default_same_tablesÐ  s    
þz$TestSetdiff.test_default_same_tablesc              	   C   s4   |   |¡ t t¡� t | j| j¡ W 5 Q R X d S r   ©rK   rZ   r^   r_   r   r  rC   rA   ©rG   rS   r   r   r    Útest_extra_col_left_tableÛ  s    
z%TestSetdiff.test_extra_col_left_tablec                 C   sr   |   |¡ t | j| j¡}t|d ƒt| jd ƒks8t‚t|d ƒt| jd ƒksVt‚| ¡ ddddgksnt‚d S )Nr8   r4   r  r  r  z  2 bar)rK   r   r  rA   rC   rh   rQ   rj   rR   r   r   r    Útest_extra_col_right_tableá  s    
üz&TestSetdiff.test_extra_col_right_tablec                 C   sz   |   |¡ tj| j| jddgd�}t|d ƒt| jd ƒks@t‚t|d ƒt| jd ƒks^t‚| ¡ ddddgksvt‚d S )Nr8   r4   rz   r-   ú--- --- ---r.   r  )rK   r   r  rC   rA   rh   rQ   rj   rR   r   r   r    Ú	test_keysî  s    
üzTestSetdiff.test_keysc              	   C   s<   |   |¡ t t¡� tj| j| jddgd� W 5 Q R X d S )Nr8   r:   rz   r  r   r   r   r    Útest_missing_keyû  s    
zTestSetdiff.test_missing_keyN)r�   r‘   r’   r   rK   r  r  r!  r"  r$  r%  r   r   r   r    r  º  s   r  c                   @   s˜   e Zd Zef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 )$Ú
TestVStackc                 C   s.  |j dddgdd�| _|j dddgdd�| _|j d	d
ddgdd�| _|| jd|tkd�| _|| jdd�| _| jj t	dddgfdddifdgƒ¡ | jj t	dddgfdddifdgƒ¡ | jj t	dddgfdddifdgƒ¡ | jj t	dddgƒ¡ t	dddddddgfdddddœfdddgƒ| _
d S )Nú a   bú 0. fooú 1. barr/   r0   ú a    b   cú 2.  pez  4ú 3.  sez  5ú a    bú 4.   7ú 5.   8ú 6.   9T©r3   ri   r2   r4   r5   r6   r7   r8   r9   r;   r<   r=   r•   r–   ©r—   r5   r>   ©r7   Úkrp   )r@   rA   rB   rC   r   Út4Út5rD   rE   r   rF   ©rG   rH   r   r   r    rK     sH    ýú	ýú	üù	(((ûÿzTestVStack._setupc              	   C   s6   |   ¡  tjtdd�� t | j| j¡ W 5 Q R X d S )Nz Did you accidentally call vstackr­   )rK   rZ   r^   Ú	TypeErrorr   ÚvstackrA   rB   ©rG   r   r   r    Útest_validate_join_type2  s    z"TestVStack.test_validate_join_typec                 C   sŒ   |   |¡ | j ¡ }|j ¡  t | j|d g¡}t|d ƒt| jd ƒksPt‚t|d ƒt| jd ƒksnt‚| 	¡ dddddgksˆt‚d S )Nr5   r8   r4   r  r  ú0.0 fooú1.0 bar)
rK   rA   r3   rD   Úclearr   r9  rh   rQ   rj   ©rG   rS   rB   r)   r   r   r    Útest_stack_rows7  s    


ûzTestVStack.test_stack_rowsc                 C   s`   |   |¡ | j ¡ }|j ¡  t | j|d g¡}|jdks@t‚| 	¡ ddddddgks\t‚d S )	Nr8   Fr  r  r<  r=  z0.0  --ú1.0  --)
rK   rA   r3   rD   r>  r   r9  ri   rQ   rj   r?  r   r   r    Útest_stack_table_columnF  s    


úz"TestVStack.test_stack_table_columnc                 C   s8   |   |¡ tj| j| j| jgdd�}|j| jks4t‚d S rL   )	rK   r   r9  rA   rB   r5  rD   rF   rQ   rR   r   r   r    rT   U  s    
z TestVStack.test_table_meta_mergec              	   C   s6  |   |¡ t tj¡�}tj| j| jgdd�}W 5 Q R X t	|ƒdksHt
‚|j| jjksZt
‚t tj¡�}tj| j| jgddd�}W 5 Q R X t	|ƒdksšt
‚|j| jjks¬t
‚tj| j| jgddd�}|j| jjksÖt
‚t t¡� tj| j| jgddd�}W 5 Q R X t t¡� tj| j| jgddd�}W 5 Q R X d S ©	NrM   rN   r6   rU   rV   rW   rX   rY   )rK   rZ   r[   r   r\   r   r9  rA   r6  r]   rQ   rD   r^   r   r_   r`   r   r   r    rb   Z  s>    
 
  ÿ
  ÿ
  ÿ
  ÿz)TestVStack.test_table_meta_merge_conflictc              	   C   s    |   |¡ t t¡� t g ¡ W 5 Q R X t t¡� t d¡ W 5 Q R X t t¡� t | jdg¡ W 5 Q R X t t¡� tj| j| jgdd� W 5 Q R X d S ©Nr5   zinvalid join typerN   )	rK   rZ   r^   r_   r   r9  r8  rB   rA   r   r   r   r    Útest_bad_input_type{  s    
zTestVStack.test_bad_input_typec              	   C   s"  |   |¡ | j}| j}| j}tj||gdd�}|jdks<t‚t|ƒ|ksLt‚t|d ƒt|d ƒksht‚t|d ƒt|d ƒks„t‚| 	¡ dddd	d
dgks t‚tj|||gdd�}t|ƒ|ksÄt‚t|d ƒt|d ƒksàt‚t|d ƒt|d ƒksüt‚| 	¡ dddd	d
ddd	gk�st‚d S )NrM   rN   Fr8   r4   r  r  r<  r=  z2.0 pezz3.0 sez)
rK   rA   rB   r5  r   r9  ri   rQ   rh   rj   ©rG   rS   rA   rB   r5  rl   Út124r   r   r    Útest_stack_basic_inner†  s>    
ú
	øz!TestVStack.test_stack_basic_innerc              	   C   s°   |t krt d¡ |  |¡ | j}| j}| j}tj||gdd�}|j	dksNt
‚| ¡ ddddd	d
gksjt
‚tj|||gdd�}|j	dksŒt
‚| ¡ ddddd	d
ddgks¬t
‚d S )Nrn   rr   rN   Fr,   r#  z0.0 foo  --z1.0 bar  --z2.0 pez   4z3.0 sez   5)r   rZ   ru   rK   rA   rB   r5  r   r9  ri   rQ   rj   rF  r   r   r    Útest_stack_basic_outer©  s8    

ú
	øz!TestVStack.test_stack_basic_outerc              	   C   s&  |   |¡ t t¡�}tj| j| jgdd� W 5 Q R X d | jd j	j
| jd j	j
g¡t|jƒksft‚t t¡�}tj| j| jgdd� W 5 Q R X dt|jƒks¤t‚t t¡� tj| j| jgdd� W 5 Q R X | j ¡ }dd	g|d _t t¡�}t | j|g¡ W 5 Q R X d
t|jƒk�s"t‚d S )NrM   rN   z+The 'b' columns have incompatible types: {}r4   rr   z(The 'b' columns have incompatible types:Úexactr6   r5   zhave different shape)rK   rZ   r^   r   r   r9  rA   rC   r1   r&   rx   rÃ   rÄ   rQ   rB   r3   Úshape)rG   rS   ÚexcinfoZ
t1_reshaper   r   r    Útest_stack_incompatibleÈ  s$    
 ÿþ  
z"TestVStack.test_stack_incompatiblec                 C   sr   |t krt d¡ |  |¡ | j}| j}d|d jd< t ||g¡}|j	dksRt
‚| ¡ dddd	dd
gksnt
‚d S )Nrn   Tr4   r5   Fr  r  r<  r=  rA  )r   rZ   ru   rK   rA   r5  r"   r   r9  ri   rQ   rj   )rG   rS   rA   r5  Zt14r   r   r    Útest_vstack_one_maskedÝ  s     

úz!TestVStack.test_vstack_one_maskedc              
   C   s¨  |   |¡ | j}| j}| j}d|d j_d|d j_d|d j_d|d j_d|d j_d|d j_d|d j_d|d j_|d jj 	t
dd	d
gfddd	ifdgƒ¡ |d jj 	t
dddgfddd	ifdgƒ¡ |d jj 	t
dddgfddd	ifdgƒ¡ |d jj 	t
dddgfddd	ifdgƒ¡ |tk�rDt tj¡}ntƒ }|�}tj|||gdd�}W 5 Q R X |tk�ràt|ƒd
k�sŠt‚dt|d jƒk�s¢t‚dt|d	 jƒk�sºt‚| ¡ dddddddddg	k�st‚n$| ¡ dddddd d!ddg	k�st‚|d jjdk�st‚|d jjdk�s0t‚|d jjdk�sFt‚|d jjdk�s\t‚|d jj| jk�stt‚|d jjt
dddgfddd	ifdgƒk�s¤t‚d S )"Nr¨   r8   r©   Úkmz%frª   r4   r«   r5   r6   r7   r9   r;   r<   r=   r•   r–   r2  rM   rN   úBIn merged column 'a' the 'unit' attribute does not match (cm != m)r   úBIn merged column 'a' the 'unit' attribute does not match (m != km)z   a       b   z   km          z-------- ------z0.000000    fooz1.000000    barz2.000000    pezz3.000000    sezz0.000010    barz0.002000    pezz0.003000    sez)rK   rA   rB   r5  r±   r°   r1   r²   rD   rE   r   r   rZ   r[   r   r\   r   r   r9  r]   rQ   rÃ   Úmessagerj   rF   )rG   rS   rA   rB   r5  r´   Úwarning_linesr)   r   r   r    Útest_col_meta_merge_innerï  sŠ    
ÿÿÿÿ

ÿÿÿÿ÷÷ÿz$TestVStack.test_col_meta_merge_innerc              	   C   s¬  |t krt d¡ |  |¡ | j}| j}| j}d|d _d|d _d|d _d|d j_	d|d j_	d|d j_	d|d j_
d	|d j_	|d jj tdd
dgfddd
ifdgƒ¡ |d jj tdddgfddd
ifdgƒ¡ |d jj tdddgfddd
ifdgƒ¡ |d jj tdddgfddd
ifdgƒ¡ d|d _d	|d j_	d|d j_
t tj¡�}tj|||gdd�}W 5 Q R X t|ƒdk�s˜t‚dt|d jƒk�s°t‚dt|d
 jƒk�sÈt‚|d jdk�sÜt‚|d jj	dk�sòt‚|d jj
dk�st‚|d jj	d	k�st‚|d jj| jk�s6t‚|d jjtdddgfddd
ifdgƒk�sft‚|d jjdk�s|t‚|d jj	d	k�s’t‚|d jj
dk�s¨t‚d S )Nrn   r¨   r8   r©   rO  z%0drª   r4   r«   r5   r6   r7   r9   r;   r<   r=   r•   r–   r2  r¬   rr   rN   rP  r   rQ  )r   rZ   ru   rK   rA   rB   r5  r°   r±   r1   r²   rD   rE   r   r[   r   r\   r   r9  r]   rQ   rÃ   rR  rF   )rG   rS   rA   rB   r5  rS  r)   r   r   r    Útest_col_meta_merge_outerI  sf    




ÿÿÿÿ
ÿÿÿÿÿz$TestVStack.test_col_meta_merge_outerc                 C   sD   |   |¡ | jt | j¡k ¡ s$t‚| jt | jg¡k ¡ s@t‚d S r   )rK   rA   r   r9  r'   rQ   r   r   r   r    Útest_vstack_one_tableŽ  s    
z TestVStack.test_vstack_one_tablec           
   	   C   sè  |d }t |ƒ}tj|gdgd�}t|ƒj}t|tjtt	t
ttfƒ�r:t ||g¡}t |ƒ|d ksht‚|dkr¦t|d |d … |ƒsŠt‚t|d d |… |ƒs¤t‚n’d|ks¶d|krøt t|d d |… |ƒ¡sÖt‚t t|d |d … |ƒ¡söt‚n@t |d d |… |k¡�st‚t |d |d … |k¡�sxt‚n>t t¡�}t ||g¡ W 5 Q R X d |¡t|jƒk�sxt‚tj|gd	gd�}t|tt	tfƒ�r˜tj||gd
d�}t |ƒ|d k�sÄt‚t |d d |… |k¡�sät‚t |d	 |d … |k¡�st‚t|d dg| dg|  ƒ�s(t‚t|d	 dg| dg|  ƒ�sLt‚t ||d	 g¡}	t |d |	d k¡�szt‚t |d	 |	d	 k¡�sät‚nLt t¡�}tj||gd
d� W 5 Q R X dt|jƒk�sädt|jƒk�sät‚d S )Nr©   r8   rº   r6   r   r½   r¾   z/vstack unavailable for mixin column type(s): {}r4   rr   rN   FTzvstack requires maskingúvstack unavailable)r]   r   r   rh   r�   rÁ   rØ   r   r   r   r   r   r   r9  rQ   r   r$   r'   r   rZ   r^   rÂ   r1   rÃ   rÄ   r*   )
rG   rÅ   r(   rÇ   ÚtrÆ   r)   rÈ   rB   Úout2r   r   r    rÉ   ”  sb    
úþ " "ÿþ
  $$ÿþz#TestVStack.test_mixin_functionalityc           	   	   C   s  t ddgtj ddgtj dtj ƒ}tdgtj dgtj dtj ƒ}t|gƒ}t|gƒ}t ||g¡}t dddgtj dddgtj dddgtj ƒ}t 	t
|d |ƒ¡s²t‚tdgtj dgtj ƒ}t|gƒ}tjtdd	�� t ||g¡ W 5 Q R X d
S )z0Test that representations can be mixed together.r5   r6   r;   r<   r   é
   Úcol0z representations are inconsistentr­   N)r   rØ   rO  r	   rÏ   r   r   r9  r$   r'   r   rQ   r
   rZ   r^   r_   )	rG   Úrep1Úrep2rA   rB   rl   ÚexpectedZrep3rC   r   r   r    Ú$test_vstack_different_representationÎ  s    &"

  ÿ
z/TestVStack.test_vstack_different_representationc                 C   s´   t tjddgddgd�ddggdd	gd
�}t tjddgddgd�ddggdd	gd
�}t ||g¡}| ¡ ddddddgks~t‚|d }t ||g¡}| ¡ ddddddgks°t‚dS )r  r  r  r  r	  r  r  r  r  r  rº   ©ç      @r;   r  r  r  zstructured [f, i] stringz----------------- ------z          (1., 1)    onez          (2., 2)    twoz          (3., 3)  threez          (4., 4)   four©r  z         (1.0, 1)    onez         (2.0, 2)    twoz               --  threez               --   fourN)r   r$   r%   r   r9  rj   rQ   ©rG   rA   rB   rl   rC   Zt13r   r   r    Útest_vstack_structured_columnß  s>    þûþûú

úz(TestVStack.test_vstack_structured_columnN)r�   r‘   r’   r   rK   r;  r@  rB  rT   rb   rE  rH  rI  rM  rN  rT  rU  rV  rÉ   r_  rd  r   r   r   r    r&    s"   /!#ZE:r&  c                   @   st   e Zd Zefdd„Zdd„ Ze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 )Ú
TestDStackc                 C   sÌ   |j dddgdd�| _|j dddgdd�| _td	d
gdd�| jd< |ddgddggddgddggdœdd�| _|| jd|tkd�| _|ddgddggddgddggdœdd�| _|j ddddgdd�| _d S )Nr'  r(  r)  r/   r0   r*  r+  r,  r5   r6   Úcxcsecr:   g      @g      @r  ra  ZfooÚbarZpezZsezr?   rº   Tr1  r  r  z 7.  pez  2z 4.  sez  6z 6.  foo  3)	r@   rA   rB   r   rC   r   r5  r6  Út6r7  r   r   r    rK     sH    ýú	ýúþûþûüùzTestDStack._setupc              	   C   s6   |   ¡  tjtdd�� t | j| j¡ W 5 Q R X d S )Nz Did you accidentally call dstackr­   )rK   rZ   r^   r8  r   ÚdstackrA   rB   r:  r   r   r    r;  7  s    z"TestDStack.test_validate_join_typec                 C   sä   t | ƒD ]Ö\}}|j ¡ D ]Â\}}||jkr¼t || || d d …|f k¡sRt‚t|| dƒrŒt || j|| jd d …|f k¡sºt‚qÜt|| dƒrÜt 	|| jd d …|f ¡rÜt‚qt || jd d …|f ¡st‚qqd S )Nr"   )
Ú	enumerateÚcolumnsÚitemsr�   r$   r'   rQ   r#   r"   Úany)Ztablesr)   ÚiiZtblrx   Zout_colr   r   r    Úcompare_dstack<  s    
&,"zTestDStack.compare_dstackc                 C   sB   |   |¡ | j ¡ }t | j|d g¡}|  | j|d g|¡ dS )zHStack a table with 3 cols and one column (gets auto-converted to Table).r8   )r8   N)rK   rA   r3   r   ri  ro  r?  r   r   r    Útest_dstack_table_columnQ  s    

z#TestDStack.test_dstack_table_columnc                 C   s  |t krt d¡ |  |¡ | j}| j}| j}d|d jd< tj	||gdd�}t
|ƒ|ks^t‚t
|d ƒt
|d ƒkszt‚t
|d ƒt
|d ƒks–t‚|  ||g|¡ tj	|||gdd�}t
|ƒ|ksÊt‚t
|d ƒt
|d ƒksæt‚t
|d ƒt
|d ƒk�st‚|  |||g|¡ d S )Nrn   Tr8   r   rr   rN   r4   )r   rZ   ru   rK   rA   rB   r5  r"   r   ri  rh   rQ   ro  rF  r   r   r    Útest_dstack_basic_outerX  s"    

z"TestDStack.test_dstack_basic_outerc                 C   sŽ   |   |¡ | j}| j}| j}tj|||gdd�}t|ƒ|ks@t‚t|d ƒt|d ƒks\t‚t|d ƒt|d ƒksxt‚|  |||g|¡ d S )NrM   rN   r8   r4   )	rK   rA   rB   r5  r   ri  rh   rQ   ro  )rG   rS   rA   rB   r5  rG  r   r   r    Útest_dstack_basic_innern  s    
z"TestDStack.test_dstack_basic_innerc              	   C   sª   |   |¡ | j}| j}| j}t ||g¡}t|ƒ|ks:t‚t|d ƒt|d ƒksVt‚t|d ƒt|d ƒksrt‚|  ||g|¡ t	 
t¡� t ||g¡ W 5 Q R X d S r¥   )rK   rC   r6  rB   r   ri  rh   rQ   ro  rZ   r^   r   )rG   rS   rC   r6  rB   Zt35r   r   r    Ú"test_dstack_multi_dimension_column{  s    
z-TestDStack.test_dstack_multi_dimension_columnc              	   C   s>   |   |¡ | j}| j}t t¡� t ||g¡ W 5 Q R X d S r   )rK   rB   rh  rZ   r^   r_   r   ri  )rG   rS   rB   rh  r   r   r    Ú"test_dstack_different_length_table‰  s
    
z-TestDStack.test_dstack_different_length_tablec                 C   s.   |   t¡ t | j¡}t || jk¡s*t‚d S r   )rK   r   r   ri  rA   r$   r'   rQ   )rG   r)   r   r   r    Útest_dstack_single_table�  s    
z#TestDStack.test_dstack_single_tablec                 C   sº   t ddgtj ddgtj dtj ƒ}t ddgtj ddgtj dtj ƒ}t|gƒ}t|gƒ}t ||g¡}t t	|d	 d d …d
f |ƒ¡s’t
‚t t	|d	 d d …df |ƒ¡s¶t
‚d S ©Nr5   r6   r;   r<   rZ  ró   é   é(   r[  r   )r	   rØ   rÏ   Zkpcr   r   ri  r$   r'   r   rQ   )rG   r\  r]  rA   rB   rl   r   r   r    Útest_dstack_representation•  s    &&

$z%TestDStack.test_dstack_representationc                 C   sž   t ddgtj ddgtj ƒ}t ddgtj ddgtj ƒ}t|gƒ}t|gƒ}t ||g¡}t||d	 d d …d
f ƒs|t‚t||d	 d d …df ƒsšt‚d S rv  )r   rØ   rÏ   r   r   ri  r   rQ   )rG   rÙ   rÚ   rA   rB   rl   r   r   r    Útest_dstack_skycoordž  s    

zTestDStack.test_dstack_skycoordc                 C   s¬   t tjddgddgd�ddggdd	gd
�}t tjddgddgd�ddggdd	gd
�}t ||g¡}| ¡ ddddgkszt‚|d }t ||g¡}| ¡ ddddgks¨t‚dS )r  r  r  r  r	  r  r  r  r  r  rº   r`  r  r  r  zstructured [f, i]     string   z------------------ ------------z(1., 1) .. (3., 3) one .. threez(2., 2) .. (4., 4)  two .. fourrb  zstructured [f, i]    string   z----------------- ------------z   (1.0, 1) .. -- one .. threez   (2.0, 2) .. --  two .. fourN)r   r$   r%   r   ri  rj   rQ   rc  r   r   r    Útest_dstack_structured_column§  s6    þûþûü
üz(TestDStack.test_dstack_structured_columnN)r�   r‘   r’   r   rK   r;  Ústaticmethodro  rp  rq  rr  rs  rt  ru  ry  rz  r{  r   r   r   r    re    s   /
		re  c                   @   sˆ   e Zd Zef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 ) Ú
TestHStackc                 C   sB  |j dddgdd�| _|j dddgdd�| _|j d	d
ddgdd�| _|| jddd�| _d| jd _d| jd _|| jdd�| _| jj t	dddgfdddifdgƒ¡ | jj t	dddgfdddifdgƒ¡ | jj t	dddgfdddifdgƒ¡ | jj t	dddgƒ¡ t	dddddddgfddddd œfdddgƒ| _
d S )!Nr-  r(  r)  r/   r0   r*  r+  r,  z d    er.  r/  r0  Tr1  r  r8   Úgr4   r2   r5   r6   r7   r9   r;   r<   r=   r•   r–   r2  r>   r3  rp   )r@   rA   rB   rC   r5  rx   r6  rD   rE   r   rF   r7  r   r   r    rK   Ì  sL    ýú	ýú	üù	(((ûÿzTestHStack._setupc              	   C   s6   |   ¡  tjtdd�� t | j| j¡ W 5 Q R X d S )Nz Did you accidentally call hstackr­   )rK   rZ   r^   r8  r   ÚhstackrA   rB   r:  r   r   r    r;  ý  s    z"TestHStack.test_validate_join_typec                 C   sF   |   |¡ t | j| jg¡}|jdks*t‚| ¡ ddddgksBt‚dS )zp
        From #2995, test that hstack'ing references to the same table has the
        expected output.
        Fúa_1 b_1 a_2 b_2rd   ú0.0 foo 0.0 fooz1.0 bar 1.0 barN)rK   r   r  rA   ri   rQ   rj   rR   r   r   r    Útest_stack_same_table  s    
üz TestHStack.test_stack_same_tablec                 C   sL   |   |¡ t | jd | jd g¡}|jdks2t‚| ¡ dddgksHt‚d S )Nr   r5   Fúa_1 b_1 a_2 b_2  c r~   z0.0 foo 3.0 sez   5©rK   r   r  rA   rB   ri   rQ   rj   rR   r   r   r    r@    s    
ýzTestHStack.test_stack_rowsc                 C   s–   |   |¡ t | j| jd g¡}t|d ƒt| jd ƒks>t‚t|d ƒt| jd ƒks\t‚t|d ƒt| jd ƒkszt‚| ¡ ddddgks’t‚d S )Nr7   r8   r4   r,   r#  z0.0 foo   4z1.0 bar   5)rK   r   r  rA   rB   rh   rQ   rj   rR   r   r   r    Útest_stack_columns  s    
üzTestHStack.test_stack_columnsc                 C   s8   |   |¡ tj| j| j| jgdd�}|j| jks4t‚d S rL   )	rK   r   r  rA   rB   r5  rD   rF   rQ   rR   r   r   r    rT   (  s    
z TestHStack.test_table_meta_mergec              	   C   s6  |   |¡ t tj¡�}tj| j| jgdd�}W 5 Q R X t	|ƒdksHt
‚|j| jjksZt
‚t tj¡�}tj| j| jgddd�}W 5 Q R X t	|ƒdksšt
‚|j| jjks¬t
‚tj| j| jgddd�}|j| jjksÖt
‚t t¡� tj| j| jgddd�}W 5 Q R X t t¡� tj| j| jgddd�}W 5 Q R X d S rC  )rK   rZ   r[   r   r\   r   r  rA   r6  r]   rQ   rD   r^   r   r_   r`   r   r   r    rb   -  s>    
 
  ÿ
  ÿ
  ÿ
  ÿz)TestHStack.test_table_meta_merge_conflictc              	   C   s    |   |¡ t t¡� t g ¡ W 5 Q R X t t¡� t d¡ W 5 Q R X t t¡� t | jdg¡ W 5 Q R X t t¡� tj| j| jgdd� W 5 Q R X d S rD  )	rK   rZ   r^   r_   r   r  r8  rB   rA   r   r   r   r    rE  N  s    
zTestHStack.test_bad_input_typec                 C   s°  |   |¡ | j}| j}| j}| j}tj||gdd�}|jdksBt‚t	|ƒ|ksRt‚t	|d ƒt	|d ƒksnt‚t	|d ƒt	|d ƒksŠt‚t	|d ƒt	|d ƒks¦t‚t	|d	 ƒt	|d ƒksÂt‚| 
¡ d
dddgksÚt‚tj||gdd�}| 
¡ | 
¡ k�st‚tj||gdd�}| 
¡ | 
¡ k�s*t‚tj||||gdd�}|jdk�sPt‚| 
¡ dddddgk�slt‚tj||||gdd�}|jdk�s’t‚| 
¡ ddddgk�s¬t‚d S )NrM   rN   FZa_1r8   r{   r4   Za_2r|   rƒ  r~   z0.0 foo 2.0 pez   4z1.0 bar 3.0 sez   5rr   z#a_1 b_1 a_2 b_2  c   d   e   f   g z#--- --- --- --- --- --- --- --- ---z#0.0 foo 2.0 pez   4 4.0   7 0.0 fooz#1.0 bar 3.0 sez   5 5.0   8 1.0 barz# --  --  --  --  -- 6.0   9  --  --)rK   rA   rB   rC   r5  r   r  ri   rQ   rh   rj   )rG   rS   rA   rB   rC   r5  r)   Zout_listr   r   r    Útest_stack_basicY  sN    
ü
ûüzTestHStack.test_stack_basicc              	   C   s:   |   |¡ t t¡� tj| j| jgdd� W 5 Q R X d S )NrJ  rN   )rK   rZ   r^   r   r   r  rA   rC   r   r   r   r    rM  ˆ  s    
z"TestHStack.test_stack_incompatiblec                 C   sp   |t krt ¡  |  |¡ | j}||ddd�}|j ¡  d|d jd< t 	||g¡}| 
¡ ddddgkslt‚d S )	NTr1  r4   r5   r€  rd   r�  z1.0 bar 1.0  --)r   rZ   ru   rK   rA   rD   r>  r"   r   r  rj   rQ   )rG   rS   rA   rB   r)   r   r   r    Útest_hstack_one_masked�  s    

üz!TestHStack.test_hstack_one_maskedc                 C   sN   |   |¡ tj| j| jgdddd�}|jdks2t‚| ¡ dddd	gksJt‚d S )
NrM   z{table_name}_{col_name})ro   rq   )rO   r›   rœ   Fz!left_a left_b right_a right_b  c z!------ ------ ------- ------- ---z!   0.0    foo     2.0     pez   4z!   1.0    bar     3.0     sez   5r„  rR   r   r   r    Útest_table_col_renameŸ  s    

üüz TestHStack.test_table_col_renamec           
      C   s´  |   |¡ | j}| jd d… }| j}tdddgfdddifdgƒ}d|d _d|d j_d	|d
 j_|d jj	 
|¡ |d jj	 
tdddgfdddifdgƒ¡ |d jj	 
tdddgfdddifdgƒ¡ |d jj	 
tdddgfdddifdgƒ¡ d|d _d	|d j_d|d j_tj|||gdd�}|||fD ]F}|jD ]8}dD ],}	t|| j|	ƒt|| j|	ƒk�sLt‚�qL�qD�q:d |d jj	d< |d jj	d ddgk�s°t‚d S )Nr6   r4   r5   r7   r8   r9   r¨   rª   r«   r  r:   r;   r<   r=   r~  r•   r–   r2  r—   r©   Zt3_crJ  rN   )rD   r°   r1   r²   )rK   rA   rC   r5  r   r°   r±   r²   r1   rD   rE   r   r  r�   ÚgetattrrQ   )
rG   rS   rA   rC   r5  r³   r)   rX  rx   Úattrr   r   r    rµ   ¯  s8    

ÿÿÿ

2zTestHStack.test_col_meta_mergec                 C   sD   |   |¡ | jt | j¡k ¡ s$t‚| jt | jg¡k ¡ s@t‚d S r   )rK   rA   r   r  r'   rQ   r   r   r   r    Útest_hstack_one_tableÓ  s    
z TestHStack.test_hstack_one_tablec           
   	   C   sb  |d }|dd… }t  |g¡}t  |g¡}t|ƒj}t j||gdd�}t|d ƒt|d ƒksdt‚t|ƒt|ƒksxt‚|dkr²t|d |d t|ƒ… ƒsžt‚t|d |ƒs°t‚nŽd	|ksÄd
|k�rt 	t
|d |d t|ƒ… ƒ¡sèt‚t 	t
|d |ƒ¡�s@t‚n<t 	|d |d t|ƒ… k¡�s(t‚t 	|d |k¡�s@t‚t|tttfƒ�r"t j||gdd�}t|ƒt|ƒk�szt‚t 	|d |k¡�s’t‚t 	|d d t|ƒ… |k¡�s¶t‚t|d ddddgƒ�sÒt‚t j||d gdd�}t 	|d |d k¡�st‚t 	|d |d k¡�s^t‚n<t t¡�}	t j||gdd� W 5 Q R X dt|	jƒk�s^t‚d S )Nr©   r6   r<   rM   rN   Zcol0_1Zcol0_2r   r½   r¾   rr   FTr[  úhstack requires masking)r   r   rh   r�   r  rQ   r]   r   r$   r'   r   rÁ   r   r   r   r*   rZ   r^   rÂ   rÃ   rÄ   )
rG   rÅ   Zcol1Zcol2rA   rB   rÆ   r)   rY  rÈ   r   r   r    rÉ   Ù  s8    
$$$z#TestHStack.test_mixin_functionalityN)r�   r‘   r’   r   rK   r;  r‚  r@  r…  rT   rb   rE  r†  rM  r‡  rˆ  rµ   r‹  rÉ   r   r   r   r    r}  Ë  s   1
!/$r}  c                 C   s<  | j ddddddddd	dg
d
d�}| t |d d… ¡ƒ}t |¡}t| ¡ | ¡ ƒsXt‚| ¡ }|d= t |¡}t| ¡ dddddgƒsŒt‚d}t ||¡}t| ¡ dddddgƒs¸t‚tj||dd�}t| ¡ dddddgƒsät‚tj||dd�}t| ¡ dddgƒ�st‚ddg}	t ||	¡}
t|
 ¡ dddddddgƒ�sDt‚tj||	dd�}t| ¡ dddd dddgƒ�svt‚tj||	dd�}t| ¡ ddddgƒ�s¢t‚ddg}	t	 
t¡�}t ||	¡}
W 5 Q R X |jjd! d"k�sât‚t	 
t¡�}tj||	d#d� W 5 Q R X |jjd! d$k�st‚| |d#d%�}d#|d jd&< t	 
t¡�}t |¡}W 5 Q R X |jjd! d'k�snt‚tj|d#d(�}|jd)k�sŒt‚| ¡ ddddd*gk�s¨t‚t	 
t¡� tj|d#dd+�}W 5 Q R X | |d#d%�}d#|d jd&< d#|d, jd-< tj|d,ddgd#d.�}|jd)k�st‚| ¡ ddd/dd*gk�s8t‚d S )0Nz
 a b  c  dz
 2 b 7.0 0z
 1 c 3.0 5z
 2 b 6.0 2z
 2 a 4.0 3z
 1 a 1.0 7z
 2 b 5.0 1z
 0 a 0.0 4z
 1 a 2.0 6r/   r0   éÿÿÿÿ)r4   r7   r:   z a z---z  0z  1z  2r8   rc   rd   z  0   a 0.0   4z  1   c 3.0   5z  2   b 7.0   0Úlast)Zkeepz  2   b 5.0   1Únoner4   z  1   a 1.0   7z  2   a 4.0   3z  1   a 2.0   6r   zduplicate key namesTz/'keep' should be one of 'first', 'last', 'none'r†   r5   z]cannot use columns with masked values as keys; remove column 'a' from keys and rerun unique())rW   Fz --   c 3.0   5)rW   rt   r:   r;   )rt   rW   z  2   a 4.0  --)r@   r$   Úsortr   Úuniquer!   rj   rQ   r3   rZ   r^   r_   rÄ   Úargsr"   ri   )rS   rX  ZtuZt_allZt_sÚkey1Zt1aZt1bZt1cÚkey2Zt2aZt2bZt2cÚexcZt1_mZt1_mur   r   r    Útest_unique  s    öó

ûþûþ
ûþ
ýþ
	ùþ
ùþ
üþ

ÿûûr–  c                 C   sX   | dggdgd�}|d j dks$t‚t ||g¡}t|ƒdksBt‚|d j dksTt‚dS )z‚
    Test for issue #5617 when vstack'ing bytes columns in Py3.
    This is really an upstream numpy issue numpy/numpy/#8403.
    ó   ar8   rº   r5   r6   N)ÚitemsizerQ   r   r9  r]   )rS   rX  rB   r   r   r    Útest_vstack_bytesž  s
    r™  c                  C   sZ   t jdggdgd�} | d jdks&t‚t  | | g¡}t|ƒdksDt‚|d jdksVt‚dS )z�
    Test for problem related to issue #5617 when vstack'ing *unicode*
    columns.  In this case the character size gets multiplied by 4.
    r8   rº   r<   r6   N)r   r   r˜  rQ   r9  r]   )rX  rB   r   r   r    Útest_vstack_unicode«  s
    rš  c            	   	   C   sN  t dddgdd�} dddgtj }dddg}t ddgdd�}ddgtj }ddg}t| ||gdd	d
gd�}t|||gdd	d
gd�}tj||ddd	gd�}t |d t ddddgdd�k¡s¾t‚t |d	 ddddgtj k¡sât‚t |d tj	j
ddddgddddgd�k¡�st‚t |d tj	j
ddddgddddgd�k¡�sJt‚dS )z<
    Test for table join using non-ndarray key columns.
    r6   r5   rf  r0   r;   rZ  ró   ÚtmÚqr¸   rº   rr   rs   Zidx_1r   )r"   Zidx_2N)r   rØ   r©   r   r   rP   r$   r'   rQ   Úmar%   )	Ztm1Úq1Úidx1Ztm2Úq2Úidx2rA   rB   rl   r   r   r    Útest_join_mixins_time_quantity¸  s    
&$4r¢  c               	   C   st   t ddgddgdd�} t| ddggddgd	�}t| d
dggddgd	�}tjtdd�� tj||dd� W 5 Q R X dS )zR
    Test for table join using non-ndarray key columns that are not sortable.
    r5   r6   r;   r<   zdeg,degrÐ   rÔ   rŸ  rº   rZ  ró   r¡  z(one or more key columns are not sortabler­   rz   N)r   r   rZ   r^   r8  r   rP   )rÔ   rA   rB   r   r   r    Útest_join_mixins_not_sortableØ  s
    r£  c               	   C   sb   ddgddgg} ddg}t | |gddgd�}| ¡ }tjtdd	�� tj||dd
� W 5 Q R X d S )Nr5   r6   r;   r<   r8   r4   rº   zkey column 'a' must be 1-dr­   rz   )r   r3   rZ   r^   r_   r   rP   )ræ   rç   rA   rB   r   r   r    Útest_join_non_1d_key_columnä  s    r¤  c                  C   sB   t dddgƒ} t| gdgd�}| d¡}t ||  ¡ k¡s>t‚dS )zRegression test for #10823.ú
2016-01-01ú
2018-01-01ú
2017-01-01Útimerº   N)r   r   Zargsortr$   r'   rQ   )ÚtimesrX  r
  r   r   r    Útest_argsort_time_columní  s    
rª  c                  C   sà  t dddgdddggdd�} |  d	¡ |  d	¡ t | d	 dddgk¡sLt‚t | d
 dddgk¡sht‚|  d
¡ t | d
 dddgk¡sŽt‚t | d	 dddgk¡sªt‚dddg}t|ƒ}t |dddggddgd�}| d¡ t |d dddgk¡süt‚| d¡ t |d dddgk¡�s$t‚t |d |dddg k¡�sFt‚ddlm} ||d�}dddg|d< | d¡ t |d dddgk¡�s’t‚| d¡ t |d dddgk¡�sºt‚t |d |dddg k¡�sÜt‚dS )zFTest fix for #9473 and #6545 - and another regression test for #10823.r5   r;   r6   r–   r<   r•   r?   rº   r8   r4   r¥  r¦  r§  r¨  Zfluxr   )Ú
TimeSeries)r¨  N)	r   Z	add_indexr�  r$   r'   rQ   r   Zastropy.timeseriesr«  )rX  r©  r›  rB   r«  Útsr   r   r    Útest_sort_indexed_tableõ  s0    





"


r­  c               	   C   sÈ   t  ddg¡} t  ddg¡}ddgtj }t| |gƒ|jks@t‚t|| gƒ|jksVt‚t| | gƒ| jkslt‚t| gƒ| jks€t‚t 	t
¡� t| |gƒ W 5 Q R X t 	t
¡� t|| gƒ W 5 Q R X d S )Nr5   r6   )r   r   r   rØ   r©   r   rÀ   rQ   rZ   r^   r_   )r7   Úmcrœ  r   r   r    Útest_get_out_class	  s    r¯  c               	   C   s  t  ddddg¡} t jddddg| gddgd�}t jddg| d	d… gdd
gd�}t t¡�}t j||gdd� W 5 Q R X dt|jƒksŒt	‚t t¡�}t j
||gdd� W 5 Q R X dt|jƒksÆt	‚t t¡�}t j||dd� W 5 Q R X dt|jƒksþt	‚d	S )zm
    Test that outer join, hstack and vstack fail for a mixin column which
    does not support masking.
    r   r5   r6   r;   r<   r8   r4   rº   Nr7   rr   rN   rW  rŒ  r¿   )r   ZNdarrayMixinr   rZ   r^   rÂ   r9  rÃ   rÄ   rQ   r  rP   )r(   rA   rB   rÈ   r   r   r    Útest_masking_required_exception'	  s    "r°  c               	   C   s  t  ddg¡} t  ddg¡}ddgtj }tddgƒ}tddgddgdd�}t jd	d
gtjd�}t  | |g¡}|jt j	ks~t
‚|jdksŒt
‚t  || g¡}|jt j	ksªt
‚|jdks¸t
‚t  ||g¡}|jt j	ksÖt
‚|jdksät
‚t  | |g¡}|jt jk�st
‚|jdk�st
‚t  ||g¡}|jt j	k�s4t
‚t  | | g¡}|jt jk�sTt
‚t  | |g¡}|jt jk�stt
‚t  | |g¡}|jt jk�s”t
‚t  |||g¡}|jt j	k�s¶t
‚t t¡� t  | |g¡ W 5 Q R X t t¡� t  ||g¡}W 5 Q R X d S )Nr5   r6   z2001-01-02T12:34:56z2001-02-03T00:01:02r;   r<   rÏ   rÐ   é   é   F)r   r   r   rØ   r©   r   r   r  rÀ   r   rQ   ri   r   r9  rZ   r^   r_   )r7   r®  rœ  r¨  rÔ   ZcqrX  r   r   r    r…  =	  s@    r…  c                  C   s°   t ƒ } dddddg| d< dddddgtj | d< dddddgtj | d< t ƒ }dddd	g|d< ddddgtj |d< ddddgtj |d< tj| |d
dd�}t|ƒd	ks¬t‚d S )Nr5   r6   r;   r<   r•   rø   Úflux1Úflux2r–   )rø   r³  r´  rr   r÷   )r   rØ   ZJyr   rP   r]   rQ   )rA   rB   rl   r   r   r    Útest_mixin_join_regressionh	  s    rµ  )@Úcollectionsr   Ú
contextlibr   Únumpyr$   rZ   Zastropyr   r   rØ   Zastropy.coordinatesr   r   r   r	   r
   r   Zastropy.coordinates.earthr   Z astropy.coordinates.tests.helperr   Z-astropy.coordinates.tests.test_representationr   Zastropy.tabler   r   r   r   r   rñ   r   r   r   Zastropy.timer   r   Zastropy.units.quantityr   Zastropy.utilsr   Z"astropy.utils.compat.optional_depsr   Zastropy.utils.metadatar   r!   r*   r+   r  r&  re  r}  r–  r™  rš  r¢  r£  r¤  rª  r­  r¯  r°  r…  rµ  r   r   r   r    Ú<module>   sd           H    	 E  9  	!+