a
    ߙfbL>                    @   s  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlZd dlmZmZmZmZmZmZ d dl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 d dl m!Z!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 Z0dd Z1G dd dZ2G dd dZ3G dd dZ4G dd dZ5G dd dZ6d d! Z7d"d# Z8d$d% Z9d&d' Z:d(d) Z;d*d+ Z<d,d- Z=d.d/ Z>d0d1 Z?d2d3 Z@d4d5 ZAd6d7 ZBdS )8    )ArrayWrapper)EarthLocation)Quantity)OrderedDict)nullcontextN)TableQTableTableMergeErrorColumnMaskedColumnNdarrayMixin)_get_out_classjoin_skycoordjoin_distance)units)metadata)MergeConflictError)table)Time	TimeDelta)SkyCoordSphericalRepresentationUnitSphericalRepresentationCartesianRepresentation BaseRepresentationOrDifferentialsearch_around_3d)representation_equal)skycoord_equal)	HAS_SCIPYc                 C   s   t | t |kS N)sorted)Zlist1Zlist2 r!   Blib/python3.9/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                   @   sR  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d+d,d- Zejd+ejd.d/egd0d1 Zejd+d2d3 Z ejd+d4d5 Z!ejd+d6d7 Z"ejd+d8d9 Z#d:d; Z$d<d= Z%d>S )?TestJoinc                 C   s   g d}g d}|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g d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dr7         r:   r7   r6   r=   )r<   r8   r7   r8   r=   r>   r:   r6   )readt1t2t3metaupdater   
meta_merge)selft_clslines1lines2r!   r!   r"   _setup3   s    (("zTestJoin._setupc                 C   s2   |  | tj| j| jdd}|j| jks.J d S Ninner	join_type)rN   r   joinrD   rE   rG   rI   rJ   operation_table_typer+   r!   r!   r"   test_table_meta_mergeK   s    
zTestJoin.test_table_meta_mergec                 C   s  |  | ttj$}tj| j| jdd}W d    n1 s@0    Y  t	|dksZJ |j
| jj
kslJ ttj&}tj| j| jddd}W d    n1 s0    Y  t	|dksJ |j
| jj
ksJ tj| j| jddd}|j
| jj
ksJ tt& tj| j| jddd}W d    n1 s00    Y  tt& tj| j| jddd}W d    n1 sr0    Y  d S )	NrP   rQ   r=   warnrR   Zmetadata_conflictssilenterrornonsense)rN   pytestwarnsr   MergeConflictWarningr   rS   rD   rF   lenrG   raisesr   
ValueErrorrJ   rU   wr+   r!   r!   r"   test_table_meta_merge_conflictP   s    
246z'TestJoin.test_table_meta_merge_conflictc                 C   s   |  | | j}| j}t||}t||u s2J t|d t|d u sNJ t|d t|d u sjJ t|d t|d u sJ t|d t|d u sJ |jdu sJ t| g dsJ |j	| j
ksJ d S )Nr:   r6   r9   r<   F) a   b   c   d --- --- --- ---  1 foo  L2  R1  1 foo  L2  R2  2 bar  L4  R3)rN   rD   rE   r   rS   typemaskedr#   pformatrG   rI   rJ   rU   rD   rE   t12r!   r!   r"   test_both_unmasked_inneri   s    
z!TestJoin.test_both_unmasked_innerc                 C   sj  |t u rtd | | | j}| j}tj||dd}|jdu sFJ |j	du sTJ dD ]}t
|| tu sXJ qXt
|d tu sJ t| g dsJ tj||d	d}|jdu sJ |j	du sJ t| g d
sJ tj||dd}|jdu sJ |j	du sJ t| g ds$J tj||dd}tj||dddgd}t| | ksfJ d S )N(Quantity columns do not support masking.leftrQ   TFr:   r6   r9   r<   )re   rf     0 foo  L1  --  1 bar  L3  --rg   rh   ri   right)re   rf   rg   rh   ri     4 bar  --  R4outer)re   rf   rs   rt   rg   rh   ri   rv   r:   r6   rR   keys)r   r\   xfailrN   rD   rE   r   rS   has_masked_columnsrk   rj   r
   r   r#   rl   r&   r)   as_array)rJ   rU   rD   rE   rn   nameZt12aZt12br!   r!   r"   #test_both_unmasked_left_right_outer~   s.    

	
z,TestJoin.test_both_unmasked_left_right_outerc                 C   s   |  | | j}| j}tj||dd}t||u s6J t|d t|d u sRJ t|d t|d u snJ t|d t|d u sJ t|d t|d u sJ t|d t|d u sJ |jdu sJ t| g d	sJ d S )
Nr:   ry   b_1r6   r9   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)	rN   rD   rE   r   rS   rj   rk   r#   rl   rm   r!   r!   r"   #test_both_unmasked_single_key_inner   s    
z,TestJoin.test_both_unmasked_single_key_innerc                 C   s   |t u rtd | | | j}| j}tj||ddd}|jdu sHJ t	|
 g ds^J tj||ddd}|jdu s~J t	|
 g dsJ tj||d	dd}|jdu sJ t	|
 g d
sJ d S )Nrp   rq   r:   rx   T)r   r     0 foo  L1  --  --r   r   r   r   r   ru   )r   r   r   r   r   r   r     4  --  -- bar  R4rw   )	r   r   r   r   r   r   r   r   r   )r   r\   rz   rN   rD   rE   r   rS   r{   r#   rl   rm   r!   r!   r"   .test_both_unmasked_single_key_left_right_outer   s    



z7TestJoin.test_both_unmasked_single_key_left_right_outerc                 C   s   |t u rtd | | | j}|| jdd}| j}tj||dd}|jdu sTJ t||}t	
| t	|ks|J d|d jd< d|d	 jd
< tj||ddd}t| g dsJ tj||ddd}t| g dsJ d S )Nrp   Trk   rP   rQ   Fr6   r7   r9   r8   r:   rx   )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 r   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   r\   rz   rN   rD   rE   r   rS   rk   r&   r)   r|   r'   r$   r#   rl   )rJ   rU   rD   t1mrE   Zt1m2rn   Zt21mr!   r!   r"   test_masked_unmasked   s     

zTestJoin.test_masked_unmaskedc           	      C   s   |  | |tu rtd | j}|| jdd}| j}|| jdd}tj||dd}|jdu sbJ |	 D ]}t
|tu sjJ qjt||}t| t|ksJ d|d jd< d|d	 jd
< d|d jd
< tj||ddd}t| g dsJ d S )Nrp   Tr   rP   rQ   Fr6   r7   r9   r8   r<   r:   rx   )r   r   r   r   r   r   z  2 bar  L4 bar  --)rN   r   r\   rz   rD   rE   r   rS   rk   itercolsrj   r   r&   r)   r|   r'   r$   r#   rl   )	rJ   rU   rD   r   rE   Zt2mZt1m2mr*   rn   r!   r!   r"   test_masked_masked  s$    

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|| |u sJ qtj||dd}d|fdtfd
|fd|fd|ffD ] \}}t|| |u sJ 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   r7   r:   r8   r6   r=   r9   r>   r<         erP   rQ   rq   N)r
   r   r   r   rS   rj   )	rJ   r   r   rD   rE   rn   r}   Zexp_typeZt21r!   r!   r"   test_classes9  s(    zTestJoin.test_classesc                 C   sD   |  | | j}| j}tj||dddgdd}|jg dks@J d S )Nzx_{table_name}_{col_name}_yLRr:   )uniq_col_nametable_namesry   )r:   Zx_L_b_yr9   Zx_R_b_yr<   )rN   rD   rE   r   rS   colnamesrm   r!   r!   r"   test_col_renameW  s    

zTestJoin.test_col_renamec                 C   s\   |  | | j}| j}d|d< tt  tj||dd W d    n1 sN0    Y  d S )Nr7   r   r:   r   rN   rD   rE   r\   r`   r	   r   rS   rJ   rU   rD   rE   r!   r!   r"   test_rename_conflictc  s    
zTestJoin.test_rename_conflictc                 C   sX   |  | | j}| j}tt$ tj||ddgd W d    n1 sJ0    Y  d S )Nr:   z	not therer   r   r   r!   r!   r"   test_missing_keyso  s
    
zTestJoin.test_missing_keysc                 C   sT   |  | | j}| j}tt  tj||dd W d    n1 sF0    Y  d S )Nzillegal valuerQ   rN   rD   rE   r\   r`   ra   r   rS   r   r!   r!   r"   test_bad_join_typew  s
    
zTestJoin.test_bad_join_typec                 C   sh   |  | | j}| j}|d= |d= |d= |d= tt t|| W d    n1 sZ0    Y  d S Nr:   r6   r   r   r!   r!   r"   test_no_common_keys  s    
zTestJoin.test_no_common_keysc                 C   s   |  | |tu rtd | j}|| jdd}t|| d|d jd< t	t
 t|| W d    n1 sv0    Y  d S )Nrp   Tr   r:   r   )rN   r   r\   rz   rD   rE   r   rS   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
u rtjtjdd}nt }|$ tj||ddgd}W d    n1 s.0    Y  |d jdksLJ |d jjdksbJ |d jjdksxJ |d jj	| jksJ |d jj	|ksJ |d jjdksJ |d jjdksJ |d jjdksJ |d jjdksJ d S )Nr<   r9   r6   r7   r8   r:   r;   r=   r>   r?   cmmt1_b%6sz%3sZt1_ct2_czDIn merged column 'a' the 'unit' attribute does not match \(cm != m\)matchr   Zc_1Zc_2)rN   rD   rE   rename_columnr   unitinfodescriptionr3   rG   r   r\   r]   r   r^   r   r   rS   rI   )rJ   rU   rD   rE   meta1Zmeta2ctxrn   r!   r!   r"   test_col_meta_merge  s>    


4zTestJoin.test_col_meta_mergec                 C   s   |  | | }g d|d< td|d< | }g d|d< g d|d< t||}tj|d |d  tj|d |d  tj|d |d  d S )Nr7   r8   r=   r:   )r=   r>   r6   r>   r   r   r9   )rN   r&   Zonesr   rS   ZtestingZassert_allclose)rJ   rU   rD   rE   rF   r!   r!   r"   test_join_multidimensional  s    
z#TestJoin.test_join_multidimensionalc           	      C   sj  |  | |tu rtd tjg ddd}tjg d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sJ t|d drJ tj||dd}t	|d j
ddgddgddgddggks4J t	|d j
ddgddgddgddggksfJ d S )Nrp   r   r:   )r}   )r7   r=   r>   r7   r8   r=   r>   r   r   r6   r   )r}   r$   r9   rP   rQ   TFr$   rw   )rN   r   r\   rz   r   r   r
   rS   r&   r)   r$   r%   )	rJ   rU   r:   Za2r6   r9   rD   rE   rn   r!   r!   r"   !test_join_multidimensional_masked  sN    



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}|g d }|g d }tj||dd	}t|d
ksJ |d j|ju sJ t	|d ddgksJ |dkrt
|d |ddg sJ t
|d |ddg sJ nd|v sd|v rNt	t|d |ddg s*J t	t|d |ddg sJ n@t	|d |ddg ksnJ t	|d |ddg ksJ t|tttfrttj||dd	}t|dksJ t	|d g dksJ t	|d |d ksJ t	|d |d ksJ t|d g d t|d g d tj||dd	}t|dks\J t	|d g dksxJ t	|d |d ksJ t	|d |d ksJ t|d g d t|d g d tj||dd	}t|dksJ t	|d g dksJ t	|d |ks*J t	|d |ksBJ t|d g dsZJ t|d g dsJ nldD ]f}	tt }
tj|||	d	 W d    n1 s0    Y  dt|
jv sxdt|
jv sxJ qxd S )Nr   idxZm1namesZm2)r   r7   r=   )r   r8   r=   rP   rQ   r8   r   r=   r   ReprDiffrq   )FFF)FTFru   rw   r>   r   r7   r8   r=   )FFTF)FTFF)rw   rq   ru   join requires maskingzjoin unavailable)rj   r   r_   r&   Zaranger   r   rS   	__class__r)   r   r   
isinstancer   r   r   r,   r\   r`   NotImplementedErrorstrvalue)rJ   
mixin_colsr*   cls_namelen_colr   rD   rE   r+   rR   errr!   r!   r"   test_mixin_functionality  s`    

"$  0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sJJ |jddgks\J t|t|t| ksxJ t| g dksJ tjt	dd" tj||d	dd}W d    n1 s0    Y  d S )N)r7   r:   )r8   r6   r:   r6   )Zrowsr   )r=   r9   )r>   r<   r9   Z	cartesianrQ   )za_1  b  a_2  c rf   z  1   a   3   cz  1   a   4   dz  2   b   3   cz  2   b   4   dz'cannot supply keys for a cartesian joinr   rx   )
r   r   rS   r   r_   r   
splitlinesr\   r`   ra   rm   r!   r!   r"   test_cartesian_join>  s"    zTestJoin.test_cartesian_joinznot HAS_SCIPYc                 C   s   t g dg ddd}t g dg ddd}t|gdgd}t|gdgd}tj||dtd	tj id
}g d}t| |ksJ d S )Nr   r7   皙?r8   r   r   r   r   degr   g      ?g?g @r   r   r   scr   皙?
join_funcs)z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   rS   r   ur   r   r   )rJ   sc1sc2rD   rE   rn   expr!   r!   r"    test_join_with_join_skycoord_skyS  s    z)TestJoin.test_join_with_join_skycoord_skydistance_funcr   c           	      C   s   t g dtj g dtj g dtj }t g dtj g dtj g dtj }t|gdgd}t|gdgd}ttd	tj |d
}tj	||d|id}g d}t
| |ksJ d S )Nr   r   )r7   r7   r8   r7   r   r   )r7   r7   r7   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   rS   r   r   )	rJ   r   r   r   rD   rE   	join_funcrn   r   r!   r!   r"   test_join_with_join_skycoord_3db  s    **z(TestJoin.test_join_with_join_skycoord_3dc                 C   s|   g d}g d}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}g d}t| |ksxJ d S )Nr   r   r*   r   r   leafsize    pr8   Zkdtree_argsZ
query_argsrw   rR   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   rS   r   r   rJ   c1c2rD   rE   r   rn   r   r!   r!   r"   test_join_with_join_distance_1ds  s    z(TestJoin.test_join_with_join_distance_1dc                 C   s   ddl m} g d}g d}g d}g d}g d}g d}t|||gg d	d
}t|||gg dd
}	td}
d|
i}tj||	d|d}g d}t| |ksJ |||	d|\}}}|dksJ d S )Nr   )_apply_join_funcs)r   r7   r   g333333?r8   )r   r7   r8   r8   r=   )r:   r6   r9   r<   r   r   )r   r8   r>   )zyx)r*   ido1r   )r*   r   o2r   r*   rw   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   rS   r   r   )rJ   r   r   Zid1r   r   Zid2r   rD   rE   r   r   rn   r   rq   ru   ry   r!   r!   r"   (test_join_with_join_distance_1d_multikey  s     	z1TestJoin.test_join_with_join_distance_1d_multikeyc                 C   s   g dt j }g dt j }t|gdgd}t|gdgd}tdt j }tj||d|id}g d}t|	 |kszJ g d|d	< g d|d
< tj||d|id}g d}t|	 |ksJ d S )Nr   )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   r   Zcol__id)z$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   Zmmr   r   r   r   rS   r   r   r   r!   r!   r"   (test_join_with_join_distance_1d_quantity  s    z1TestJoin.test_join_with_join_distance_1d_quantityc                 C   s   t g dg dg }t g dg 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}g d}t| |ksJ d S )Nr   )r   r   r7   r   r   r   r*   r   r   r   r   r   r8   r   rw   r   )zcol_id col_1 [2]   col_2 [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.0)	r&   r'   Z	transposer   r   r   rS   r   r   r   r!   r!   r"   test_join_with_join_distance_2d  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sJ |	| D ]}
t|
sJ q|j|	jksJ qq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'.)rP   rq   ru   rw   r:   ry   rR   r   r7   )r}   indexr   rw   )	keys_left
keys_rightrR   N)rN   rD   r5   rE   r   rS   Z
add_columnr_   r   r   appendtolistzipZvalues_equalr   r&   r)   rG   )rJ   rR   rD   rE   Zt12_expZkeys_left_listZkeys_right_listr   r   rn   r*   r!   r!   r"   test_keys_left_right_basic  s.    


z#TestJoin.test_keys_left_right_basicc                 C   s  |    | j}| j}d}tjt|d$ tj||ddgd W d   n1 sP0    Y  d}tjt|d* tj||dd	ggdgd W d   n1 s0    Y  d
}tjt|d& tj||ddgdd W d   n1 s0    Y  d}tjt|d( tj||ddgdgd W d   n1 s00    Y  d}tjt|d$ tj||ddgd W d   n1 sx0    Y  d}tjt|d( tj||dgdgi d W d   n1 s0    Y  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   r:   )r   r   Nz1left table has different length from key \[1, 2\]r7   r8   z>keys arg must be None if keys_left and keys_right are supplied)r   r   ry   z3keys_left and keys_right args must have same lengthr6   z.keys_left and keys_right must both be provided)r   z7cannot supply join_funcs arg and keys_left / keys_right)r   r   r   r   )rJ   rD   rE   msgr!   r!   r"   test_keys_left_right_exceptions  s*    28484z(TestJoin.test_keys_left_right_exceptionsN)&r   r   r   r   rN   rV   rd   ro   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   ZmarkZskipifr   Zparametrizer   r   r   r   r   r   r  r  r!   r!   r!   r"   r-   1   sH   3,%!.(=










#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   sL   g d}g d}g d}|j |dd| _|j |dd| _|j |dd| _d S )N) a   b   0 foo z  1 foo z  1 bar   2 bar )r  r	  z  3 foo z  4 bar r
  )r/   z  0 foo  R1  8 foo  R2z  1 bar  R3r0   r1   r2   )rC   rD   rE   rF   )rJ   rK   rL   rM   Zlines3r!   r!   r"   rN     s    zTestSetdiff._setupc                 C   sn   |  | t| j| j}t|d t| jd u s8J t|d t| jd u sVJ | g dksjJ d S )Nr:   r6   )r  --- ---z  1 bar  1 foo)rN   r   setdiffrD   rE   rj   rl   rT   r!   r!   r"   test_default_same_columns.  s
    
z%TestSetdiff.test_default_same_columnsc                 C   sn   |  | t| j| j}t|d t| jd u s8J t|d t| jd u sVJ | ddgksjJ d S )Nr:   r6   r  r  )rN   r   r  rD   rj   rl   rT   r!   r!   r"   test_default_same_tables8  s    
z$TestSetdiff.test_default_same_tablesc                 C   sH   |  | tt  t| j| j W d    n1 s:0    Y  d S r   rN   r\   r`   ra   r   r  rF   rD   rJ   rU   r!   r!   r"   test_extra_col_left_tableA  s    
z%TestSetdiff.test_extra_col_left_tablec                 C   sn   |  | t| j| j}t|d t| jd u s8J t|d t| jd u sVJ | g dksjJ d S )Nr:   r6   )r  r  r  z  2 bar)rN   r   r  rD   rF   rj   rl   rT   r!   r!   r"   test_extra_col_right_tableG  s
    
z&TestSetdiff.test_extra_col_right_tablec                 C   sv   |  | tj| j| jddgd}t|d t| jd u s@J t|d t| jd u s^J | g dksrJ d S )Nr:   r6   r   )r/   --- --- ---r0   r  )rN   r   r  rF   rD   rj   rl   rT   r!   r!   r"   	test_keysR  s
    
zTestSetdiff.test_keysc                 C   sP   |  | tt( tj| j| jddgd W d    n1 sB0    Y  d S )Nr:   r<   r   r  r  r!   r!   r"   test_missing_key]  s    
zTestSetdiff.test_missing_keyN)r   r   r   r   rN   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!S )"
TestVStackc                 C   s  |j g ddd| _|j g ddd| _|j g ddd| _|| jd|tu 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	g d t	d	g dfdd
d
d
dfdddg| _
d S )Nz a   b 0. foo 1. barr1   r2    a    b   cz 2.  pez  4z 3.  sez  5) a    b 4.   7 5.   8 6.   9Tr5   rk   r4   r6   r7   r8   r9   r:   r;   r=   r>   r?   r   r   r   r7   r@   )r9   kr;   r7   r8   r=   r>   r   r   rr   )rC   rD   rE   rF   r   t4t5rG   rH   r   rI   rJ   rK   r!   r!   r"   rN   f  s*    


(((zTestVStack._setupc                 C   sJ   |    tjtdd  t| j| j W d    n1 s<0    Y  d S )Nz Did you accidentally call vstackr   )rN   r\   r`   	TypeErrorr   vstackrD   rE   rJ   r!   r!   r"   test_validate_join_type  s    z"TestVStack.test_validate_join_typec                 C   s   |  | | j }|j  t| j|d g}t|d t| jd u sPJ t|d t| jd u snJ | g dksJ d S )Nr7   r:   r6   )r  r  0.0 foo1.0 barr/  )	rN   rD   r5   rG   clearr   r+  rj   rl   rJ   rU   rE   r+   r!   r!   r"   test_stack_rows  s    


zTestVStack.test_stack_rowsc                 C   sX   |  | | j }|j  t| j|d g}|jdu s@J | g dksTJ d S )Nr:   F)r  r  r.  r/  z0.0  --1.0  --)	rN   rD   r5   rG   r0  r   r+  rk   rl   r1  r!   r!   r"   test_stack_table_column  s    


z"TestVStack.test_stack_table_columnc                 C   s8   |  | tj| j| j| jgdd}|j| jks4J d S rO   )rN   r   r+  rD   rE   r'  rG   rI   rT   r!   r!   r"   rV     s    
z TestVStack.test_table_meta_mergec                 C   s  |  | ttj&}tj| j| jgdd}W d    n1 sB0    Y  t	|dks\J |j
| jj
ksnJ ttj(}tj| j| jgddd}W d    n1 s0    Y  t	|dksJ |j
| jj
ksJ tj| j| jgddd}|j
| jj
ksJ tt( tj| j| jgddd}W d    n1 s80    Y  tt( tj| j| jgddd}W d    n1 s|0    Y  d S 	NrP   rQ   r8   rW   rX   rY   rZ   r[   )rN   r\   r]   r   r^   r   r+  rD   r(  r_   rG   r`   r   ra   rb   r!   r!   r"   rd     s    
468z)TestVStack.test_table_meta_merge_conflictc                 C   s   |  | tt tg  W d    n1 s40    Y  tt td W d    n1 sh0    Y  tt  t| jdg W d    n1 s0    Y  tt& tj| j| jgdd W d    n1 s0    Y  d S Nr7   zinvalid join typerQ   )	rN   r\   r`   ra   r   r+  r*  rE   rD   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u s<J t||u sLJ t|d t|d u shJ t|d t|d u sJ | g dksJ tj|||gdd}t||u sJ t|d t|d u sJ t|d t|d u sJ | g dks
J d S )NrP   rQ   Fr:   r6   )r  r  r.  r/  2.0 pez3.0 sez)r  r  r.  r/  r8  r9  r.  r/  )	rN   rD   rE   r'  r   r+  rk   rj   rl   rJ   rU   rD   rE   r'  rn   t124r!   r!   r"   test_stack_basic_inner  s    
z!TestVStack.test_stack_basic_innerc                 C   s   |t u rtd | | | j}| j}| j}tj||gdd}|j	du sNJ |
 g dksbJ tj|||gdd}|j	du sJ |
 g dksJ d S )Nrp   rw   rQ   F)r.   r  0.0 foo  --1.0 bar  --2.0 pez   43.0 sez   5)r.   r  r=  r>  r?  r@  r=  r>  )r   r\   rz   rN   rD   rE   r'  r   r+  rk   rl   r:  r!   r!   r"   test_stack_basic_outer  s    

z!TestVStack.test_stack_basic_outerc                 C   sz  |  | tt&}tj| j| jgdd W d    n1 s@0    Y  d| jd j	j
| jd j	j
gt|jv szJ tt&}tj| j| jgdd W d    n1 s0    Y  dt|jv sJ tt& tj| j| jgdd W d    n1 s0    Y  | j }dd	g|d _tt }t| j|g W d    n1 sX0    Y  d
t|jv svJ d S )NrP   rQ   z+The 'b' columns have incompatible types: {}r6   rw   z(The 'b' columns have incompatible types:exactr8   r7   zhave different shape)rN   r\   r`   r	   r   r+  rD   rF   r3   r(   r}   r   r   rE   r5   shape)rJ   rU   excinfoZ
t1_reshaper!   r!   r"   test_stack_incompatible  s$    
446
0z"TestVStack.test_stack_incompatiblec                 C   sj   |t u rtd | | | j}| j}d|d jd< t||g}|j	du sRJ |
 g dksfJ d S )Nrp   Tr6   r7   F)r  r  r.  r/  r.  r3  )r   r\   rz   rN   rD   r'  r$   r   r+  rk   rl   )rJ   rU   rD   r'  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u rDttj}nt }|$}tj|||gdd}W d    n1 sz0    Y  |tu rt|d
ksJ dt|d jv sJ dt|d	 jv sJ | g dksJ n| g dksJ |d jjdksJ |d jjdks*J |d jjdks@J |d jjdksVJ |d jj| jksnJ |d jjt
dddgfddd	ifdgksJ d S )Nr   r:   r   kmz%fr   r6   r   r7   r8   r9   r;   r=   r>   r?   r   r   r#  rP   rQ   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))	   a       b      km          -------- ------0.000000    foo1.000000    barz2.000000    pezz3.000000    sezrM  rN  )	rJ  rK  rL  rM  z0.000010    barz0.002000    pezz0.003000    sezrM  rN  )rN   rD   rE   r'  r   r   r3   r   rG   rH   r   r   r\   r]   r   r^   r   r   r+  r_   r   messagerl   rI   )rJ   rU   rD   rE   r'  r   warning_linesr+   r!   r!   r"   test_col_meta_merge_inner)  sJ    
,,,,
4


	z$TestVStack.test_col_meta_merge_innerc                 C   s  |t u 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 d    n1 s0    Y  t|dksJ dt|d jv sJ dt|d
 jv sJ |d jdksJ |d jj	dksJ |d jj
dksJ |d jj	d	ks4J |d jj| jksLJ |d jjtdddgfddd
ifdgks|J |d jjdksJ |d jj	d	ksJ |d jj
dksJ d S )Nrp   r   r:   r   rG  z%0dr   r6   r   r7   r8   r9   r;   r=   r>   r?   r   r   r#  r   rw   rQ   rH  r   rI  )r   r\   rz   rN   rD   rE   r'  r   r   r3   r   rG   rH   r   r]   r   r^   r   r+  r_   r   rO  rI   )rJ   rU   rD   rE   r'  rP  r+   r!   r!   r"   test_col_meta_merge_outerq  sN    




,,,,
4

0z$TestVStack.test_col_meta_merge_outerc                 C   sD   |  | | jt| jk s$J | jt| jgk s@J d S r   )rN   rD   r   r+  r)   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shJ |dkrt|d |d  |sJ t|d d | |sJ nd|v sd|v rtt|d d | |sJ tt|d |d  |sJ n@t|d d | |ksJ t|d |d  |ksJ nTtt}t||g W d    n1 sj0    Y  d|t|jv sJ tj|gd	gd}t|tt	tfrtj||gd
d}t ||d ksJ t|d d | |ksJ t|d	 |d  |ksJ t|d dg| dg|  s>J t|d	 dg| dg|  sbJ t||d	 g}	t|d |	d ksJ t|d	 |	d	 ksJ nbtt"}tj||gd
d W d    n1 s0    Y  dt|jv sdt|jv sJ d S )Nr   r:   r   r8   r   r   r   z/vstack unavailable for mixin column type(s): {}r6   rw   rQ   FTzvstack requires maskingvstack unavailable)r_   r   r   rj   r   r   r   r   r   r   r   r   r   r+  r   r&   r)   r   r\   r`   r   r3   r   r   r,   )
rJ   r   r*   r   tr   r+   r   rE   out2r!   r!   r"   r     sP    
 " ".
  $$2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 g dtj g dtj g d	tj }t	t
|d
 |sJ tdgtj dgtj }t|g}tjtdd t||g W d   n1 s0    Y  dS )z0Test that representations can be mixed together.r7   r8   r=   r>   r   
   )r7   r8   rW  )r=   r>   r   )r7   r7   r   col0z representations are inconsistentr   N)r   r   rG  r   r   r   r   r+  r&   r)   r   r   r\   r`   ra   )	rJ   rep1rep2rD   rE   rn   ZexpectedZrep3rF   r!   r!   r"   $test_vstack_different_representation  s    &"


z/TestVStack.test_vstack_different_representationN)r   r   r   r   rN   r-  r2  r4  rV   rd   r7  r<  rA  rE  rF  rQ  rR  rS  r   r[  r!   r!   r!   r"   r  d  s    H7/r  c                   @   sl   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S )
TestDStackc                 C   s   |j g ddd| _|j g d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u d| _|ddgdd
ggddgddggddd| _|j g ddd| _d S )Nr  r1   r2   r  r7   r8   cxcsecr<   g      @g      @g      @g      @ZfooZbarZpezZsezrB   r   Tr"  g       @g      ?)r  z 7.  pez  2z 4.  sez  6z 6.  foo  3)	rC   rD   rE   r   rF   r   r'  r(  t6r)  r!   r!   r"   rN     s*    


zTestDStack._setupc                 C   sJ   |    tjtdd  t| j| j W d    n1 s<0    Y  d S )Nz Did you accidentally call dstackr   )rN   r\   r`   r*  r   dstackrD   rE   r,  r!   r!   r"   r-  	  s    z"TestDStack.test_validate_join_typec                 C   s   t | D ]\}}|j D ]\}}||jv rt|| || d d |f ksRJ t|| drt|| j|| jd d |f ksJ qt|| drt|| jd d |f rJ qt|| jd d |f sJ qqd S )Nr$   )		enumeratecolumnsitemsr   r&   r)   r%   r$   any)Ztablesr+   ZiiZtblr}   Zout_colr!   r!   r"   compare_dstack  s    
&,"zTestDStack.compare_dstackc                 C   sB   |  | | j }t| j|d g}| | j|d g| dS )zQStack a table with 3 cols and one column (gets auto-converted to Table).
        r:   )r:   N)rN   rD   r5   r   r_  rd  r1  r!   r!   r"   test_dstack_table_column#  s    

z#TestDStack.test_dstack_table_columnc                 C   s  |t u rtd | | | j}| j}| j}d|d jd< tj	||gdd}t
||u s^J t
|d t
|d u szJ t
|d t
|d u sJ | ||g| tj	|||gdd}t
||u sJ t
|d t
|d u sJ t
|d t
|d u sJ | |||g| d S )Nrp   Tr:   r   rw   rQ   r6   )r   r\   rz   rN   rD   rE   r'  r$   r   r_  rj   rd  r:  r!   r!   r"   test_dstack_basic_outer+  s"    

z"TestDStack.test_dstack_basic_outerc                 C   s   |  | | j}| j}| j}tj|||gdd}t||u s@J t|d t|d u s\J t|d t|d u sxJ | |||g| d S )NrP   rQ   r:   r6   )rN   rD   rE   r'  r   r_  rj   rd  )rJ   rU   rD   rE   r'  r;  r!   r!   r"   test_dstack_basic_innerA  s    
z"TestDStack.test_dstack_basic_innerc                 C   s   |  | | j}| j}| j}t||g}t||u s:J t|d t|d u sVJ t|d t|d u srJ | ||g| t	t
 t||g W d    n1 s0    Y  d S r   )rN   rF   r(  rE   r   r_  rj   rd  r\   r`   r	   )rJ   rU   rF   r(  rE   Zt35r!   r!   r"   "test_dstack_multi_dimension_columnN  s    
z-TestDStack.test_dstack_multi_dimension_columnc                 C   sR   |  | | j}| j}tt t||g W d    n1 sD0    Y  d S r   )rN   rE   r^  r\   r`   ra   r   r_  )rJ   rU   rE   r^  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*J d S r   )rN   r   r   r_  rD   r&   r)   )rJ   r+   r!   r!   r"   test_dstack_single_tablec  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 |sJ tt	|d	 d d df |sJ d S Nr7   r8   r=   r>   rW  r      (   rX  r   )
r   r   r   Zkpcr   r   r_  r&   r)   r   )rJ   rY  rZ  rD   rE   rn   r!   r!   r"   test_dstack_representationh  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|J t||d	 d d df sJ d S rk  )r   r   r   r   r   r_  r   )rJ   r   r   rD   rE   rn   r!   r!   r"   test_dstack_skycoordq  s    

zTestDStack.test_dstack_skycoordN)r   r   r   r   rN   r-  staticmethodrd  re  rf  rg  rh  ri  rj  rn  ro  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S ) 
TestHStackc                 C   s0  |j g ddd| _|j g ddd| _|j g d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	g d t	dg dfdddddfdddg| _
d S )N)r  r  r  r1   r2   r  )z d    er  r   r!  Tr"  fr:   gr6   r4   r7   r8   r9   r;   r=   r>   r?   r   r   r#  r$  r&  rr   )rC   rD   rE   rF   r'  r}   r(  rG   rH   r   rI   r)  r!   r!   r"   rN   }  s.    


(((zTestHStack._setupc                 C   sJ   |    tjtdd  t| j| j W d    n1 s<0    Y  d S )Nz Did you accidentally call hstackr   )rN   r\   r`   r*  r   hstackrD   rE   r,  r!   r!   r"   r-    s    z"TestHStack.test_validate_join_typec                 C   sB   |  | t| j| jg}|jdu s*J | g dks>J 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_2rf   0.0 foo 0.0 fooz1.0 bar 1.0 barN)rN   r   rt  rD   rk   rl   rT   r!   r!   r"   test_stack_same_table  s    
z TestHStack.test_stack_same_tablec                 C   sJ   |  | t| jd | jd g}|jdu s2J | g dksFJ d S )Nr   r7   F)a_1 b_1 a_2 b_2  c r   z0.0 foo 3.0 sez   5rN   r   rt  rD   rE   rk   rl   rT   r!   r!   r"   r2    s    
zTestHStack.test_stack_rowsc                 C   s   |  | t| j| jd g}t|d t| jd u s>J t|d t| jd u s\J t|d t| jd u szJ | g dksJ d S )Nr9   r:   r6   )r.   r  z0.0 foo   4z1.0 bar   5)rN   r   rt  rD   rE   rj   rl   rT   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s4J d S rO   )rN   r   rt  rD   rE   r'  rG   rI   rT   r!   r!   r"   rV     s    
z TestHStack.test_table_meta_mergec                 C   s  |  | ttj&}tj| j| jgdd}W d    n1 sB0    Y  t	|dks\J |j
| jj
ksnJ ttj(}tj| j| jgddd}W d    n1 s0    Y  t	|dksJ |j
| jj
ksJ tj| j| jgddd}|j
| jj
ksJ tt( tj| j| jgddd}W d    n1 s80    Y  tt( tj| j| jgddd}W d    n1 s|0    Y  d S r5  )rN   r\   r]   r   r^   r   rt  rD   r(  r_   rG   r`   r   ra   rb   r!   r!   r"   rd     s    
468z)TestHStack.test_table_meta_merge_conflictc                 C   s   |  | tt tg  W d    n1 s40    Y  tt td W d    n1 sh0    Y  tt  t| jdg W d    n1 s0    Y  tt& tj| j| jgdd W d    n1 s0    Y  d S r6  )	rN   r\   r`   ra   r   rt  r*  rE   rD   r  r!   r!   r"   r7    s    
((.zTestHStack.test_bad_input_typec                 C   s  |  | | j}| j}| j}| j}tj||gdd}|jdu sBJ t||u sRJ t|d t|d u snJ t|d t|d u sJ t|d t|d u sJ t|d	 t|d u sJ |	 g d
ksJ tj||gdd}|	 |	 ksJ tj||gdd}|	 |	 ks$J tj||||gdd}|jdu sJJ |	 g dks`J tj||||gdd}|jdu sJ |	 g dksJ d S )NrP   rQ   FZa_1r:   r   r6   Za_2r   )rx  r   z0.0 foo 2.0 pez   4z1.0 bar 3.0 sez   5rw   )#a_1 b_1 a_2 b_2  c   d   e   f   g #--- --- --- --- --- --- --- --- ---#0.0 foo 2.0 pez   4 4.0   7 0.0 foo#1.0 bar 3.0 sez   5 5.0   8 1.0 barz# --  --  --  --  -- 6.0   9  --  --)r{  r|  r}  r~  )
rN   rD   rE   rF   r'  r   rt  rk   rj   rl   )rJ   rU   rD   rE   rF   r'  r+   Zout_listr!   r!   r"   test_stack_basic  s.    
zTestHStack.test_stack_basicc                 C   sN   |  | tt& tj| j| jgdd W d    n1 s@0    Y  d S )NrB  rQ   )rN   r\   r`   r	   r   rt  rD   rF   r  r!   r!   r"   rE    s    
z"TestHStack.test_stack_incompatiblec                 C   sl   |t u rt  | | | j}||ddd}|j  d|d jd< t	||g}|
 g dkshJ d S )NTr"  r6   r7   )ru  rf   rv  z1.0 bar 1.0  --)r   r\   rz   rN   rD   rG   r0  r$   r   rt  rl   )rJ   rU   rD   rE   r+   r!   r!   r"   test_hstack_one_masked  s    

z!TestHStack.test_hstack_one_maskedc                 C   sJ   |  | tj| j| jgdddd}|jdu s2J | g dksFJ d S )NrP   z{table_name}_{col_name})rq   ru   )rR   r   r   F)z!left_a left_b right_a right_b  c z!------ ------ ------- ------- ---z!   0.0    foo     2.0     pez   4z!   1.0    bar     3.0     sez   5ry  rT   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sLJ qLqDq:d |d jj	d< |d jj	d ddgksJ d S )Nr8   r6   r7   r9   r:   r;   r   r   r   rr  r<   r=   r>   r?   rs  r   r   r#  r   r   Zt3_crB  rQ   )rG   r   r3   r   )rN   rD   rF   r'  r   r   r   r   r3   rG   rH   r   rt  r   getattr)
rJ   rU   rD   rF   r'  r   r+   rU  r}   attrr!   r!   r"   r   2  s,    

,,,

2zTestHStack.test_col_meta_mergec                 C   sD   |  | | jt| jk s$J | jt| jgk s@J d S r   )rN   rD   r   rt  r)   r  r!   r!   r"   test_hstack_one_tableP  s    
z TestHStack.test_hstack_one_tablec           
      C   st  |d }|dd }t |g}t |g}t|j}t j||gdd}t|d t|d u sdJ t|t|ksxJ |dkrt|d |d t| sJ t|d |sJ nd	|v sd
|v rtt	|d |d t| sJ tt	|d |s@J n<t|d |d t| ks(J t|d |ks@J t
|tttfrt j||gdd}t|t|kszJ t|d |ksJ t|d d t| |ksJ t|d g dsJ t j||d gdd}t|d |d ks J t|d |d kspJ nRtt"}	t j||gdd W d    n1 sR0    Y  dt|	jv spJ d S )Nr   r8   r>   rP   rQ   Zcol0_1Zcol0_2r   r   r   rw   )FFTTrX  hstack requires masking)r   r   rj   r   rt  r_   r   r&   r)   r   r   r   r   r   r,   r\   r`   r   r   r   )
rJ   r   Zcol1Zcol2rD   rE   r   r+   rV  r   r!   r!   r"   r   V  s8    
$$$2z#TestHStack.test_mixin_functionalityN)r   r   r   r   rN   r-  rw  r2  rz  rV   rd   r7  r  rE  r  r  r   r  r   r!   r!   r!   r"   rq  {  s   )rq  c                 C   sH  | j g ddd}| t|d d }t|}t| | sHJ | }|d= t|}t| g dsvJ d}t||}t| g dsJ tj||d	d
}t| g dsJ tj||dd
}t| g dsJ ddg}	t||	}
t|
 g dsJ tj||	d	d
}t| g ds<J tj||	dd
}t| g dsdJ ddg}	t	t
}t||	}
W d    n1 s0    Y  |jjd dksJ t	t
 }tj||	dd
 W d    n1 s0    Y  |jjd dksJ | |dd}d|d jd< t	t
}t|}W d    n1 sR0    Y  |jjd dksrJ tj|dd}|jdu sJ | g dksJ t	t
  tj|ddd}W d    n1 s0    Y  | |dd}d|d jd< d|d jd< tj|g ddd }|jdu s.J | g d!ksDJ d S )"N)
z
 a b  c  dz
 2 b 7.0 0
 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  r1   r2   )r6   r9   r<   )z a z---z  0z  1z  2r:   )re   rf     0   a 0.0   4  1   c 3.0   5  2   b 7.0   0Zlast)Zkeep)re   rf   r  r    2   b 5.0   1Znone)re   rf   r  r6   )re   rf   r  z  1   a 1.0   7r    2   a 4.0   3r  )re   rf   r  z  1   a 2.0   6r  r  r  )re   rf   r  r  r   zduplicate key namesTz/'keep' should be one of 'first', 'last', 'none'r   r7   z]cannot use columns with masked values as keys; remove column 'a' from keys and rerun unique())rY   F)re   rf   r  r   --   c 3.0   5)rY   ry   r<   r=   )r<   r:   r6   )ry   rY   )re   rf   z  2   a 4.0  --r  r  )rC   r&   sortr   uniquer#   rl   r5   r\   r`   ra   r   argsr$   rk   )rU   rU  ZtuZt_allZt_sZkey1Zt1aZt1bZt1cZkey2Zt2aZt2bZt2cexcZt1_mZt1_mur!   r!   r"   test_unique  sh    


,0

*

0r  c                 C   sX   | dggdgd}|d j dks$J t||g}t|dksBJ |d j dksTJ dS )z
    Test for issue #5617 when vstack'ing bytes columns in Py3.
    This is really an upstream numpy issue numpy/numpy/#8403.
       ar:   r   r7   r8   N)itemsizer   r+  r_   )rU   rU  rE   r!   r!   r"   test_vstack_bytes  s
    r  c                  C   sZ   t jdggdgd} | d jdks&J t | | g}t|dksDJ |d jdksVJ 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.
    r:   r   r>   r8   N)r   r   r  r+  r_   )rU  rE   r!   r!   r"   test_vstack_unicode  s
    r  c            	      C   s*  t g ddd} g dtj }g d}t ddgdd}ddgtj }dd	g}t| ||gg d
d}t|||gg d
d}tj||dddgd}t|d t g dddksJ t|d g dtj ksJ t|d tjj	g dg ddksJ t|d tjj	g dg ddks&J dS )z<
    Test for table join using non-ndarray key columns.
    )r8   r7   r8   r]  r2   )r8   r7   r7   r   r8   r=   rW  r   )tmqr   r   rw   r  r  rx   )r7   r8   r8   r=   )r7   r7   r8   r=   Zidx_1)r8   r=   r7   r   )r   r   r   r7   )r$   Zidx_2)r   r   rW  r   )r7   r7   r   r   N)
r   r   r   r   r   rS   r&   r)   Zmar'   )	Ztm1Zq1idx1Ztm2Zq2idx2rD   rE   rn   r!   r!   r"   test_join_mixins_time_quantity  s    " *r  c                  C   s   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 d   n1 sz0    Y  dS )zR
    Test for table join using non-ndarray key columns that are not sortable.
    r7   r8   r=   r>   zdeg,degr   r   r  r   rW  r   r  z(one or more key columns are not sortabler   r   N)r   r   r\   r`   r*  r   rS   )r   rD   rE   r!   r!   r"   test_join_mixins_not_sortable+  s
    r  c                  C   sv   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 d    n1 sh0    Y  d S )Nr7   r8   r=   r>   r:   r6   r   zkey column 'a' must be 1-dr   r   )r   r5   r\   r`   ra   r   rS   )r   r   rD   rE   r!   r!   r"   test_join_non_1d_key_column7  s    r  c                  C   s@   t g d} t| gdgd}|d}t||  ks<J dS )zRegression test for #10823.z
2016-01-01z
2018-01-01z
2017-01-01timer   N)r   r   Zargsortr&   r)   )timesrU  ir!   r!   r"   test_argsort_time_column@  s    
r  c                  C   s  t g dg dgdd} | d | d t| d g dksFJ t| d g dks`J | d t| d g d	ksJ t| d g d
ksJ g d}t|}t |g d
gddgd}|d t|d g dksJ |d t|d g dksJ t|d |g d ks0J ddlm} ||d}g d
|d< |d t|d g dksxJ |d t|d g dksJ t|d |g d ksJ dS )zFTest fix for #9473 and #6545 - and another regression test for #10823.)r7   r=   r8   )r   r>   r   rB   r   r:   r   r6   )r   r   r>   r   )r=   r8   r7   r  r  Zflux)r=   r7   r8   )r   r8   r7   r   )
TimeSeries)r  N)r   Z	add_indexr  r&   r)   r   Zastropy.timeseriesr  )rU  r  r  rE   r  Ztsr!   r!   r"   test_sort_indexed_tableH  s0    




 


r  c                  C   s   t ddg} t ddg}ddgtj }t| |g|ju s@J t|| g|ju sVJ t| | g| ju slJ t| g| ju sJ tt	 t| |g W d    n1 s0    Y  tt	 t|| g W d    n1 s0    Y  d S )Nr7   r8   )
r   r
   r   r   r   r   r   r\   r`   ra   )r9   mcr  r!   r!   r"   test_get_out_classh  s    *r  c                  C   s:  t g d} t jg d| 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 d   n1 s|0    Y  dt|jv sJ tt"}t j	||gd
d W d   n1 s0    Y  dt|jv sJ tt }t j
||d
d W d   n1 s0    Y  dt|jv s6J dS )zm
    Test that outer join, hstack and vstack fail for a mixin column which
    does not support masking.
    r   rA   r:   r6   r   r7   r8   Nr9   rw   rQ   rT  r  r   )r   r   r   r\   r`   r   r+  r   r   rt  rS   )r*   rD   rE   r   r!   r!   r"   test_masking_required_exceptiony  s    "000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	u s~J |j
du sJ t || g}|jt j	u sJ |j
du sJ t ||g}|jt j	u sJ |j
du sJ t | |g}|jt ju sJ |j
du sJ t ||g}|jt j	u s4J t | | g}|jt ju sTJ t | |g}|jt ju stJ t | |g}|jt ju sJ t |||g}|jt j	u sJ tt t | |g W d    n1 s0    Y  tt t ||g}W d    n1 s 0    Y  d S )Nr7   r8   z2001-01-02T12:34:56z2001-02-03T00:01:02r=   r>   r   r         F)r   r
   r   r   r   r   r   rt  r   r   rk   r   r+  r\   r`   ra   )r9   r  r  r  r   ZcqrU  r!   r!   r"   rz    s@    .rz  c                  C   s   t  } g d| d< g dtj | d< g dtj | d< t  }g d|d< g dtj |d< g dtj |d< tj| |dd	d
}t|dksJ d S )N)r7   r8   r=   r>   r   r   )r8   r=   r8   r7   r7   flux1flux2)r=   r>   r   r   )r8   r7   r7   r=   )r   r  r  rw   r   r   )r   r   ZJyr   rS   r_   )rD   rE   rn   r!   r!   r"   test_mixin_join_regression  s    r  )CZastropy.table.table_helpersr   Zastropy.coordinates.earthr   Zastropy.units.quantityr   collectionsr   
contextlibr   r\   Znumpyr&   Zastropy.tabler   r   r	   r
   r   r   r   r   r   r   Zastropyr   r   Zastropy.utilsr   Zastropy.utils.metadatar   r   Zastropy.timer   r   Zastropy.coordinatesr   r   r   r   r   r   Z-astropy.coordinates.tests.test_representationr   Z!astropy.io.misc.asdf.tags.helpersr   Z"astropy.utils.compat.optional_depsr   r#   r,   r-   r  r  r\  rq  r  r  r  r  r  r  r  r  r  r  rz  r  r!   r!   r!   r"   <module>   s^          lL      r 	 +