U
    e»{júŠ  ã                   @   sø  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„ 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&d/d0„ Z'd1d2„ Z(ej d3d4d5g¡d6d7„ ƒZ)d8d9„ Z*d:d;„ Z+ej d3d<d=d>g¡d?d@„ ƒZ,dS )Aé    N)Úassert_array_equal)ÚtableÚtime)Úunits)Ú!assert_follows_unicode_guidelines)ÚMetaBaseTestc                   @   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t‚|d }t ||ƒs0t‚t |tjƒs@t‚d S )NÚa©Únameé   )Ú
isinstanceÚnpÚndarrayÚAssertionError)ÚselfÚColumnÚcÚc2© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_column.pyÚtest_subclass   s
    
zTestColumn.test_subclassc                 C   s  t  ddd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 ]v}|r€t  	|¡sŽn
t  
|¡rŽt‚t|ƒdksžt‚|tjkr¼t|ƒt jksÒt‚nt|ƒt jjjksÒt‚|jjdkslt‚qlqP|d |k }t  	|¡�st‚d	S ©
z<Show that basic numpy operations with Column behave sensiblyé   r   é   r	   r
   TFz|b1N)r   ÚarrayÚoperatorÚeqÚneÚgeÚgtÚleÚltÚallÚanyr   Ú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  ddd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slt‚|r|t  	|¡sŠn
t  
|¡rŠt‚|tjkr¨t|ƒt jksØt‚qHt|ƒt jjjks¾t‚|t jk	rH|jjdksHt‚qHd	S r   )r   r   ÚisfiniteÚisinfÚisnanÚsignZsignbitr%   r   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_ufuncs2   s     û

z$TestColumn.test_numpy_boolean_ufuncsc                 C   s:   t jdddgt jd� |¡}t|ƒd|j› d�ks6t‚d S )Nr   r   r   ©r*   ú<z dtype='int64' length=3>
1
2
3)r   r   Zint64ÚviewÚreprÚ__name__r   ©r   r   r   r   r   r   Ú	test_viewI   s    zTestColumn.test_viewc              
   C   sb   ddl m} | dd¡�@ |t d¡dtdd�}t|ƒ ¡ d	d
ddddddgksTt‚W 5 Q R X dS )z/Show that the formatted output from str() worksr   )ÚconfÚ	max_linesé   iÐ  r	   z%6.2f)r   r*   Úformatz   a   z-------z   0.00z   1.00z    ...z1998.00z1999.00zLength = 2000 rowsN)	Úastropyr<   Zset_tempr   ZarangeÚfloatr+   Ú
splitlinesr   )r   r   r<   Úc1r   r   r   Útest_formatM   s    
øzTestColumn.test_formatc                 C   st   |dddgddd�}t  |¡}t  ||k¡s0t‚t j|dd�}t  ||k¡sPt‚t j|d	d
�}t  ||k¡spt‚d S )Nr   r   r   r	   Úi8©r   r*   F)ÚcopyÚi4r5   )r   r   r#   r   )r   r   ÚdZnp_datar   r   r   Útest_convert_numpy_array^   s    
z#TestColumn.test_convert_numpy_arrayc                 C   s>   |dddgdddd�}|  d¡ t |jd	d
dgk¡s:t‚d S )Nr   r   r   r	   Úf8Úm©r   r*   ÚunitÚkmçü©ñÒMbP?çü©ñÒMb`?çú~j¼t“h?)Zconvert_unit_tor   r#   Údatar   )r   r   rI   r   r   r   Útest_convert_unith   s    
zTestColumn.test_convert_unitc                 C   sÞ  t jddddgd�}t | ¡ d¡s(t‚t| ¡ tjtfƒs@t‚t | 	¡ d¡sTt‚t| 	¡ tjtfƒslt‚tt 
|¡t jƒs‚t‚t jdddd	gd�}t | 	¡ d
¡sªt‚t| 	¡ tjtfƒsÂt‚t jdddd	gddd
ggd�}| 	¡ dksðt‚t| 	¡ tjtfƒ�s
t‚t |j	dd�dddgk¡�s,t‚|j	dd�jdk�sDt‚t|j	dd�tjƒ�s^t‚t jddddgdddgd�}t | ¡ d¡�s�t‚t| ¡ tjtfƒ�sªt‚t | 	¡ d¡�sÀt‚t| 	¡ tjtfƒ�sÚt‚dS )zÝTest 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   rS   g      @r   r   r   é   é   é   é   r   ©Zaxisé   é	   )r   )r   rS   Úmaskç      ø?N)r   r   r   ZallcloseZmeanr   r   ZfloatingrA   ÚsumÚcosÚintegerÚintr#   Úshaper   ÚMaskedColumn)r   r   r   r   r   Útest_array_wrapm   s(    "zTestColumn.test_array_wrapc                 C   s:   |ddgƒ}|j dkst‚t |t ddg¡k¡s6t‚dS )zBCan create a column without supplying name, which defaults to Noner   r   N)r   r   r   r#   r   r:   r   r   r   Útest_name_none�   s    zTestColumn.test_name_nonec                 C   s¬   |t  dddg¡tj d�}t  |jt  dddg¡k¡s<t‚t  |jtjk¡sRt‚|t  dddg¡tj tjd�}t  |jt  dddg¡k¡s’t‚t  |jtjk¡s¨t‚d S )	Nr   r   r   )rS   )rS   rN   éd   éÈ   é,  )	r   r   ÚurL   r#   rS   r   rN   Úcmr:   r   r   r   Útest_quantity_init•   s       zTestColumn.test_quantity_initc                 C   s`   |dddgdd�}dt j }||k }t |dddgk¡s<t‚||k}t |dddgk¡s\t‚d S )	Nr   i4  r   ZHz)rN   r   TF)rl   ZkHzr   r#   r   )r   r   r   ÚqÚcheckr   r   r   Útest_quantity_comparisonž   s    
z#TestColumn.test_quantity_comparisonc                 C   sì   |dddg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 dddg¡fD ]X}|| }|j d	ksˆt‚|jt	j
ks˜t‚|jdks¦t‚|jdks´t‚|jddiksnt‚qn|d }dD ]}t||ƒrÔt‚qÔdS )z�
        Test for issue #3023: when calling getitem with a MaskedArray subclass
        the original object attributes are not copied.
        r   r   r   r	   rL   ú%iÚaa)r   rN   r?   ÚdescriptionÚmetaÚbrO   z%dÚbbÚbbbNr   FT)r   rN   r?   rt   ru   Úslicer   r   r   rl   rO   Úhasattr)r   r   rC   Úitemr   ÚvalÚattrr   r   r   Ú'test_attrs_survive_getitem_after_change¨   s6         ÿ
üz2TestColumn.test_attrs_survive_getitem_after_changec              	   C   sP  |dddgdddd�}t  |jdddgtj k¡s6t‚t  |jjdddgtj jk¡sZt‚t  |j| d¡k¡stt‚t  |jj| d¡jk¡s’t‚t j 	| tj
¡jd	d
dgtj
 j¡ t j 	| d¡jd	d
dgtj
 j¡ t j 	| tjtj ¡ ¡jdddg¡ |dddgddd d�}t tj¡� | tj
¡ W 5 Q R X t  | tj¡t  dddg¡k¡�sdt‚dddgtj
 }|| tj
¡d d …< t j 	|dddg¡ ||j ¡ d d …< t j 	|dddg¡ ||jd d …< t j 	|dddg¡ |dddgdtdd�}||jd d …< t j 	|dddg¡ |dddgddd�}t t¡� |j W 5 Q R X d S )Nr   r   r   r	   rK   rL   rM   rW   rP   rQ   rR   rO   gB—pè­¼r@gB—pè­¼b@gk5=‹’ûX@rZ   éè  i¸  iˆ  Úargr   Ústuff)r   rN   )r   r#   Úquantityrl   rL   r   ÚvalueÚtoÚtestingÚassert_allcloserO   ZMHzZequivalenciesZspectralÚpytestÚraisesZ
UnitsErrorZdimensionless_unscaledr   rG   rd   Ú	TypeError)r   r   rI   Zd_nounitro   Zd2Zd3r   r   r   Útest_to_quantityÉ   sD     $ ÿ
 ÿþ(zTestColumn.test_to_quantityc                 C   sÈ   |dddgdddd�}t  |jdddgt tj¡ k¡s<t‚t  |jjdddgt tj¡ jk¡sft‚t  |j| d¡k¡s€t‚t  |jj| d¡jk¡sžt‚dd	d
gtj }t j	 
| tj¡|¡ dS )zW
        Tests for #8424, check if function-unit can be retrieved from column.
        r   r   r   r	   rK   zdex(AA)rM   é
   ri   r   N)r   r#   r‚   rl   ÚdexZAAr   rƒ   r„   r…   r†   )r   r   rI   ro   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¡sRt‚t|| ƒt|dƒrntjjntj	kszt‚|| j
dksŒt‚|||… }t |ddggk¡s°t‚t||ƒs¾t‚|j
dksÌt‚|ddgƒ}t || dk¡sît‚t|| tjƒ�st‚|| j
d	k�st‚|||… }t |dgk¡�s:t‚t||ƒ�sJt‚|j
d
kst‚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   rY   r   r_   ©r   ©r   r   r   )r   N)rd   r   Úint_r#   r   r&   rz   r'   r)   r   re   r   rc   )r   r   Úinteger_typesZint_typer   Zi0Úi1Zc01r   r   r   Útest_item_access_type
  s,    


ÿz TestColumn.test_item_access_typec              
   C   s~  |dddgdt ddddd	d
œd�}| dd¡}t |ddddgk¡sHt‚| |¡sVt‚t|ƒt|ƒksjt‚t|dƒrˆ|jj	|j
j	ksˆt‚| dd¡}t |ddddgk¡s®t‚| dd¡}t |ddddgk¡sÔt‚| dd¡}t |ddddgk¡sút‚| ddddg¡}t|dƒ�r.|jj	|j
j	k�s.t‚t ttf¡� | dd¡}W 5 Q R X t ttf¡� | dd¡}W 5 Q R X d S )Nr   r   r   r	   ÚmJyrr   útest columnr>   é   ©r   rI   ©r   r*   rN   r?   rt   ru   ri   r_   éÿÿÿÿr   éýÿÿÿrj   rk   éüÿÿÿrY   )rd   Úinsertr   r#   r   Úattrs_equalr&   rz   rS   re   r_   r‡   rˆ   Ú
ValueErrorÚ
IndexError©r   r   r   rC   r   r   r   Útest_insert_basic*  s8    ù
zTestColumn.test_insert_basicc              	   C   s€   |ddgddggƒ}|j dddgdd�}t |ddddddgk¡sFt‚|j dddgdd�}t |dddgdddggk¡s|t‚dS )	z"Insert with non-default axis kwargr   r   r   rY   rZ   rX   Nr\   ©rœ   r   r#   r   r    r   r   r   Útest_insert_axisP  s
    zTestColumn.test_insert_axisc                 C   sj   |ddgƒ}|  dd¡}t |dddgk¡s0t‚|ddgƒ}|  dddg¡}t |ddddgk¡sft‚d S )Nr	   rv   r   Úabcr   Údefr¢   r    r   r   r   Útest_insert_string_expandZ  s    z$TestColumn.test_insert_string_expandc                 C   sÆ   t  ddg¡}| dtjj¡}t |dddgk¡s6t‚t |jdddgk¡sPt‚|j	dks^t‚| dtjj
d	d
gddgd�¡}t |dd	d
dgk¡s˜t‚t |jddddgk¡s´t‚|j	dksÂt‚d S )Nr	   rv   r   Ú TFZU1r   ÚcccÚdd©r_   ZU3)r   rf   rœ   r   r'   Úmaskedr#   r   r_   r*   r)   )r   r   rC   r   r   r   r   Ú test_insert_string_masked_valuesc  s     z+TestColumn.test_insert_string_masked_valuesc              	   C   sh   |ddgƒ}t jtdd�� | dd¡ W 5 Q R X |ddgƒ}t jtd	d�� | dd¡ W 5 Q R X d S )
Nr   r   zinvalid literal for int©Úmatchr   Ústringr	   rv   z$string operation on non-string array)r‡   rˆ   rž   rœ   r‰   r:   r   r   r   Útest_insert_string_type_errorn  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¡sNt‚| dd¡}t |ddgddgddggk¡s~t‚t t¡� | dddd	g¡}W 5 Q R X d S )
Nr   r   r   rY   r	   rF   ri   rj   rk   )rd   rœ   r   r#   r   r‡   rˆ   rž   r    r   r   r   Útest_insert_multidimw  s    $$zTestColumn.test_insert_multidimc                 C   sP   |ddd gdt d�}| dddg¡}t |tjdddgdd gt d�k¡sLt‚d S )Nr	   r   rF   ri   rj   r5   )Úobjectrœ   r   r#   r   r   r    r   r   r   Útest_insert_object†  s    zTestColumn.test_insert_objectc                 C   sâ   t jdddgdddddgd�}| dd	¡}t |jjdd	ddgk¡sHt‚|jdksVt‚t |jjddddgk¡stt‚t	|ƒt	|ƒksˆt‚d
D ]P}|jdd	|d�}t |jjdd	ddgk¡s¾t‚t |jjd|ddgk¡sŒt‚qŒd S )Nr   r   r   r	   i'  FT)r   Ú
fill_valuer_   ri   )FTrª   )
r   rf   rœ   r   r#   rS   r   r´   r_   r&   )r   r   rC   r_   r   r   r   Útest_insert_masked�  s       ÿzTestColumn.test_insert_maskedc                 C   sR   t jjddgddgd�}t |g¡}|jdks2t‚t  |d jddgk¡sNt‚d S )Nr   r   TFrª   r�   r   )	r   r'   r)   r   rf   re   r   r#   r_   )r   rS   r   r   r   r   Útest_masked_multidim_as_listž  s    z'TestColumn.test_masked_multidim_as_listc              	   C   s  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¡sXt‚t |jjddgd	d	gddggk¡s€t‚|jdddgd	dgd
�}t |jjddgddgddggk¡sÀt‚t |jjddgd	dgddggk¡sèt‚t	 
t¡�  |jdddgd	dd	gd
�}W 5 Q R X d S )Nr   r   r   rY   r	   rF   ri   rj   Trª   F)r   rf   rd   rœ   r   r#   rS   r   r_   r‡   rˆ   rž   )r   r   rC   r   r   r   Útest_insert_masked_multidim¤  s    ((((z&TestColumn.test_insert_masked_multidimc              	   C   sD   t jddgddggddd�}t t¡� dd	g|d
 _W 5 Q R X dS )zs
        When table is not masked and trying to set mask on column then
        it's Raise AttributeError.
        r   r   r   rY   )r	   rv   )rH   rK   )Únamesr*   TFr	   N)r   ÚTabler‡   rˆ   ÚAttributeErrorr_   )r   Útr   r   r   Útest_mask_on_non_masked_table²  s    z(TestColumn.test_mask_on_non_masked_tableN)r9   Ú
__module__Ú__qualname__r   r.   r4   r;   rD   rJ   rT   rg   rh   rn   rq   r~   rŠ   r�   r“   r¡   r£   r¦   r¬   r°   r±   r³   rµ   r¶   r·   r¼   r   r   r   r   r      s4   
"	
!2 &
		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*t‚d S )Nr	   r”   rM   ©rd   r�   r   ©r   r   rC   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�}| |¡sBt‚d S ©	Nr	   r”   rr   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�}| |¡rBt‚d S )
Nr	   r”   rr   r•   r>   r–   r—   r˜   rv   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�}| |¡rBt‚d S rÃ   )rd   rA   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�}| |¡rBt‚d S )
Nr	   r”   rr   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�}| |¡rBt‚d S )
Nr	   r”   rr   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�}| |¡rBt‚d S )
Nr	   r”   rr   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�}| |¡rBt‚d S )
Nr	   r”   rr   r•   r>   r–   r—   r˜   )ÚerI   rÀ   rÁ   r   r   r   Útest_128  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�}| |¡rBt‚d S )
Nr	   r”   rr   r•   r>   r–   r—   r˜   r^   rÀ   rÁ   r   r   r   Útest_13K  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�}| |¡sFt‚| |¡sTt‚d S rÃ   )r   r   rd   rf   r�   r   )r   rC   r   r   r   r   Útest_col_and_masked_col^  s$    úúz%TestAttrEqual.test_col_and_masked_colN)r9   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)r9   r½   r¾   r   r   Ú
test_classÚargsr   r   r   r   rÏ   x  s   rÏ   c                   @   s   e Zd ZejZdZdS )ÚTestMetaMaskedColumnr   N)r9   r½   r¾   r   rf   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s4t‚| dd… jdksJt‚| dd… jdks`t‚| dd… jdksvt‚| dd… jd dks�t‚t jddgddddddid	�} | dd… jdksÄt‚| dd… jdksÚt‚| dd… jdksðt‚| dd… jdk�st‚| dd… jd dk�s$t‚t jddd
gddddddid	�} |  	ddg¡t
 	| ddg¡fD ]Z}|jdk�svt‚|jdk�s†t‚|jdk�s–t‚|jdk�s¦t‚|jd dk�sbt‚�qb|  	d¡t
 	| d¡fD ]6}|dk�sæt‚|jdk�söt‚t|t jƒ�rÔt‚�qÔt jddd
gddddddid	�} |  	ddg¡t
 	| ddg¡fD ]Z}|jdk�s^t‚|jdk�snt‚|jdk�s~t‚|jdk�sŽt‚|jd dk�sJt‚�qJ|  	d¡t
 	| d¡fD ]6}|dk�sÎt‚|jdk�sÞt‚t|t jƒ�r¼t‚�q¼d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	   rv   rL   rr   r   r>   )rS   r   rt   rN   r?   ru   r   r   r   N)r   r   r   r   rt   rN   r?   ru   rf   Ztaker   re   r   )r   Zsubsetr   r   r   Ú test_getitem_metadata_regression‚  s|    	     ÿ     ÿ     ÿ"     ÿ"rÓ   c                  C   s*   t  dddg¡} tj| dd�}t|ƒ d S )Nr   r   r   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t‚t| ƒdks*t‚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
    r`   z1.5N)r   r   r8   r   r+   )r   r   r   r   Útest_scalar_columnÇ  s    
rÕ   c                  C   s  t jddgddggddgd�} t| d t jjƒs4t‚t| d t jjƒsJt‚d| d _t| d tjƒsht‚t| d t jjƒs~t‚t| d d	 tjƒs–t‚t| d	 d tjƒs®t‚t| d d	 tjƒrÆt‚t| d	 d tjƒrÞt‚t 	tj
tjd  ¡| d _t| d tjƒ�st‚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   rN   rl   ÚQuantityrŒ   rm   ÚsZDex)Zqtabr   r   r   Útest_qtable_column_conversionÓ  s    
rÜ   r«   TFc              	   C   sp  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 5 Q R X |d d dksŠt‚t	|ƒdksšt‚|d j
|j
d ks²t‚d|d jksÄt‚tjtjdd��}ddg|d d
d
…< W 5 Q R X t |d ddgk¡�st‚t	|ƒdk�s"t‚t ddg¡}ddg|d
d
…< ||d d
d
…< t |d ddgk¡�slt‚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Úgetframeinfors   rw   r	   )r¸   r«   Úccr   r©   Nú=truncated right side string\(s\) longer than 2 character\(s\)r­   ZeeeÚeeZtest_columnÚffÚgggÚggZffffZggggr×   Úg)ÚinspectrÝ   rÞ   r   r¹   r‡   ÚwarnsÚStringTruncateWarningr   r%   ÚlinenoÚfilenamer   r#   r   )r«   rÝ   rÞ   r»   ÚwÚ	frameinfor|   r   r   r   Útest_string_truncation_warningì  s6    þ
þ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¡sHt‚tjj|d	d	…< t |jddgk¡st‚qt  d
dg¡}tj	t j
dd��}tjjdg|d	d	…< W 5 Q R X |d dksÀt‚t |jddgk¡sØt‚t|ƒdksèt‚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	   rv   r   r   rU   rV   FTNrs   rw   rà   r­   rã   rä   )r   rf   r   r'   r«   r#   r_   r   r‡   rç   rè   r%   )ÚvaluesÚmcrë   r   r   r   Ú%test_string_truncation_warning_masked  s     
þrð   r   c                 C   s†   d}| |dgdd�}|j jdks$t‚|d |ks4t‚t|d tƒsFt‚t|dd… tjƒs^t‚t |dd… t 	|dg¡k¡s‚t‚dS )zM
    Create a bytestring Column from strings (including unicode) in Py3.
    õ   bÃ¤r¥   ÚSr5   r   Nr   )
r*   Úcharr   r   r+   r   r   r   r#   r   ©r   Úubar   r   r   r   Ú)test_col_unicode_sandwich_create_from_str7  s    rö   c                 C   sÀ   | ddgƒ}|j jdkst‚|d r(t‚|d dks8t‚t|d tƒsJt‚t|d tƒr\t‚t|dd… tjƒstt‚t 	|dd… t 
ddg¡k¡s˜t‚t 	|dd… t 
ddg¡k¡r¼t‚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   r   Úbytesr+   r   r   r   r#   r   )r   r   r   r   r   Ú#test_col_unicode_sandwich_bytes_objG  s    $rú   c                 C   sž  d}|  d¡}| |dgƒ}|jjdks*t‚|d |ks:t‚t|d tƒsLt‚t|dd… tjƒsdt‚t 	|dd… t 
|dg¡k¡sˆt‚t|dd… tjƒs t‚|dd… jjdks¸t‚t 	||dgk¡sÎt‚||dgk}t|ƒt|jƒksðt‚|jjd	k�st‚t 	|¡�st‚t 	|t 
|dg¡k¡�s0t‚t 	|t 
|dg¡k¡�sNt‚||f}|D ]>}||k}t|ƒt|jƒk�s~t‚t 	|d
dgk¡�sZt‚�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   r&   rS   )r   rõ   Úuba8r   ÚokZcmpsÚcmpr   r   r   Útest_col_unicode_sandwich_bytesX  s,    
$r  c               	   C   s(  d} |   d¡}tj| dgdd�}|d | ks0t‚t|dd… tjƒsHt‚t|d tƒsZt‚t |dd… t | dg¡k¡s~t‚t|dd… tjƒs–t‚|dd… j	j
dks®t‚|| dgk}t|ƒtjksÌt‚|j	j
d	ksÜt‚t |¡sêt‚t ¡ �, tjd
dd� t ||dgk¡�st‚W 5 Q R X dS )z<
    Sanity check that Unicode Column behaves normally.
    rñ   rû   r¥   ÚUr5   r   Nr   rü   Úignorez!.*elementwise comparison failed.*)Úmessager÷   )rý   r   r   r   r   r+   r   r#   r   r*   ró   r&   r   ÚwarningsÚcatch_warningsÚfilterwarnings)rõ   rþ   r   rÿ   r   r   r   Ú!test_col_unicode_sandwich_unicode  s     
$
r  c                  C   sf  t  ddg¡} tjj| d< t| dd… t jƒs2t‚t| d tƒsDt‚| d dksTt‚| d tjjksht‚t| dd… t jƒs€t‚| dd… jj	dks˜t‚| ddgk}|d s°t‚|d tjjksÄt‚t 
| ddgk¡sÚt‚t 
| t ddg¡k¡söt‚t 
| t ddg¡k¡�st‚d	D ]H}| |k}t|ƒtjjk�s:t‚|d �sHt‚|d tjjk�st‚�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¥   )r¤   r	  )r   rf   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.t‚||d< t  ||dgk¡sLt‚| ¡ dd	d
| dgksht‚d|dd…< t  |ddgk¡sŠt‚||dd…< t  |||gk¡s¬t‚d|dd…< |dg|dd…< t  ||dgk¡sÞt‚dS )z
    Test setting
    rñ   r	  r÷   s   aar   rs   r¥   ÚNonez----z  z defs   ccNrß   r§   )r   r#   r   Úpformatrô   r   r   r   Útest_unicode_sandwich_set¸  s"    þÿr  Úclass1Úclass2c                 C   s~  | ddgƒ}|t krd}n|tkr,ddg}n|ddgƒ}t ||kddgk¡sRt‚t ||kddgk¡slt‚t ||kddgk¡s†t‚t ||kddgk¡s t‚t ||kddgk¡sºt‚t ||kddgk¡sÔt‚t ||kddgk¡sît‚t ||kddgk¡�s
t‚t ||k ddgk¡�s&t‚t ||k ddgk¡�sBt‚t ||kddgk¡�s^t‚t ||kddgk¡�szt‚dS )zŽTest that comparing a bytestring Column/MaskedColumn with various
    str (unicode) object types gives the expected result.  Tests #6838.
    ó   aó   cr	   rv   TFN)r+   Úlistr   r#   r   )r  r  Zobj1Úobj2r   r   r   Útest_unicode_sandwich_compareÕ  s$    
r  c                  C   sü   t jddddgddddgd�} t jdd	d
dgddddgd�}| |k|| kfD ]L}|d tjjksdt‚|d tjjksxt‚|d tjjksŒt‚|d sLt‚qL| |k|| kfD ]L}|d tjjksÂt‚|d tjjksÖt‚|d tjjksêt‚|d rªt‚qªdS )z"Test the fix for #6839 from #6899.r	   rv   r   rI   TFrª   r  ó   br  ó   dr   r   r   r   N)r   rf   r   r'   r«   r   )rC   r   r   r   r   r   Ú$test_unicode_sandwich_masked_compareö  s    r  c                  C   sD   t jddgddgdd�} t| jjƒdks,t‚t  | ¡}t|| ƒ d S )N)rU   rV   )rW   g      @)FFzf8,f8)r_   r*   r   )r   rf   r%   r*   Úfieldsr   r   )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(t‚|j| ks6t‚d S )NrZ   rŽ   )Úlengthre   r*   )rZ   r   )r   r*   r   r   re   r   )r*   r   r   r   r   Ú!test_structured_empty_column_init  s    
r  c               	   C   s¦   t  dddg¡} t t | ¡t | ¡t | ¡tj	| dd�dœ¡}t
|d jƒt jksXt‚t
|d jƒt jjksrt‚t
|d	 jƒt jksŠt‚t
|d
 jƒt jks¢t‚dS )zŠCan a column's underlying data consistently be accessed via `.value`,
    whether it is a `Column`, `MaskedColumn`, `Quantity`, or `Time`?r   r   r   Zmjd)r?   )r	   rv   r   rI   r	   rv   r   rI   N)r   r   r   rØ   r   rf   rl   rÚ   r   ZTimer&   rƒ   r   r   r'   r)   )rS   Ztblr   r   r   Útest_column_value_access  s    üÿr  c                  C   sÌ   t jdddgdddgd�} | jjd dks.t‚d	| jjd< | jjd d	ksNt‚|  ¡ }|jjd d	ksjt‚t  | ¡}|jjd d	ksˆt‚|  t j¡}|jjd d	ks¨t‚| d
d … }|jjd d	ksÈt‚d S )NrU   rV   rW   TFrª   ZecsvZ
null_valueZ	data_maskr   )r   rf   ÚinfoZserialize_methodr   rG   r7   )rï   r  Zmc3Zmc4Zmc5r   r   r   Ú/test_masked_column_serialize_method_propagation.  s    
r  rò   r  rÖ   c                 C   sÆ   | ddddg|d�}t | tjƒr,tjj|d< |dkrBdddgf}ndddgddd	gf}|D ]f}tj||d�}tj|j|d
d�}|j|d
d�}t 	||k¡sžt
‚tj||d
d�}t 	||k¡sZt
‚qZd S )Nr   r   r   r5   rÖ   Ú2Ú1ó   2ó   1Úright)Zside)r   r   rf   r   r'   r«   r   ZsearchsortedrS   r#   r   )r   r*   r   ÚvsÚvÚexpÚresr   r   r   Útest_searchsorted=  s    r)  )-r   r  Únumpyr   r‡   Znumpy.testingr   r@   r   r   r   rl   Zastropy.tests.helperr   Z!astropy.utils.tests.test_metadatar   r   r¿   rÏ   rÒ   rÓ   rÔ   rÕ   rÜ   ÚmarkZparametrizerí   rð   r   rf   rö   rú   r  r  r
  r  r+   r  r  r  r  r  r  r  r)  r   r   r   r   Ú<module>   sX      1 ;>
)!


&
	
