U
    e»{j›/  ã                   @   sè   d dl Z d dlmZ d dlmZ d dlmZ d dlZd dl	Z	d dl
mZmZmZ d dl
mZ d dlmZ d dlmZ d d	lmZmZ 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S )"é    N)ÚOrderedDict)Údeepcopy)ÚStringIO)ÚcoordinatesÚtableÚtime)Úunits)Úserialize_method_as)Úsimple_table)Údata_info_factoryÚdtype_info_namec           	   
   C   s‚  t jdddgdd�}t jdddgdd�}t jddd	gd
d�}| j|||gdddgd�}|jdd�}| jjdkrtdgng }|jdddddddddg	ks˜t‚t  |d dddgk¡s´t‚t  |d ddtdƒgk¡sÔt‚|rôt  |d dgd k¡sôt‚dddgt	j
 |d< d|d _d|d _tjdddgdd�|d	< d |d	 j_tjdddgdddgd!d"�|d#< d$|d# j_|jdd�}t  |d d% ¡ k¡�s”t‚t  |d ddtdƒd&d'd'gk¡�s¼t‚t  |d d(d(d(d)d(d*gk¡�sàt‚t  |d dd(d(d(d(d(gk¡�st‚t  |d d(d(d(dd d$gk¡�s(t‚|jj}t  |d ||||d+d,gk¡�sTt‚tƒ }|j|d� t|jƒ| ¡ k�s~t‚dS )-zQ
    Test the info() method of printing a summary of table column attributes
    é   é   é   Úint32©ÚdtypeÚfloat32ÚaÚcÚeú|S1Úb©ÚnamesN©ÚoutZMyTableÚclassÚnamer   ÚshapeÚunitÚformatÚdescriptionÚn_badÚlengthÚS1ZMyColumnÚdZquantityz%02dÚmjd©r!   r   Údeg©r    ÚfZskycoordza b c d e fÚfloat64ÚobjectÚ Úmzdeg,degÚTimeÚSkyCoord)ÚnpÚarrayÚTableÚinfoÚ__name__ÚcolnamesÚAssertionErrorÚallr   Úur/   r"   r!   r   r0   r   r1   ÚsplitZColumnClassr   ÚreprÚgetvalue)	Útable_typesr   r   r   ÚtÚtinfoÚsubclsÚclsr   © rC   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_info.pyÚtest_table_info_attributes   sV    ÷
 

 ÿÿ
$$$$rE   c                 C   s®  t jddddgdd�}t jddddgdd�}t jdddd	gd
d�}tjddddgddd�}| j||||gddddgd�}|jr‚dnd}tƒ }|jd|d� d|jj	› d|› d�}|ddddddg}	| 
¡  ¡ |	ksÖt‚|jddgdd�}
|
jd d!d"d#d$d%d&d'd(d)d*d+d,gk�st‚t  |
d' d-d-d.d-gk¡�s2t‚t  |
d( d/d/d.d.gk¡�sRt‚t  |
d) d0d0d.d1gk¡�srt‚t  |
d* d2d2d.d3gk¡�s’t‚tƒ }|jd|d� |ddddddg}	| 
¡  ¡ |	k�sÎt‚td4d5gt jd6d7„ gd8�}tƒ }|jd|gdd�}
|
jd d!d"d#d$d%d&d4d5d+d,gk�s&t‚t  |
d  ddddgk¡�sFt‚t  |
d! ddtd9ƒd:gk¡�sjt‚t  |
d4 d;d;d.d.gk¡�sŠt‚t  |
d5 d0d0dd1gk¡�sªt‚dS )<zQ
    Test the info() method of printing a summary of table column statistics
    r   r   r   r   r   r   r   r   r+   r   r'   Ztai)r!   Úscaler   r&   r   zmasked=True r.   Ústatsr   ú<ú z	length=4>zname mean std min maxz---- ---- --- --- ---z   a  1.5 0.5   1   2z   b  1.5 0.5   1   2z   c   --  --  --  --z   d  1.5  -- 1.0 2.0Ú
attributesNr   r   r   r    r!   r"   r   ÚmeanÚstdÚminÚmaxr#   r$   ú1.5z--ú0.5Ú1z1.0Ú2z2.0ÚsumÚfirstc                 S   s   | d S )Nr   rC   )ÚcolrC   rC   rD   Ú<lambda>‰   ó    z'test_table_info_stats.<locals>.<lambda>)r   Úfuncsr%   r-   Ú6)r2   r3   r   r0   r4   Úmaskedr   r5   Ú	__class__r6   r=   Ú
splitlinesr8   r7   r9   r   rS   r   )r>   r   r   r   r&   r?   rZ   r   Ztable_header_lineÚexpr@   ZcustomrC   rC   rD   Útest_table_info_statsJ   s”    ù	ó    ù	 ÿõ ÿ
 r^   c                  C   s  t jddtjgdddd�t jdddgdddddd	gd
�g} | D ]Â}|jdd�}|tdddddddt|ƒjfddg	ƒkszt	‚t
ƒ }|j|d� dddddt|ƒj› �ddg}| ¡  ¡ |ks¾t	‚t|jƒ| ¡ ksÔt	‚|jddd�}|tdddd d!ddgƒks>t	‚q>dS )"z.
    Test getting info for just a column.
    g      ð?g       @r   r"   zm/s)r   r"   r    g      @FT)r   r"   r    ÚmaskNr   )r   r   )r   r,   ©r   r.   )r    zm / s©r!   r.   )r"   r"   r   )r#   r   )r$   r   zname = namezdtype = float64zunit = m / szdescription = descriptionzclass = z	n_bad = 1z
length = 3rG   )rK   rO   )rL   rP   )rM   rQ   )rN   rR   )r   ÚColumnr2   ÚnanÚMaskedColumnr5   r   Útyper6   r8   r   r=   r\   r<   )Úcolsr   Úcinfor   r]   rC   rC   rD   Útest_data_info¢   sf    
   ÿûü÷ÿ
ù	ùÿrh   c                  C   sh   G dd„ dt jƒ} g ddgfD ]D}| |dd�}|jd d�}|tdd	d
dddddt|ƒfgƒkst‚qd S )Nc                   @   s   e Zd ZdZdS )z'test_data_info_subclass.<locals>.ColumnzI
        Confusingly named Column on purpose, but that is legal.
        N)r6   Ú
__module__Ú__qualname__Ú__doc__rC   rC   rC   rD   rb   ä   s   rb   r   r   Úint64r   r   )r   rl   r`   )r    r.   ra   )r"   r.   )r   rb   )r#   r   r$   )r   rb   r5   r   Úlenr8   )rb   Údatar   rg   rC   rC   rD   Útest_data_info_subclassã   s    
øÿro   c                  C   s6   t  d¡} | jdd�}|d dks&t‚d|ks2t‚dS )z1
    Make sure info works with scalar values
    z2000:001Nr   r#   r   r$   )r   r0   r5   r8   )r   rg   rC   rC   rD   Útest_scalar_infoü   s    
rp   c                  C   s:   t  ¡ } tƒ }| j|d� ddg}| ¡  ¡ |ks6t‚d S )Nr   z<Table length=0>z<No columns>)r   r4   r   r5   r=   r\   r8   )r?   r   r]   rC   rC   rD   Útest_empty_table  s
    rq   c                  C   s„   dgt j dgt j g} dddddg}dd	d
ddg}tj|ftj|ffD ]6\}}|| ƒ}tƒ }|j|d� | ¡  ¡ |ksHt	‚qHdS )z]
    Test that class info column is suppressed only for identical non-mixin
    columns.
    r   r   z<Table length=1>zname  dtype  unitz---- ------- ----zcol0 float64    mzcol1 float64    mz<QTable length=1>zname  dtype  unit  class  z---- ------- ---- --------zcol0 float64    m Quantityzcol1 float64    m Quantityr   N)
r:   r/   r   r4   ZQTabler   r5   r=   r\   r8   )ÚvalsZtexpZqexpZ	table_clsr]   r?   r   rC   rC   rD   Útest_class_attribute  s$    û	ûrs   c               	   C   sN   t  tjtjgg¡} tjdd��$}| jdd d� t|ƒdks@t‚W 5 Q R X d S )NT©ÚrecordrG   r   r   )	r   r4   r2   rc   ÚwarningsÚcatch_warningsr5   rm   r8   ©r?   ZwarnsrC   rC   rD   Útest_ignore_warnings,  s    ry   c               	   C   s:   t ƒ } tjdd��}|  ¡  t|ƒdks,t‚W 5 Q R X d S )NTrt   r   )r
   rv   rw   r5   rm   r8   rx   rC   rC   rD   Útest_no_deprecation_warning3  s    rz   c               	   C   sB   t jdddgdd�} tjtdd�� | d d … jj W 5 Q R X d S )Nr   r   r   r   )r   z!failed to access "info" attribute)Úmatch)r   rb   ÚpytestZraisesÚAttributeErrorr5   r   )r   rC   rC   rD   Útest_lost_parent_error<  s    r~   c               	      sp  t  tjddgdd�tjddgddgdd�t jddgddgd	�t jddgddgd	�d
œ¡‰i } dD ]‰ tˆˆ  jj	ƒ| ˆ < qbt
ˆdddœƒ�` dD ](‰ t‡ ‡fdd„ˆˆ  jj	D ƒƒs’t‚q’ˆd jj	| d ksÔt‚tˆd jdƒrèt‚W 5 Q R X dD ]‰ ˆˆ  jj	| ˆ  ksöt‚qötˆd jdƒ�r*t‚t
ˆddddt jdiƒ�N dD ],‰ t‡ ‡fdd„ˆˆ  jj	D ƒƒ�sHt‚�qHtˆd jdƒ�rŒt‚W 5 Q R X dD ] ‰ ˆˆ  jj	| ˆ  k�sšt‚�qštˆd jdƒ�rÒt‚t
ˆdƒ�N dD ],‰ t‡ ‡fdd„ˆˆ  jj	D ƒƒ�sât‚�qâtˆd jdƒ�r&t‚W 5 Q R X dD ] ‰ ˆˆ  jj	| ˆ  k�s4t‚�q4tˆd jdƒ�rlt‚dS )ú˜
    Unit test of context manager to set info.serialize_method.  Normally just
    used to set this for writing a Table to file (FITS, ECSV, HDF5).
    r   r   Zcxcsecr(   r)   r*   TF)r_   )ÚtmÚscÚmcÚmc2)r€   r‚   rƒ   Ztest_tmZtest_mc)r€   r‚   c                 3   s&   | ]}ˆˆ  j j| d ˆ  kV  qdS ©Ztest_N©r5   Úserialize_method©Ú.0Úkey©r   r?   rC   rD   Ú	<genexpr>W  s   ÿz-test_info_serialize_method.<locals>.<genexpr>rƒ   r�   r†   r€   r‚   Ztest_mc2c                 3   s&   | ]}ˆˆ  j j| d ˆ  kV  qdS r„   r…   r‡   rŠ   rC   rD   r‹   h  s   ÿÚtestc                 3   s"   | ]}ˆˆ  j j| d kV  qdS )rŒ   Nr…   r‡   rŠ   rC   rD   r‹   v  s   ÿN)r   r4   r   r0   r   r1   rd   r   r5   r†   r	   r9   r8   Úhasattrrb   ©ZorigsrC   rŠ   rD   Útest_info_serialize_methodB  sR    üÿ	
þ ÿ
þ 
þ r�   c               	      sŠ   t dd�‰ tˆ d jjƒ} zBtˆ dƒ�. t‡ fdd„ˆ d jjD ƒƒsJt‚tƒ ‚W 5 Q R X W n tk
rp   Y nX ˆ d jj| ks†t‚dS )r   T)rZ   r   rŒ   c                 3   s"   | ]}ˆ d  j j| dkV  qdS )r   rŒ   Nr…   r‡   ©r?   rC   rD   r‹   Š  s   ÿz7test_info_serialize_method_exception.<locals>.<genexpr>N)r
   r   r5   r†   r	   r9   r8   ÚZeroDivisionErrorrŽ   rC   r�   rD   Ú$test_info_serialize_method_exception�  s    

þr’   )#rv   Úcollectionsr   Úcopyr   Úior   Únumpyr2   r|   Zastropyr   r   r   r   r:   Zastropy.table.infor	   Zastropy.table.table_helpersr
   Zastropy.utils.data_infor   r   rE   r^   rh   ro   rp   rq   rs   ry   rz   r~   r�   r’   rC   rC   rC   rD   Ú<module>   s,   7XA
	?