
    IR-eފ                     6   d dl Z d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dlm
Z d dlmZ d dlmZ  G d d          Z G d	 d
          Z G d de          Z G d de          Zd Zd Zd Zd Zej                            dddg          d             Zd Zej                            dej        ej        f          d             Zej                            dej        ej        f          d             Zej                            dej        ej        f          d             Z d Z!d Z"ej                            dej        ej        f          d             Z#ej                            dej        ej        g          ej                            d ej        ej        e$e%g          d!                         Z&d" Z'd# Z(ej                            d$d%d&g          d'             Z)d( Z*d) Z+ej                            d$g d*          d+             Z,dS ),    N)assert_array_equal)tabletime)units)!assert_follows_unicode_guidelines)MetaBaseTestc                       e 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d Zd Zd Zd Zd Zd Zd ZdS )
TestColumnc                      |d          }t          |t          j                  sJ |dz  }t          ||          sJ t          |t          j                  sJ d S )Naname   )
isinstancenpndarray)selfColumncc2s       ?lib/python3.11/site-packages/astropy/table/tests/test_column.pytest_subclasszTestColumn.test_subclass   si    F!RZ(((((U"f%%%%%"bj)))))))    c                    t          j        g d          } ||d          }t          j        dft          j        dft          j        dft          j        dft          j        dft          j        dffD ]\  }} |||           |||          fD ]}|rt          j	        |          snt          j
        |          rJ t          |          dk    sJ |t          j        u r t          |          t           j        k    sJ n)t          |          t           j        j        j        k    sJ |j        j        dk    sJ |dz
  |k     }t          j	        |          sJ d	S )
<Show that basic numpy operations with Column behave sensibly   r      r   r   TFr   |b1r   N)r   arrayoperatoreqnegegtleltallanylenr   r   typer   macoreMaskedArraydtypestr)r   r   arrr   op
test_equalr"   r'   s           r   test_numpy_opszTestColumn.test_numpy_ops   sq    hyyy!!F3S!!! [$[% [$[% [$[% 
 	- 	-NB
 r!Szz22c1::. - -%/CrvbzzCCCCC2ww!||||U\))88rz1111188ruz'=====x|u,,,,,- US[vbzzr   c                    t          j        g d          } ||d          }t           j        dft           j        dft           j        dft           j        dft           j        dffD ]\  }} ||          }t          |          t          |          k    sJ |rt          j        |          snt          j	        |          rJ |t          j        u r t          |          t           j        k    sJ t          |          t           j        j        j        k    sJ |t           j        ur|j        j        dk    sJ dS )r   r   r   r   TFr   N)r   r    isfiniteisinfisnansignsignbitr*   r(   r)   r   r   r+   r   r,   r-   r.   r/   r0   )r   r   r1   r   ufunc	test_trueresults          r   test_numpy_boolean_ufuncsz$TestColumn.test_numpy_boolean_ufuncs2   s>    hyyy!!F3S!!! [$XuXuWdOZ!
 	5 	5E9 U1XXFv;;#a&&((((%.F26&>>FFvFFF%%F||rz11111F||ruz'=====''!<+u4444	5 	5r   c                     t          j        g dt           j                                      |          }t	          |          d|j         dk    sJ d S )Nr   r/   <z dtype='int64' length=3>
1
2
3)r   r    int64viewrepr__name__r   r   r   s      r   	test_viewzTestColumn.test_viewI   sU    HYYYbh///44V<<AwwPfoPPPPPPPPPr   c                    ddl m} |                    dd          5   |t          j        d          dt
          d          }t          |                                          g d	k    sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )z/Show that the formatted output from str() worksr   )conf	max_lines   i  r   z%6.2f)r   r/   format)z   a   z-------z   0.00z   1.00z    ...z1998.00z1999.00zLength = 2000 rowsN)astropyrI   set_tempr   arangefloatr0   
splitlines)r   r   rI   c1s       r   test_formatzTestColumn.test_formatM   s          ]];** 	 		$cwOOOBr77%%'' 	, 	, 	, 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA;;A?A?c                 B    |g ddd          }t          j        |          }t          j        ||k              sJ t          j        |d          }t          j        ||k              sJ t          j        |d          }t          j        ||k              sJ d S )	Nr   r   i8r   r/   F)copyi4r@   )r   r    r(   )r   r   dnp_datas       r   test_convert_numpy_arrayz#TestColumn.test_convert_numpy_array^   s    F9993d333(1++vgl#####(15)))vgl#####(1D)))vgl#######r   c                      |g dddd          }|                     d           t          j        |j        g dk              sJ d S )Nr   r   f8mr   r/   unitkmgMbP?gMb`?g~jth?)convert_unit_tor   r(   data)r   r   rY   s      r   test_convert_unitzTestColumn.test_convert_unith   s\    F9993d===	$vaf 5 5 556666666r   c                 |   t          j        dg d          }t          j        |                                d          sJ t          |                                t          j        t          f          sJ t          j        |                                d          sJ t          |                                t          j        t          f          sJ t          t          j	        |          t           j                  sJ t          j        dg d          }t          j        |                                d          sJ t          |                                t          j
        t          f          sJ t          j        dg dg dg          }|                                d	k    sJ t          |                                t          j
        t          f          sJ t          j        |                    d
          g dk              sJ |                    d
          j        dk    sJ t          |                    d
          t          j                  sJ t          j        dg dg d          }t          j        |                                d          sJ t          |                                t          j        t          f          sJ t          j        |                                d          sJ t          |                                t          j        t          f          sJ dS )zTest that the __array_wrap__ method converts a reduction ufunc
        output that has a different shape into an ndarray view.  Without this a
        method call like c.mean() returns a Column array object with length=1.r         ?       @      @)r   rd   ri   g      @r      )      rk      r   axis)rm      	   )r   )r   r   r   )r   rd   mask      ?rj   N)r   r   r   allclosemeanr   floatingrP   sumcosintegerintr(   shaper   MaskedColumn)r   r   s     r   test_array_wrapzTestColumn.test_array_wrapm   s   
 Lc888{16688S)))))!&&((R[%$899999{15577C(((((!%%''BK#788888 "&))U\22222 Lc			222{15577A&&&&&!%%''BJ#455555 LcIII(>???uuww"}}}}!%%''BJ#455555vaeeemmyyy011111uu!u}}"d****!%%Q%--44444 CoooIIINNN{16688S)))))!&&((R[%$899999{15577C(((((!%%''BK#78888888r   c                      |ddg          }|j         J t          j        |t          j        ddg          k              sJ dS )zBCan create a column without supplying name, which defaults to Noner   r   N)r   r   r(   r    rF   s      r   test_name_nonezTestColumn.test_name_none   sM    FAq6NNv~~~va28QF+++,,,,,,,r   c                 @    |t          j        g d          t          j        z            }t          j        |j        t          j        g d          k              sJ t          j        |j        t          j        k              sJ  |t          j        g d          t          j        z  t          j                  }t          j        |j        t          j        g d          k              sJ t          j        |j        t          j        k              sJ d S )Nr   )rd   )rd   r`   d      i,  )r   r    ur^   r(   rd   r`   cmrF   s      r   test_quantity_initzTestColumn.test_quantity_init   s    F++ac1222vaf 3 3344444vafm$$$$$F++ac1===vaf 9 99:::::vafn%%%%%%%r   c                      |g dd          }dt           j        z  }||k     }t          j        |g dk              sJ ||k    }t          j        |g dk              sJ d S )N)r   i4  r   Hz)r`   r   TFT)r   kHzr   r(   )r   r   r   qchecks        r   test_quantity_comparisonz#TestColumn.test_quantity_comparison   s    F<<<d+++IAve222233333Qve22223333333r   c           	          |g dddddddi          }d|_         d	|_        d
|_        d|_        ddi|_        t          dd          t          dd          t          j        ddg          t          j        g d          fD ]U}||         }|j         dk    sJ |j        t          j	        u sJ |j        d
k    sJ |j        dk    sJ |j        ddik    sJ V|d         }dD ]}t          ||          rJ dS )z
        Test for issue #3023: when calling getitem with a MaskedArray subclass
        the original object attributes are not copied.
        r   r   r^   %iaar   )r   r`   rL   descriptionmetabra   z%dbbbbbr   Nr   FTF)r   r`   rL   r   r   slicer   r    r   ra   hasattr)r   r   rR   itemr   valattrs          r   'test_attrs_survive_getitem_after_changez2TestColumn.test_attrs_survive_getitem_after_change   sR   
 VIICc$DPSUVx
 
 
 	!* $$NNHaVH)))**	
 	) 	)D DB7c>>>>7ad????9$$$$>T))))7uaj((((( eE 	* 	*DsD))))))	* 	*r   c                     |g dddd          }t          j        |j        g dt          j        z  k              sJ t          j        |j        j        g dt          j        z  j        k              sJ t          j        |j        |                    d          k              sJ t          j        |j        j        |                    d          j        k              sJ t           j                            |                    t          j	                  j        g dt          j	        z  j                   t           j                            |                    d          j        g dt          j	        z  j                   t           j                            |                    t          j
        t          j                                                  j        g d	            |g dddd           }t          j        t          j                  5  |                    t          j	                   d d d            n# 1 swxY w Y   t          j        |                    t          j                  t          j        g d          k              sJ g d
t          j	        z  }||                    t          j	                  d d <   t           j                            |g d           ||j                                        d d <   t           j                            |g d           ||j        d d <   t           j                            |g d            |g ddt&          d          }||j        d d <   t           j                            |g d            |g ddd          }t          j        t(                    5  |j         d d d            d S # 1 swxY w Y   d S )Nr   r   r]   r^   r_   )r   r   rj   rb   ra   )gBp譼r@gBp譼b@gk5=X@)r   r   rm   )  i  i  )argr   stuff)r   r`   )r   r(   quantityr   r^   valuetotestingassert_allclosera   MHzequivalenciesspectralpytestraises
UnitsErrordimensionless_unscaledr    rW   r{   	TypeError)r   r   rY   d_nounitr   d2d3s          r   test_to_quantityzTestColumn.test_to_quantity   s   F9993d===vaj[[[13%6788888vaj&;;;+<*CCDDDDDvajADDII-.....vaj&!$$s))/9:::::

""DDJJ444qt;B	
 	
 	
 	
""DDJJ444qt;B	
 	
 	
 	
""DD0022339111	
 	
 	

 6)))#TEEE]1<(( 	 	KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	vhkk!":;;rx			?R?RRSSSSS II QT

111

""1iii000  !
!!!

""1iii000 
111

""1&8&8&8999 VIIICs===AAA

""2'9'9'9::: V,,,3SAAA]9%% 	 	KK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$    IIIO!!O%(O%c                     |g dddd          }t          j        |j        g dt          j        t          j                  z  k              sJ t          j        |j        j        g dt          j        t          j                  z  j        k              sJ t          j        |j        |                    d          k              sJ t          j        |j        j        |                    d          j        k              sJ g dt          j        z  }t           j        	                    |                    t          j                  |           dS )zW
        Tests for #8424, check if function-unit can be retrieved from column.
        r   r   r]   zdex(AA)r_   )
   r   r   N)
r   r(   r   r   dexAAr   r   r   r   )r   r   rY   r   s       r   test_to_funcunit_quantityz$TestColumn.test_to_funcunit_quantity   s    F9993dCCCvajYYYqt%<=>>>>>vaj&999quQT{{+B*IIJJJJJvajADDOO344444vaj&!$$y//*??@@@@@ OOad"

""144::q11111r   c                 V   t           t          j        f}|D ]} |ddgddgg          } |d          } |d          }t          j        ||         ddgk              sJ t	          ||                   t          |d          rt          j        j        nt          j        k    sJ ||         j	        dk    sJ |||         }t          j        |ddggk              sJ t          ||          sJ |j	        dk    sJ  |ddg          }t          j        ||         dk              sJ t          ||         t          j                  sJ ||         j	        d	k    sJ |||         }t          j        |dgk              sJ t          ||          sJ |j	        d
k    sJ dS )z
        Tests for #3095, which forces integer item access to always return a plain
        ndarray or MaskedArray, even in the case of a multi-dim column.
        r   r   r   rl   r   rs   r   r   r    )r   N)r{   r   int_r(   r+   r   r,   r.   r   r|   r   rz   )r   r   integer_typesint_typer   i0i1c01s           r   test_item_access_typez TestColumn.test_item_access_type
  s   
 bg% 	% 	%HAA'((A!B!B6!B%Aq6/*****";;%,VV%<%<L!!"*    R5;$&&&&BrE(C6#1a&/*****c6*****9&&&&1vA6!B%1*%%%%%aeRZ00000R5;"$$$$BrE(C6#!*%%%%%c6*****9$$$$$/	% 	%r   c                 V    |g ddt           dddddd	          }|                    d
d          }t          j        |g dk              sJ |                    |          sJ t          |          t          |          u sJ t          |d          r|j        j        |j	        j        k    sJ |                    dd          }t          j        |g dk              sJ |                    dd          }t          j        |g dk              sJ |                    dd          }t          j        |g dk              sJ |                    d
g d          }t          |d          r|j        j        |j	        j        k    sJ t          j        t          t          f          5  |                    dd          }d d d            n# 1 swxY w Y   t          j        t          t          f          5  |                    dd          }d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   mJyr   test columnrK      r   rY   r   r/   r`   rL   r   r   r   r   r   r   r   r   rs   )r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   rl   )r{   insertr   r(   attrs_equalr+   r   rd   r|   rs   r   r   
ValueError
IndexErrorr   r   r   rR   s       r   test_insert_basiczTestColumn.test_insert_basic*  s   FII%r""
 
 
 XXavbNNN*+++++~~a     Aww$r((""""2v 	27=BGM1111XXb#vbNNN*+++++XXavbNNN*+++++XXb#vbNNN*+++++XXa))2v 	27=BGM1111 ]J
344 	# 	#"c""B	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#]J
344 	" 	"!S!!B	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s$   ,GGG:HH"%H"c                     |ddgddgg          }|                     dddgd          }t          j        |g d	k              sJ |                     dddgd          }t          j        |g d
g dgk              sJ dS )z"Insert with non-default axis kwargr   r   r   rl   rm   rk   Nro   )r   rm   rk   r   r   rl   )r   rm   r   )r   rk   rl   r   r   r(   r   s       r   test_insert_axiszTestColumn.test_insert_axisP  s    FQFQF#$$XXa!QdX++vb..../////XXa!QaX((vbYYY			223333333r   c                     |ddg          }|                     dd          }t          j        |g dk              sJ  |ddg          }|                     dddg          }t          j        |g dk              sJ d S )	Nr   r   r   abc)r   r   r   r   def)r   r   r   r   r   r   s       r   test_insert_string_expandz$TestColumn.test_insert_string_expandZ  s    FC:XXavb----.....FC:XXa#u&&vb22223333333r   c                    t          j        ddg          }|                    dt          j        j                  }t          j        |g dk              sJ t          j        |j        g dk              sJ |j        dk    sJ |                    dt          j        	                    dd	gd
dg                    }t          j        |g dk              sJ t          j        |j        g dk              sJ |j        dk    sJ d S )Nr   r   r   ) r   r   )TFFU1r   cccddTFrs   )r   r   r   r   )FTFFU3)
r   r}   r   r   r,   maskedr(   rs   r/   r.   )r   r   rR   r   s       r    test_insert_string_masked_valuesz+TestColumn.test_insert_string_masked_valuesc  s   Sz**XXa&&vbNNN*+++++vbg!5!5!5566666x4XXa**E4=e}*MMNNvb333344444vbg!<!<!<<=====x4r   c                 `    |ddg          }t          j        t          d          5  |                    dd           d d d            n# 1 swxY w Y    |ddg          }t          j        t          d	          5  |                    dd           d d d            d S # 1 swxY w Y   d S )
Nr   r   zinvalid literal for intmatchr   stringr   r   z$string operation on non-string array)r   r   r   r   r   rF   s      r   test_insert_string_type_errorz(TestColumn.test_insert_string_type_errorn  s2   FAq6NN]:-FGGG 	" 	"HHQ!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" FC:]9,RSSS 	 	HHQNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AAA?B##B'*B'c                     |ddgddggdt                     }|                    dddg          }t          j        |ddgddgddggk              sJ |                    dd          }t          j        |ddgddgddggk              sJ t	          j        t                    5  |                    dg d	          }d d d            d S # 1 swxY w Y   d S )
Nr   r   r   rl   r   rV   r   r   r   )r{   r   r   r(   r   r   r   r   s       r   test_insert_multidimzTestColumn.test_insert_multidimw  s<   FQFQF##S999 XXa#s$$vbaVc3Z!Q8899999 XXavbaVc3Z!Q8899999 ]:&& 	. 	.!___--B	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   'CCCc           	           |g ddt                     }|                    dddg          }t          j        |t          j        dddgdd gt                     k              sJ d S )N)r   r   Nr   rV   r   r   r   r@   )objectr   r   r(   r    r   s       r   test_insert_objectzTestColumn.test_insert_object  sr    F>>>6::: XXa#s$$vbBHcC:q$%?vNNNNOOOOOOOr   c                 2   t          j        g dddg d          }|                    dd          }t          j        |j        j        g dk              sJ |j        dk    sJ t          j        |j        j        g d	k              sJ t          |          t          |          u sJ d
D ]h}|                    dd|          }t          j        |j        j        g dk              sJ t          j        |j        j        d|ddgk              sJ id S )Nr   r   i'  r   )r   
fill_valuers   r   r   r   )FFTF)FTr   FT)	r   r}   r   r   r(   rd   r   rs   r+   )r   r   rR   rs   s       r   test_insert_maskedzTestColumn.test_insert_masked  s=   IICD7K7K7K
 
 

 XXavbglnnn455555}$$$$vbgl&A&A&AABBBBBAww$r((""""! 	F 	FD!St,,B6"',...8999996"',5$e*DDEEEEEE	F 	Fr   c                     t           j                            ddgddg          }t          j        |g          }|j        dk    sJ t          j        |d         j        ddgk              sJ d S )Nr   r   TFr   r   r   )r   r,   r.   r   r}   r|   r(   rs   )r   rd   r   s      r   test_masked_multidim_as_listz'TestColumn.test_masked_multidim_as_list  st    u  !QtUm <<v&&w&    vadiD%=01111111r   c                    t          j        ddgddggdt                    }|                    dddgd	
          }t	          j        |j        j        ddgddgddggk              sJ t	          j        |j        j        ddgd	d	gddggk              sJ |                    dddgd	dg
          }t	          j        |j        j        ddgddgddggk              sJ t	          j        |j        j        ddgd	dgddggk              sJ t          j	        t                    5  |                    dddgg d
          }d d d            d S # 1 swxY w Y   d S )Nr   r   r   rl   r   rV   r   r   Tr   Fr   )r   r}   r{   r   r   r(   rd   rs   r   r   r   )r   r   rR   s      r   test_insert_masked_multidimz&TestColumn.test_insert_masked_multidim  s   AA/cEEEXXa#s$X//vbgl1vSzAq6&BBCCCCCvbglu~d|eU^&TTUUUUUXXa#s4-X88vbgl1vSzAq6&BBCCCCCvbglu~e}uen&UUVVVVV]:&& 	C 	C!c3Z.A.A.ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   &EEEc                     t          j        ddgddggdd          }t          j        t                    5  dd	g|d
         _        ddd           dS # 1 swxY w Y   dS )zs
        When table is not masked and trying to set mask on column then
        it's Raise AttributeError.
        r   r   r   rl   )r   r   )rX   r]   )namesr/   TFr   N)r   Tabler   r   AttributeErrorrs   )r   ts     r   test_mask_on_non_masked_tablez(TestColumn.test_mask_on_non_masked_table  s     K!Q!Q(
,OOO]>** 	( 	(-AcFK	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   AAAN)rE   
__module____qualname__r   r4   r>   rG   rS   r[   re   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
      s       * * *  45 5 5.Q Q Q  "$ $ $7 7 7
 9  9  9D- - -& & &4 4 4* * *B0 0 0d2 2 2% % %@$" $" $"L4 4 44 4 4	  	  	   . . .P P PF F F"2 2 2C C C	( 	( 	( 	( 	(r   r
   c                   N    e 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 )TestAttrEqualzEBunch of tests originally from ATpy that test the attrs_equal method.c                      |dt           d          } |dt           d          }|                    |          sJ d S )Nr   r   r_   r{   r   r   r   rR   r   s       r   test_5zTestAttrEqual.test_5  sL    VCe444VCe444~~b!!!!!!!r   c           
           |dt           dddddd          } |dt           dddddd          }|                    |          sJ d S 	Nr   r   r   r   rK   r   r   r   r   r  s       r   test_6zTestAttrEqual.test_6  s    V%r""
 
 
 V%r""
 
 
 ~~b!!!!!!!r   c           
           |dt           dddddd          } |d	t           dddddd          }|                    |          rJ d S )
Nr   r   r   r   rK   r   r   r   r   r   r  s       r   test_7zTestAttrEqual.test_7      V%r""
 
 
 V%r""
 
 
 >>"%%%%%%%r   c           
           |dt           dddddd          } |dt          dddddd          }|                    |          rJ d S r  )r{   rP   r   r  s       r   test_8zTestAttrEqual.test_8  s    V%r""
 
 
 V%r""
 
 
 >>"%%%%%%%r   c           
           |dt           dddddd          } |dt           d	ddddd          }|                    |          rJ d S )
Nr   r   r   r   rK   r   r   r   zerg.cm-2.s-1.Hz-1r   r  s       r   test_9zTestAttrEqual.test_9  s    V%r""
 
 
 V$%r""
 
 
 >>"%%%%%%%r   c           
           |dt           dddddd          } |dt           dd	dddd          }|                    |          rJ d S )
Nr   r   r   r   rK   r   r   r   z%gr   r  s       r   test_10zTestAttrEqual.test_10  r  r   c           
           |dt           dddddd          } |dt           ddd	ddd          }|                    |          rJ d S )
Nr   r   r   r   rK   r   r   r   zanother test columnr   r  s       r   test_11zTestAttrEqual.test_11%  s    V%r""
 
 
 V-r""
 
 
 >>"%%%%%%%r   c           
           |dt           dddddd          } |dt           dddddd	          }|                    |          rJ d S )
Nr   r   r   r   rK   r   r   r   )erY   r   r  s       r   test_12zTestAttrEqual.test_128  r  r   c           
           |dt           dddddd          } |dt           dddd	dd          }|                    |          rJ d S )
Nr   r   r   r   rK   r   r   r   rr   r   r  s       r   test_13zTestAttrEqual.test_13K  r  r   c           
          t          j        dt          dddddd          }t          j        dt          dddddd          }|                    |          sJ |                    |          sJ d S r  )r   r   r{   r}   r   )r   rR   r   s      r   test_col_and_masked_colz%TestAttrEqual.test_col_and_masked_col^  s    \%r""
 
 
 %r""
 
 
 ~~b!!!!!~~b!!!!!!!r   N)rE   r   r   __doc__r  r  r  r
  r  r  r  r  r  r  r   r   r   r   r     s        OO" " "
" " "&& & &&& & &&& & &&& & &&& & &&& & &&& & &&" " " " "r   r   c                        e Zd Zej        ZdZdS )TestMetaColumnr   N)rE   r   r   r   r   
test_classargsr   r   r   r  r  x  s        JDDDr   r  c                        e Zd Zej        ZdZdS )TestMetaMaskedColumnr   N)rE   r   r   r   r}   r  r  r   r   r   r  r  }  s        #JDDDr   r  c            	      
   t          j        ddgddddddi	          } | dd         j        dk    sJ | dd         j        dk    sJ | dd         j        dk    sJ | dd         j        dk    sJ | dd         j        d         dk    sJ t          j        ddgddddddi	          } | dd         j        dk    sJ | dd         j        dk    sJ | dd         j        dk    sJ | dd         j        dk    sJ | dd         j        d         dk    sJ t          j        g d
ddddddi	          } |                     ddg          t          j        | ddg          fD ]I}|j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        d         dk    sJ J|                     d          t          j        | d          fD ]3}|dk    sJ |j
        dk    sJ t          |t           j                  rJ 4t          j        g d
ddddddi	          } |                     ddg          t          j        | ddg          fD ]I}|j        dk    sJ |j        dk    sJ |j        dk    sJ |j        dk    sJ |j        d         dk    sJ J|                     d          t          j        | d          fD ]3}|dk    sJ |j
        dk    sJ t          |t           j                  rJ 4dS )z
    Regression test for #1471: MaskedArray does not call __array_finalize__ so
    the meta-data was not getting copied over. By overloading _update_from we
    are able to work around this bug.
    r   r   r   r   r^   r   r   rK   )rd   r   r   r`   rL   r   r   r   r   N)r   r   r   r   r`   rL   r   r}   taker   r|   r   )r   subsets     r    test_getitem_metadata_regressionr"    s    	V#3SSRSH	 	 	A QqS6;#QqS6$$$$QqS6;#QqS6=D    QqS6;sq    V#3SSRSH	 	 	A QqS6;#QqS6$$$$QqS6;#QqS6=D    QqS6;sq     	YYScDPSUVx	 	 	A 661a&>>271q!f#5#56 % %{c!!!!!S(((({c!!!!}$$$${31$$$$$ 66!99bgamm, 4 4{{{{|r!!!!fel333333YYScDPSUVx	 	 	A 661a&>>271q!f#5#56 % %{c!!!!!S(((({c!!!!}$$$${31$$$$$ 66!99bgamm, : :{{{{|r!!!!fe&8999999: :r   c                  |    t          j        g d          } t          j        | d          }t	          |           d S )Nr   r   r   )r   r    r   r   r   )r1   r   s     r   test_unicode_guidelinesr$    s=    
(999

CSs###A%a(((((r   c                      t          j        d          } t          |           dk    sJ t          |           dk    sJ dS )z
    Column is not designed to hold scalars, but for numpy 1.6 this can happen:

      >> type(np.std(table.Column([1, 2])))
      astropy.table.column.Column
    rt   z1.5N)r   r   rD   r0   )r   s    r   test_scalar_columnr&    sA     	SA77eq66U??????r   c                     t          j        ddgddggddg          } t          | d         t           j        j                  sJ t          | d         t           j        j                  sJ d| d         _        t          | d         t          j                  sJ t          | d         t           j        j                  sJ t          | d         d	         t          j                  sJ t          | d	         d         t          j                  sJ t          | d         d	         t          j                  rJ t          | d	         d         t          j                  rJ t          j        t          j	        t          j
        dz  z            | d         _        t          | d         t          j                  sJ d
S )zS
    Ensures that a QTable that gets assigned a unit switches to be Quantity-y
    r   r   r   g@if)r   zkm/sr   N)r   QTabler   columnr   r`   r   Quantityr   r   sDex)qtabs    r   test_qtable_column_conversionr0    st    <!Q!S*3*===Dd3i!455555d3i!455555DINd3i,,,,,d3i!455555 d3ilAJ/////d1gclAJ/////$s)A,
33333$q'#,
33333 U14!#q&=))DINd3i'''''''r   r   TFc                 j   ddl m}m} t          j        ddggdg|           }d|d         d<   d	|d         d
d
<   t          j        t          j        d          5 } | |                      }d|d         d<   d
d
d
           n# 1 swxY w Y   |d         d         dk    sJ t          |          dk    sJ |d         j	        |j	        dz   k    sJ d|d         j
        v sJ t          j        t          j        d          5 }ddg|d         d
d
<   d
d
d
           n# 1 swxY w Y   t          j        |d         ddgk              sJ t          |          dk    sJ t          j        ddg          }ddg|d
d
<   ||d         d
d
<   t          j        |d         ddgk              sJ d
S )z
    Test warnings associated with in-place assignment to a string
    column that results in truncation of the right hand side.
    r   )currentframegetframeinfor   r   r   )r   r   ccr   r   N=truncated right side string\(s\) longer than 2 character\(s\)r   eeeeetest_columnffgggggffffggggr)  g)inspectr2  r3  r   r   r   warnsStringTruncateWarningr*   linenofilenamer   r(   r    )r   r2  r3  r   w	frameinfor   s          r   test_string_truncation_warningrF    sx    32222222dD\N3%???AAcF1IAcF111I	#R
 
 
  
 L00	#q	               S6!9q66Q;;;; Q4;)*Q.....AaDM))))	#R
 
 
 " 
5M#qqq		" " " " " " " " " " " " " " "
 6!C&T4L()))))q66Q;;;;
 (FF#
$
$C3ZCFAcF111I6!C&S#J&'''''''s$   BBBD##D'*D'c                  v   ddgddgddgfD ]} t          j        |           }t          j        j        |d<   t          j        |j        ddgk              sJ t          j        j        |d	d	<   t          j        |j        ddgk              sJ t          j        d
dg          }t          j        t           j	        d          5 }t          j        j        dg|d	d	<   d	d	d	           n# 1 swxY w Y   |d         dk    sJ t          j        |j        ddgk              sJ t          |          dk    sJ d	S )z
    Test warnings associated with in-place assignment to a string
    to a masked column, specifically where the right hand side
    contains np.ma.masked.
    r   r   r   r   rh   ri   FTNr   r   r5  r   r:  r;  )r   r}   r   r,   r   r(   rs   r   r@  rA  r*   )valuesmcrD  s      r   %test_string_truncation_warning_maskedrJ    s    :1vSz2 / /''1vbg%./////111vbg$-......		T4L	)	)B	#R
 
 
 & 
u%111	& & & & & & & & & & & & & & &
 a5D====6"'dE]*+++++q66Q;;;;;;s   C**C.1C.r   c                 V   d} | |dgd          }|j         j        dk    sJ |d         |k    sJ t          |d         t                    sJ t          |dd         t          j                  sJ t          j        |dd         t          j        |dg          k              sJ dS )zM
    Create a bytestring Column from strings (including unicode) in Py3.
       bär   Sr@   r   Nr   )	r/   charr   r0   r   r   r   r(   r    r   ubar   s      r   )test_col_unicode_sandwich_create_from_strrQ  7  s     CU|3'''A7<3Q43;;;;adC     aeU\*****6!BQB%28S%L1112222222r   c                     | ddg          }|j         j        dk    sJ |d         rJ |d         dk    sJ t          |d         t                    sJ t          |d         t                    rJ t          |dd         t
          j                  sJ t          j        |dd         t          j	        ddg          k              sJ t          j        |dd         t          j	        ddg          k              rJ dS )z
    Create a Column of dtype object with bytestring in it and make sure
    it keeps the bytestring and not convert to str with accessed.
    N   defOr   r   r   r   )
r/   rN  r   bytesr0   r   r   r   r(   r    )r   r   s     r   #test_col_unicode_sandwich_bytes_objrV  G  s    	f~A7<3tOOOQ46>>>>adE"""""!A$$$$$$aeU\*****6!BQB%28T6N33344444vaerxu6667777777r   c                 2   d}|                     d          } | |dg          }|j        j        dk    sJ |d         |k    sJ t          |d         t                    sJ t          |dd         t
          j                  sJ t          j        |dd         t          j	        |dg          k              sJ t          |dd         t
          j                  sJ |dd         j        j        dk    sJ t          j        ||dgk              sJ ||dgk    }t          |          t          |j                  u sJ |j        j        d	k    sJ t          j        |          sJ t          j        |t          j	        |dg          k              sJ t          j        |t          j	        |dg          k              sJ ||f}|D ]I}||k    }t          |          t          |j                  u sJ t          j        |d
dgk              sJ JdS )z~
    Create a bytestring Column from bytes and ensure that it works in Python 3 in
    a convenient way like in Python 2.
    rL  utf-8rS  rM  r   Nr   r   ?TF)encoder/   rN  r   r0   r   r   r   r(   r    r+   rd   )r   rP  uba8r   okcmpscmps          r   test_col_unicode_sandwich_bytesr_  X  s2    C::gDf~A7<3Q43;;;;adC     aeU\*****6!BQB%28S%L11122222adEL)))))QQQ4:?c!!!! 6!U|#$$$$$	
tVn	B88tAF||####8=C6"::6!rxe---.....6!rxv///00000 ;D + +#XBxx4<<''''vbT5M)******+ +r   c                  F   d} |                      d          }t          j        | dgd          }|d         | k    sJ t          |dd         t          j                  sJ t          |d         t                    sJ t          j        |dd         t          j        | dg          k              sJ t          |dd         t          j                  sJ |dd         j        j	        dk    sJ || dgk    }t          |          t
          j        k    sJ |j        j	        d	k    sJ t          j        |          sJ t          j                    5  t          j        d
d           t          j        ||dgk              sJ 	 ddd           dS # 1 swxY w Y   dS )z<
    Sanity check that Unicode Column behaves normally.
    rL  rX  r   Ur@   r   Nr   rY  ignorez!.*elementwise comparison failed.*)messagerS  )rZ  r   r   r   r0   r   r(   r    r/   rN  r+   r   warningscatch_warningsfilterwarnings)rP  r[  r   r\  s       r   !test_col_unicode_sandwich_unicoderg    s    C::gDc5\---AQ43;;;;aeU\*****adC     6!BQB%28S%L11122222adEL)))))QQQ4:?c!!!!	
sEl	B88rz!!!!8=C6"::		 	"	" + +2UVVVVvaD&>)******+ + + + + + + + + + + + + + + + + +s   3FFFc                     t          j        ddg          } t          j        j        | d<   t          | dd         t           j                  sJ t          | d         t                    sJ | d         dk    sJ | d         t          j        j        u sJ t          | dd         t           j                  sJ | dd         j        j        dk    sJ | ddgk    }|d         sJ |d         t          j        j        u sJ t          j	        | ddgk              sJ t          j	        | t          j
        ddg          k              sJ t          j	        | t          j
        ddg          k              sJ d	D ]O}| |k    }t          |          t          j        j        u sJ |d         sJ |d         t          j        j        u sJ PdS )
zy
    Create a bytestring MaskedColumn and ensure that it works in Python 3 in
    a convenient way like in Python 2.
       abcrS  r   Nr   r   rM  r   )r   ri  )r   r}   r   r,   r   r   r0   r/   rN  r(   r    r+   r.   )r   r\  r^  s      r    test_masked_col_unicode_sandwichrj    s   
 	FF+,,A5<AaDaeU/00000adC     Q45====Q425<adE./////QQQ4:?c!!!!	
uen	Ba5LLLa5BEL    6!''(((((6!rx///000006!rx 011122222 % %#XBxx25,,,,,!u!u$$$$$	% %r   c                    d} | ddg          }d|d<   t          j        |ddgk              sJ ||d<   t          j        ||dgk              sJ |                                dd	d
|z   dgk    sJ d|dd<   t          j        |ddgk              sJ ||dd<   t          j        |||gk              sJ d|dd<   |dg|dd<   t          j        ||dgk              sJ dS )z
    Test setting
    rL  ri  rS  s   aar   r   r   Nonez----z  z defs   ccNr4  r   )r   r(   pformatrO  s      r   test_unicode_sandwich_setrn    s8   
 C  AAaD6!e}$%%%%% 	 	 6!U|#$$$$$99;;664#:v>>>>>AaaaD6!d|#$$$$$AaaaD6!Sz/"""""AaaaD=AaaaD6!V}$%%%%%%%r   class1class2c                 n    | ddg          }|t           u rd}n|t          u rddg}n |ddg          }t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k     ddgk              sJ t          j        ||k     ddgk              sJ t          j        ||k    ddgk              sJ t          j        ||k    ddgk              sJ dS )zTest that comparing a bytestring Column/MaskedColumn with various
    str (unicode) object types gives the expected result.  Tests #6838.
       a   cr   r   TFN)r0   listr   r(   )ro  rp  obj1obj2s       r   test_unicode_sandwich_comparerw    s    64,D}}	4SzvsCj!!644<T5M122222644<T5M122222644<UDM122222644<UDM12222264$;E4=01111164$;E5>122222644<T5M122222644<T4L01111164$;E5>12222264$;E4=011111644<T4L011111644<T5M12222222r   c                     t          j        g dg d          } t          j        g dg d          }| |k    || k    fD ]]}|d         t          j        j        u sJ |d         t          j        j        u sJ |d         t          j        j        u sJ |d	         sJ ^| |k    || k    fD ]]}|d         t          j        j        u sJ |d         t          j        j        u sJ |d         t          j        j        u sJ |d	         rJ ^d
S )z"Test the fix for #6839 from #6899.r   r   r   rY   )TFTFr   )rr     brs     d)TTFFr   r   r   r   N)r   r}   r   r,   r   )rR   r   r^  s      r   $test_unicode_sandwich_masked_comparer|    sB   		0007Q7Q7Q	R	R	RB		444;U;U;U	V	V	VBrR2X'  1v%%%%1v%%%%1v%%%%1vrR2X'  1v%%%%1v%%%%1v%%%%q6	 r   c                      t          j        ddgddgd          } t          | j        j                  dk    sJ t          j        |           }t          ||            d S )N)rh   ri   )rj   g      @)FFzf8,f8)rs   r/   r   )r   r}   r*   r/   fieldsr   )rI  mc2s     r   'test_structured_masked_column_roundtripr    so    			Z 'Gw
 
 
B rx1$$$$

R
 
 CsBr   r/   zi4,f4z	f4,(2,)f8c                     t          j        |           } t          j        dd|           }|j        dk    sJ |j        | k    sJ d S )Nrm   r   )lengthr|   r/   )rm   r   )r   r/   r   r   r|   )r/   r   s     r   !test_structured_empty_column_initr    sQ    HUOOEAT777A7f7er   c            	      R   t          j        g d          } t          j        t          j        |           t          j        |           t          j        |           t          j	        | d          d          }t          |d         j                  t           j        k    sJ t          |d         j                  t           j        j        k    sJ t          |d         j                  t           j        k    sJ t          |d         j                  t           j        k    sJ d	S )
zCan a column's underlying data consistently be accessed via `.value`,
    whether it is a `Column`, `MaskedColumn`, `Quantity`, or `Time`?r   mjd)rL   ry  r   r   r   rY   N)r   r    r   r*  r   r}   r   r,  r   Timer+   r   r   r,   r.   )rd   tbls     r   test_column_value_accessr    s     8IIID
,d###D))D!!4...		
 	
 C C2:----C25#44444C2:----C2:------r   c                     t          j        g dg d          } | j        j        d         dk    sJ d| j        j        d<   | j        j        d         dk    sJ |                                 }|j        j        d         dk    sJ t          j        |           }|j        j        d         dk    sJ |                     t           j                  }|j        j        d         dk    sJ | dd          }|j        j        d         dk    sJ d S )Nrg   r   r   ecsv
null_value	data_maskr   )r   r}   infoserialize_methodrW   rC   )rI  r  mc3mc4mc5s        r   /test_masked_column_serialize_method_propagationr  .  s   		OOO2E2E2E	F	F	FB7#F+|;;;;'2BGV$7#F+{::::
''))C8$V,;;;;

R
 
 C8$V,;;;;
''%$
%
%C8$V,;;;;
QRR&C8$V,;;;;;;r   )rM  ra  r(  c                     | g d|          }t          | t          j                  rt          j        j        |d<   |dk    rdddgf}n
dddgddd	gf}|D ]}t          j        ||          }t          j        |j        |d
          }|                    |d
          }t          j	        ||k              sJ t          j        ||d
          }t          j	        ||k              sJ d S )N)r   r   r   r   r@   r   r(  r   21   2   1right)side)
r   r   r}   r   r,   r   r    searchsortedrd   r(   )r   r/   r   vsvexpress          r   test_searchsortedr  =  s   |||5)))A&%,-- u|!||!Q[C:tdD\2 " "HQe$$$oafag666nnQWn--vcSj!!!!!oa111vcSj!!!!!!" "r   )-r!   rd  numpyr   r   numpy.testingr   rM   r   r   r   r   astropy.tests.helperr   !astropy.utils.tests.test_metadatar   r
   r   r  r  r"  r$  r&  r0  markparametrizerF  rJ  r   r}   rQ  rV  r_  rg  rj  rn  r0   rt  rw  r|  r  r  r  r  r  r   r   r   <module>r     s          , , , , , ,               B B B B B B : : : : : :k( k( k( k( k( k( k( k(\r" r" r" r" r" r" r" r"t    \   
    <   
;: ;: ;:|) ) )	 	 	( ( (2 D%=11&( &( 21&(R  B EL%2D#EFF3 3 GF3 EL%2D#EFF8 8 GF8  EL%2D#EFF#+ #+ GF#+L+ + +6% % %< EL%2D#EFF& & GF&8 E$6#EFFE$6c4#PQQ3 3 RQ GF3>  *      7K"899  :9. . .$< < < ///22" " 32" " "r   