a
    ߙfb$                     @   s  d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dl
mZ d dl
mZ G dd	 d	ZG d
d dZG dd deZG dd deZdd Zdd Zdd Zdd Zejdddgdd Zdd Zejdejejfd d! Zejdejejfd"d# Zejdejejfd$d% Zd&d' Z d(d) Z!ejdejejfd*d+ Z"ejd,ejejgejd-ejeje#e$gd.d/ Z%d0d1 Z&d2d3 Z'ejd4d5d6gd7d8 Z(d9d: Z)d;d< Z*dS )=    )MetaBaseTestN)assert_array_equal)!assert_follows_unicode_guidelines)table)time)unitsc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6
TestColumnc                 C   sD   |dd}t |tjsJ |d }t ||s0J t |tjs@J d S )Naname   )
isinstancenpndarray)selfColumncc2 r   >lib/python3.9/site-packages/astropy/table/tests/test_column.pytest_subclass   s
    
zTestColumn.test_subclassc                 C   s  t g d}||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 ]v}|r~t 	|sn
t 
|rJ t|dksJ |tju rt|t jksJ nt|t jjjksJ |jjdksjJ qjqN|d |k }t 	|sJ 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   opZ
test_equalr   r#   r   r   r   test_numpy_ops   s$    
zTestColumn.test_numpy_opsc                 C   s   t g d}||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sjJ |rzt |sn
t 	|rJ |t
ju rt|t jksJ qFt|t jjjksJ |t jurF|jjdksFJ qFdS )r   r   r	   r
   TFr   N)r   r   ZisfiniteZisinfZisnanZsignZsignbitr&   r$   r%   r   r   r'   r   r(   r)   r*   r+   r,   )r   r   r-   r   ZufuncZ	test_trueresultr   r   r   test_numpy_boolean_ufuncs3   s     

z$TestColumn.test_numpy_boolean_ufuncsc                 C   s8   t jg dt jd|}t|d|j dks4J d S )Nr   r+   <z dtype='int64' length=3>
1
2
3)r   r   Zint64viewrepr__name__r   r   r   r   r   r   	test_viewH   s    zTestColumn.test_viewc                 C   sj   ddl m} |dd> |tddtdd}t| g d	ksHJ W d
   n1 s\0    Y  d
S )z/Show that the formatted output from str() worksr   )confZ	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)astropyr9   Zset_tempr   Zarangefloatr,   
splitlines)r   r   r9   c1r   r   r   test_formatL   s    zTestColumn.test_formatc                 C   sr   |g dddd}t |}t ||ks.J t j|dd}t ||ksNJ t j|dd}t ||ksnJ d S )	Nr   r	   Zi8r   r+   F)copyi4r2   )r   r   r$   )r   r   dZnp_datar   r   r   test_convert_numpy_array[   s    
z#TestColumn.test_convert_numpy_arrayc                 C   s:   |g ddddd}| d t|jg dks6J d S )Nr   r	   f8mr   r+   unitkmgMbP?gMb`?g~jth?)Zconvert_unit_tor   r$   data)r   r   rD   r   r   r   test_convert_unite   s    
zTestColumn.test_convert_unitc                 C   s  t jdg dd}t| ds&J t| tjtfs>J t| dsRJ t| tjtfsjJ tt	|t jsJ t jdg dd}t| dsJ t| tj
tfsJ t jdg dg dgd}| d	ksJ t| tj
tfsJ t|jd
dg dks"J |jd
djdks:J t|jd
dtjsTJ t jdg dg dd}t| dsJ t| tjtfsJ t| dsJ t| tjtfsJ 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   rL   rP   g      @r      )      rR      r   Zaxis)rT      	   )r   )r   r   r   )r   rL   mask      ?rQ   N)r   r   r   ZallcloseZmeanr   Zfloatingr=   sumZcosintegerintr$   shaper   MaskedColumn)r   r   r   r   r   test_array_wrapj   s,     zTestColumn.test_array_wrapc                 C   s:   |ddg}|j du sJ t|tddgks6J dS )zBCan create a column without supplying name, which defaults to Noner   r   N)r   r   r$   r   r7   r   r   r   test_name_none   s    zTestColumn.test_name_nonec                 C   s   |t g dtj d}t |jt g dks8J t |jtjksNJ |t g dtj tjd}t |jt g dksJ t |jtjksJ d S )Nr   )rL   )rL   rI   d      i,  )r   r   urG   r$   rL   rI   cmr7   r   r   r   test_quantity_init   s    zTestColumn.test_quantity_initc                 C   sZ   |g ddd}dt j }||k }t|g dks8J ||k}t|g dksVJ d S )N)r   i4  r   ZHz)rI   r   TFT)re   ZkHzr   r$   )r   r   r   qZcheckr   r   r   test_quantity_comparison   s    
z#TestColumn.test_quantity_comparisonc                 C   s   |g dddddddid}d|_ d	|_d
|_d|_ddi|_tddtddtddgtg dfD ]X}|| }|j dksJ |jtj	u sJ |jd
ksJ |jdksJ |jddiksjJ qj|d }dD ]}t
||rJ qdS )z
        Test for issue #3023: when calling getitem with a MaskedArray subclass
        the original object attributes are not copied.
        r   r	   rG   %iaar   )r   rI   r;   descriptionmetabrJ   z%dbbZbbbr   Nr   FTF)r   rI   r;   rm   rn   slicer   r   re   rJ   hasattr)r   r   r?   itemr   valattrr   r   r   'test_attrs_survive_getitem_after_change   s(    
z2TestColumn.test_attrs_survive_getitem_after_changec                 C   s^  |g ddddd}t |jg dtj ks2J t |jjg dtj jksTJ t |j|dksnJ t |jj|djksJ t j|tj	jg dtj	 j t j|djg dtj	 j t j|tj
tj jg d	 |g dddd d}ttj |tj	 W d    n1 s:0    Y  t |tjt g dksjJ g d
tj	 }||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d}||jd d < t j|g d |g dddd}tt |j W d    n1 sP0    Y  d S )Nr   r	   rF   rG   rH   )r   r   rQ   rK   rJ   )gBp譼r@gBp譼b@gk5=X@)r   r   rT   )  i  i  )argr   Zstuff)r   rI   )r   r$   quantityre   rG   valuetotestingassert_allcloserJ   ZMHzZequivalenciesZspectralpytestraisesZ
UnitsErrorZdimensionless_unscaledr   rB   r]   	TypeError)r   r   rD   Zd_nounitri   Zd2Zd3r   r   r   test_to_quantity   s6    "$",&zTestColumn.test_to_quantityc                 C   s   |g ddddd}t |jg dttj ks8J t |jjg dttj jks`J t |j|dkszJ t |jj|djksJ g dtj }t j	|tj| dS )zW
        Tests for #8424, check if function-unit can be retrieved from column.
        r   r	   rF   zdex(AA)rH   )
   rc   rx   N)
r   r$   rz   re   dexZAAr{   r|   r}   r~   )r   r   rD   ri   r   r   r   test_to_funcunit_quantity   s    $(z$TestColumn.test_to_funcunit_quantityc                 C   s^  t tjf}|D ]H}|ddgddgg}|d}|d}t|| ddgksRJ t|| t|drntjjntjkszJ || j	dksJ ||| }t|ddggksJ t
||sJ |j	dksJ |ddg}t|| dksJ t
|| tjsJ || j	d	ksJ ||| }t|dgks:J t
||sJJ |j	d
ksJ q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   rS   r   rY   r   r   r   r   )r   N)r]   r   Zint_r$   r'   rs   r(   r*   r   r^   r   r\   )r   r   Zinteger_typesZint_typer   Zi0Zi1Zc01r   r   r   test_item_access_type   s(    

(z TestColumn.test_item_access_typec              
   C   s  |g ddt ddddddd	}|d
d}t|g dksBJ ||sPJ t|t|u sdJ t|dr|jj|j	jksJ |dd}t|g dksJ |dd}t|g dksJ |dd}t|g dksJ |d
g d}t|dr|jj|j	jksJ t
ttf |dd}W d    n1 sL0    Y  t
ttf |dd}W d    n1 s0    Y  d S )Nr   r   r   r	   mJyrk   test columnr:      r   rD   r   r+   rI   r;   rm   rn   r   rc   r   rc   r   r   rY   )r   r   rc   r   r   )r   r   r   rc   )rc   r   r   r   rb   rS   )r]   insertr   r$   attrs_equalr'   rs   rL   r^   rY   r   r   
ValueError
IndexErrorr   r   r   r?   r   r   r   test_insert_basic  s,    

,zTestColumn.test_insert_basicc                 C   st   |ddgddgg}|j dddgdd}t|g d	ks>J |j dddgdd}t|g d
g dgkspJ dS )z"Insert with non-default axis kwargr   r   r   rS   rT   rR   NrV   )r   rT   rR   r   r   rS   )r   rT   r   )r   rR   rS   r   r   r$   r   r   r   r   test_insert_axis;  s
    zTestColumn.test_insert_axisc                 C   sd   |ddg}| dd}t|g dks.J |ddg}| dddg}t|g dks`J d S )	Nr	   ro   r   abc)r   r	   ro   r   def)r   r   r	   ro   r   r   r   r   r   test_insert_string_expandE  s    z$TestColumn.test_insert_string_expandc                 C   s   t ddg}|dtjj}t|g dks4J t|jg dksLJ |jdksZJ |dtjj	dd	gd
dgd}t|g dksJ t|jg dksJ |jdksJ d S )Nr	   ro   r   ) r	   ro   )TFFZU1r   cccddTFrY   )r	   r   r   ro   )FTFFZU3)
r   r_   r   r   r(   maskedr$   rY   r+   r*   )r   r   r?   r   r   r   r    test_insert_string_masked_valuesN  s     z+TestColumn.test_insert_string_masked_valuesc                 C   s   |ddg}t jtdd |dd W d    n1 s<0    Y  |ddg}t jtd	d |dd W d    n1 s0    Y  d S )
Nr   r   zinvalid literal for intmatchr   stringr	   ro   z$string operation on non-string array)r   r   r   r   r   r7   r   r   r   test_insert_string_type_errorY  s    *z(TestColumn.test_insert_string_type_errorc                 C   s   |ddgddggdt d}|dddg}t|ddgddgddggksNJ |dd}t|ddgddgddggks~J tt  |dg d	}W d    n1 s0    Y  d S )
Nr   r   r   rS   r	   rA   rc   rd   rb   )r]   r   r   r$   r   r   r   r   r   r   r   test_insert_multidimb  s    $$zTestColumn.test_insert_multidimc                 C   sN   |g ddt d}|dddg}t|tjdddgdd gt dksJJ d S )N)r	   r   Nr	   rA   r   rc   rd   r2   )objectr   r   r$   r   r   r   r   r   test_insert_objectr  s
    zTestColumn.test_insert_objectc                 C   s   t jg dddg dd}|dd}t|jjg dks@J |jdksNJ t|jjg d	kshJ t|t|u s|J d
D ]L}|jdd|d}t|jjg dksJ t|jjd|ddgksJ qd S )Nr   r	   i'  rq   )r   
fill_valuerY   r   rc   r   )FFTF)FTr   FT)	r   r_   r   r   r$   rL   r   rY   r'   )r   r   r?   rY   r   r   r   test_insert_maskedz  s    zTestColumn.test_insert_maskedc                 C   sR   t jjddgddgd}t|g}|jdks2J t |d jddgksNJ d S )Nr   r   TFr   r   r   )r   r(   r*   r   r_   r^   r$   rY   )r   rL   r   r   r   r   test_masked_multidim_as_list  s    z'TestColumn.test_masked_multidim_as_listc                 C   s0  t jddgddggdtd}|jdddgd	d
}t|jjddgddgddggksXJ t|jjddgd	d	gddggksJ |jdddgd	dgd
}t|jjddgddgddggksJ t|jjddgd	dgddggksJ t	t
( |jdddgg dd
}W d    n1 s"0    Y  d S )Nr   r   r   rS   r	   rA   rc   rd   Tr   Frh   )r   r_   r]   r   r   r$   rL   rY   r   r   r   )r   r   r?   r   r   r   test_insert_masked_multidim  s    
((((z&TestColumn.test_insert_masked_multidimc                 C   sX   t jddgddggddd}tt dd	g|d
 _W d   n1 sJ0    Y  dS )zs
        When table is not masked and trying to set mask on column then
        it's Raise AttributeError.
        r   r   r   rS   )r	   ro   )rC   rF   )namesr+   TFr	   N)r   Tabler   r   AttributeErrorrY   )r   tr   r   r   test_mask_on_non_masked_table  s    z(TestColumn.test_mask_on_non_masked_tableN)r6   
__module____qualname__r   r/   r1   r8   r@   rE   rM   r`   ra   rg   rj   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s4   
#

,
		r   c                   @   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )TestAttrEqualzEBunch of tests originally from ATpy that test the attrs_equal method.c                 C   s.   |dt dd}|dt dd}||s*J d S )Nr	   r   rH   r]   r   r   r   r?   r   r   r   r   test_5  s    zTestAttrEqual.test_5c              	   C   sF   |dt ddddddd}|dt ddddddd}||sBJ d S 	Nr	   r   rk   r   r:   r   r   r   r   r   r   r   r   test_6  s    



zTestAttrEqual.test_6c              	   C   sF   |dt ddddddd}|d	t ddddddd}||rBJ d S )
Nr	   r   rk   r   r:   r   r   r   ro   r   r   r   r   r   test_7  s    



zTestAttrEqual.test_7c              	   C   sF   |dt ddddddd}|dtddddddd}||rBJ d S r   )r]   r=   r   r   r   r   r   test_8  s    



zTestAttrEqual.test_8c              	   C   sF   |dt ddddddd}|dt d	dddddd}||rBJ d S )
Nr	   r   rk   r   r:   r   r   r   zerg.cm-2.s-1.Hz-1r   r   r   r   r   test_9  s    



zTestAttrEqual.test_9c              	   C   sF   |dt ddddddd}|dt dd	ddddd}||rBJ d S )
Nr	   r   rk   r   r:   r   r   r   z%gr   r   r   r   r   test_10  s    



zTestAttrEqual.test_10c              	   C   sF   |dt ddddddd}|dt ddd	dddd}||rBJ d S )
Nr	   r   rk   r   r:   r   r   r   zanother test columnr   r   r   r   r   test_11  s    



zTestAttrEqual.test_11c              	   C   sF   |dt ddddddd}|dt dddddd	d}||rBJ d S )
Nr	   r   rk   r   r:   r   r   r   )erD   r   r   r   r   r   test_12  s    



zTestAttrEqual.test_12c              	   C   sF   |dt ddddddd}|dt dddd	ddd}||rBJ d S )
Nr	   r   rk   r   r:   r   r   r   rX   r   r   r   r   r   test_13  s    



zTestAttrEqual.test_13c              	   C   sX   t jdtddddddd}t jdtddddddd}||sFJ ||sTJ d S r   )r   r   r]   r_   r   )r   r?   r   r   r   r   test_col_and_masked_col  s    

z%TestAttrEqual.test_col_and_masked_colN)r6   r   r   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZejZdZdS )TestMetaColumnr   N)r6   r   r   r   r   
test_classargsr   r   r   r   r     s   r   c                   @   s   e Zd ZejZdZdS )TestMetaMaskedColumnr   N)r6   r   r   r   r_   r   r   r   r   r   r   r     s   r   c                  C   s  t jddgddddddid	} | dd jdks4J | dd jdksJJ | dd jdks`J | dd jdksvJ | dd jd dksJ t jddgddddddid	} | dd jdksJ | dd jdksJ | dd jdksJ | 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dgt	| ddgfD ]Z}|jdkstJ |jdksJ |jdksJ |jdksJ |jd dks`J q`| dt	| dfD ]6}|dksJ |j
dksJ t|t jrJ qt jg d
ddddddid	} | ddgt	| ddgfD ]Z}|jdksZJ |jdksjJ |jdkszJ |jdksJ |jd dksFJ qF| dt	| dfD ]6}|dksJ |j
dksJ t|t jrJ qd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	   ro   rG   rk   r   r:   )rL   r   rm   rI   r;   rn   r   r   r   N)r   r   r   rm   rI   r;   rn   r_   Ztaker   r^   r   )r   Zsubsetr   r   r    test_getitem_metadata_regression  sP    	

"
"r   c                  C   s(   t g d} tj| dd}t| d S )Nr   r	   r
   )r   r   r   r   r   )r-   r   r   r   r   test_unicode_guidelines;  s    r   c                  C   s.   t 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
    rZ   z1.5N)r   r   r5   r,   )r   r   r   r   test_scalar_columnB  s    
r   c                  C   s  t jddgddggddgd} t| d t jjs4J t| d t jjsJJ d| d _t| d tjshJ t| d t jjs~J t| d d	 tjsJ t| d	 d tjsJ t| d d	 tjrJ t| d	 d tjrJ ttj	tj
d  | 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   rI   re   Quantityr   rf   sZDex)Zqtabr   r   r   test_qtable_column_conversionN  s    
r   r   TFc                 C   s  ddl m}m} tjddggdg| d}d|d d< d	|d d
d
< tjtjdd&}|| }d|d d< W d
   n1 s0    Y  |d d dksJ t|dksJ |d j	|j	d ksJ d|d j
v sJ tjtjdd$}ddg|d d
d
< W d
   n1 s0    Y  t|d ddgks:J t|dksLJ tddg}ddg|d
d
< ||d d
d
< t|d ddgksJ 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getframeinforl   rp   r	   )r   r   ccr   r   N=truncated right side string\(s\) longer than 2 character\(s\)r   ZeeeZeeZtest_columnZffgggggZffffZggggr   g)inspectr   r   r   r   r   warnsStringTruncateWarningr&   linenofilenamer   r$   r   )r   r   r   r   wZ	frameinforu   r   r   r   test_string_truncation_warningg  s*    
*4r   c                  C   s   ddgddgddgfD ]Z} t | }tjj|d< t|jddgksHJ tjj|d	d	< t|jddgksJ qt d
dg}tjt j	dd$}tjjdg|d	d	< W d	   n1 s0    Y  |d dksJ t|jddgksJ t
|dksJ 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	   ro   r   r   rO   rP   FTNrl   rp   r   r   r   r   )r   r_   r   r(   r   r$   rY   r   r   r   r&   )valuesmcr   r   r   r   %test_string_truncation_warning_masked  s    
2r   r   c                 C   s   d}| |dgdd}|j jdks$J |d |ks4J t|d tsFJ t|dd tjs^J t|dd t|dgksJ dS )zM
    Create a bytestring Column from strings (including unicode) in Py3.
       bär   Sr2   r   Nr   )	r+   charr   r,   r   r   r   r$   r   r   ubar   r   r   r   )test_col_unicode_sandwich_create_from_str  s    r   c                 C   s   | ddg}|j jdksJ |d r(J |d dks8J t|d tsJJ t|d tr\J t|dd tjstJ t|dd t	ddgksJ t|dd t	ddgkrJ 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+   r   r   bytesr,   r   r   r   r$   r   )r   r   r   r   r   #test_col_unicode_sandwich_bytes_obj  s    $r   c                 C   s  d}| d}| |dg}|jjdks*J |d |ks:J t|d tsLJ t|dd tjsdJ t|dd t	|dgksJ t|dd tjsJ |dd jjdksJ t||dgksJ ||dgk}t
|t
|ju sJ |jjd	ksJ t|sJ t|t	|dgks0J t|t	|dgksNJ ||f}|D ]>}||k}t
|t
|ju s~J t|d
dgksZJ qZdS )z~
    Create a bytestring Column from bytes and ensure that it works in Python 3 in
    a convenient way like in Python 2.
    r   utf-8r   r   r   Nr   r   ?TF)encoder+   r   r   r,   r   r   r   r$   r   r'   rL   )r   r   uba8r   okZcmpscmpr   r   r   test_col_unicode_sandwich_bytes  s,    
$r   c                  C   s  d} |  d}tj| dgdd}|d | ks0J t|dd tjsHJ t|d tsZJ t|dd t| dgks~J t|dd tjsJ |dd jj	dksJ || dgk}t
|tjksJ |jj	d	ksJ t|sJ t||d
gksJ dS )z<
    Sanity check that Unicode Column behaves normally.
    r   r   r   Ur2   r   Nr   r   r   )r   r   r   r   r,   r   r$   r   r+   r   r'   r   )r   r   r   r   r   r   r   !test_col_unicode_sandwich_unicode  s    
$r   c                  C   sn  t ddg} tjj| d< t| dd t js2J t| d tsDJ | d dksTJ | d tjju shJ t| dd t jsJ | dd jjdksJ | ddgk}|d d	ksJ |d tjju sJ t	| ddgksJ t	| t
ddgksJ t	| t
ddgksJ d
D ]L}| |k}t|tjju s>J |d d	ksPJ |d tjju sJ qdS )zy
    Create a bytestring MaskedColumn and ensure that it works in Python 3 in
    a convenient way like in Python 2.
       abcr   r   Nr   r   r   r   T)r   r   )r   r_   r   r(   r   r   r,   r+   r   r$   r   r'   r*   )r   r   r   r   r   r    test_masked_col_unicode_sandwich  s&    r   c                 C   s   d}| ddg}d|d< t |ddgks.J ||d< t ||dgksLJ | dd	d
| dgkshJ d|dd< t |ddgksJ ||dd< t |||gksJ d|dd< |dg|dd< t ||dgksJ dS )z
    Test setting
    r   r   r   s   aar   rl   r   Nonez----z  z defs   ccNr   r   )r   r$   Zpformatr   r   r   r   test_unicode_sandwich_set+  s    r   class1class2c                 C   s~  | ddg}|t u rd}n|tu r,ddg}n|ddg}t||kddgksRJ t||kddgkslJ t||kddgksJ t||kddgksJ t||kddgksJ t||kddgksJ t||kddgksJ t||kddgks
J t||k ddgks&J t||k ddgksBJ t||kddgks^J t||kddgkszJ dS )zTest that comparing a bytestring Column/MaskedColumn with various
    str (unicode) object types gives the expected result.  Tests #6838.
       a   cr	   ro   TFN)r,   listr   r$   )r   r   Zobj1Zobj2r   r   r   test_unicode_sandwich_compareF  s$    
r  c                  C   s   t jg dg dd} t jg dg dd}| |k|| kfD ]L}|d tjju sTJ |d tjju shJ |d tjju s|J |d	 s<J q<| |k|| kfD ]L}|d tjju sJ |d tjju sJ |d tjju sJ |d	 rJ qd
S )z"Test the fix for #6839 from #6899.r	   ro   r   rD   )TFTFr   )r      br      d)TTFFr   r   r   r   N)r   r_   r   r(   r   )r?   r   r   r   r   r   $test_unicode_sandwich_masked_compareg  s     

r  c                  C   sD   t jddgddgdd} t| jjdks,J t | }t||  d S )N)rO   rP   )rQ   g      @)FFzf8,f8)rY   r+   r   )r   r_   r&   r+   fieldsr   )r   mc2r   r   r   'test_structured_masked_column_roundtrip~  s    

r  r+   zi4,f4z	f4,(2,)f8c                 C   s:   t | } tjdd| d}|jdks(J |j| ks6J d S )NrT   r   )Zlengthr^   r+   )rT   r   )r   r+   r   r   r^   )r+   r   r   r   r   !test_structured_empty_column_init  s    
r	  c               	   C   s   t g d} tt| t| t| tj	| ddd}t
|d jt jksVJ t
|d jt jjkspJ t
|d jt jksJ t
|d jt jksJ d	S )
zCan a column's underlying data consistently be accessed via `.value`,
    whether it is a `Column`, `MaskedColumn`, `Quantity`, or `Time`?r   Zmjd)r;   r  r	   ro   r   rD   N)r   r   r   r   r   r_   re   r   r   ZTimer'   r{   r   r(   r*   )rL   Ztblr   r   r   test_column_value_access  s    r
  c                  C   s   t jg dg dd} | jjd dks*J d| jjd< | jjd dksJJ |  }|jjd dksfJ t | }|jjd dksJ | t j}|jjd dksJ | dd  }|jjd dksJ d S )NrN   rh   r   ZecsvZ
null_valueZ	data_maskr   )r   r_   infoZserialize_methodrB   r4   )r   r  Zmc3Zmc4Zmc5r   r   r   /test_masked_column_serialize_method_propagation  s    
r  )+Z!astropy.utils.tests.test_metadatar   r   r   Znumpyr   Znumpy.testingr   Zastropy.tests.helperr   r<   r   r   r   re   r   r   r   r   r   r   r   r   ZmarkZparametrizer   r   r   r_   r   r   r   r   r   r   r,   r   r  r  r  r	  r
  r  r   r   r   r   <module>   sR      M9
%


&

