
    IR-eD                       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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 Z.d Z/ G d d          Z0 G d d          Z1 G d d          Z2 G d d          Z3 G d d          Z4d Z5d Z6d Z7d  Z8d! Z9d" Z:d# Z;d$ Z<d% Z=d& Z>d' Z?d( Z@dS ))    )OrderedDict)nullcontextN)table)units) BaseRepresentationOrDifferentialCartesianRepresentationSkyCoordStokesCoord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                 B    t          |           t          |          k    S N)sorted)list1list2s     Clib/python3.11/site-packages/astropy/table/tests/test_operations.pysort_eqr%       s    %==F5MM))    c                     t          | d          rOt          j        |                              | j        j                  }t          j        | j        |k              }nt          j        |dk              }|S )zCheck that col.mask == exp_maskmaskF)hasattrnparrayastyper(   dtypeall)colexp_maskouts      r$   
check_maskr2   $   sj    sF 
( 8H%%,,SX^<<fSX)**
 fX&''Jr&   c                      e Zd ZefdZd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                            e d          d             Zej                            e d          ej                            ddeg          d                         Z ej                            e d          d             Z!ej                            e d          d             Z"ej                            e d          d             Z#ej                            e d          d             Z$d  Z%d! Z&d" Z'd#S )$TestJoinc                 :   g d}g d}|                     |d          | _        |                     |d          | _         || j        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dr?         rB   r?   r>   rE   )rD   r@   r?   r@   rE   rF   rB   r>   )readt1t2t3metaupdater   
meta_merge)selft_clslines1lines2s       r$   _setupzTestJoin._setup5   sG   
 
 

 
 
 **VG*44**VG*44%d+++K#1vsAh(RSSTTTK#1vsAh(RSSTTTKC!Q=(H(UVVWWW%lll#AA&&'	
 
r&   c                     |                      |           t          j        | j        | j        d          }|j        | j        k    sJ d S Ninner	join_type)rV   r   joinrL   rM   rO   rQ   rR   operation_table_typer1   s      r$   test_table_meta_mergezTestJoin.test_table_meta_mergeU   sJ    ()))j$'W===x4?******r&   c                    |                      |           t          j        t          j                  5 }t          j        | j        | j        d          }d d d            n# 1 swxY w Y   t          |          dk    sJ |j
        | j        j
        k    sJ t          j        t          j                  5 }t          j        | j        | j        dd          }d d d            n# 1 swxY w Y   t          |          dk    sJ |j
        | j        j
        k    sJ t          j        | j        | j        dd          }|j
        | j        j
        k    sJ t          j        t                    5  t          j        | j        | j        dd          }d d d            n# 1 swxY w Y   t          j        t                    5  t          j        | j        | j        dd          }d d d            d S # 1 swxY w Y   d S )	NrY   rZ   rE   warnr[   metadata_conflictssilenterrornonsense)rV   pytestwarnsr   MergeConflictWarningr   r\   rL   rN   lenrO   raisesr   
ValueErrorrR   r^   wr1   s       r$   test_table_meta_merge_conflictz'TestJoin.test_table_meta_merge_conflictZ   s   ()))\(788 	BA*TWdgAAAC	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B1vv{{{{x47<''''\(788 	A*G  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1vv{{{{x47<''''jGTWH
 
 
 x47<'''']-.. 	 	*G  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]:&& 	 	*G
  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sG   "A""A&)A&7#C&&C*-C*/#FF"%F"#G22G69G6c                    |                      |           | j        }| j        }t          j        ||          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |j        du sJ t          |                                g d          sJ |j	        | j
        k    sJ d S )NrB   r>   rA   rD   F) a   b   c   d --- --- --- ---  1 foo  L2  R1  1 foo  L2  R2  2 bar  L4  R3)rV   rL   rM   r   r\   typemaskedr%   pformatrO   rQ   rR   r^   rL   rM   t12s        r$   test_both_unmasked_innerz!TestJoin.test_both_unmasked_inner{   sH   ()))WW jR  Cyy00000CH~~bg....CH~~bg....CH~~bg....CH~~bg....zU""""KKMM  	
 	
 		
 		
 		
 x4?******r&   c                    |t           u rt          j        d           |                     |           | j        }| j        }t          j        ||d          }|j        du sJ |j	        du sJ dD ] }t          ||                   t          u sJ !t          |d                   t          u sJ t          |                                g d          sJ t          j        ||d	          }|j        du sJ |j	        du sJ t          |                                g d
          sJ t          j        ||d          }|j        du sJ |j	        du sJ t          |                                g d          sJ t          j        ||d          }t          j        ||dddg          }t          j        |                                |                                k              sJ d S )N(Quantity columns do not support masking.leftrZ   TFrB   r>   rA   rD   )rq   rr     0 foo  L1  --  1 bar  L3  --rs   rt   ru   right)rq   rr   rs   rt   ru     4 bar  --  R4outer)rq   rr   r   r   rs   rt   ru   r   rB   r>   r[   keys)r   rg   xfailrV   rL   rM   r   r\   has_masked_columnsrw   rv   r   r   r%   rx   r*   r.   as_array)rR   r^   rL   rM   rz   namet12at12bs           r$   #test_both_unmasked_left_right_outerz,TestJoin.test_both_unmasked_left_right_outer   sK   6))LCDDD()))WW jR6222%----zU""""# 	- 	-DD	??f,,,,,CH~~----KKMM  
 
 	
 	
 	
 jR7333%----zU""""KKMM  

 

 
	
 
	
 
	
 jR7333%----zU""""KKMM	 	 	
 
 	
 	
 	
 z"bG444z"bG3*EEEvdmmoo89999999r&   c                    |                      |           | j        }| j        }t          j        ||d          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |j        du sJ t          |                                g d	          sJ d S )
NrB   r   b_1r>   rA   b_2rD   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)	rV   rL   rM   r   r\   rv   rw   r%   rx   ry   s        r$   #test_both_unmasked_single_key_innerz,TestJoin.test_both_unmasked_single_key_inner   sc   ()))WW jRc***Cyy00000CH~~bg....CJ43==0000CH~~bg....CJ43==0000CH~~bg....zU""""KKMM  
 
 	
 	
 	
 	
 	
r&   c                 <   |t           u rt          j        d           |                     |           | j        }| j        }t          j        ||dd          }|j        du sJ t          |
                                g d          sJ t          j        ||dd          }|j        du sJ t          |
                                g d          sJ t          j        ||d	d          }|j        du sJ t          |
                                g d
          sJ d S )Nr}   r~   rB   r   T)r   r     0 foo  L1  --  --r   r   r   r   r   r   )r   r   r   r   r   r   r     4  --  -- bar  R4r   )	r   r   r   r   r   r   r   r   r   )r   rg   r   rV   rL   rM   r   r\   r   r%   rx   ry   s        r$   .test_both_unmasked_single_key_left_right_outerz7TestJoin.test_both_unmasked_single_key_left_right_outer   su   6))LCDDD()))WW jR6<<<%----KKMM	 	 	
 
 	
 	
 	
 jR7===%----KKMM	 	 	
 
 	
 	
 	
 jR7===%----KKMM
 
 

 
 	
 	
 	
 	
 	
r&   c                    |t           u rt          j        d           |                     |           | j        } || j        d          }| j        }t          j        ||d          }|j        du sJ t          j        ||          }t          j
        |                                t          j        |          k              sJ d|d         j        d<   d|d	         j        d
<   t          j        ||dd          }t          |                                g d          sJ t          j        ||dd          }t          |                                g d          sJ d S )Nr}   Trw   rY   rZ   Fr>   r?   rA   r@   rB   r   )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   rg   r   rV   rL   rM   r   r\   rw   r*   r.   r   r+   r(   r%   rx   )rR   r^   rL   t1mrM   t1m2rz   t21ms           r$   test_masked_unmaskedzTestJoin.test_masked_unmasked-  s   6))LCDDD()))W""474888W z#rW555{e#### jR  vcllnn677777  CaCaz#rW3???LLNN  
 
 	
 	
 	
 z"cW3???LLNN  
 
 	
 	
 	
 	
 	
r&   c                    |                      |           	 |t          u rt          j        d           | j        } || j        d          }| j        } || j        d          }t          j        ||d          }|j        du sJ |	                                D ]}t          |          t          u sJ t          j        ||          }t          j        |                                t          j        |          k              sJ d|d         j        d<   d|d	         j        d
<   d|d         j        d
<   t          j        ||dd          }t#          |                                g d          sJ d S )Nr}   Tr   rY   rZ   Fr>   r?   rA   r@   rD   rB   r   )r   r   r   r   r   r   z  2 bar  L4 bar  --)rV   r   rg   r   rL   rM   r   r\   rw   itercolsrv   r   r*   r.   r   r+   r(   r%   rx   )	rR   r^   rL   r   rM   t2mt1m2mr/   rz   s	            r$   test_masked_maskedzTestJoin.test_masked_masked\  s   ()))6))LCDDDW""474888W""474888 
3w777|u$$$$>>## 	- 	-C99,,,,, jR  vcllnn788888  CaCaCa
3wSAAAMMOO  
 
 	
 	
 	
 	
 	
r&   c                 r    G d dt                     } G 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|fd|fd
|fd|fd|ffD ]\  }}t          ||         |u           sJ t          j        ||d          }d|fdt          fd
|fd|fd|ffD ]\  }}t          ||         |u           sJ dS )z:Ensure that classes and subclasses get through as expectedc                       e Zd ZdS )$TestJoin.test_classes.<locals>.MyColN__name__
__module____qualname__ r&   r$   MyColr             Dr&   r   c                       e Zd ZdS )*TestJoin.test_classes.<locals>.MyMaskedColNr   r   r&   r$   MyMaskedColr     r   r&   r   r?   rB   r@   r>   rE   rA   rF   rD         erY   rZ   r~   N)r   r   r   r   r\   rv   )	rR   r   r   rL   rM   rz   r   exp_typet21s	            r$   test_classeszTestJoin.test_classes  s   	 	 	 	 	F 	 	 		 	 	 	 	, 	 	 	 WW%**3%**3+qc""3WW!Q..3%A--3+q!f%%3jR7333%L%L+%L+
 	/ 	/ND( D	X-......jR6222 %L,+%L+
 	/ 	/ND( D	X-......	/ 	/r&   c                     |                      |           	 | j        }| j        }t          j        ||dddgd          }|j        g dk    sJ d S )Nzx_{table_name}_{col_name}_yLRrB   )uniq_col_nametable_namesr   )rB   x_L_b_yrA   x_R_b_yrD   )rV   rL   rM   r   r\   colnamesry   s        r$   test_col_renamezTestJoin.test_col_rename  su    ()))	 WWj7c

 
 
 |DDDDDDDDDr&   c                     |                      |           	 | j        }| j        }d|d<   t          j        t
                    5  t          j        ||d           d d d            d S # 1 swxY w Y   d S )Nr?   r   rB   r   rV   rL   rM   rg   rk   r   r   r\   rR   r^   rL   rM   s       r$   test_rename_conflictzTestJoin.test_rename_conflict  s    ()))	 WW5	]?++ 	) 	)Jr2C((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   A((A,/A,c                     |                      |           	 | j        }| j        }t          j        t
                    5  t          j        ||ddg           d d d            d S # 1 swxY w Y   d S )NrB   z	not therer   r   r   s       r$   test_missing_keyszTestJoin.test_missing_keys  s    ()))6WW]?++ 	8 	8Jr2S+$67777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   A%%A),A)c                     |                      |           	 | j        }| j        }t          j        t
                    5  t          j        ||d           d d d            d S # 1 swxY w Y   d S )Nzillegal valuerZ   rV   rL   rM   rg   rk   rl   r   r\   r   s       r$   test_bad_join_typezTestJoin.test_bad_join_type  s    ()))!WW]:&& 	: 	:Jr29999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A##A'*A'c                     |                      |           	 | j        }| j        }|d= |d= |d= |d= t          j        t
                    5  t          j        ||           d d d            d S # 1 swxY w Y   d S NrB   r>   r   r   s       r$   test_no_common_keyszTestJoin.test_no_common_keys  s    ())).WWsGsGsGsG]?++ 	 	Jr2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   
A--A14A1c                 v   |                      |           	 |t          u rt          j        d           | j        } || j        d          }t          j        ||           d|d         j        d<   t          j	        t                    5  t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr}   Tr   rB   r   )rV   r   rg   r   rL   rM   r   r\   r(   rk   r   r   s       r$   test_masked_key_columnzTestJoin.test_masked_key_column  s    ()))=6))LCDDDW!!$'$777
2r3Q]?++ 	 	Jr2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   B..B25B2c                    |                      |           | 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 r!t          j        t          j        d          }nt                      }|5  t!          j        ||ddg          }d d d            n# 1 swxY w Y   |d         j        dk    sJ |d         j        j        dk    sJ |d         j        j        dk    sJ |d         j        j	        | j        k    sJ |d         j        j	        |k    sJ |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    sJ d S )NrD   rA   r>   r?   r@   rB   rC   rE   rF   rG   cmmt1_b%6sz%3st1_ct2_czDIn merged column 'a' the 'unit' attribute does not match \(cm != m\)matchr   c_1c_2)rV   rL   rM   rename_columnr   unitinfodescriptionr;   rO   r   rg   rh   r   ri   r   r   r\   rQ   )rR   r^   rL   rM   meta1meta2ctxrz   s           r$   test_col_meta_mergezTestJoin.test_col_meta_merge  s   ()))WW
c"""cAq6]S3(OXFGGcAq6]S3(OXFGG 33#)3 #3!3!3!3 $3#)3 #3#)3 5((,-  CC --C 	6 	6*R3*555C	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 3x}####3x}(F22223x}#u,,,,3x}!T_44443x}!U****5z%....5z*f44445z%....5z*f444444s   $F

FFc                    |                      |            |            }g d|d<   t          j        d          |d<    |            }g d|d<   g d|d<   t          j        ||          }t          j                            |d         |d                    t          j                            |d         |d                    t          j                            |d         |d                    d S )Nr?   r@   rE   rB   )rE   rF   r>   rF   r   r   rA   )rV   r*   onesr   r\   testingassert_allclose)rR   r^   rL   rM   rN   s        r$   test_join_multidimensionalz#TestJoin.test_join_multidimensional$  s    ()))
 "!##))3'&//3!!##))3))3ZB

""2c7BsG444

""2c7BsG444

""2c7BsG44444r&   c                 6   |                      |           	 |t          u rt          j        d           t	          j        g dd          }t	          j        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          }t	          j        ddgddgddggd          } |||g          } |||g          }t	          j        ||d          }t          j	        |d         j
        ddgddggk              sJ t          |d         d          rJ t	          j        ||d          }t          j	        |d         j
        ddgddgddgddggk              sJ t          j	        |d         j
        ddgddgddgddggk              sJ d S )Nr}   r   rB   )r   )r?   rE   rF   r?   r@   rE   rF   r   r   r>   r   )r   r(   rA   rY   rZ   TFr(   r   )rV   r   rg   r   r   r   r   r\   r*   r.   r(   r)   )	rR   r^   rB   a2r>   rA   rL   rM   rz   s	            r$   !test_join_multidimensional_maskedz*TestJoin.test_join_multidimensional_masked8  sG   ()))	  6))LCDDDyyys333\)))#...AAA
 AAA
 
 
 LAAA
 
 
 
 "!1a&))!!2q'**jR7333vHMu
 
 	
 	
 	
 3s8V,,,,,jR7333vHMut	
 
 	
 	
 	
 vHMt	
 
 	
 	
 	
 	
 	
r&   c                 	   |d         }t          |          j        }t          |          }t          j        |          }t          j        ||gddg          }t          j        ||gddg          }|g d         }|g d         }t          j        ||d	          }t          |          d
k    sJ |d         j        |j        u sJ t          j	        |d         ddgk              sJ |dk    rAt          |d         |ddg                   sJ t          |d         |ddg                   sJ nd|v sd|v ret          j	        t          |d         |ddg                             sJ t          j	        t          |d         |ddg                             sJ nPt          j	        |d         |ddg         k              sJ t          j	        |d         |ddg         k              sJ t          |t          t          t          f          rXt          j        ||d	          }t          |          dk    sJ t          j	        |d         g dk              sJ t          j	        |d         |d         k              sJ t          j	        |d         |d         k              sJ t!          |d         g d           t!          |d         g d           t          j        ||d	          }t          |          dk    sJ t          j	        |d         g dk              sJ t          j	        |d         |d         k              sJ t          j	        |d         |d         k              sJ t!          |d         g d           t!          |d         g d           t          j        ||d	          }t          |          dk    sJ t          j	        |d         g dk              sJ t          j	        |d         |k              sJ t          j	        |d         |k              sJ t!          |d         g d          sJ t!          |d         g d          sJ d S dD ]x}	t#          j        t&                    5 }
t          j        |||		           d d d            n# 1 swxY w Y   dt)          |
j                  v sdt)          |
j                  v sJ yd S )Nr   idxm1namesm2)r   r?   rE   )r   r@   rE   rY   rZ   r@   r   rE   r	   ReprDiffr~   )FFF)FTFr   r   rF   r   r?   r@   rE   )FFTF)FTFF)r   r~   r   join requires maskingzjoin unavailable)rv   r   rj   r*   aranger   r   r\   	__class__r.   r   r   
isinstancer   r   r   r2   rg   rk   NotImplementedErrorstrvalue)rR   
mixin_colsr/   cls_namelen_colr   rL   rM   r1   r[   errs              r$   test_mixin_functionalityz!TestJoin.test_mixin_functionalityy  sI   o99%c((i  \3*UDM:::\3*UDM:::			]			] jR73333xx1}}}}4y"cm3333vc%jQF*+++++z!!!#d)S!Q[99999!#d)S!Q[999999x6X#5#56.s4y#q!f+FFGGGGG6.s4y#q!f+FFGGGGGG6#d)sAq6{2333336#d)sAq6{233333 cHdI677 	:*Rv666Cs88q====6#e*			1222226#d)r$x/000006#d)r$x/00000s4y"7"7"7888s4y"6"6"6777*Rw777Cs88q====6#e*			1222226#d)r$x/000006#d)r$x/00000s4y"6"6"6777s4y"7"7"7888*Rw777Cs88q====6#e*4555556#d)s*+++++6#d)s*+++++c$i)D)D)DEEEEEc$i)D)D)DEEEEEEE 8 : :	]#677 <3Jr2;;;;< < < < < < < < < < < < < < <.#I3 3  '3sy>>9999: :s   R,,R0	3R0	c                    t          ddgddg          }t          ddgddg          }t          j        ||d	
          }|j        ddgk    sJ |j        ddgk    sJ t	          |          t	          |          t	          |          z  k    sJ t          |                                          g dk    sJ t          j        t          d          5  t          j        ||d	d          }d d d            d S # 1 swxY w Y   d S )N)r?   rB   )r@   r>   rB   r>   )rowsr   )rE   rA   )rF   rD   rA   	cartesianrZ   )za_1  b  a_2  c rr   z  1   a   3   cz  1   a   4   dz  2   b   3   cz  2   b   4   dz'cannot supply keys for a cartesian joinr   r   )
r   r   r\   r   rj   r  
splitlinesrg   rk   rl   ry   s        r$   test_cartesian_joinzTestJoin.test_cartesian_join  s   8,S#J???8,S#J???jR;777{sCj(((({sCj((((3xx3r77SWW,,,,,3xx""$$ )
 )
 )
 
 
 
 
 ]:-VWWW 	F 	F*R{EEEC	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   C<<D D zrequires scipy)reasonc           	      f   t          g dg dd          }t          g dg dd          }t          |gdg          }t          |gdg          }t          j        ||dt	          d	t
          j        z            i
          }g d}t          |                                          |k    sJ d S )Nr   r?   皙?r@   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   r\   r   ur  r  r  )rR   sc1sc2rL   rM   rz   exps          r$    test_join_with_join_skycoord_skyz)TestJoin.test_join_with_join_skycoord_sky  s    ~~~|||%@@@'''???C5'''C5'''jRT=qu3M3M,NOOO
 
 
 3xx""$$++++++r&   distance_funcr   c                 2   t          g dt          j        z  g dt          j        z  g dt          j        z            }t          g dt          j        z  g dt          j        z  g dt          j        z            }t	          |gdg          }t	          |gdg          }t          t          j        d	          t          j        z  |
          }t          j	        ||d|i          }g d}t          |                                          |k    sJ d S )Nr  r  )r?   r?   r@   r?   r  r  )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*   deg2radr   r\   r  r  )	rR   r   r  r  rL   rM   	join_funcrz   r  s	            r$   test_join_with_join_skycoord_3dz(TestJoin.test_join_with_join_skycoord_3d  s    ~~~-|||ae/C\\\TUTWEWXX'''!%/QU1BIIIPQPSOTTC5'''C5'''!"*S//AC"7}UUU	jRT9,=>>>
 
 
 3xx""$$++++++r&   c                    g d}g d}t          |gdg          }t          |gdg          }t          dddidd	i
          }t          j        ||dd|i          }g d}t	          |                                          |k    sJ d S )Nr  r  r/   r   r  leafsize    pr@   kdtree_args
query_argsr   r[   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   r\   r  r  rR   c1c2rL   rM   r#  rz   r  s           r$   test_join_with_join_distance_1dz(TestJoin.test_join_with_join_distance_1d  s    ^^B4w'''B4w'''!j"-3(
 
 
	 jR7y?QRRR
 
 
 3xx""$$++++++r&   c                 z   ddl m} g d}g d}g d}g d}g d}g d}t          |||gg d	
          }t          |||gg d
          }	t          d          }
d|
i}t	          j        ||	d|          }g d}t          |                                          |k    sJ  |||	d|          \  }}}|dk    sJ d S )Nr   )_apply_join_funcs)r   r?   r  g333333?r@   )r   r?   r@   r@   rE   )rB   r>   rA   rD   r   r  )r   r@   rF   )zyx)r/   ido1r   )r/   r6  o2r  r/   r   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/   r6  )col_idr6  )astropy.table.operationsr2  r   r   r   r\   r  r  )rR   r2  r.  id1r7  r/  id2r8  rL   rM   r#  r  rz   r  r~   r   r   s                    r$   (test_join_with_join_distance_1d_multikeyz1TestJoin.test_join_with_join_distance_1d_multikey  s(   >>>>>>   oo&&&ii__BR=(;(;(;<<<BR=(;(;(;<<<!#&&	Y'
jR7zJJJ

 

 

 3xx""$$++++--b"mZPPeT'''''''r&   c                    g dt           j        z  }g dt           j        z  }t          |gdg          }t          |gdg          }t	          dt           j        z            }t          j        ||d|i          }g d}t          |          	                                |k    sJ g d|d	<   g d|d
<   t          j        ||d|i          }g d}t          |          	                                |k    sJ 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  r9  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   mmr   r   r   r   r\   r  r  r-  s           r$   (test_join_with_join_distance_1d_quantityz1TestJoin.test_join_with_join_distance_1d_quantity"  s'   ^^ac!%RD(((RD(((!"qt),,	jRUI,>???
 
 
 3xx""$$++++ !yy8!		9jRUI,>???
 
 
 3xx""$$++++++r&   c                    t          j        g dg dg                                          }t          j        g dg dg                                          }t          |gdg          }t          |gdg          }t	          ddd	id
di          }t          j        ||dd|i          }d|d         j        j         dddddddg}|	                    d          |k    sJ d S )Nr  )r   r   r?   r   r  r  r/   r   r  r&  r'  r(  r@   r)  r   r,  zcol_id   col_1       col_2   r9  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)
show_dtype)
r*   r+   	transposer   r   r   r\   r-   r   rx   r-  s           r$   test_join_with_join_distance_2dz(TestJoin.test_join_with_join_distance_2dB  s   X~~~|||455??AAX'''344>>@@B4w'''B4w'''!j"-3(
 
 
	 jR7y?QRRR+8}"'AAA++++++	
 {{d{++s222222r&   c           	         |                                   dD ]}| j                                        }| j                                        }t	          j        ||d|          }|                    |d         dd           |                    |d         dt          |j                  dz              |d= |	                    dd           |	                    dd           dg}dgg}|dk    rJ|
                    |d                                         g           |
                    |d         g           t          ||          D ]\  }}t	          j        |||||	          }	|	j        |j        k    sJ |	                    |                                          D ]}
t          j        |
          sJ |j        |	j        k    sJ 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'.)rY   r~   r   r   rB   r   r[   r5  r?   )r   indexr4  r   )	keys_left
keys_rightr[   N)rV   rL   r=   rM   r   r\   
add_columnrj   r   r   appendtolistzipvalues_equalr   r*   r.   rO   )rR   r[   rL   rM   t12_expkeys_left_listkeys_right_listrJ  rK  rz   r/   s              r$   test_keys_left_right_basicz#TestJoin.test_keys_left_right_basicX  s   
 	< 	0 	0IBBjRcYGGGGws|#Q???ws|#S=M=MPQ=QRRR S#&&&S#&&&!UN #ugOG##%%r#w~~'7'7&8999&&3y111),^_)M)M 0 0%	:j')'   |w'77777++G44==?? ' 'C6#;;&&&&|sx/////0'	0 	0r&   c                    |                                   | j        }| j        }d}t          j        t
          |          5  t          j        ||ddg           ddd           n# 1 swxY w Y   d}t          j        t
          |          5  t          j        ||dd	ggdg           ddd           n# 1 swxY w Y   d
}t          j        t
          |          5  t          j        ||ddgd           ddd           n# 1 swxY w Y   d}t          j        t
          |          5  t          j        ||ddgdg           ddd           n# 1 swxY w Y   d}t          j        t
          |          5  t          j        ||ddg           ddd           n# 1 swxY w Y   d}t          j        t
          |          5  t          j        ||dgdgi            ddd           dS # 1 swxY w 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   r3  rB   )rJ  rK  Nz1left table has different length from key \[1, 2\]r?   r@   z>keys arg must be None if keys_left and keys_right are supplied)rJ  rK  r   z3keys_left and keys_right args must have same lengthr>   z.keys_left and keys_right must both be provided)rJ  z7cannot supply join_funcs arg and keys_left / keys_right)rJ  rK  r  r   )rR   rL   rM   msgs       r$   test_keys_left_right_exceptionsz(TestJoin.test_keys_left_right_exceptions  s    	WW8]:S111 	@ 	@Jr2#????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ C]:S111 	E 	EJr21a&seDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E P]:S111 	J 	JJr2#SIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J E]:S111 	G 	GJr2#sFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G @]:S111 	5 	5Jr2#s4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 I]:S111 	Q 	QJr2#C5RPPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qsl    A&&A*-A*B77B;>B;DD
D
.EEE>F$$F(+F(G55G9<G9c                 ,   t          t          j        ddgddg          ddggdd	g
          }t          t          j        ddgddg          ddggdd	g
          }t          j        ||dgd          }|                                g dk    sJ dS )Regression tests for gh-13271.      ?r?          @r@   ff8ii8r-   onetwo
structuredstringr         @rF   threefourr   rZ   )z#structured [f, i] string_1 string_2z#----------------- -------- --------z#          (1., 1)      one       --z#          (2., 2)      two    threez#          (4., 4)       --     fourN)r   r*   r+   r   r\   rx   )rR   rL   rM   rz   s       r$   test_join_structured_columnz$TestJoin.test_join_structured_column  s     (H-k;5OPPP  *
 
 
 (H-k;5OPPP&!  *
 
 
 jR,7CCC{{}} !
 !
 !
 
 
 
 
 
 
r&   N)(r   r   r   r   rV   r_   ro   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  rg   markskipifr   r  parametrizer   r$  r0  r=  rB  rF  rT  rW  rm  r   r&   r$   r4   r4   4   s         
 
 
 
@+ + +
  B+ + +4@: @: @:D
 
 
69
 9
 9
v-
 -
 -
^$
 $
 $
L'/ '/ '/RE E E"
) 
) 
)8 8 8: : :
 
 

 
 
25 25 25h5 5 5(?
 ?
 ?
B<: <: <:|F F F( [I.>??, , @?,  [I.>??[_/ACS.TUU, , VU @?,  [I.>??, , @?,( [I.>??( ( @?(< [I.>??, , @?,> [I.>??3 3 @?3*&0 &0 &0PQ Q Q@
 
 
 
 
r&   r4   c                   <    e Zd ZefdZd Zd Zd Zd Zd Z	d Z
dS )	TestSetdiffc                     g d}g d}g d}|                     |d          | _        |                     |d          | _        |                     |d          | _        d S )N) a   b   0 foo z  1 foo z  1 bar   2 bar )rt  ru  z  3 foo z  4 bar rv  )r7   z  0 foo  R1  8 foo  R2z  1 bar  R3r8   r9   r:   )rK   rL   rM   rN   )rR   rS   rT   rU   lines3s        r$   rV   zTestSetdiff._setup  st    LLLLLL
 
 
 **VG*44**VG*44**VG*44r&   c                 j   |                      |           t          j        | j        | j                  }t          |d                   t          | j        d                   u sJ t          |d                   t          | j        d                   u sJ |                                g dk    sJ d S )NrB   r>   )rt  --- ---z  1 bar  1 foo)rV   r   setdiffrL   rM   rv   rx   r]   s      r$   test_default_same_columnsz%TestSetdiff.test_default_same_columns  s    ()))mDGTW--CH~~dgcl!3!33333CH~~dgcl!3!33333{{}} L L LLLLLLLr&   c                 j   |                      |           t          j        | j        | j                  }t	          |d                   t	          | j        d                   u sJ t	          |d                   t	          | j        d                   u sJ |                                ddgk    sJ d S )NrB   r>   rt  rz  )rV   r   r|  rL   rv   rx   r]   s      r$   test_default_same_tablesz$TestSetdiff.test_default_same_tables  s    ()))mDGTW--CH~~dgcl!3!33333CH~~dgcl!3!33333{{}}!
 
 
 
 
 
 
r&   c                     |                      |           t          j        t                    5  t	          j        | j        | j                   d d d            d S # 1 swxY w Y   d S r    rV   rg   rk   rl   r   r|  rN   rL   rR   r^   s     r$   test_extra_col_left_tablez%TestSetdiff.test_extra_col_left_table  s    ()))]:&& 	, 	,M$'47+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s    AA #A c                 j   |                      |           t          j        | j        | j                  }t          |d                   t          | j        d                   u sJ t          |d                   t          | j        d                   u sJ |                                g dk    sJ d S )NrB   r>   )rt  rz  r{  z  2 bar)rV   r   r|  rL   rN   rv   rx   r]   s      r$   test_extra_col_right_tablez&TestSetdiff.test_extra_col_right_table  s    ()))mDGTW--CH~~dgcl!3!33333CH~~dgcl!3!33333{{}} !
 !
 !
 
 
 
 
 
 
r&   c                 r   |                      |           t          j        | j        | j        ddg          }t          |d                   t          | j        d                   u sJ t          |d                   t          | j        d                   u sJ |                                g dk    sJ d S )NrB   r>   r   )r7   --- --- ---r8   rw  )rV   r   r|  rN   rL   rv   rx   r]   s      r$   	test_keyszTestSetdiff.test_keys  s    ()))mDGTWC:>>>CH~~dgcl!3!33333CH~~dgcl!3!33333{{}} !
 !
 !
 
 
 
 
 
 
r&   c                     |                      |           t          j        t                    5  t	          j        | j        | j        ddg           d d d            d S # 1 swxY w Y   d S )NrB   rD   r   r  r  s     r$   test_missing_keyzTestSetdiff.test_missing_key  s    ()))]:&& 	= 	=M$'47#s<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   $A  A$'A$N)r   r   r   r   rV   r}  r  r  r  r  r  r   r&   r$   rr  rr    s          5 5 5 5M M M	
 	
 	
, , ,
 
 

 
 
= = = = =r&   rr  c                   x    e Zd ZefdZd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )
TestVStackc                    |                     g dd          | _        |                     g dd          | _        |                     g dd          | _         || j        d|t          u           | _         || j        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. barr9   r:    a    b   cz 2.  pez  4z 3.  sez  5) a    b 4.   7 5.   8 6.   9Tr=   rw   r<   r>   r?   r@   rA   rB   rC   rE   rF   rG   r   r   r   r?   rH   )rA   krC   r?   r@   rE   rF   r   r   r   )rK   rL   rM   rN   r   t4t5rO   rP   r   rQ   rR   rS   s     r$   rV   zTestVStack._setup  s   **  
   
 
 **  
   
 
 **     
 
 %d5E>BBB %d+++K#1vsAh(RSSTTTK#1vsAh(RSSTTTK#1vsAh(RSSTTTK(H(H(HIIJJJ%((()AAA../
 
r&   c                     |                                   t          j        t          d          5  t	          j        | j        | j                   d d d            d S # 1 swxY w Y   d S )Nz Did you accidentally call vstackr   )rV   rg   rk   	TypeErrorr   vstackrL   rM   rR   s    r$   test_validate_join_typez"TestVStack.test_validate_join_type3      ]9,NOOO 	+ 	+L$'***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+    AA!$A!c                    |                      |           | j                                        }|j                                         t          j        | j        |d         g          }t          |d                   t          | j        d                   u sJ t          |d                   t          | j        d                   u sJ |                                g dk    sJ d S )Nr?   rB   r>   )rt  rz  0.0 foo1.0 barr  )	rV   rL   r=   rO   clearr   r  rv   rx   rR   r^   rM   r1   s       r$   test_stack_rowszTestVStack.test_stack_rows8  s    ()))W\\^^
lDGRU+,,CH~~dgcl!3!33333CH~~dgcl!3!33333{{}} !
 !
 !
 
 
 
 
 
 
r&   c                 $   |                      |           | j                                        }|j                                         t          j        | j        |d         g          }|j        du sJ |                                g dk    sJ d S )NrB   F)rt  rz  r  r  z0.0  --1.0  --)	rV   rL   r=   rO   r  r   r  rw   rx   r  s       r$   test_stack_table_columnz"TestVStack.test_stack_table_columnG  s    ()))W\\^^
lDGRW-..zU""""{{}} !
 !
 !
 
 
 
 
 
 
r&   c                     |                      |           t          j        | j        | j        | j        gd          }|j        | j        k    sJ d S rX   )rV   r   r  rL   rM   r  rO   rQ   r]   s      r$   r_   z TestVStack.test_table_meta_mergeV  Q    ()))lDGTWdg6'JJJx4?******r&   c                    |                      |           t          j        t          j                  5 }t          j        | j        | j        gd          }d d d            n# 1 swxY w Y   t          |          dk    sJ |j
        | j        j
        k    sJ t          j        t          j                  5 }t          j        | j        | j        gdd          }d d d            n# 1 swxY w Y   t          |          dk    sJ |j
        | j        j
        k    sJ t          j        | j        | j        gdd          }|j
        | j        j
        k    sJ t          j        t                    5  t          j        | j        | j        gdd          }d d d            n# 1 swxY w Y   t          j        t                    5  t          j        | j        | j        gdd          }d d d            d S # 1 swxY w Y   d S 	NrY   rZ   r@   ra   rb   rd   re   rf   )rV   rg   rh   r   ri   r   r  rL   r  rj   rO   rk   r   rl   rm   s       r$   ro   z)TestVStack.test_table_meta_merge_conflict[     ()))\(788 	FA,1WEEEC	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F1vv{{{{x47<''''\(788 	A,$'"g&  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1vv{{{{x47<''''lWdg'h
 
 
 x47<'''']-.. 	 	,$'"g'  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ]:&& 	 	,$'"g*  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	G   #A##A'*A'8$C((C,/C,2$F""F&)F&$G77G;>G;c                    |                      |           t          j        t                    5  t	          j        g            d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        | j        dg           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        | j        | j        gd           d d d            d S # 1 swxY w Y   d S Nr?   zinvalid join typerZ   )	rV   rg   rk   rl   r   r  r  rM   rL   r  s     r$   test_bad_input_typezTestVStack.test_bad_input_type|     ()))]:&& 	 	L	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	 	LOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]9%% 	' 	'L$'1&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	']:&& 	L 	LL$'47+7JKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	LG   AAA4BBB9C!!C%(C%#D55D9<D9c                    |                      |           | j        }| j        }| j        }t	          j        ||gd          }|j        du sJ t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |                                g dk    sJ t	          j        |||gd          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |                                g dk    sJ d S )NrY   rZ   FrB   r>   )rt  rz  r  r  2.0 pez3.0 sez)rt  rz  r  r  r  r  r  r  )	rV   rL   rM   r  r   r  rw   rv   rx   rR   r^   rL   rM   r  rz   t124s          r$   test_stack_basic_innerz!TestVStack.test_stack_basic_inner  s   ()))WWWlB8w777zU""""Cyy00000CH~~bg....CH~~bg....{{}} !
 !
 !
 
 
 
 
 |RRLG<<<Dzz11111CH~~bg....CH~~bg....||~~ 	"
 	"
 	"
 	
 	
 	
 	
 	
 	
r&   c                    |t           u rt          j        d           |                     |           | j        }| j        }| j        }t          j        ||gd          }|j	        du sJ |
                                g dk    sJ t          j        |||gd          }|j	        du sJ |
                                g dk    sJ d S )Nr}   r   rZ   F)r6   r  0.0 foo  --1.0 bar  --2.0 pez   43.0 sez   5)r6   r  r  r  r  r  r  r  )r   rg   r   rV   rL   rM   r  r   r  rw   rx   r  s          r$   test_stack_basic_outerz!TestVStack.test_stack_basic_outer  s   6))LCDDD()))WWWlB8w777zU""""{{}} !
 !
 !
 
 
 
 
 |RRLG<<<{e####||~~ 	"
 	"
 	"
 	
 	
 	
 	
 	
 	
r&   c                    |                      |           t          j        t                    5 }t	          j        | j        | j        gd           d d d            n# 1 swxY w Y   d                    | j        d         j	        j
        | j        d         j	        j
        g          t          |j                  v sJ t          j        t                    5 }t	          j        | j        | j        gd           d d d            n# 1 swxY w Y   dt          |j                  v sJ t          j        t                    5  t	          j        | j        | j        gd           d d d            n# 1 swxY w Y   | j                                        }dd	g|d         _        t          j        t                    5 }t	          j        | j        |g           d d d            n# 1 swxY w Y   d
t          |j                  v sJ d S )NrY   rZ   z+The 'b' columns have incompatible types: {}r>   r   z(The 'b' columns have incompatible types:exactr@   r?   zhave different shape)rV   rg   rk   r   r   r  rL   rN   r;   r-   r   r  r  rM   r=   shape)rR   r^   excinfo
t1_reshapes       r$   test_stack_incompatiblez"TestVStack.test_stack_incompatible  s   ()))]?++ 	@wL$'47+w????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@<CCWS\$dgcl&8&=>
 
        ]?++ 	@wL$'47+w????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@9S=O=OOOOO]?++ 	@ 	@L$'47+w????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ W\\^^
!"A
3]?++ 	0wL$':.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0%W]););;;;;;;sG   #AA"%A"#DDD#E33E7:E7?G''G+.G+c                     |t           u rt          j        d           |                     |           | j        }| j        }d|d         j        d<   t          j        ||g          }|j	        du sJ |
                                g dk    sJ d S )Nr}   Tr>   r?   F)rt  rz  r  r  r  r  )r   rg   r   rV   rL   r  r(   r   r  rw   rx   )rR   r^   rL   r  t14s        r$   test_vstack_one_maskedz!TestVStack.test_vstack_one_masked  s    6))LCDDD()))WW3QlB8$$zU""""{{}} !
 !
 !
 
 
 
 
 
 
r&   c                    |                      |           | 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 rt          j        t          j                  }nt!                      }|5 }t#          j        |||gd          }d d d            n# 1 swxY w Y   |t          u rnt'          |          d
k    sJ dt)          |d         j                  v sJ dt)          |d	         j                  v sJ |                                g dk    sJ n|                                g dk    sJ |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    sJ |d         j        j        | j        k    sJ |d         j        j        t          dddgfddd	ifdg          k    sJ d S )Nr   rB   r   kmz%fr   r>   r   r?   r@   rA   rC   rE   rF   rG   r   r   r  rY   rZ   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    sezr  r  )	r  r  r  r  z0.000010    barz0.002000    pezz0.003000    sezr  r  )rV   rL   rM   r  r   r   r;   r   rO   rP   r   r   rg   rh   r   ri   r   r   r  rj   r  messagerx   rQ   )rR   r^   rL   rM   r  r   warning_linesr1   s           r$   test_col_meta_merge_innerz$TestVStack.test_col_meta_merge_inner  s   ()))WWW !33 3 #3"3"3 $*3  $3 	3  #1vsAhBCC	
 	
 	
 	3  #1vsAhBCC	
 	
 	
 	3  #1vsAhBCC	
 	
 	

 	3  #1vsAhBCC	
 	
 	
  5((,x<==CC--C 	@M,B|w???C	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@  5((}%%****T}Q'/001 1 1 1 U}Q'/001 1 1 1 ;;== 
% 
% 
% 
 
 
 
 
 ;;== 
% 
% 
% 
 
 
 
 3x}!T))))3x}#t++++3x}(F22223x}#u,,,,3x}!T_44443x}![Aq6]S3(OX6&
 &
 
 
 
 
 
 
s   'HHHc                     |t           u rt          j        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          j        t          j                  5 }t#          j        |||gd          }d d d            n# 1 swxY w Y   t'          |          dk    sJ dt)          |d         j                  v sJ dt)          |d
         j                  v sJ |d         j        dk    sJ |d         j        j	        dk    sJ |d         j        j
        dk    sJ |d         j        j	        d	k    sJ |d         j        j        | j        k    sJ |d         j        j        t          dddgfddd
ifdg          k    sJ |d         j        j        dk    sJ |d         j        j	        d	k    sJ |d         j        j
        dk    sJ d S )Nr}   r   rB   r   r  z%0dr   r>   r   r?   r@   rA   rC   rE   rF   rG   r   r   r  r   r   rZ   r  r   r  )r   rg   r   rV   rL   rM   r  r   r   r;   r   rO   rP   r   rh   r   ri   r   r  rj   r  r  rQ   )rR   r^   rL   rM   r  r  r1   s          r$   test_col_meta_merge_outerz$TestVStack.test_col_meta_merge_outerJ  s   6))LCDDD()))WWW 333 $3#3#3 $*3  $3 	3  #1vsAhBCC	
 	
 	
 	3  #1vsAhBCC	
 	
 	
 	3  #1vsAhBCC	
 	
 	

 	3  #1vsAhBCC	
 	
 	

 3#3#)3 \(788 	@M,B|w???C	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ =!!Q&&&&P=#+,,- - - - Q=#+,,- - - - 3x}$$$$3x}#u,,,,3x}(F22223x}#u,,,,3x}!T_44443x}![Aq6]S3(OX6&
 &
 
 
 
 
 3x}!S((((3x}#u,,,,3x}(F222222s   H22H69H6c                    |                      |           	 | j        t          j        | j                  k                                    sJ | j        t          j        | j        g          k                                    sJ d S r    )rV   rL   r   r  r.   r  s     r$   test_vstack_one_tablez TestVStack.test_vstack_one_table  v    ()))-5<00055777775<	222779999999r&   c           
          |d         }t          |          }t          j        |gdg          }t          |          j        }t          |t          j        t          t          t          t          t          t          f          r4t          j        ||g          }t          |          |dz  k    sJ |dk    rBt          |d         |d          |          sJ t          |d         d |         |          sJ n0d|v sd|v ret!          j        t%          |d         d |         |                    sJ t!          j        t%          |d         |d          |                    sJ nt!          j        |d         d |         |k              sJ t!          j        |d         |d          |k              sJ nrt'          j        t*                    5 }t          j        ||g           d d d            n# 1 swxY w Y   d                    |          t/          |j                  v sJ t          j        |gd	g          }t          |t          t          t          f          r0t          j        ||gd
          }t          |          |dz  k    sJ t!          j        |d         d |         |k              sJ t!          j        |d	         |d          |k              sJ t3          |d         dg|z  dg|z  z             sJ t3          |d	         dg|z  dg|z  z             sJ t          j        ||d	         g          }	t!          j        |d         |	d         k              sJ t!          j        |d	         |	d	         k              sJ d S t'          j        t*                    5 }t          j        ||gd
           d d d            n# 1 swxY w Y   dt/          |j                  v sdt/          |j                  v sJ d S d S )Nr   rB   r   r@   r	   r   r   z/vstack unavailable for mixin column type(s): {}r>   r   rZ   FTzvstack requires maskingvstack unavailable)rj   r   r   rv   r   r   r  r   r   r   r	   r   r   r
   r  r   r*   r.   r   rg   rk   r  r;   r  r  r2   )
rR   r  r/   r  tr  r1   r  rM   out2s
             r$   r  z#TestVStack.test_mixin_functionality  s   oc((L#se,,,99% 
0
 
 	  ,1v&&Cs88w{****:%%%c#hwxx&8#>>>>>%c#hxx&8#>>>>>>8##v'9'9v23s8HWH3EsKKLLLLLv23s8GHH3EsKKLLLLLLvc#hxx0C788888vc#hwxx0C7888888233 %saV$$$% % % % % % % % % % % % % % %DKK SY        \3%u---cD)X677 	8,2w':::Cs88w{****6#c(8G8,3444446#c(788,344444c#h'(9TFW<L(LMMMMMc#h(8E7W;L(LMMMMM<BsG--D6#c(d3i/000006#c(d3i/0000000233 9saW88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9,	1 1  %SY7777 77s$   G44G8;G8.OOOc                 :   t          ddgt          j        z  ddgt          j        z  dt          j        z            }t          dgt          j        z  dgt          j        z  dt          j        z            }t          |g          }t          |g          }t          j        ||g          }t          g dt          j        z  g dt          j        z  g d	t          j        z            }t          j	        t          |d
         |                    sJ t          dgt          j        z  dgt          j        z            }t          |g          }t          j        t          d          5  t          j        ||g           ddd           dS # 1 swxY w Y   dS )z0Test that representations can be mixed together.r?   r@   rE   rF   r   
   )r?   r@   r  )rE   rF   r   )r?   r?   r   col0z representations are inconsistentr   N)r   r  r  r   r  r   r   r  r*   r.   r   r   rg   rk   rl   )	rR   rep1rep2rL   rM   rz   expectedrep3rN   s	            r$   $test_vstack_different_representationz/TestVStack.test_vstack_different_representation  s   &1v}q!fqtmQXNN&sQU{QC!%KadKKD6]]D6]]lB8$$*JJyyy14/QT1A
 
 v*3v;AABBBBB*A3;aeDDD6]]]:-OPPP 	# 	#L"b"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   ,FFFc                    t          t          j        ddgddg          ddggdd	g
          }t          t          j        ddgddg          ddggdd	g
          }t          j        ||g          }|                                g dk    sJ |d         }t          j        ||g          }|                                g dk    sJ dS )rY  rZ  r\  r^  ra  rd  re  rf  rg  rh  r         @rE   ri  rk  rl  )structured [f, i] string----------------- ------z          (1., 1)    onez          (2., 2)    twoz          (3., 3)  threez          (4., 4)   fourrh  )r  r  z         (1.0, 1)    onez         (2.0, 2)    twoz               --  threez               --   fourN)r   r*   r+   r   r  rx   rR   rL   rM   rz   rN   t13s         r$   test_vstack_structured_columnz(TestVStack.test_vstack_structured_column  s,    (H-k;5OPPP  *
 
 
 (H-k;5OPPP&!  *
 
 
 lB8$${{}} !
 !
 !
 
 
 
 
 _lB8$${{}} !
 !
 !
 
 
 
 
 
 
r&   N)r   r   r   r   rV   r  r  r  r_   ro   r  r  r  r  r  r  r  r  r  r  r  r   r&   r$   r  r    s*         -
 -
 -
 -
^+ + +

 
 

 
 
+ + +
  B	L 	L 	L!
 !
 !
F
 
 
>< < <*
 
 
$X
 X
 X
tC3 C3 C3J: : :98 98 98v# # #"%
 %
 %
 %
 %
r&   r  c                   j    e Zd ZefdZd Zed             Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd ZdS )
TestDStackc                    |                     g dd          | _        |                     g dd          | _        t          ddgd          | j        d<    |d	d
gddggddgddggdd          | _         || j        d|t
          u           | _         |ddgdd
ggddgddggdd          | _        |                     g dd          | _        d S )Nr  r9   r:   r  r?   r@   cxcsecrD   g      @g      @rj  r  foobarpezsezrJ   r   Tr  r]  r[  )r  z 7.  pez  2z 4.  sez  6z 6.  foo  3)	rK   rL   rM   r   rN   r   r  r  t6r  s     r$   rV   zTestDStack._setup
  s`   **  
   
 
 **  
   
 
 QF8444%Cj3*-enuen5  
 
 
 %d5E>BBB%Cj3*-enuen5  
 
 
 **     
 
r&   c                     |                                   t          j        t          d          5  t	          j        | j        | j                   d d d            d S # 1 swxY w Y   d S )Nz Did you accidentally call dstackr   )rV   rg   rk   r  r   dstackrL   rM   r  s    r$   r  z"TestDStack.test_validate_join_type9  r  r  c                 `   t          |           D ]\  }}|j                                        D ]\  }}||j        v rt	          j        ||         ||         d d |f         k              sJ t          ||         d          r;t	          j        ||         j        ||         j        d d |f         k              sJ t          ||         d          r+t	          j        ||         j        d d |f                   rJ t	          j        ||         j        d d |f                   sJ d S )Nr(   )		enumeratecolumnsitemsr   r*   r.   r)   r(   any)tablesr1   iitblr   out_cols         r$   compare_dstackzTestDStack.compare_dstack>  sK    (( 	9 	9GB!$!2!2!4!4 9 9g3<''6#d)s4yB/?"?@@@@@ s4y&11 A!vc$inD	qqq"u8M&MNNNNNN !TF33 A#%6#d).B*?#@#@@@@ 6#d).B"7888888!9	9 	9r&   c                     |                      |           | j                                        }t          j        | j        |d         g          }|                     | j        |d         g|           dS )zHStack a table with 3 cols and one column (gets auto-converted to Table).rB   )rB   N)rV   rL   r=   r   r  r	  r  s       r$   test_dstack_table_columnz#TestDStack.test_dstack_table_columnS  se    ()))W\\^^lDGRW-..TWbj1377777r&   c                 $   |t           u rt          j        d           |                     |           | j        }| j        }| j        }d|d         j        d<   t          j	        ||gd          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |                     ||g|           t          j	        |||gd          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |                     |||g|           d S )Nr}   TrB   r   r   rZ   r>   )r   rg   r   rV   rL   rM   r  r(   r   r  rv   r	  r  s          r$   test_dstack_basic_outerz"TestDStack.test_dstack_basic_outerZ  s   6))LCDDD()))WWW3QlB8w777Cyy00000CH~~bg....CH~~bg....RHc*** |RRLG<<<Dzz11111DI$r#w--////DI$r#w--////RRL$/////r&   c                    |                      |           | j        }| j        }| j        }t	          j        |||gd          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |                     |||g|           d S )NrY   rZ   rB   r>   )rV   rL   rM   r  r   r  rv   r	  )rR   r^   rL   rM   r  r  s         r$   test_dstack_basic_innerz"TestDStack.test_dstack_basic_innerp  s    ()))WWW |RRLG<<<Dzz11111DI$r#w--////DI$r#w--////RRL$/////r&   c                    |                      |           | j        }| j        }| j        }t	          j        ||g          }t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ |                     ||g|           t          j	        t                    5  t	          j        ||g           d d d            d S # 1 swxY w Y   d S r   )rV   rN   r  rM   r   r  rv   r	  rg   rk   r   )rR   r^   rN   r  rM   t35s         r$   "test_dstack_multi_dimension_columnz-TestDStack.test_dstack_multi_dimension_column}  sA   ()))WWWlB8$$Cyy00000CH~~bg....CH~~bg....RHc***]?++ 	# 	#L"b"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   DDDc                     |                      |           | j        }| j        }t          j        t
                    5  t          j        ||g           d d d            d S # 1 swxY w Y   d S r    )rV   rM   r  rg   rk   rl   r   r  )rR   r^   rM   r  s       r$   "test_dstack_different_length_tablez-TestDStack.test_dstack_different_length_table  s    ()))WW]:&& 	# 	#L"b"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   A!!A%(A%c                     |                      t                     t          j        | j                  }t          j        || j        k              sJ d S r    )rV   r   r   r  rL   r*   r.   )rR   r1   s     r$   test_dstack_single_tablez#TestDStack.test_dstack_single_table  sG    El47##vcTWn%%%%%%%r&   c                 2   t          ddgt          j        z  ddgt          j        z  dt          j        z            }t          ddgt          j        z  ddgt          j        z  dt          j        z            }t	          |g          }t	          |g          }t          j        ||g          }t          j        t          |d	         d d d
f         |                    sJ t          j        t          |d	         d d df         |                    sJ d S Nr?   r@   rE   rF   r  r?     (   r  r   )
r   r  r  kpcr   r   r  r*   r.   r   )rR   r  r  rL   rM   rz   s         r$   test_dstack_representationz%TestDStack.test_dstack_representation  s    &1v~1v~q15yQQ&Bx!%'7"bAE9I2PQPU:VVD6]]D6]]lB8$$v*3v;qqq!t+<dCCDDDDDv*3v;qqq!t+<dCCDDDDDDDr&   c                    t          ddgt          j        z  ddgt          j        z            }t          ddgt          j        z  ddgt          j        z            }t          |g          }t          |g          }t	          j        ||g          }t          ||d	         d d d
f                   sJ t          ||d	         d d df                   sJ d S r  )r	   r  r  r   r   r  r   )rR   r  r  rL   rM   rz   s         r$   test_dstack_skycoordzTestDStack.test_dstack_skycoord  s    1v~1v~66Bx!%'"bAE)9::C5\\C5\\lB8$$c3v;qqq!t#455555c3v;qqq!t#45555555r&   c                    t          t          j        ddgddg          ddggdd	g
          }t          t          j        ddgddg          ddggdd	g
          }t          j        ||g          }|                                g dk    sJ |d         }t          j        ||g          }|                                g dk    sJ dS )rY  rZ  r\  r^  ra  rd  re  rf  rg  rh  r   r  ri  rk  rl  )zstructured [f, i]     string   z------------------ ------------z(1., 1) .. (3., 3) one .. threez(2., 2) .. (4., 4)  two .. fourr  )zstructured [f, i]    string   z----------------- ------------z   (1.0, 1) .. -- one .. threez   (2.0, 2) .. --  two .. fourN)r   r*   r+   r   r  rx   r  s         r$   test_dstack_structured_columnz(TestDStack.test_dstack_structured_column  s,    (H-k;5OPPP  *
 
 
 (H-k;5OPPP&!  *
 
 
 lB8$${{}} !
 !
 !
 
 
 
 
 _lB8$${{}} !
 !
 !
 
 
 
 
 
 
r&   N)r   r   r   r   rV   r  staticmethodr	  r  r  r  r  r  r  r  r  r   r   r&   r$   r  r  	  s          -
 -
 -
 -
^+ + +
 9 9 \9(8 8 80 0 0,0 0 0# # ## # #& & &
E E E6 6 6!
 !
 !
 !
 !
r&   r  c                   l    e Zd ZefdZd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )
TestHStackc                 L   |                     g dd          | _        |                     g dd          | _        |                     g dd          | _         || j        dd          | _        d| j        d	         _        d
| j        d         _         || j        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  r9   r:   r  )z d    er  r  r  Tr  r_  rB   gr>   r<   r?   r@   rA   rC   rE   rF   rG   r   r   r  r  r  r   )rK   rL   rM   rN   r  r   r  rO   rP   r   rQ   r  s     r$   rV   zTestHStack._setup  s   **  
   
 
 **  
   
 
 **     
 
 %d4888 %d+++K#1vsAh(RSSTTTK#1vsAh(RSSTTTK#1vsAh(RSSTTTK(H(H(HIIJJJ%((()AAA../
 
r&   c                     |                                   t          j        t          d          5  t	          j        | j        | j                   d d d            d S # 1 swxY w Y   d S )Nz Did you accidentally call hstackr   )rV   rg   rk   r  r   hstackrL   rM   r  s    r$   r  z"TestHStack.test_validate_join_type  r  r  c                     |                      |           t          j        | 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_2rr   0.0 foo 0.0 fooz1.0 bar 1.0 barN)rV   r   r'  rL   rw   rx   r]   s      r$   test_stack_same_tablez TestHStack.test_stack_same_table  sz    
 	()))lDGTW-..zU""""{{}} !
 !
 !
 
 
 
 
 
 
r&   c                     |                      |           t          j        | j        d         | j        d         g          }|j        du sJ |                                g dk    sJ d S )Nr   r?   F)a_1 b_1 a_2 b_2  c r   z0.0 foo 3.0 sez   5rV   r   r'  rL   rM   rw   rx   r]   s      r$   r  zTestHStack.test_stack_rows  s    ()))lDGAJ
344zU""""{{}} !
 !
 !
 
 
 
 
 
 
r&   c                    |                      |           t          j        | 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 sJ |                                g dk    sJ d S )NrA   rB   r>   )r6   r  z0.0 foo   4z1.0 bar   5)rV   r   r'  rL   rM   rv   rx   r]   s      r$   test_stack_columnszTestHStack.test_stack_columns  s    ()))lDGTWS\233CH~~dgcl!3!33333CH~~dgcl!3!33333CH~~dgcl!3!33333{{}} !
 !
 !
 
 
 
 
 
 
r&   c                     |                      |           t          j        | j        | j        | j        gd          }|j        | j        k    sJ d S rX   )rV   r   r'  rL   rM   r  rO   rQ   r]   s      r$   r_   z TestHStack.test_table_meta_merge*  r  r&   c                    |                      |           t          j        t          j                  5 }t          j        | j        | j        gd          }d d d            n# 1 swxY w Y   t          |          dk    sJ |j
        | j        j
        k    sJ t          j        t          j                  5 }t          j        | j        | j        gdd          }d d d            n# 1 swxY w Y   t          |          dk    sJ |j
        | j        j
        k    sJ t          j        | j        | j        gdd          }|j
        | j        j
        k    sJ t          j        t                    5  t          j        | j        | j        gdd          }d d d            n# 1 swxY w Y   t          j        t                    5  t          j        | j        | j        gdd          }d d d            d S # 1 swxY w Y   d S r  )rV   rg   rh   r   ri   r   r'  rL   r  rj   rO   rk   r   rl   rm   s       r$   ro   z)TestHStack.test_table_meta_merge_conflict/  r  r  c                    |                      |           t          j        t                    5  t	          j        g            d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        d           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        | j        dg           d d d            n# 1 swxY w Y   t          j        t                    5  t	          j        | j        | j        gd           d d d            d S # 1 swxY w Y   d S r  )	rV   rg   rk   rl   r   r'  r  rM   rL   r  s     r$   r  zTestHStack.test_bad_input_typeP  r  r  c                    |                      |           | j        }| j        }| j        }| j        }t          j        ||gd          }|j        du sJ t          |          |u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d                   t          |d                   u sJ t          |d	                   t          |d                   u sJ |	                                g d
k    sJ t          j        ||gd          }|	                                |	                                k    sJ t          j        ||gd          }|	                                |	                                k    sJ t          j        ||||gd          }|j        du sJ |	                                g dk    sJ t          j        ||||gd          }|j        du sJ |	                                g dk    sJ d S )NrY   rZ   Fa_1rB   r   r>   a_2r   )r-  r   z0.0 foo 2.0 pez   4z1.0 bar 3.0 sez   5r   )#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  --  --)r7  r8  r9  r:  )
rV   rL   rM   rN   r  r   r'  rw   rv   rx   )rR   r^   rL   rM   rN   r  r1   out_lists           r$   test_stack_basiczTestHStack.test_stack_basic[  s   ()))WWWWlB8w777zU""""Cyy00000CJ43==0000CJ43==0000CJ43==0000CJ43==0000{{}} !
 !
 !
 
 
 
 
 <RG<<<{{}} 0 0 2 22222lB8w777{{}} 0 0 2 22222lBB+w???zU""""{{}} !
 !
 !
 
 
 
 
 lBB+w???zU""""{{}} !
 !
 !
 
 
 
 
 
 
r&   c                     |                      |           t          j        t                    5  t	          j        | j        | j        gd           d d d            d S # 1 swxY w Y   d S )Nr  rZ   )rV   rg   rk   r   r   r'  rL   rN   r  s     r$   r  z"TestHStack.test_stack_incompatible  s    ())) ]?++ 	@ 	@L$'47+w????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   #AA#&A#c                 H   |t           u rt          j                     |                     |           | j        } ||dd          }|j                                         d|d         j        d<   t          j	        ||g          }|
                                g dk    sJ d S )NTr  r>   r?   )r)  rr   r*  z1.0 bar 1.0  --)r   rg   r   rV   rL   rO   r  r(   r   r'  rx   )rR   r^   rL   rM   r1   s        r$   test_hstack_one_maskedz!TestHStack.test_hstack_one_masked  s    6))LNNN()))W!!"4===
3QlB8$${{}} !
 !
 !
 
 
 
 
 
 
r&   c                     |                      |           t          j        | j        | j        gddd          }|j        du sJ |                                g dk    sJ d S )NrY   z{table_name}_{col_name})r~   r   )r[   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   5r.  r]   s      r$   test_table_col_renamez TestHStack.test_table_col_rename  s    ()))lWdg3)	
 
 
 zU""""{{}} !
 !
 !
 
 
 
 
 
 
r&   c                 X   |                      |           | 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          }|||fD ]K}|j        D ]A}dD ]<}	t          ||         j        |	          t          ||         j        |	          k    sJ =BLd |d         j        j	        d<   |d         j        j	        d         ddgk    sJ d S )Nr@   r>   r?   rA   rB   rC   r   r   r   r_  rD   rE   rF   rG   r%  r   r   r  r   r   t3_cr  rZ   )rO   r   r;   r   )rV   rL   rN   r  r   r   r   r   r;   rO   rP   r   r'  r   getattr)
rR   r^   rL   rN   r  r   r1   r  r   attrs
             r$   r   zTestHStack.test_col_meta_merge  sf   ()))WWRaR[W cAq6]S3(OXFGG3#)3 #3
3  '''
3  #1vsAhBCC	
 	
 	
 	3  #1vsAhBCC	
 	
 	
 	3  #1vsAhBCC	
 	
 	
 3#3#)3 lBB<7;;;b" 	X 	XA
 X XE X XD"3t9>488GAdGLRV<W<WWWWWWXX
 "&3#3x}!#&1a&000000r&   c                    |                      |           	 | j        t          j        | j                  k                                    sJ | j        t          j        | j        g          k                                    sJ d S r    )rV   rL   r   r'  r.   r  s     r$   test_hstack_one_tablez TestHStack.test_hstack_one_table  r  r&   c           
         |d         }|dd         }t          j        |g          }t          j        |g          }t          |          j        }t          j        ||gd          }t          |d                   t          |d                   u sJ t          |          t          |          k    sJ |dk    rFt          |d         |d t          |                             sJ t          |d         |          sJ nd	|v sd
|v rjt          j        t          |d         |d t          |                                       sJ t          j        t          |d         |                    sJ nUt          j        |d         |d t          |                   k              sJ t          j        |d         |k              sJ t          |t          t          t          f          rt          j        ||gd          }t          |          t          |          k    sJ t          j        |d         |k              sJ t          j        |d         d t          |                   |k              sJ t          |d         g d          sJ t          j        ||d         gd          }t          j        |d         |d         k              sJ t          j        |d         |d         k              sJ d S t          j        t"                    5 }	t          j        ||gd           d d d            n# 1 swxY w Y   dt%          |	j                  v sJ d S )Nr   r@   rF   rY   rZ   col0_1col0_2r	   r   r   r   )FFTTr  hstack requires masking)r   r   rv   r   r'  rj   r   r*   r.   r   r   r   r   r   r2   rg   rk   r  r  r  )
rR   r  col1col2rL   rM   r  r1   r  r  s
             r$   r  z#TestHStack.test_mixin_functionality  s{   #AaCy\4&!!\4&!!::&lB8w777CM""d3x=&9&999993xx3t99$$$$ z!!!#h-kD		k1BCCCCC!#h-666666x6X#5#56.s8}d;SYY;>OPPQQQQQ6.s8}dCCDDDDDD6#h-4#d))+<<=====6#h-4/00000 dT9h788 	?,Bx7;;;Cs88s2ww&&&&6#h-4/000006#h-#d))4<=====c(m-G-G-GHHHHH <RZ 0GDDDD6#h-4>9:::::6#h-4>9:::::::233 :sb"X9999: : : : : : : : : : : : : : :,CI>>>>>>s   M  MMN)r   r   r   r   rV   r  r+  r  r0  r_   ro   r  r<  r  r?  rA  r   rG  r  r   r&   r$   r#  r#    s         /
 /
 /
 /
b+ + +

 
 

 
 

 
 
+ + +
  B	L 	L 	L-
 -
 -
^@ @ @
 
 
 
 
 
 "1 "1 "1H: : :&? &? &? &? &?r&   r#  c                    |                      g dd          } | t          j        |d d                             }t          j        |          }t          |                                |                                          sJ |                                }|d= t          j        |          }t          |                                g d          sJ d}t          j        ||          }t          |                                g d          sJ t          j        ||d	
          }t          |                                g d          sJ t          j        ||d
          }t          |                                g d          sJ ddg}	t          j        ||	          }
t          |
                                g d          sJ t          j        ||	d	
          }t          |                                g d          sJ t          j        ||	d
          }t          |                                g d          sJ ddg}	t          j	        t                    5 }t          j        ||	          }
d d d            n# 1 swxY w Y   |j        j        d         dk    sJ t          j	        t                    5 }t          j        ||	d
           d d d            n# 1 swxY w Y   |j        j        d         dk    sJ  | |d          }d|d         j        d<   t          j	        t                    5 }t          j        |          }d d d            n# 1 swxY w Y   |j        j        d         dk    sJ t          j        |d          }|j        du sJ |                                g dk    sJ t          j	        t                    5  t          j        |dd          }d d d            n# 1 swxY w Y    | |d          }d|d         j        d<   d|d         j        d<   t          j        |g dd           }|j        du sJ |                                g d!k    sJ 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 6rO  r9   r:   )r>   rA   rD   )z a z---z  0z  1z  2rB   )rq   rr     0   a 0.0   4  1   c 3.0   5  2   b 7.0   0last)keep)rq   rr   rQ  rR    2   b 5.0   1none)rq   rr   rQ  r>   )rq   rr   rQ  z  1   a 1.0   7rR    2   a 4.0   3rS  )rq   rr   rQ  z  1   a 2.0   6rR  rX  rV  )rq   rr   rQ  rX  r   zduplicate key namesTz/'keep' should be one of 'first', 'last', 'none'r   r?   z]cannot use columns with masked values as keys; remove column 'a' from keys and rerun unique())rd   F)rq   rr   rQ  rS   --   c 3.0   5)rd   r   rD   rE   )rD   rB   r>   )r   rd   )rq   rr   z  2   a 4.0  --rS  rY  )rK   r*   sortr   uniquer%   rx   r=   rg   rk   rl   r  argsr(   rw   )r^   r  tut_allt_skey1t1at1bt1ckey2t2at2bt2cexct1_mt1_mus                   r$   test_uniquerk    s   !!	
 	
 	
  	" 	 	A  
	bgafoo	.	.BLOOE5==??BJJLL11111
&&((CMLE	
 	
 	
	 	 	 	 	 D
,q$

C	
 	
 	
	 	 	 	 	 ,q$V
,
,
,C	
 	
 	
	 	 	 	 	 ,q$V
,
,
,C	
 	
 	
     :D
,q$

C	
 	
 	
     ,q$V
,
,
,C	
 	
 	
     ,q$V
,
,
,C	
 	
 	
     :D	z	"	" $cl1d##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $9>! 55555	z	"	" )cQ4(((() ) ) ) ) ) ) ) ) ) ) ) ) ) )9>! QQQQQD111DDIN1	z	"	" #cT""# # # # # # # # # # # # # # # 		q 9 	9 	9 	9 	9 Ld+++E<5    ==??        
z	"	" : :T$S999: : : : : : : : : : : : : : :  $///DDIN1DIN1 LOOODAAAE<5    ==??         sH   'J		JJK))K-0K-M##M'*M'P  PPc                      | dggdg          }|d         j         dk    sJ t          j        ||g          }t          |          dk    sJ |d         j         dk    sJ dS )z
    Test for issue #5617 when vstack'ing bytes columns in Py3.
    This is really an upstream numpy issue numpy/numpy/#8403.
       arB   r   r?   r@   N)itemsizer   r  rj   )r^   r  rM   s      r$   test_vstack_bytesro    sz    
 	tfXcU333AS6?a	q!f		Br77a<<<<c7q      r&   c                      t          j        dggdg          } | d         j        dk    sJ t          j        | | g          }t	          |          dk    sJ |d         j        dk    sJ 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.
    rB   r   rF   r@   N)r   r   rn  r  rj   )r  rM   s     r$   test_vstack_unicoderq    sy    
 	cUGC5)))AS6?a	q!f		Br77a<<<<c7q      r&   c                     t          g dd          } g dt          j        z  }g d}t          ddgd          }ddgt          j        z  }dd	g}t          | ||gg d
          }t          |||gg d
          }t	          j        ||dddg          }t          j        |d         t          g dd          k              sJ t          j        |d         g dt          j        z  k              sJ t          j        |d         t          j        	                    g dg d          k              sJ t          j        |d         t          j        	                    g dg d          k              sJ dS )z<
    Test for table join using non-ndarray key columns.
    )r@   r?   r@   r  r:   )r@   r?   r?   r   r@   rE   r  r?  )tmqr   r   r   rs  rt  r   )r?   r@   r@   rE   )r?   r?   r@   rE   idx_1)r@   rE   r?   r   )r   r   r   r?   )r(   idx_2)r   r   r  r?  )r?   r?   r   r   N)
r   r  r   r   r   r\   r*   r.   mar+   )	tm1q1idx1tm2q2idx2rL   rM   rz   s	            r$   test_join_mixins_time_quantityr~    s    yyy
*
*
*C	QSB99D
1vh
'
'
'C
Q!#B8D	R&8&8&8	9	9	9B	R&8&8&8	9	9	9B *RwdC[
A
A
AC6#d)tLLLBBBBCCCCC6#c(lllQS00111116#g,"%++lll+"N"NNOOOOO6#g,"%++nnn<<<+"P"PPQQQQQQQr&   c                  $   t          ddgddgd          } t          | ddggddg	          }t          | d
dggddg	          }t          j        t          d          5  t          j        ||d           ddd           dS # 1 swxY w Y   dS )zR
    Test for table join using non-ndarray key columns that are not sortable.
    r?   r@   rE   rF   zdeg,degr  r  rz  r   r  r?  r}  z(one or more key columns are not sortabler   r   N)r	   r   rg   rk   r  r   r\   )r  rL   rM   s      r$   test_join_mixins_not_sortabler    s     
1a&1a&y	1	1	1B	QF|D&>	2	2	2B	RH~dF^	4	4	4B	y(R	S	S	S & &
2r%%%%& & & & & & & & & & & & & & & & & &s    BB	B	c                     ddgddgg} ddg}t          | |gddg          }|                                }t          j        t          d	          5  t          j        ||d
           d d d            d S # 1 swxY w Y   d S )Nr?   r@   rE   rF   rB   r>   r   zkey column 'a' must be 1-dr   r   )r   r=   rg   rk   rl   r   r\   )r.  r/  rL   rM   s       r$   test_join_non_1d_key_columnr    s    a&1a&	B
QB	BxSz	*	*	*B	B	z)E	F	F	F % %
2r$$$$% % % % % % % % % % % % % % % % % %s   A66A:=A:c                      t          g d          } t          | gdg          }|                    d          }t          j        ||                                 k              sJ dS )zRegression test for #10823.z
2016-01-01z
2018-01-01z
2017-01-01timer   N)r   r   argsortr*   r.   )timesr  rb  s      r$   test_argsort_time_columnr    sf    ;;;<<EugfX&&&A			&A6!u}}&'''''''r&   c                     t          g dg dgd          } |                     d           |                     d           t          j        | d         g dk              sJ t          j        | d         g dk              sJ |                     d           t          j        | d         g d	k              sJ t          j        | d         g d
k              sJ g d}t          |          }t          |g d
gddg          }|                    d           t          j        |d         g dk              sJ |                    d           t          j        |d         g dk              sJ t          j        |d         |g d         k              sJ ddlm}  ||          }g d
|d<   |                    d           t          j        |d         g dk              sJ |                    d           t          j        |d         g dk              sJ t          j        |d         |g d         k              sJ dS )zFTest fix for #9473 and #6545 - and another regression test for #10823.)r?   rE   r@   )r   rF   r   rJ   r   rB   r   r>   )r   r   rF   r   )rE   r@   r?   r  r  flux)rE   r?   r@   )r   r@   r?   r   )
TimeSeries)r  N)r   	add_indexrZ  r*   r.   r   astropy.timeseriesr  )r  r  rs  rM   r  tss         r$   test_sort_indexed_tabler    sa   yyy)))$J777AKKFF3KKK6!C&III%&&&&&6!C&III%&&&&&FF3KKK6!C&III%&&&&&6!C&III%&&&&&666E	eB	IIIvv&6	7	7	7BGGFOOO6"V*			)*****GGFOOO6"V*			)*****6"V*999-..... .-----				BBvJGGFOOO6"V*			)*****GGFOOO6"V*			)*****6"V*999-.......r&   c                  X   t          j        ddg          } t          j        ddg          }ddgt          j        z  }t          | |g          |j        u sJ t          || g          |j        u sJ t          | | g          | j        u sJ t          | g          | j        u sJ t          j        t                    5  t          | |g           d d d            n# 1 swxY w Y   t          j        t                    5  t          || g           d d d            d S # 1 swxY w Y   d S )Nr?   r@   )
r   r   r   r  r   r   r   rg   rk   rl   )rA   mcrt  s      r$   test_get_out_classr  	  s   aVA		QF	#	#B	
AA1b'""bl22222q'""bl22221a&!!Q[00001#!+----	z	"	"  1v               
z	"	"  1v                 s$   >CC #C  DD#&D#c                     t          j        g d          } t          j        g d| gddg          }t          j        ddg| dd         gdd	g          }t          j        t
                    5 }t          j        ||gd
           ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t
                    5 }t          j	        ||gd
           ddd           n# 1 swxY w Y   dt          |j                  v sJ t          j        t
                    5 }t          j
        ||d
           ddd           n# 1 swxY w Y   dt          |j                  v sJ dS )zm
    Test that outer join, hstack and vstack fail for a mixin column which
    does not support masking.
    r   rI   rB   r>   r   r?   r@   NrA   r   rZ   r  rK  r   )r   NdarrayMixinr   rg   rk   r  r  r  r  r'  r\   )r/   rL   rM   r  s       r$   test_masking_required_exceptionr  )	  s%   
 
\\\
*
*C	|||S)#s	<	<	<B	1vs2A2w'Sz	:	:	:B	*	+	+ 2sb"X11112 2 2 2 2 2 2 2 2 2 2 2 2 2 23sy>>1111	*	+	+ 2sb"X11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2$CI6666	*	+	+ .s
2rW----. . . . . . . . . . . . . . ."c#)nn444444s6   0BBBC66C:=C:2EEEc                     t          j        ddg          } t          j        ddg          }ddgt          j        z  }t          ddg          }t          ddgddgd          }t          j        d	d
gt          j                  }t          j        | |g          }|j        t           j	        u sJ |j
        du sJ t          j        || g          }|j        t           j	        u sJ |j
        du sJ t          j        ||g          }|j        t           j	        u sJ |j
        du sJ t          j        | |g          }|j        t           j        u sJ |j
        du sJ t          j        ||g          }|j        t           j	        u sJ t          j        | | g          }|j        t           j        u sJ t          j        | |g          }|j        t           j        u sJ t          j        | |g          }|j        t           j        u sJ t          j        |||g          }|j        t           j	        u sJ t          j        t                    5  t          j        | |g           d d d            n# 1 swxY w Y   t          j        t                    5  t          j        ||g          }d d d            d S # 1 swxY w Y   d S )Nr?   r@   z2001-01-02T12:34:56z2001-02-03T00:01:02rE   rF   r  r        F)r   r   r   r  r   r   r	   r'  r   r   rw   r   r  rg   rk   rl   )rA   r  rt  r  r  cqr  s          r$   r0  r0  ?	  s:   aVA		QF	#	#B	
AA&(=>??D	1a&1a&u	-	-	-B	r2hQS	)	)	)BaVA;%,&&&&8uaVA;%,&&&&8ub!WA;%,&&&&8uaWA;%+%%%%8uaVA;%,&&&&aVA;%+%%%%aYA;%+%%%%aWA;%+%%%%ar]##A;%,&&&&	z	"	"  aV               
z	"	" " "L!R!!" " " " " " " " " " " " " " " " " "s$   I33I7:I7J;;J?J?c                  T   t                      } g d| d<   g dt          j        z  | d<   g dt          j        z  | d<   t                      }g d|d<   g dt          j        z  |d<   g dt          j        z  |d<   t          j        | |dd	
          }t          |          dk    sJ d S )N)r?   r@   rE   rF   r   rI  )r@   rE   r@   r?   r?   flux1flux2)rE   rF   r   r   )r@   r?   r?   rE   )rI  r  r  r   rH  r   )r   r  Jyr   r\   rj   )rL   rM   rz   s      r$   test_mixin_join_regressionr  j	  s    
 
B!//BwK!//AD(BwK!//AD(BwK	B,,BwK,,%BwK,,%BwK
*R"=
Q
Q
QCs88q======r&   )Acollectionsr   
contextlibr   numpyr*   rg   astropyr   r   r  astropy.coordinatesr   r   r	   r
   r   r   r   astropy.coordinates.earthr    astropy.coordinates.tests.helperr   -astropy.coordinates.tests.test_representationr   astropy.tabler   r   r   r   r   r:  r   r   r   astropy.timer   r   astropy.units.quantityr   astropy.utilsr   "astropy.utils.compat.optional_depsr   astropy.utils.metadatar   r%   r2   r4   rr  r  r  r#  rk  ro  rq  r~  r  r  r  r  r  r  r0  r  r   r&   r$   <module>r     sy   $ # # # # # " " " " " "                                   4 3 3 3 3 3 ; ; ; ; ; ; N N N N N N N N N N N N N N N N N N N N Q Q Q Q Q Q Q Q Q Q ( ( ( ( ( ( ( ( + + + + + + " " " " " " 8 8 8 8 8 8 5 5 5 5 5 5* * *   D
 D
 D
 D
 D
 D
 D
 D
NE= E= E= E= E= E= E= E=PC
 C
 C
 C
 C
 C
 C
 C
LA
 A
 A
 A
 A
 A
 A
 A
Ht? t? t? t? t? t? t? t?n	Y Y Yx
! 
! 
!
! 
! 
!R R R@	& 	& 	&% % %( ( (/ / /B  "5 5 5,(" (" ("V    r&   