U
    e»{j6~  ã                   @   sp  d dl Z d dlZd dlmZ d dlZd dlZd dlmZm	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mZmZmZmZmZ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$ d dl%m&Z& d dl'm(Z( ddl)m*Z* dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/ej0j1ej0 2deef¡dd„ ƒƒZ3ej0 2deef¡dd„ ƒZ4d d!„ Z5d"d#„ Z6d$d%„ Z7d&d'„ Z8d(d)„ Z9d*d+„ Z:d,d-„ Z;ej0 2d.d/d0g¡d1d2„ ƒZ<d3d4„ Z=d5d6„ Z>d7d8„ Z?d9d:„ Z@d;d<„ ZAd=d>„ ZBd?d@„ ZCdAdB„ ZDdCdD„ ZEdEdF„ ZFej0 2dGd/d0g¡dHdI„ ƒZGdJdK„ ZHdLdM„ ZIdNdO„ ZJdPdQ„ ZKdRdS„ ZLej0 2d.d/d0g¡ej0 2dTeeg¡dUdV„ ƒƒZMdWdX„ ZNdS )Yé    N)ÚStringIO)ÚcoordinatesÚtime)Úunits)ÚEarthLocationÚSkyCoord)Úskycoord_equal)Úrepresentation_equal)	ÚColumnÚNdarrayMixinÚQTableÚTableÚhstackÚjoinÚ	serializeÚtable_helpersÚvstack)Ú
BaseColumn)Úrepresent_mixins_as_columns)ÚArrayWrapper)ÚParentDtypeInfo)ÚAstropyUserWarning)ÚMergeConflictWarningé   )Ú
MIXIN_COLSc              	   C   s  | d }d|j _|j jdks t‚d|j _|j jdks8t‚t|tjtjt	j
t	jtjfƒrxt t¡� tj|j _W 5 Q R X ntj|j _|j jtjks”t‚d|j _|j jdks¬t‚ddi|j _|j jddiksÌt‚t t¡� d|j _W 5 Q R X t t¡� |j j W 5 Q R X dS )z6
    Required attributes for a column can be set.
    ÚmÚar   N)ÚinfoÚnameÚAssertionErrorÚdescriptionÚ
isinstanceÚuÚQuantityr   r   r   ÚTimeÚ	TimeDeltaÚ BaseRepresentationOrDifferentialÚpytestÚraisesÚAttributeErrorr   ÚunitÚformatÚmetaZbad_attr)Ú
mixin_colsr   © r.   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/table/tests/test_mixin.pyÚtest_attributes%   s4    ûþ

r0   c                 C   s`   t |jtjƒrt| ƒtk	s$t |tƒr8t|ƒ| jksLt‚nt|ƒt|ƒksLt‚|jj	d ks\t‚d S ©N)
r!   r   r"   ZQuantityInfoÚtyper   r
   ÚColumnClassr   r   )ÚtableZ	table_colZin_colr.   r.   r/   Úcheck_mixin_typeN   s    ÿ
ÿþr5   c                 C   sn   |   |¡}t||d |d ƒ t| ¡ ƒ}| j |dd�}t||d |d ƒ |   |¡}t||d |d ƒ dS )zŸ
    Make a table with the columns in mixin_cols, which is an ordered dict of
    three cols: 'a' and 'b' are table_types.Column type, and 'm' is a mixin.
    r   )Úir   Úbr   ©ÚnamesZcol3N)r   r5   ÚlistÚvalues)Útable_typesr-   ÚtÚcolsr.   r.   r/   Útest_make_table]   s    

r?   c                  C   sP   ddl m}  ttƒ}| ƒ D ]0}|d rd|d krtƒ }|j||d d� qdS )z´
    Test that table with mixin column can be written by io.ascii for
    every pure Python writer.  No validation of the output is done,
    this just confirms no exceptions.
    r   )Ú_get_connectors_tableZWritez.fast_ZFormat©r+   N)Zastropy.io.ascii.connectr@   r   r   r   Úwrite)r@   r=   ÚfmtÚoutr.   r.   r/   Útest_io_ascii_writem   s    
rE   c                 C   sn   t ƒ }tjdddgdd�|d< | d }|j|dd	d
� t j|dd�}t|d tjƒsXt‚|d jdksjt‚dS )a  
    Test that table with Quantity mixin column can be round-tripped by
    io.votable.  Note that FITS and HDF5 mixin support are tested (much more
    thoroughly) in their respective subpackage tests
    (io/fits/tests/test_connect.py and io/misc/tests/test_hdf5.py).
    r   é   é   Únm©r*   r   ú	table-tmpÚvotableT©r+   Ú	overwriterA   N)r   r"   r#   rB   Úreadr!   r   r*   )Útmp_pathr=   ÚfilenameÚqtr.   r.   r/   Útest_votable_quantity_write|   s    rR   r<   c                 C   sJ  |ddgddggƒ}t jD ]P}t jddgddggd|tdd	d
dd�d�|d| < t jddg|d�|d| < qddg|d< | d }tjtdd�� |j|ddd� W 5 Q R X tjtdd�� |j|ddd�}W 5 Q R X t jD ]Œ}dD ]‚}|| }t	|| t jƒ�st
‚|| j|| jk�st
‚|| jdk�s2t
‚|| j|| jk�sLt
‚|| || k ¡ sât
‚qâqÚd D ]4}t	|| tƒ�s„t
‚|| || k ¡ �slt
‚�qlt jD ]*}dD ]}|| }d!|| jjd< �q°�q¨|j|ddd� |j|dd"�}t jD ]L}dD ]@}|| }t	|| t jƒ�r"t
‚|| || jk ¡ �s t
‚�q �qød#S )$a}  
    Test that table with Time mixin columns can be written by io.fits.
    Validation of the output is done. Test that io.fits writes a table
    containing Time mixin columns that can be partially round-tripped
    (metadata scale, location).

    Note that we postpone checking the "local" scale, since that cannot
    be done with format 'cxcsec', as it requires an epoch.
    r   rF   ÚstringÚcolumné   rG   Zcxcsecéî«Úÿéš§@ é¡9> r   rI   ©r+   ÚscaleÚlocationr   ú1999-01-01T00:00:00.123456789ú2010-01-01T00:00:00©rZ   r7   ç      @ç      @ÚcrJ   zQTime Column "btai" has no specified location, but global Time Position is present©ÚmatchÚfitsTrL   z8Time column reference position "TRPOSn" is not specified©r+   Zastropy_native©r   r7   Újd©Úcol0Úcol1ra   Úformatted_valuerA   N)r   ZSTANDARD_TIME_SCALESr$   r   r'   Úwarnsr   rB   rN   r!   r   rZ   r+   r[   Úallr
   r   Úserialize_methodÚvalue)rO   r<   r=   rZ   rP   ÚtmÚabr   r.   r.   r/   Ú test_io_time_write_fits_standard�   s\    
ü ÿýþ


rr   c              
   C   s
  |ddgddggƒ}t jddgddggd	d
tddddd�d�|d< t jddgd
d�|d< ddg|d< | d }tjtdd�� |j|ddd� W 5 Q R X tjtdd�� |j|ddd �}W 5 Q R X d!D ]~}|d" }t|| t jƒsät	‚|| j
|| j
ksüt	‚|| jd#k�st	‚|| j|| jk�s*t	‚|| || k ¡ sÄt	‚qÄd$D ]4}t|| tƒ�s`t	‚|| || k ¡ �sHt	‚�qHd!D ]}|d" }d%|| jjd< �q‚|j|ddd� |j|dd&�}d!D ]@}|d" }t|| t jƒ�ræt	‚|| || jk ¡ �sÄt	‚�qÄd'S )(a  
    Test that table with a Time mixin with scale local can also be written
    by io.fits. Like ``test_io_time_write_fits_standard`` above, but avoiding
    ``cxcsec`` format, which requires an epoch and thus cannot be used for a
    local time scale.
    r   rF   rS   rT   iQÃ  iRÃ  iSÃ  iTÃ  ZmjdÚlocalrV   rW   rX   r   rI   rY   Za_localr\   r]   r^   Zb_localr_   r`   ra   rJ   z/Time Column "b_local" has no specified locationrb   rd   TrL   z9Time column reference position "TRPOSn" is not specified.re   rf   Ú_localrg   rh   rk   rA   N)r   r$   r   r'   rl   r   rB   rN   r!   r   rZ   r+   r[   rm   r
   r   rn   ro   )rO   r<   r=   rP   rp   rq   r   r.   r.   r/   Útest_io_time_write_fits_localâ   sT    ü
 ÿ
 ÿþru   c              	   C   sh   t | ƒ}|j ttjf¡}|s(t d¡ tƒ }t 	t
¡�}|j|dd� W 5 Q R X dt|jƒksdt‚dS )zf
    Test that table with mixin columns (excluding Quantity) cannot be written by
    io.votable.
    zno unsupported column typesrK   rA   z'cannot write table with mixin column(s)N)r   ÚcolumnsZnot_isinstancer   r"   r#   r'   Úskipr   r(   Ú
ValueErrorrB   Ústrro   r   )r-   r=   Zunsupported_colsrD   Úerrr.   r.   r/   Útest_votable_mixin_write_fail-  s    
r{   c              
   C   sü  |   ¡ }|  ddddg¡|d< |  ddddg¡|d< t ¡ D ]\}}|||< q<|   |¡}dddd	g|d< t ¡ D ]$\}}||| j_|d
 || j_qpdD ]”}t||d|d�}|d }|d }t ¡ D ]f\}}|d }	|d }
t||	|| ƒ t||
|| ƒ ||	 jj|k�st‚||
 jj|d
 ksÆt‚qÆqšdD ]@}t	 
t¡�}t||d|d�}W 5 Q R X dt|jƒk�s4t‚�q4t	 
t¡�}t||ddgd�}W 5 Q R X dt|jƒk�s²t‚t	jtdd�� t||dgd�}W 5 Q R X t |d |d k¡�søt‚dS )zq
    Join tables with mixin cols.  Use column "i" as proxy for what the
    result should be for each mixin.
    r   r7   ra   r   r   rF   rU   r6   ÚdÚ2)ÚinnerÚleft)ÚkeysÚ	join_typeÚi_1Úi_2Ú_1Ú_2)ÚouterÚrightzjoin requires masking columnZskycoord)r€   z(one or more key columns are not sortablezFIn merged column 'quantity' the 'description' attribute does not matchrb   ÚquantityZa_1N)r   r
   r   Úitemsr   r    r   Úassert_table_name_col_equalr   r'   r(   ÚNotImplementedErrorry   ro   Ú	TypeErrorrl   r   Únprm   )r<   Út1r   ÚcolÚt2r�   Út12Úidx1Úidx2Úname1Úname2Úexcr.   r.   r/   Ú	test_join@  sD    

þr—   c                 C   s†  |   ¡ }|  ddddg¡|d< t ¡ D ],\}}|||< ||| j_ddi|| j_q&dD �]&}dD �]}|   |¡}|rÄ|d	d
… }|dkrÄt t	¡�}t
||g|d�}W 5 Q R X dt|jƒksbt‚qbt
||g|d�}|d }	|d }
t ¡ D ]�\}}|d }|d }t||||	 ƒ t||||
 ƒ dD ]R}t|| j|ƒt|| j|ƒk�sRt‚t|| j|ƒt|| j|ƒk�s(t‚�q(qìqbqXd	S )zs
    Hstack tables with mixin cols.  Use column "i" as proxy for what the
    result should be for each mixin.
    r   r   rF   rU   r6   r   )r~   r†   )TFNéÿÿÿÿr†   )r�   zhstack requires masking columnr‚   rƒ   r„   r…   )r    r,   )r   r
   r   r‰   r   r    r,   r'   r(   r‹   r   ry   ro   r   rŠ   Úgetattr)r<   rŽ   r   r�   r�   Zchopr�   r–   r‘   r’   r“   r”   r•   Úattrr.   r.   r/   Útest_hstackp  sB    


 ÿ ÿr›   c                 C   sÚ   t |tjƒrBt | | j|jk¡s&t‚t | | j|jk¡sÖt‚n”t |tjƒrht t	| | |ƒ¡sÖt‚nnt |t
jƒr˜t| ƒtkrÖt | | |k¡sÖt‚n>t |tjƒrÀt | | j|jk¡sÖt‚nt | | |k¡sÖt‚dS )zQ
    Assert all(t[name] == col), with special handling for known mixin cols.
    N)r!   r   r   r�   rm   Úrar   Údecr&   r	   r"   r#   r2   r   r   r   Údata)r=   r   r�   r.   r.   r/   rŠ   ˜  s    rŠ   c                 C   sÈ   d}| d }d|j _d|j _d|j _ddi|j _t|gƒ}ddgt dd	g¡tddƒfD ]j}|| }|| }t	|d|| ƒ |D ]@}t
|d j |ƒt
|j |ƒks¤t‚t
|j |ƒt
|j |ƒks€t‚q€qXd
S )zU
    Test that slicing / indexing table gives right values and col attrs inherit
    ©r   r*   Údtyper+   r    r,   r   ú{0}r|   r   r   rU   r   rF   N)r   r   r+   r    r,   r   r�   ÚarrayÚslicerŠ   r™   r   )r-   Úattrsr   r=   Úitemr�   Úm2rš   r.   r.   r/   Útest_get_itemsª  s    
" r§   c           
      C   sÞ   dd„ }dd„ }d}dD ]À}| | }||j _d|j _d|j _d	d
i|j _tjtj||fD ]~}||ƒ}|D ]l}|dks¤t|j jddƒs¤|j jj 	d¡s¤|tjtjfkr²t|j |ƒ}	n|j j 
d¡}	t|j |ƒ|	ksht‚qhqXqdS )z’
    Test copy, pickle, and init from class roundtrip preserve info.  This
    tests not only the mixin classes but a regular column as well.
    c                 S   s   t  t  | ¡¡S r1   )ÚpickleÚloadsÚdumps©ra   r.   r.   r/   Úpickle_roundtripÄ  s    z>test_info_preserved_pickle_copy_init.<locals>.pickle_roundtripc                 S   s
   |   | ¡S r1   )Ú	__class__r«   r.   r.   r/   Úinit_from_classÇ  s    z=test_info_preserved_pickle_copy_init.<locals>.init_from_classrŸ   )r6   r   r¡   r|   r   r   r    ZisnativeTÚvoidú=N)r   r   r+   r    r,   ÚcopyÚdeepcopyr™   r    Ú
startswithZnewbyteorderr   )
r-   r¬   r®   r¤   Zcolnamer   Úfuncr¦   rš   Úoriginalr.   r.   r/   Ú$test_info_preserved_pickle_copy_init¾  s.    ÿþýür¶   c                 C   sv   t | tƒr$| jj ¡ }|jj ¡ }n| j ¡ }|j ¡ }dd„ t| ¡ | ¡ ƒD ƒ}|rft|ƒrrt‚nt	|ƒsrt‚dS )z«Check whether data attributes in col1 and col2 share memory.

    If copy=True, this should not be the case for any, while
    if copy=False, all should share memory.
    c                 S   s.   g | ]&\}}t |tjƒr|jrt ||¡‘qS r.   )r!   r�   ZndarrayÚshapeZmay_share_memory)Ú.0Zv1Zv2r.   r.   r/   Ú
<listcomp>ó  s    þz&check_share_memory.<locals>.<listcomp>N)
r!   r   rž   r   Z_represent_as_dictÚzipr;   Úanyr   rm   )rj   Zcol2r±   Zmap1Zmap2Zsharedr.   r.   r/   Úcheck_share_memoryâ  s    


þr¼   r±   TFc                 C   sâ  d}| d }|j jdkst‚t|gdg|d�}|j jdks>t‚t||d |d� ||d< |j jdksht‚t||d dd� d|j _d	|j _d
|j _ddi|j _t|g|d�}|jdgks¼t‚t||d |d� t|gdg|d�}|j jdksðt‚|jdgk�st‚t||d |d� ||d< t||d dd� d|j _|j	|g|d� t||d |d� dD ]N}t
|||ƒ |D ]6}|dk�rpt|d j |ƒt|| j |ƒk�spt‚�qp�q\|d }t|ƒt|ƒk�r<d|jk�r<|d |d< t
|d|d ƒ t||d dd� |D ]6}|dk�rt|d j |ƒt|d j |ƒk�st‚�qt|dd… gdg|d�}t||d |d� t|ƒt|ƒk�rÞd|jk�rÞ|d |d< t
|d|d ƒ |D ]6}|dk�r¦t|d j |ƒt|d j |ƒk�s¦t‚�q¦dS )zÄ
    Test that adding a column preserves values and attributes.
    For copy=True, the data should be independent;
    for copy=False, the data should be shared, but the instance independent.
    rŸ   r   Nr   ©r9   r±   ©r±   ÚnewTr¡   r|   r   Úm1r¦   Úm3)r¦   rÁ   r   r   r   ÚsrF   )r   r   r   r   r¼   r+   r    r,   ÚcolnamesZadd_columnsrŠ   r™   r2   Ú__dict__)r-   r±   r¤   r   r=   r   rš   rÂ   r.   r.   r/   Útest_add_columnþ  s\    
.
*
rÅ   c               	   C   s6   t tƒ} t tƒ}t t¡� t| |gƒ W 5 Q R X dS )z(
    Vstack tables with mixin cols.
    N)r   r   r'   r(   r‹   r   )rŽ   r�   r.   r.   r/   Útest_vstackA  s    rÆ   c              	   C   sþ   t | ƒ}| ¡ }d|d j_dddddg}t|d tjttj	tj
tjfƒrÂ| d|d ¡ |jD ]J}|| }t|tjƒr�t||| | ƒsªt‚q`t ||| | k¡s`t‚q`|d jjdksút‚n8t t¡�}| d|d ¡ W 5 Q R X dt|jƒksút‚d	S )
zT
    Test inserting a row, which works for Column, Quantity, Time and SkyCoord.
    r|   r   r   r˜   r   rF   rU   zUnable to insert rowN)r   r±   r   r    r!   r"   r#   r
   r   r$   r%   r   r   Ú
insert_rowrÃ   r   r   r�   rm   r'   r(   rx   ry   ro   )r-   r=   Út0Zidxsr   r�   r–   r.   r.   r/   Útest_insert_rowK  s$     ÿ
rÉ   c               	   C   sX   t dgtj gƒ} t t¡� }|  ddtj tj f¡ W 5 Q R X dt|j	ƒksTt
‚dS )z8
    Insert a row into a QTable with the wrong unit
    r   r   rF   z='m / s' (speed/velocity) and 'm' (length) are not convertibleN)r   r"   r   r'   r(   rx   rÇ   rÂ   ry   ro   r   )r=   r–   r.   r.   r/   Útest_insert_row_bad_unitf  s    $ÿrÊ   c                 C   sF   t | ƒ}| ¡ }| d }t|dƒr*|jjnd}|d jj|ksBt‚dS )z„
    Test that converting to numpy array creates an object dtype and that
    each instance in the array has the expected type.
    r   r    ÚON)r   Zas_arrayÚhasattrr    Úkindr   )r-   r=   Útar   Z
dtype_kindr.   r.   r/   Útest_convert_np_arrayr  s
    rÏ   c                  C   sR  dD �]F} t |  }t|gdgd�}dtddƒtddƒft ddg¡t ddg¡ffD ]ö\}}| ¡ }|| |d |< | d	krèt |d j| |j| k¡sžt‚t |d j| |j| k¡sÀt‚t |d j| |d j| k¡sæt‚qTt |d | || k¡�st‚t |d | || k¡�s(t‚t |d | |d | k¡sTt‚qTqd
S )zx
    Test that assignment of an int, slice, and fancy index works.
    Along the way test that copying table works.
    )rˆ   Ú	arraywrapr   r8   )r   rF   r   rF   r   rU   rÐ   N)	r   r   r£   r�   r¢   r±   rm   rž   r   )r   r   rÈ   Zi0Úi1r=   r.   r.   r/   Útest_assignment_and_copy~  s     
ý""(  rÒ   c                  C   sì   t tƒ} | j}|D ]}|| | j_qt| ƒ}|D ]€}|| jj|ksHt‚|dkr t |d | d j	k¡slt‚t |d j
| d j
k¡sŠt‚t|d |jƒs°t‚q0t||| | ƒ q0t | ƒ}|D ](}|| jj|ksÖt‚t||| | ƒ q¾dS )zF
    Test that a table round trips from QTable => Table => QTable
    rˆ   N)r   r   rÃ   r   r    r   r   r�   rm   ro   r*   r!   r3   rŠ   )rQ   r9   r   r=   Zqt2r.   r.   r/   Útest_conversion_qtable_table—  s     rÓ   c                  C   sR   t ƒ } ddg| d< d| d< t | d ddgk¡s4t‚t | d ddgk¡sNt‚dS )z?
    Test for mixin-related regression described in #3321.
    ÚxÚyr   r7   N)r   r�   rm   r   ©r=   r.   r.   r/   Útest_setitem_as_column_name°  s
    r×   c                  C   s2   t ddgtj gƒ} |  ¡ dddddgks.t‚dS )	zI
    Test that table representation of quantities does not have unit
    r   rF   ri   z m  z----z 1.0z 2.0N)r   r"   r   Úpformatr   rÖ   r.   r.   r/   Útest_quantity_representation»  s    ûrÙ   c                  C   sZ  t jdgdgdgtjd�} t| gƒ}| ¡ dddgks:t‚t jdgdgdgdd�} t| gƒ}| ¡ ddddgkstt‚t  d	gtj d
gtj dgtj	 ¡} t| gƒ}| ¡ ddddgks¼t‚t  
d	gtj d
gtj ¡} t| gƒ}| ¡ ddddgksút‚t  d	gtj tj dgtj tj d	gtj tj ¡} t| gƒ}| ¡ ddddgk�sVt‚dS )z>
    Test that Representations are represented correctly.
    r   r   rI   ú    col0    ú------------z(0., 1., 0.)r   z     m      é
   é   ú     col0     z deg, deg, pc ú--------------z(10., 20., 1.)z
   col0   z
   deg    z
----------z
(10., 20.)rF   z           col0           zmas / yr, mas / yr, km / sz--------------------------z            (10., 2., 10.)N)r   ZCartesianRepresentationr"   Úoner   rØ   r   ZSphericalRepresentationÚdegZpcZUnitSphericalRepresentationZSphericalCosLatDifferentialZmasÚyrÚkmrÂ   ©ra   r=   r.   r.   r/   Ú"test_representation_representationÉ  sV    
ý

ü
&
ü

ü
  ÿ
ürå   c                  C   s¾   t jdgdgdgdd�} t| gƒ}| ¡ ddddgks:t‚t jdgdgdgd	dd
�} t| gƒ}| ¡ ddddgksvt‚d|d _| ¡ ddddgks˜t‚d|d _| ¡ ddddgksºt‚dS )z‹
    Test that skycoord representation works, both in the way that the
    values are output and in changing the frame representation.
    r   r   Z	cartesian)Úrepresentation_typerÞ   zNone,None,Nonerß   z   0.0,1.0,0.0r   )r*   ræ   z    col0   z   m,m,m   z-----------z0.0,1.0,0.0Zunitsphericalri   ú  col0  zdeg,deg ú--------z90.0,0.0ZcylindricalrÚ   z  m,deg,m   rÛ   z1.0,90.0,0.0N)r   r   r   rØ   r   ræ   rä   r.   r.   r/   Útest_skycoord_representationý  s<    
ü

ü

ü

üré   Úas_ndarray_mixinc                 C   sT  t jddddgdd�}t jddd	d
gddgd�}t jjddddgddgd�}t jddd� dd¡}| r”| t¡}| t¡}| t¡}| t¡}t}nt}t	|gdgd�}||d< ||d< ||d< t
|d |ƒsÒt‚|d d d |d d ksòt‚|d d d |d d k�st‚|d d d |d d k�s6t‚|d d d |d d k�sXt‚t
|d |ƒ�slt‚|d d d |d d k�sŽt‚|d d d |d d k�s°t‚|d d d |d d k�sÒt‚|d d d |d d k�sôt‚t
|d |ƒ�st‚|d d d |d d k�s*t‚|d d d |d d k�sLt‚|d d d |d d k�snt‚|d d d |d d k�s�t‚t
|d |ƒ�s¤t‚|d d d |d d k�sÆt‚|d d d |d d k�sèt‚|d d d |d d k�s
t‚|d d d |d d k�s,t‚|jd d!�d"d#d$d%d&d'd(gk�sPt‚d)S )*a'  
    Test directly adding various forms of structured ndarray columns to a table.
    Adding as NdarrayMixin is expected to be somewhat unusual after #12644
    (which provides full support for structured array Column's). This test shows
    that the end behavior is the same in both cases.
    )r   r   )rF   r7   )rU   ra   )rG   r|   z<i4,|U1)r    )rÜ   Zaa)rÝ   Zbb)é   Úcc)é(   Údd)rÔ   Úi4)rÕ   ZU2)g      Y@Zraa)g      i@Zrbb)g     Àr@Zrcc)g      y@ZrddÚrxZryr8   é   Úi8rG   rF   r   r7   ra   r|   r   r   rÔ   rÕ   T)Z
show_dtypez4  a [f0, f1]     b [x, y]      c [rx, ry]      d    z4(int32, str1) (int32, str2) (float64, str3) int64[2]z4------------- ------------- --------------- --------z4     (1, 'a')    (10, 'aa')   (100., 'raa')   0 .. 1z4     (2, 'b')    (20, 'bb')   (200., 'rbb')   2 .. 3z4     (3, 'c')    (30, 'cc')   (300., 'rcc')   4 .. 5z4     (4, 'd')    (40, 'dd')   (400., 'rdd')   6 .. 7N)r�   r¢   ZrecZfromrecordsZarangeZreshapeÚviewr   r
   r   r!   r   rØ   )rê   r   r7   ra   r|   Z	class_expr=   r.   r.   r/   Útest_ndarray_mixin'  sd    
þ
þ



 """""""""""""""
ùrô   c                  C   sŠ   t ddgtj gƒ} d| d j_|  ¡ ddddd	gks:t‚d
| d j_|  ¡ dddddgks`t‚d| d j_|  ¡ dddddgks†t‚dS )zÑ
    The QuantityInfo info class for Quantity implements a
    possible_string_format_functions() method that overrides the
    standard pprint._possible_string_format_functions() function.
    Test this.
    r   rF   z%.3fri   z col0z  m  z-----z1.000z2.000z	hi {:.3f}rç   z   m    rè   zhi 1.000zhi 2.000z.4fz col0 z  m   z------z1.0000z2.0000N)r   r"   r   r   r+   rØ   r   rÖ   r.   r.   r/   Ú%test_possible_string_format_functionst  s2    û
û
ûrõ   c                 C   sü   t | ƒ}| ¡ }| dd¡ |jddddgks2t‚t|d tjƒrbt 	|d j
|d j
k¡søt‚n–t|d tjƒr°t 	|d j|d jk¡s�t‚t 	|d j|d jk¡søt‚nHt|d tjƒrÞt 	t|d |d ƒ¡søt‚nt 	|d |d k¡søt‚dS )z 
    Rename a mixin column.
    r   Úmmr6   r   r7   N)r   r±   Zrename_columnrÃ   r   r!   r   r   r�   rm   rž   r   r   rœ   r�   r&   r	   )r-   r=   Ztcr.   r.   r/   Útest_rename_mixin_columns˜  s      r÷   c                  C   s:   t dddgidd�} d| d _d| d jd< t | ¡ dS )zv
    If the unit is invalid for a column that gets serialized this would
    cause an exception.  Fixed in #7481.
    r   r   rF   T)Zmaskedznot a valid unitN)r   r*   Úmaskr   r   rÖ   r.   r.   r/   Ú)test_represent_mixins_as_columns_unit_fix«  s    
rù   c                  C   sv   t dddgtj iƒ} d| d j_d| d j_t | ¡}d|jd d ksNt	‚|d jdks`t	‚|d jdksrt	‚dS )	z‰
    If the mixin defines a primary data column, that should get the
    description, format, etc., so no __info__ should be needed.
    r   r   rF   Úparrotz7.2fZ__info__Z__serialized_columns__N)
r   r"   r   r   r    r+   r   r   r,   r   )r=   Ztserr.   r.   r/   Ú)test_primary_data_column_gets_description¶  s    
rû   c                  C   sf   t dgdgdd d�} t| gƒ}tƒ }|j|ddd� | d¡ tj| ¡ dd	�}t|d
 | ƒsbt‚d S )Nr   rF   rá   )r*   Zgalcen_v_sunz
ascii.ecsvTrL   r   rA   ri   )r   r   r   rB   ÚseekrN   r   r   )Úscr=   rÂ   r�   r.   r.   r/   Útest_skycoord_with_velocityÄ  s    

rþ   Ú	table_clsc                 C   s¼   ddgt j }d|jkst‚| |gdg|d�}d|jks<t‚| |g|d�}d|jksXt‚| d|i|d�}d|jksvt‚||d< d|jksŒt‚tddgddgd	d
�}||d< d|jks¸t‚dS )z�If a mixin input to a table has no info, it should stay that way.

    This since having 'info' slows down slicing, etc.
    See gh-11066.
    r   rF   r   Úqr½   r¾   Úq2rU   rá   rI   rý   N)r"   r   rÄ   r   r   )rÿ   r±   r   r=   rý   r.   r.   r/   Ú#test_ensure_input_info_is_unchangedÏ  s    r  c               	   C   sX   G dd„ dt ƒ} tƒ }| dddgƒ|d< tƒ }d}tjt|d�� t|ƒ W 5 Q R X d	S )
zjMake a mixin column class that does not trigger the machinery to generate
    a pure column representationc                   @   s   e Zd Zeƒ ZdS )z+test_bad_info_class.<locals>.MyArrayWrapperN)Ú__name__Ú
__module__Ú__qualname__r   r   r.   r.   r.   r/   ÚMyArrayWrapperê  s   r  r   r   rF   rp   zSfailed to represent column 'tm' \(MyArrayWrapper\) as one or more Column subclassesrb   N)r   r   r   r'   r(   rŒ   r   )r  r=   rD   rc   r.   r.   r/   Útest_bad_info_classæ  s    ÿr  )Or±   r¨   Úior   Únumpyr�   r'   Zastropyr   r   r   r"   Zastropy.coordinatesr   r   Z astropy.coordinates.tests.helperr   Z-astropy.coordinates.tests.test_representationr	   Zastropy.tabler
   r   r   r   r   r   r   r   r   Zastropy.table.columnr   Zastropy.table.serializer   Zastropy.table.table_helpersr   Zastropy.utils.data_infor   Zastropy.utils.exceptionsr   Zastropy.utils.metadatar   Zconftestr   r0   r5   r?   rE   rR   ÚmarkZremote_dataZparametrizerr   ru   r{   r—   r›   rŠ   r§   r¶   r¼   rÅ   rÆ   rÉ   rÊ   rÏ   rÒ   rÓ   r×   rÙ   rå   ré   rô   rõ   r÷   rù   rû   rþ   r  r  r.   r.   r.   r/   Ú<module>   sr   ,)S
J0($
B
4*
L$