U
    e»{jtc  ã                   @   s@  d Z ddlZddlmZ ddlZddlmZ ddl	m
Z
mZmZ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
eƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG d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 )+z&Test behavior related to masked tablesé    N)ÚColumnÚMaskedColumnÚQTableÚTable)Ú
BaseColumn)ÚTime)ÚMaskedc                   @   s   e Zd Zdd„ ZdS )Ú	SetupDatac                 C   s²   t ddddgdd�| _t dddd	gd
d�| _t ddddgdd�| _t dd
dg¡| _t ddddg| jd�| _t| j| jgd
d�| _	t
ddddgd�| _t ddddgddd�| _d S )NÚaé   é   é   ©ÚnameÚdataÚ
fill_valueÚbé   é   é   T©r   r   ÚmaskÚcé   é   é	   FÚd©ÚmaskedÚca©r   r   Úsc)r   ç      ð?)r   g       @)r   g      @zi8,f8©r   g      ð¿)r   r   Údtyper   )r   r
   r   r   ÚnpÚarrayÚd_maskr   r   Útr   r   r!   )ÚselfÚmethod© r+   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_masked.pyÚsetup_method   s    üzSetupData.setup_methodN)Ú__name__Ú
__module__Ú__qualname__r-   r+   r+   r+   r,   r	      s   r	   c                   @   s   e Zd Zdd„ ZdS )Ú
TestPprintc                 C   s    | j  ¡ dddddgkst‚d S )Nz a   b z--- ---z  1  --z  2  --z  3  --)r(   ÚpformatÚAssertionError©r)   r+   r+   r,   Útest_pformat!   s    ûzTestPprint.test_pformatN)r.   r/   r0   r5   r+   r+   r+   r,   r1       s   r1   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
TestFilledz0Test the filled method in MaskedColumn and Tablec                 C   sl   dddg}dddgdœ| _ tddddgd|ddid	�| _td
dddgd|d�| _tddddgd|d�| _d S )NTFr   r   r   ©r
   r   r
   é
   )r   r   r   r   Úmetar   g      @ç      @ç      @ç      $@)r   r   r   r   r   Ú7Ú8Ú9Ú1)r9   r   r
   r   r   )r)   r*   r   r+   r+   r,   r-   .   s     
    ÿ   ÿzTestFilled.setup_methodc                 C   s  | j  ¡ }t |dddgk¡s"t‚t|tƒs0t‚t|tƒr>t‚|jd dksPt‚d|jd< d|d< | j d dkstt‚| j jd dksˆt‚| j  d¡}t |dddgk¡s¬t‚| j	 ¡ }t |dd	d
gk¡sÎt‚t|tƒsÜt‚| j
 ¡ }t |dddgk¡sþt‚t|tƒ�st‚d S )Nr8   r   r   r
   r   éd   é   r<   r:   r;   r@   r>   r?   )r
   Úfilledr%   Úallr3   Ú
isinstancer   r   r9   r   r   )r)   Úfr+   r+   r,   Útest_filled_column9   s"    



zTestFilled.test_filled_columnc                 C   sî   || j | j| jg| jd�}| ¡ }t|tƒs0t‚|jdks>t‚t	 
|d dddgk¡sZt‚t	 |d dd	d
g¡stt‚t	 
|d dddgk¡s�t‚|jd ddgks¦t‚d|jd d< |jd ddgksÊt‚d|d d< |d d dksêt‚d S )N)r9   Fr
   r8   r   r   r   r<   r:   r;   r   r@   r>   r?   rB   r   rA   )r
   r   r   r9   rC   rE   r   r3   r   r%   rD   Zallclose©r)   Z
tableclassr(   rF   r+   r+   r,   Útest_filled_masked_tableR   s    z#TestFilled.test_filled_masked_tablec                 C   sÊ   |ddgd| j d�}| ¡ }t|tƒs*t‚|jdks8t‚t |d |d k¡sRt‚t |d |d k¡slt‚|j d dd	gks‚t‚d
|j d d< |j d dd	gks¦t‚d|d d< |d d dksÆt‚d S )N)r   r   )Ú3Ú4r7   )Únamesr9   Fr
   r   r   r   rB   r   rA   r   )r9   rC   rE   r   r3   r   r%   rD   rH   r+   r+   r,   Útest_filled_unmasked_tablec   s    z%TestFilled.test_filled_unmasked_tableN)r.   r/   r0   Ú__doc__r-   rG   rI   rM   r+   r+   r+   r,   r6   +   s
   r6   c                   @   sH   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S )ÚTestFillValuez=Test setting and getting fill value in MaskedColumn and Tablec                 C   s4   | j jdkst‚tdddgdd�}|jdks0t‚dS )z<Check that setting fill_value in the MaskedColumn init worksr   r   ÚxxxxÚyyyyÚnoner   N)r
   r   r3   r   ©r)   r   r+   r+   r,   Útest_init_set_fill_valuev   s    z&TestFillValue.test_init_set_fill_valuec                 C   s:   d| j _| j jdkst‚t | j  ¡ dddgk¡s6t‚dS )z5Check set and get of fill value works for bare Columnéüÿÿr   N)r   r   r3   r%   rD   rC   r4   r+   r+   r,   Ú'test_set_get_fill_value_for_bare_column|   s    z5TestFillValue.test_set_get_fill_value_for_bare_columnc                 C   sd   t dddgddgd�}d|_|jdks*t‚t | ¡ ddgk¡sDt‚t | d	¡d	dgk¡s`t‚d S )
Nr   rP   rQ   TFr   ZABCDEFZABCDZXY)r   r   r3   r%   rD   rC   rS   r+   r+   r,   Ú&test_set_get_fill_value_for_str_column‚   s
    z4TestFillValue.test_set_get_fill_value_for_str_columnc                 C   sœ   | j jt d| j j¡kst‚| j  ¡ }|j ¡ dks8t‚dtjf|_|jt dtjf| j j¡ksdt‚t	|dtj fd�}|jt dtj f|j¡ks˜t‚d S )Nr#   éÿÿÿÿéþÿÿÿ)r   )
r!   r   r%   r&   r$   r3   ÚcopyÚitemÚinfr   )r)   r!   Zsc2r+   r+   r,   Ú-test_set_get_fill_value_for_structured_columnŠ   s    
 z;TestFillValue.test_set_get_fill_value_for_structured_columnc                 C   s    d| j _| jd jdkst‚dS )z4Table column mask is not ref of original column maskrU   r   N)r   r   r(   r3   r4   r+   r+   r,   Útest_table_column_mask_not_ref“   s    z,TestFillValue.test_table_column_mask_not_refc                 C   sF   d| j d _| j d jdks t‚t | j d  ¡ dddgk¡sBt‚dS )z;Check set and get of fill value works for Column in a Tabler   r   N)r(   r   r3   r%   rD   rC   r4   r+   r+   r,   Ú(test_set_get_fill_value_for_table_column˜   s    z6TestFillValue.test_set_get_fill_value_for_table_columnc                 C   sZ   d| j d _dddg| j d _| j d jjdks4t‚t | j d jjdddgk¡sVt‚dS )z8Check that .data attribute preserves fill_value and maskr   r   TFN)r(   r   r   r   r3   r%   rD   r4   r+   r+   r,   Ú!test_data_attribute_fill_and_maskž   s    z/TestFillValue.test_data_attribute_fill_and_maskN)r.   r/   r0   rN   rT   rV   rW   r]   r^   r_   r`   r+   r+   r+   r,   rO   s   s   	rO   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestMaskedColumnInitz!Initialization of a masked columnc                 C   sz   t  | jj ¡st‚t  | jj¡s&t‚t  | jj ¡s:t‚t  | jj| jk¡sRt‚d| jjd< t  | jj| jk¡rvt‚dS )z@Check that mask gets set properly and that it is a copy, not refTr   N)	r%   rD   r
   r   r3   r   r   r   r'   r4   r+   r+   r,   Útest_set_mask_and_not_ref©   s    z.TestMaskedColumnInit.test_set_mask_and_not_refc                 C   s6   dddg}t ddddg|d�}t |j|k¡s2t‚dS )	zSet mask from a listFTr
   r   r   r   r   N)r   r%   rD   r   r3   )r)   Ú	mask_listr
   r+   r+   r,   Útest_set_mask_from_list²   s    
z,TestMaskedColumnInit.test_set_mask_from_listc                 C   s2   dddg}t d| j|d�}t |j|k¡s.t‚dS )zOverride existing mask valuesFTr   r   N)r   r   r%   rD   r   r3   )r)   rc   r   r+   r+   r,   Útest_override_existing_mask¸   s    
z0TestMaskedColumnInit.test_override_existing_maskc              	   C   s2   ddg}t  tj¡� tdd|d� W 5 Q R X dS )z.Incomplete mask specification raises MaskErrorFTr   r   )r   Úlengthr   N)ÚpytestÚraisesÚmaZ	MaskErrorr   )r)   rc   r+   r+   r,   Útest_incomplete_mask_spec¾   s    z.TestMaskedColumnInit.test_incomplete_mask_specN)r.   r/   r0   rN   rb   rd   re   rj   r+   r+   r+   r,   ra   ¦   s
   	ra   c                   @   sx   e Zd ZdZej dd¡ej dd¡dd„ ƒƒZej dd¡ej dd¡dd	„ ƒƒZd
d„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestTableInitzInitializing a tableÚtype_str)ú?r   Úi2Zf4Zc8ÚSÚUÚOÚshape))r   )r   r   )r   r   r   c           	      C   s2  t tdƒƒ}tj||d� |¡}| ¡ }t|g|gd�}|d }|j|jksPt‚t 	||k¡sbt‚t
|ƒtksrt‚t|ƒdkrŒtjj|d< n2t|ƒdkrªtjj|d d< ntjj|d d d< tdd„ |D ƒƒ}t|g|gd�}|d }|j|jksøt‚t 	||k¡�st‚|j| �st‚t
|ƒtk�s.t‚d	S )
zyTest init from list or list of lists with dtype specified, optionally
        including an np.ma.masked element.
        r   ©r$   Úcol0r   rX   r   c                 s   s   | ]
}d V  qdS ©rX   Nr+   ©Ú.0Ú_r+   r+   r,   Ú	<genexpr>à   s     zKTestTableInit.test_init_from_sequence_data_numeric_typed.<locals>.<genexpr>N)ÚlistÚranger%   r&   ÚreshapeÚtolistr   r$   r3   rD   Útyper   Úlenri   r   Útupler   r   )	r)   rl   rr   r   Únp_dataÚnp_data_listr(   ÚcolÚlast_idxr+   r+   r,   Ú*test_init_from_sequence_data_numeric_typedÈ   s(    z8TestTableInit.test_init_from_sequence_data_numeric_typedc           
      C   sî   t tdƒƒ}tj||d� |¡}| ¡ }t|gƒ}|d j}t|ƒdkrVtj	j
|d< n2t|ƒdkrttj	j
|d d< ntj	j
|d d d< tdd„ |D ƒƒ}t|gƒ}|d }	|	j|ksºt‚t |	|k¡sÌt‚|	j| sÚt‚t|	ƒtksêt‚d	S )
z}Test init from list or list of lists with dtype NOT specified,
        optionally including an np.ma.masked element.
        r   rs   rt   r   rX   r   c                 s   s   | ]
}d V  qdS ru   r+   rv   r+   r+   r,   ry   ü   s     zMTestTableInit.test_init_from_sequence_data_numeric_untyped.<locals>.<genexpr>N)rz   r{   r%   r&   r|   r}   r   r$   r   ri   r   r€   r3   rD   r   r~   r   )
r)   rl   rr   r   r�   r‚   r(   Zdtype_expectedr„   rƒ   r+   r+   r,   Ú,test_init_from_sequence_data_numeric_untypedè   s"    


z:TestTableInit.test_init_from_sequence_data_numeric_untypedc                    sÌ   t | j| j| j| j| j| jgƒ‰ ˆ jddddddgks:t‚‡ fdd„ˆ D ƒ}t |ƒ}ˆ jD ]l}ˆ | j	|| j	ksvt‚t
 ˆ | || k¡d	t
jjfksœt‚t
 tˆ | d
dƒt|| d
dƒk¡sZt‚qZd S )Nr
   r   r   r   r   r!   c                    s    g | ]‰ ‡ fd d„ˆj D ƒ‘qS )c                    s   i | ]}|ˆ | “qS r+   r+   )rw   Úk©Úrowr+   r,   Ú
<dictcomp>  s      zQTestTableInit.test_initialization_with_all_columns.<locals>.<listcomp>.<dictcomp>)Úcolnames)rw   ©Út1rˆ   r,   Ú
<listcomp>  s     zFTestTableInit.test_initialization_with_all_columns.<locals>.<listcomp>Tr   F)r   r
   r   r   r   r   r!   r‹   r3   r$   r%   rD   ri   r   Úgetattr)r)   ZlofdÚt2r‡   r+   rŒ   r,   Ú$test_initialization_with_all_columns  s     
&ÿz2TestTableInit.test_initialization_with_all_columnsc                 C   sd   t | j| jgƒ}|jdkst‚t | jgƒ}|jdks8t‚t | jt dddg¡gƒ}|jdks`t‚dS )z9Masking is always False if initial masked arg is not TrueFr   r   r   N)r   r   r
   r   r3   ri   r&   ©r)   r(   r+   r+   r,   Ú&test_mask_false_if_input_mask_not_true  s    z4TestTableInit.test_mask_false_if_input_mask_not_truec                 C   sL   t ddggdd�}t |dd�}t |dd�}|jr4t‚|js>t‚|jrHt‚dS )z:Masking not true if not (requested or input requires mask)r   r   Fr   TN)r   r   r3   )r)   Út0r�   r�   r+   r+   r,   Ú"test_mask_false_if_no_input_masked  s    

z0TestTableInit.test_mask_false_if_no_input_maskedc                 C   sÜ   | j }t |jd t dddg¡k¡s*t‚t |jd t dddg¡k¡sNt‚t dddg¡|jd< t |d jt dddg¡k¡sˆt‚t| jgdd�}|jd ks¦t‚dD ],}||_dD ]}t || j|k¡s¸t‚q¸qªd S )Nr
   Fr   Tr   )TFr7   )r(   r%   rD   r   r&   r3   r   r   )r)   r(   r�   r   r   r+   r+   r,   Útest_mask_property&  s    $$$z TestTableInit.test_mask_propertyN)r.   r/   r0   rN   rg   ÚmarkZparametrizer…   r†   r‘   r“   r•   r–   r+   r+   r+   r,   rk   Å   s   		rk   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestAddColumnc                 C   s"  t dd�}|jst‚| tddddgdddgd�¡ |js>t‚| td	d
ddgdddgd�¡ |jsht‚t|d tƒszt‚t|d	 tƒsŒt‚t |d t dddg¡k¡s®t‚t |d j	t dddgt
¡k¡sÔt‚t |d	 t d
ddg¡k¡söt‚t |d	 j	t dddgt
¡k¡�st‚d S )NTr   r
   r   r   r   r   r   r   r   r   r   )r   r   r3   Ú
add_columnr   rE   r%   rD   r&   r   Úboolr’   r+   r+   r,   Ú&test_add_masked_column_to_masked_table9  s    

 
 
"&"z4TestAddColumn.test_add_masked_column_to_masked_tablec                 C   s  t dd�}|jrt‚| tddddgd�¡ |jr6t‚| tdd	d
dgdddgd�¡ |jr`t‚t|d tƒsrt‚t|d tƒs„t‚t |d t 	dddg¡k¡s¦t‚t
|d dƒr¸t‚t |d t 	d	d
dg¡k¡sÚt‚t |d jt 	dddgt¡k¡�st‚d S )NFr   r
   r   r   r   r    r   r   r   r   r   r   r   )r   r   r3   r™   r   r   rE   r%   rD   r&   Úhasattrr   rš   r’   r+   r+   r,   Ú*test_add_masked_column_to_non_masked_tableG  s    


 
""z8TestAddColumn.test_add_masked_column_to_non_masked_tablec                 C   s  t dd�}|jst‚| tddddgd�¡ |js6t‚| tdd	d
dgdddgd�¡ |js`t‚t|d tƒsrt‚t|d tƒs„t‚t |d t 	dddg¡k¡s¦t‚t |d j
t 	dddgt¡k¡sÌt‚t |d t 	d	d
dg¡k¡sît‚t |d j
t 	dddgt¡k¡�st‚d S )NTr   r
   r   r   r   r    r   r   r   r   r   r   )r   r   r3   r™   r   r   rE   r%   rD   r&   r   rš   r’   r+   r+   r,   Ú*test_add_non_masked_column_to_masked_tableU  s    


 
"&"z8TestAddColumn.test_add_non_masked_column_to_masked_tablec                 C   s¨   t dd�}|jrt‚| tddddgd�¡ |jr6t‚| tdd	d
dgdddgd�¡ |jr`t‚t |d t dddg¡k¡s‚t‚t |d t d	d
dg¡k¡s¤t‚d S )NFr   r
   r   r   r   r    r   r   r   r   r   r   )	r   r   r3   r™   r   r   r%   rD   r&   r’   r+   r+   r,   Ú.test_convert_to_masked_table_only_if_necessaryc  s    


 
"z<TestAddColumn.test_convert_to_masked_table_only_if_necessaryN)r.   r/   r0   r›   r�   rž   rŸ   r+   r+   r+   r,   r˜   8  s   r˜   c                   @   s   e Zd Zdd„ ZdS )ÚTestRenameColumnc                 C   s¸   t dd�}| tddddgdddgd�¡ d	|d _| dd
¡ |jsJt‚t |d
 t 	dddg¡k¡slt‚t |d
 j
t 	dddgt¡k¡s’t‚|d
 jd	ks¤t‚|jd
gks´t‚d S )NTr   r
   r   r   r   r   r   é*   r   )r   r™   r   r   Zrename_columnr   r3   r%   rD   r&   r   rš   r‹   r’   r+   r+   r,   Útest_rename_masked_columnq  s    
 

"&z*TestRenameColumn.test_rename_masked_columnN)r.   r/   r0   r¢   r+   r+   r+   r,   r    p  s   r    c                   @   s   e Zd Zdd„ ZdS )ÚTestRemoveColumnc                 C   sÖ   t dd�}| tddddgdddgd�¡ d	|d _| td
dddgdddgd�¡ | d
¡ |jsht‚t |d t 	dddg¡k¡sŠt‚t |d j
t 	dddgt¡k¡s°t‚|d jd	ksÂt‚|jdgksÒt‚d S )NTr   r
   r   r   r   r   r   r¡   r   r   r   r   )r   r™   r   r   Zremove_columnr   r3   r%   rD   r&   r   rš   r‹   r’   r+   r+   r,   Útest_remove_masked_column~  s    
 
 

"&z*TestRemoveColumn.test_remove_masked_columnN)r.   r/   r0   r¤   r+   r+   r+   r,   r£   }  s   r£   c                   @   sL   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S )Ú
TestAddRowc                 C   s  t dd�}| tddgdgd�¡ | tddgdgd�¡ |jd	d
gddgd� |jddgddgd� |jspt‚t t |d ¡t dd	dg¡k¡s˜t‚t |d j	t dddgt
¡k¡s¾t‚t t |d ¡t dd
dg¡k¡sæt‚t |d j	t dddgt
¡k¡�st‚d S )NTr   r
   r   r   r   r   r   r   r   ©r   r   r   ©r   r™   r   Úadd_rowr   r3   r%   rD   r&   r   rš   r’   r+   r+   r,   Ú,test_add_masked_row_to_masked_table_iterableŒ  s    

(&(z7TestAddRow.test_add_masked_row_to_masked_table_iterablec                 C   s  t dd�}| tddgdgd�¡ | tddgdgd�¡ |jd	d
dœdddœd� |jdddœdddœd� |jsxt‚t t |d ¡t dd
dg¡k¡s t‚t |d j	t dddgt
¡k¡sÆt‚t t |d ¡t dd	dg¡k¡sît‚t |d j	t dddgt
¡k¡�st‚d S )NTr   r
   r   r   r   r   r   r   r   ©r   r
   r7   r¦   r   r   r§   r’   r+   r+   r,   Ú,test_add_masked_row_to_masked_table_mapping1˜  s    

(&(z7TestAddRow.test_add_masked_row_to_masked_table_mapping1c                 C   sø   t dd�}| tddgdgd�¡ | tddgdgd�¡ |jdd	iddid
� |jddiddid
� |jspt‚|d d dkr�|d d dks”t‚t |d jt 	dddgt
¡k¡sºt‚|d d d	ksÎt‚t |d jt 	dddgt
¡k¡sôt‚d S )NTr   r
   r   r   r   r   r   r   r¦   r   r   ©r   r™   r   r¨   r   r3   r%   rD   r   r&   rš   r’   r+   r+   r,   Ú,test_add_masked_row_to_masked_table_mapping2¤  s    

$&z7TestAddRow.test_add_masked_row_to_masked_table_mapping2c                 C   sè   t dd�}| tddgdgd�¡ | tddgdgd�¡ | dd	i¡ | dd
i¡ |js`t‚|d d dkr€|d d d
ks„t‚t |d jt 	dddgt
¡k¡sªt‚|d d d	ks¾t‚t |d jt 	dddgt
¡k¡sät‚d S )NTr   r
   r   r   r   r   r   r   r   r   r¬   r’   r+   r+   r,   Ú,test_add_masked_row_to_masked_table_mapping3²  s    

$&z7TestAddRow.test_add_masked_row_to_masked_table_mapping3c              	   C   s~   t dd�}| tddgdgd�¡ | tddgdgd�¡ t t¡�}|jdd	iddid
� W 5 Q R X |jjd dkszt	‚d S )NTr   r
   r   r   r   r   r   r   r¦   z&keys in mask should match keys in vals)
r   r™   r   rg   rh   Ú
ValueErrorr¨   ÚvalueÚargsr3   ©r)   r(   Úexcr+   r+   r,   Ú,test_add_masked_row_to_masked_table_mapping4Á  s    
 z7TestAddRow.test_add_masked_row_to_masked_table_mapping4c              	   C   sÂ   t dd�}| tddgdgd�¡ | tddgdgd�¡ t t¡�}|jd	d
gdddœd� W 5 Q R X |jjd dks|t	‚t t¡�}|jd
d	dœddgd� W 5 Q R X |jjd dks¾t	‚d S )NTr   r
   r   r   r   r   r   r   r   r7   r¦   z&Mismatch between type of vals and maskrª   )
r   r™   r   rg   rh   Ú	TypeErrorr¨   r°   r±   r3   r²   r+   r+   r,   Ú,test_add_masked_row_to_masked_table_mismatchË  s    
""z7TestAddRow.test_add_masked_row_to_masked_table_mismatchc                 C   sj  t dd�}dg|d< dg|d< tdgdd�|d	< td
dd�}|jrFt‚| d
d|g¡ |jr`t‚|jdd|gdddgd� |jr„t‚t|d ƒtks˜t‚t|d ƒtks¬t‚t|d	 ƒtksÀt‚t 	|d dd
dgk¡sÜt‚t 	|d j
dddgk¡sút‚t 	|d jdddgk¡�st‚t 	|d	 d d
… tdd
gdd�k¡�sFt‚t 	|d	 jdddgk¡�sft‚d S )NFr   r   r
   r   r   Úcxcsec©Úformatr   r   r   r   r   r   r¦   T)r   r   r   r3   r¨   r~   r   r   r%   rD   r   r   )r)   r(   Útmr+   r+   r,   Ú0test_add_masked_row_to_non_masked_table_iterableÖ  s$    





 ,z;TestAddRow.test_add_masked_row_to_non_masked_table_iterablec              	   C   sv   t ƒ }ddgtj |d< | dtj f¡ t t¡�}|jdtj fdd� W 5 Q R X |jjd  	¡ dd	gksrt
‚d S )
Nr   r   r
   r   )Tr¦   r   z8Unable to insert row because of exception in column 'a':zFmask was supplied for column 'a' but it does not support masked values)r   ÚuÚmr¨   rg   rh   r¯   r°   r±   Ú
splitlinesr3   r²   r+   r+   r,   Ú0test_add_row_cannot_mask_column_raises_typeerrorí  s     þz;TestAddRow.test_add_row_cannot_mask_column_raises_typeerrorN)r.   r/   r0   r©   r«   r­   r®   r´   r¶   r»   r¿   r+   r+   r+   r,   r¥   ‹  s   
r¥   c                  C   s`  t  ddddg¡} | tddƒfD �]8}tdd�}tddddgƒ|d	< td
dddg| d�|d< tddddgddddgd�|d< |d | |d |< |d d |d d ks¬t‚|d d t jjksÄt‚|d d dksØt‚|d d dksìt‚|d d dk�st‚t  	|d j
|j
d k¡�s"t‚|j
 ¡ }t  t|ƒ¡|d< t  	|j
d |d k¡s t‚q dS )zTest issue in #2997TFr   r   r   r   r   r   r
   é   é   é!   é,   r¦   r   éo   éÞ   iM  i¼  r   r   N)r%   r&   Úslicer   r   r   r3   ri   r   rD   r   rZ   Zaranger   )Zmask_bÚselectr(   Zmask_before_addr+   r+   r,   Útest_setting_from_masked_columnù  s$    
 ÿ

rÈ   c                  C   s‚   t ddgidd�} | d  d¡ t | dgtjgd�}t|d jtjƒsJt‚tdgƒ}| d¡ t|tjd�}t|jtjƒs~t‚dS )	zU
    Test that masked column fill_value is coerced into the correct column type.
    r
   r@   Tr   Ú0)rL   r$   rs   N)r   Zset_fill_valuer%   Zint32rE   r   r3   r   )r(   r�   r   Úc2r+   r+   r,   Útest_coercing_fill_value_type  s    

rË   c                  C   s^   t ddgddgd�} t | dd�}d|jd< t | jddgk¡sBt‚t |jddgk¡sZt‚dS )	z@Test that the mask is copied when copying a table (issue #7362).r   r   FTr¦   )rZ   r   N)r   r   r%   rD   r3   )r   rÊ   r+   r+   r,   Útest_mask_copy"  s
    
rÌ   c                  C   s4  t ƒ } tddgdd�| d< ddg| d< d	d
gtj | d< |  ¡ }t|tjƒrZt|tjj	ƒr^t
‚tjj| d d< |  ¡ }t|tjj	ƒsˆt
‚t |d jddgk¡s¤t
‚t |d d jd¡s¾t
‚t |d j¡rÒt
‚t |d j¡ræt
‚| j}t |d ddgk¡�st
‚t |d ¡�rt
‚t |d ¡�r0t
‚dS )zGTest that as_array() and Table.mask attr work with masked mixin columnsr   r   r·   r¸   r
   r   r   r   r   r   r   FTr   r"   N)r   r   r¼   r½   Zas_arrayrE   r%   Úndarrayri   ÚMaskedArrayr3   r   rD   r   Úiscloser·   Úany)r(   Útarº   r+   r+   r,   Útest_masked_as_array_with_mixin,  s"    rÒ   c                  C   s¼   t tjƒ} tƒ }tddgƒ|d< t|d tƒs2t‚tddgtjd�|d< t|d | ƒsZt‚t 	|d j
¡rnt‚tddgtjddgd�|d	< t|d	 | ƒsœt‚t |d	 j
ddgk¡s¸t‚d
S )zOTest that adding a MaskedColumn with a unit to QTable creates a MaskedQuantity.r   r   r
   ©Úunitr   TF©rÔ   r   r   N)r   r¼   ÚQuantityr   r   rE   r3   r½   r%   rÐ   r   rD   ©ZMaskedQuantityr(   r+   r+   r,   Ú&test_masked_column_with_unit_in_qtableG  s    
rØ   c                  C   sš   t tjƒ} tƒ }| ddgtjd�|d< t|d tƒs8t‚t 	|d j
¡rLt‚| ddgtjddgd�|d< t|d tƒszt‚t |d j
ddgk¡s–t‚d S )	Nr   r   rÓ   r   TFrÕ   r   )r   r¼   rÖ   r   r½   rE   r   r3   r%   rÐ   r   rD   r×   r+   r+   r,   Útest_masked_quantity_in_tableX  s    
rÙ   c                  C   sF   t ddgddgd�} | j}t|ƒtjjks.t‚t|jƒtjksBt‚d S )Nr   r   FTr¦   )r   r   r~   r%   ri   rÎ   r3   rÍ   )r   Zc_datar+   r+   r,   Ú7test_masked_column_data_attribute_is_plain_masked_arrayd  s    rÚ   c                     s‚   G ‡ fdd„dt ƒ‰ G ‡ fdd„dttˆ ƒ} | ddgddgd	�}ˆ jdksNt‚|d
d
… }ˆ jdksht‚t|ƒ ˆ jdks~t‚d
S )z[Check that we don't finalize MaskedColumn too often.

    Regression test for gh-6721.
    c                       s"   e Zd ZdZ‡‡ fdd„Z‡  ZS )z<test_mask_slicing_count_array_finalize.<locals>.MyBaseColumnr   c                    s   t ƒ  |¡ ˆ  jd7  _d S )Nr   )ÚsuperÚ__array_finalize__Úcounter)r)   Úobj©ÚMyBaseColumnÚ	__class__r+   r,   rÜ   u  s    zOtest_mask_slicing_count_array_finalize.<locals>.MyBaseColumn.__array_finalize__)r.   r/   r0   rÝ   rÜ   Ú__classcell__r+   ©rà   ©rá   r,   rà   r  s   rà   c                       s   e Zd Z‡‡ fdd„Z‡  ZS )z>test_mask_slicing_count_array_finalize.<locals>.MyMaskedColumnc                    s   t ƒ j| f|ž|Ž}ˆ |_|S )N)rÛ   Ú__new__Z
_baseclass)Úclsr±   Úkwargsr)   rß   r+   r,   rå   |  s    zFtest_mask_slicing_count_array_finalize.<locals>.MyMaskedColumn.__new__)r.   r/   r0   rå   râ   r+   rã   rä   r,   ÚMyMaskedColumn{  s   rè   r   r   FTr¦   N)r   r   r   rÝ   r3   Úrepr)rè   r   Zc0r+   rã   r,   Ú&test_mask_slicing_count_array_finalizek  s    	
rê   )&rN   Únumpyr%   Znumpy.mari   rg   Zastropy.unitsZunitsr¼   Zastropy.tabler   r   r   r   Zastropy.table.columnr   Zastropy.timer   Zastropy.utils.maskedr   r	   r1   r6   rO   ra   rk   r˜   r    r£   r¥   rÈ   rË   rÌ   rÒ   rØ   rÙ   rÚ   rê   r+   r+   r+   r,   Ú<module>   s4   H3s8n
