a
    ߙfb0                     @   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 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mZ d dl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)StringIO)OrderedDict)deepcopy)units)time)coordinates)table)serialize_method_as)data_info_factorydtype_info_name)simple_tablec           	   	   C   sJ  t jg ddd}t jg ddd}t jg ddd}| j|||gg dd}|jd	d
}| jjdkrldgng }|jg dksJ t |d g dksJ t |d ddtdgksJ |rt |d dgd ksJ g dtj	 |d< d|d _
d|d _tjg ddd|d< d|d j_
tjg dg ddd|d< d|d j_
|jd	d
}t |d d kstJ t |d ddtdd d!d!gksJ t |d" g d#ksJ t |d$ g d%ksJ t |d& g d'ksJ |jj}t |d ||||d(d)gksJ t }|j|d
 t|j| ksFJ d	S )*zQ
    Test the info() method of printing a summary of table column attributes
             int32dtypefloat32)ace|S1)r   br   namesNoutZMyTableclass)	namer   shapeunitformatdescriptionr   n_badlengthr   r   S1ZMyColumnr   dquantity%02dr   mjdr"   r   r   degr!   fskycoordza b c d e ffloat64objectr!   ) r2   r2   mr2   zdeg,degr"   )r)   r2   r2   r2   r2   r2   r#   )r2   r2   r2   r(   r   r/   TimeSkyCoord)nparrayTableinfo__name__colnamesallr   ur3   r#   r"   r   r4   r   r5   splitZColumnClassr   reprgetvalue)	table_typesr   r   r   ttinfosubclsclsr    rF   <lib/python3.9/site-packages/astropy/table/tests/test_info.pytest_table_info_attributes   s>     

$rH   c                 C   sP  t jg ddd}t jg ddd}t jg ddd}tjg ddd}| j||||gg d	d
}|jrldnd}t }|jd|d d|jj	 d| d}|ddddddg}	|
  |	ksJ |jddgdd}
|
jg dksJ t |
d g dksJ t |
d g dksJ t |
d g d ks6J t |
d! g d"ksRJ t }|jd|d |ddddddg}	|
  |	ksJ td#d$gt jd%d& gd'}t }|jd|gdd}
|
jg d(ksJ t |
d) g d	ksJ t |
d* ddtd+d,gksJ t |
d# g d-ks0J t |
d$ g d.ksLJ 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.   r   r*   r+   )r   r   r   r'   r   zmasked=True r2   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.0 2.0Z
attributesN)r   r   r    r!   r"   r#   r   meanstdminmaxr$   r%   rL   )1.5rP   --rQ   rM   )0.5rR   rQ   rQ   rN   )1rS   rQ   1.0rO   )2rU   rQ   z2.0sumfirstc                 S   s   | d S )Nr   rF   )colrF   rF   rG   <lambda>p       z'test_table_info_stats.<locals>.<lambda>)r   Zfuncs)r   r   r    r!   r"   r#   r   rV   rW   r$   r%   r   r   r&   r1   )6r[   rQ   rQ   )rS   rS   r   rT   )r6   r7   r   r4   r8   maskedr   r9   	__class__r:   r@   
splitlinesr;   r<   r
   rV   r   )rA   r   r   r   r'   rB   r\   r   Ztable_header_lineexprC   ZcustomrF   rF   rG   test_table_info_statsB   sZ    $r`   c                  C   s   t jddtjgddddt jg ddddg dd	g} | D ]}|jd
d}|tdddddddt|jfddg	ksvJ t	 }|j|d dddddt|j ddg}|
  |ksJ t|j|
 ksJ |jdd
d}|tg dks:J q:d
S )z.
    Test getting info for just a column.
          ?       @r   r#   zm/s)r   r#   r!   )ra   rb   g      @)FFT)r   r#   r!   maskNr   r   r   )r   r0   r    r2   )r!   zm / sr"   r2   )r#   r#   r   r$   r   r%   r   zname = namezdtype = float64zunit = m / szdescription = descriptionzclass = z	n_bad = 1z
length = 3rI   )rd   )rL   rP   )rM   rR   )rN   rS   )rO   rU   rg   rh   )r   Columnr6   nanMaskedColumnr9   r   typer:   r   r@   r^   r?   )Zcolsr   cinfor   r_   rF   rF   rG   test_data_info{   sD    rn   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J 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)r:   
__module____qualname____doc__rF   rF   rF   rG   ri      s   ri   r   r   int64r   r   )r   rr   re   )r!   r2   rf   )r#   r2   )r   ri   )r$   r   r%   )r   ri   r9   r   len)ri   datar   rm   rF   rF   rG   test_data_info_subclass   s    
ru   c                  C   s6   t d} | jdd}|d dks&J d|vs2J dS )z1
    Make sure info works with scalar values
    z2000:001Nr   r$   r   r%   )r   r4   r9   )r   rm   rF   rF   rG   test_scalar_info   s    
rv   c                  C   s:   t  } t }| j|d ddg}|  |ks6J d S )Nr   z<Table length=0>z<No columns>)r   r8   r   r9   r@   r^   )rB   r   r_   rF   rF   rG   test_empty_table   s
    rw   c                  C   sx   dgt j dgt j g} g d}g d}tj|ftj|ffD ]6\}}|| }t }|j|d |  |ks<J q<d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    m)z<QTable length=1>zname  dtype  unit  class  z---- ------- ---- --------zcol0 float64    m Quantityzcol1 float64    m Quantityr   N)	r=   r3   r   r8   ZQTabler   r9   r@   r^   )ZvalsZtexpZqexpZ	table_clsr_   rB   r   rF   rF   rG   test_class_attribute   s    rx   c                  C   sb   t tjtjgg} tjdd.}| jdd d t|dks@J W d    n1 sT0    Y  d S )NTrecordrI   r   r   )r   r8   r6   rj   warningscatch_warningsr9   rs   rB   ZwarnsrF   rF   rG   test_ignore_warnings   s    r~   c                  C   sN   t  } tjdd(}|   t|dks,J W d    n1 s@0    Y  d S )NTry   r   )r   r{   r|   r9   rs   r}   rF   rF   rG   test_no_deprecation_warning   s    r   c                  C   sb   t jg ddd} tt }| d d  jj W d    n1 sB0    Y  dt|jv s^J d S )Nr   r   )r   zfailed access "info" attribute)	r   ri   pytestZraisesAttributeErrorr9   r   strvalue)r   errrF   rF   rG   test_lost_parent_error   s    .r   c               	      s  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j dD ]( t fdd  jj	D sJ qd jj	| d ksJ td jdrJ W d   n1 s0    Y  dD ]    jj	|   ks
J q
td jdrBJ t
ddddt jdiX dD ], t fdd  jj	D s`J q`td jdrJ W d   n1 s0    Y  dD ]    jj	|   ksJ qtd jdr J t
dX dD ], t fdd  jj	D sJ qtd jdrTJ W d   n1 sj0    Y  dD ]    jj	|   ksxJ qxtd jdrJ 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)rc   )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r9   serialize_method.0keyr   rB   rF   rG   	<genexpr>  s   z-test_info_serialize_method.<locals>.<genexpr>r   r   r   Nr   r   Ztest_mc2c                 3   s&   | ]}  j j| d   kV  qdS r   r   r   r   rF   rG   r   "  s   testc                 3   s"   | ]}  j j| d kV  qdS )r   Nr   r   r   rF   rG   r   .  s   )r   r8   r   r4   r   r5   rk   r   r9   r   r	   r<   hasattrri   ZorigsrF   r   rG   test_info_serialize_method  sL    
2
6
6r   c                     s   t dd t d jj} zVt d8 t fdd d jjD sJJ t W d   n1 sd0    Y  W n ty   Y n0  d jj| ksJ dS )r   T)r\   r   r   c                 3   s"   | ]} d  j j| dkV  qdS )r   r   Nr   r   rB   rF   rG   r   @  s   z7test_info_serialize_method_exception.<locals>.<genexpr>N)r   r   r9   r   r	   r<   ZeroDivisionErrorr   rF   r   rG   $test_info_serialize_method_exception7  s    

(r   )#r{   ior   collectionsr   copyr   Znumpyr6   r   Zastropyr   r=   r   r   r   Zastropy.table.infor	   Zastropy.utils.data_infor
   r   Zastropy.table.table_helpersr   rH   r`   rn   ru   rv   rw   rx   r~   r   r   r   r   rF   rF   rF   rG   <module>   s0   ,90
	5