U
    e»{jøq  ã                   @   s   d dl Z d dlZd dlZd dlm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 d dlmZ d d	lmZ d d
lmZ d dlmZ er¤d dlZd dlmZmZmZ dd„ e  ¡ D ƒZ!dd„ e  ¡ D ƒZej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,dgZ-dd„ Z.ej/dd„ ƒZ0ej1j2e dd�dd„ ƒZ3ej1j2e dd�dd„ ƒZ4ej1j2e dd�dd„ ƒZ5ej1j2e dd�dd„ ƒZ6ej1j2e dd�dd „ ƒZ7ej1j2e dd�d!d"„ ƒZ8ej1j2e dd�d#d$„ ƒZ9ej1j2e dd�d%d&„ ƒZ:ej1j2e dd�d'd(„ ƒZ;ej1j2e dd�d)d*„ ƒZ<ej1j2e dd�d+d,„ ƒZ=ej1j2e dd�d-d.„ ƒZ>ej1j2e dd�d/d0„ ƒZ?ej1j2e dd�d1d2„ ƒZ@ej1j2e dd�d3d4„ ƒZAej1j2e dd�d5d6„ ƒZBej1j2e dd�d7d8„ ƒZCej1j2e dd�d9d:„ ƒZDej1j2e dd�d;d<„ ƒZEej1j2e dd�d=d>„ ƒZFej1j2e dd�d?d@„ ƒZGej1j2e dd�dAdB„ ƒZHej1j2e dd�dCdD„ ƒZIej1j2e dd�dEdF„ ƒZJej1j2e dd�dGdH„ ƒZKej1j2e dd�dIdJ„ ƒZLej1j2e dd�ej1 MdKe-¡dLdM„ ƒƒZNej1j2e dd�dNdO„ ƒZOej1j2e dd�dPdQ„ ƒZPej1j2e dd�dRdS„ ƒZQej1j2e dd�dTdU„ ƒZRej1j2e dd�dVdW„ ƒZSej1j2e dd�dXdY„ ƒZTej1j2e dd�dZd[„ ƒZUej1j2e dd�d\d]„ ƒZVej1j2e dd�d^d_„ ƒZWej1j2e dd�d`da„ ƒZXdvdcdd„ZYej1j2e dd�dedf„ ƒZZej1j2e dd�ej1 Mdge	ef¡dhdi„ ƒƒZ[ej1j2e dd�ej1 Mdje\e  ¡ ƒ¡ej1 Mdge	ef¡dkdl„ ƒƒƒZ]ej1 Mdje!  ¡ ¡ej1j^dmd�dndo„ ƒƒZ_ej1j2e dd�dpdq„ ƒZ`ej1j2e dd�drds„ ƒZaej1j2e dd�dtdu„ ƒZbdS )wé    N)Ú	meta_path)ÚColumnÚQTableÚTable)Úsimple_table)Úallclose)ÚQuantityInfo)ÚNUMPY_LT_1_22)ÚHAS_H5PY)Úget_pkg_data_filename)ÚAstropyUserWarning)Ú_NOT_OVERWRITING_MSG_MATCH)Úcompare_attrsÚ
mixin_colsÚserialized_namesc                 C   s.   i | ]&\}}t |tjƒr|jjd kr||“qS )ÚO)Ú
isinstanceÚnpÚndarrayÚdtypeÚkind©Ú.0ÚnameÚcol© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/misc/tests/test_hdf5.pyÚ
<dictcomp>   s
    þ r   c                 C   s   i | ]\}}|t kr||“qS r   )Úunsupported_colsr   r   r   r   r      s      ú|S3c                 C   s4   | t jkrdddgS | dkr&dddgS dddgS d S )	Nr   é   r   s   abcs   defs   ghié   é   )r   Úbool_©r   r   r   r   Ú_default_values2   s
    


r%   c                 C   s$   |   dt|ƒ¡ |   dt|ƒ¡ dS )zÂ
    Pytest fixture to run a test case with tilde-prefixed paths.

    In the tilde-path case, environment variables are temporarily
    modified so that '~' resolves to the temp directory.
    ÚHOMEÚUSERPROFILEN)ZsetenvÚstr)ZmonkeypatchÚtmp_pathr   r   r   Úhome_is_tmpdir;   s    	r*   zrequires h5py)Úreasonc              	   C   s\   | d }t ƒ }| tddddgd�¡ tjtdd�� | |¡ W 5 Q R X t j|d	d
�}d S )Nú	test.hdf5Úar    r!   r"   ©r   Údataz-table path was not set via the path= argument©ÚmatchZ__astropy_table__©Úpath)r   Ú
add_columnr   ÚpytestÚwarnsÚUserWarningÚwriteÚread©r)   Ú	test_fileÚt1r   r   r   Útest_write_nopathI   s     ÿr=   c              	   C   sp   | d }t ƒ }| tddddgd�¡ |j|dd� t t¡�}|j|d	d
� W 5 Q R X d|jjd kslt	‚d S )Nr,   r-   r    r!   r"   r.   Zbubur2   T)Úappendz-table path should always be set via the path=r   )
r   r4   r   r8   r5   ÚraisesÚ
ValueErrorÚvalueÚargsÚAssertionError©r)   r;   r<   Úexcr   r   r   Útest_write_nopath_nonemptyW   s    rF   c              	   C   sF   | d }t  |d¡ ¡  tjtdd�� tj|ddd� W 5 Q R X d S )Nr,   Úwzno table found in HDF5 group /r0   ú/Úhdf5©r3   Úformat)Úh5pyÚFileÚcloser5   r?   r@   r   r9   )r)   r;   r   r   r   Útest_read_notable_nopathe   s    rO   c                 C   s\   | d }t ƒ }| tddddgd�¡ |j|dd� t  |¡}t |d |d k¡sXt‚d S ©	Nr,   r-   r    r!   r"   r.   Ú	the_tabler2   ©r   r4   r   r8   r9   r   ÚallrC   ©r)   r;   r<   Út2r   r   r   Útest_read_nopathm   s    
rV   c              	   C   sˆ   | d }t ƒ }| tddddgd�¡ |j|dd� |j|d	d
d
d� tjtdd�� t  |¡}W 5 Q R X t 	|d |d k¡s„t
‚d S )Nr,   r-   r    r!   r"   r.   rQ   r2   Zthe_table_but_differentT©r3   r>   Ú	overwritez+path= was not specified but multiple tablesr0   )r   r4   r   r8   r5   r6   r   r9   r   rS   rC   rT   r   r   r   Útest_read_nopath_multi_tablesx   s     ÿrY   c              	   C   sb   | d }t ƒ }| tddddgd�¡ t t¡�}|j|dd� W 5 Q R X |jjd	 d
ks^t	‚d S )Nr,   r-   r    r!   r"   r.   útest/r2   r   z,table path should end with table name, not /)
r   r4   r   r5   r?   r@   r8   rA   rB   rC   rD   r   r   r   Útest_write_invalid_path‡   s    r[   c              	   C   sp   | d }t ƒ }| tddddgd�¡ |j|dd� t t¡�}t j|d	d� W 5 Q R X |jj	d
 dkslt
‚d S )Nr,   r-   r    r!   r"   r.   rQ   r2   rZ   r   zPath test/ does not exist)r   r4   r   r8   r5   r?   ÚOSErrorr9   rA   rB   rC   rD   r   r   r   Útest_read_invalid_path‘   s    r]   c              	   C   sT   | d }t  |d¡ ¡  t t¡�}tj|dd� W 5 Q R X |jj	d dksPt
‚d S ©Nr,   rG   útest/path/tabler2   r   ú#Path test/path/table does not exist)rL   rM   rN   r5   r?   r\   r   r9   rA   rB   rC   )r)   r;   rE   r   r   r   Útest_read_missing_groupœ   s
    ra   c              	   C   sl   | d }t  |d¡�}| d¡ d¡ W 5 Q R X t t¡�}tj|dd� W 5 Q R X |jj	d dksht
‚d S )	Nr,   rG   Útestr3   r_   r2   r   r`   )rL   rM   Úcreate_groupr5   r?   r\   r   r9   rA   rB   rC   ©r)   r;   ÚfrE   r   r   r   Útest_read_missing_table¥   s    rf   c              
   C   s\   | d }t  |d¡�>}t t¡�}tj|dd� W 5 Q R X |jjd dksNt	‚W 5 Q R X d S r^   )
rL   rM   r5   r?   r\   r   r9   rA   rB   rC   rd   r   r   r   Útest_read_missing_group_fileobj¯   s
    rg   c                 C   sb   | d }t ƒ }| tddddgd�¡ |j|dd� t j|dd�}t |d dddgk¡s^t‚d S rP   rR   rT   r   r   r   Útest_read_write_simple¸   s    rh   c              	   C   sr   | d }t ƒ }| tddddgd�¡ |j|dd� t t¡�}|j|dd	d
� W 5 Q R X |jjd dksnt	‚d S )Nr,   r-   r    r!   r"   r.   rQ   r2   T©r3   r>   r   zTable the_table already exists)
r   r4   r   r8   r5   r?   r\   rA   rB   rC   rD   r   r   r   Útest_read_write_existing_tableÂ   s    rj   c               	   C   sx   t jddddd��\} tƒ }| tdddd	gd
�¡ |j| dd� tj| dd�}t |d ddd	gk¡sjt	‚W 5 Q R X d S )Nrb   rG   ÚcoreF©ZdriverZbacking_storer-   r    r!   r"   r.   rQ   r2   ©
rL   rM   r   r4   r   r8   r9   r   rS   rC   )Úoutput_filer<   rU   r   r   r   Útest_read_write_memoryÍ   s    ro   c              	   C   sb   | d }t  |d¡ ¡  tƒ }| tddddgd�¡ tjtt	d�� |j
|d	d
� W 5 Q R X d S )Nr,   rG   r-   r    r!   r"   r.   r0   rQ   r2   )rL   rM   rN   r   r4   r   r5   r?   r\   r   r8   r:   r   r   r   Útest_read_write_existing×   s    rp   c                 C   st   | d }t  |d¡ ¡  tƒ }| tddddgd�¡ |j|dd	d
� tj|dd�}t 	|d dddgk¡spt
‚d S )Nr,   rG   r-   r    r!   r"   r.   rQ   T©r3   rX   r2   ©rL   rM   rN   r   r4   r   r8   r9   r   rS   rC   rT   r   r   r   Ú"test_read_write_existing_overwriteá   s    rs   c                 C   s®   | d }t  |d¡ ¡  tƒ }| tddddgd�¡ |j|dd	d
� |j|dd	d
� tj|dd�}t 	|d dddgk¡s€t
‚tj|dd�}t 	|d dddgk¡sªt
‚d S )Nr,   rG   r-   r    r!   r"   r.   Zthe_table_1Tri   Zthe_table_2r2   rr   )r)   r;   r<   rU   Út3r   r   r   Útest_read_write_existing_appendì   s    ru   c              	   C   sÀ   | d }t  |d¡�}| d¡ W 5 Q R X tƒ }| tddddgd�¡ |j|d	d
d� |j|dd
d� tj|d	d�}t 	|d dddgk¡s’t
‚tj|dd�}t 	|d dddgk¡s¼t
‚d S )Nr,   rG   Ztest_1r-   r    r!   r"   r.   ztest_1/the_table_1Tri   ztest_2/the_table_2r2   )rL   rM   rc   r   r4   r   r8   r9   r   rS   rC   )r)   r;   re   r<   rU   rt   r   r   r   Ú&test_read_write_existing_append_groupsú   s    rv   c              	   C   s  | d }t ƒ }| tddddgd�¡ |j|dd� |j|d	d
d� t ƒ }| tddddgd�¡ t t¡�}|j|dd
d� W 5 Q R X |jjd dksœt	‚|j|dd
d
d� t j
|dd�}t |d dddgk¡sØt	‚t j
|d	d�}t |d dddgk¡�st	‚d S )Nr,   r-   r    r!   r"   r.   Ztable1r2   Ztable2Tri   é   é   é   r   zTable table1 already existsrW   )r   r4   r   r8   r5   r?   r\   rA   rB   rC   r9   r   rS   )r)   r;   r<   Zt1v2rE   rU   rt   r   r   r   Ú)test_read_write_existing_append_overwrite	  s    rz   c              	   C   s‚   | d }t ƒ }| tddddgd�¡ |j|dd� d	d l}| |d
¡�0}t j|dd�}t |d dddgk¡stt	‚W 5 Q R X d S )Nr,   r-   r    r!   r"   r.   rQ   r2   r   Úr©
r   r4   r   r8   rL   rM   r9   r   rS   rC   ©r)   r;   r<   rL   Z
input_filerU   r   r   r   Útest_read_fileobj  s    r~   c              	   C   s‚   | d }t ƒ }| tddddgd�¡ |j|dd� d	d l}| |d
¡�0}t j|dd�}t |d dddgk¡stt	‚W 5 Q R X d S )Nr,   r-   r    r!   r"   r.   úpath/to/data/the_tabler2   r   r{   r|   r}   r   r   r   Útest_read_filobj_path+  s    r€   c              	   C   s†   | d }t ƒ }| tddddgd�¡ |j|dd� d	d l}| |d
¡�4}t j|d dd�}t |d dddgk¡sxt	‚W 5 Q R X d S )Nr,   r-   r    r!   r"   r.   r   r2   r   r{   zpath/tozdata/the_tabler|   r}   r   r   r   Útest_read_filobj_group_path:  s    r�   c               	   C   s@   G dd„ dƒ} | ƒ }t jtdd�� tj|dd� W 5 Q R X d S )Nc                   @   s   e Zd Zdd„ ZdS )z)test_read_wrong_fileobj.<locals>.FakeFilec                 S   s   d S ©Nr   )Úselfr   r   r   r9   L  s    z.test_read_wrong_fileobj.<locals>.FakeFile.readN)Ú__name__Ú
__module__Ú__qualname__r9   r   r   r   r   ÚFakeFileK  s   r‡   z h5py can only open regular filesr0   rI   )rK   )r5   r?   Ú	TypeErrorr   r9   )r‡   re   r   r   r   Útest_read_wrong_fileobjI  s    r‰   c              	   C   s‚   | d }dd l }| |d¡�2}tƒ }| tddddgd�¡ |j|d	d
� W 5 Q R X tj|d	d
�}t |d dddgk¡s~t	‚d S )Nr,   r   rG   r-   r    r!   r"   r.   rQ   r2   rm   ©r)   r;   rL   rn   r<   rU   r   r   r   Útest_write_fileobjU  s    r‹   c              	   C   sô   | d }d}dd l }| |d¡�4}tƒ }| tddddgd	�¡ |j||d
d� W 5 Q R X tƒ }| tdddgd	�¡ | |d¡�:}||  t|ƒt|ƒ f¡ | ¡ || t|ƒd …< W 5 Q R X tj	|dd�}t
 |d dddddgk¡sðt‚d S )Nr,   rQ   r   rG   r-   r    r!   r"   r.   r‚   )r3   Zmaxshaperw   rx   r2   )rL   rM   r   r4   r   r8   ÚresizeÚlenZas_arrayr9   r   rS   rC   )r)   r;   Zthe_pathrL   rn   r<   rU   rt   r   r   r   Ú test_write_create_dataset_kwargsd  s    "rŽ   c              	   C   s‚   | d }dd l }| |d¡�2}tƒ }| tddddgd�¡ |j|d	d
� W 5 Q R X tj|d	d
�}t |d dddgk¡s~t	‚d S )Nr,   r   rG   r-   r    r!   r"   r.   r   r2   rm   rŠ   r   r   r   Útest_write_filobj_group|  s    r�   c               	   C   s\   t ƒ } |  tddddgd�¡ t t¡�}| jdddd	� W 5 Q R X |jjd
 dksXt	‚d S )Nr-   r    r!   r"   r.   i¼  r   rI   rJ   r   z9output should be a string or an h5py File or Group object)
r   r4   r   r5   r?   rˆ   r8   rA   rB   rC   )r<   rE   r   r   r   Útest_write_wrong_type‹  s    ÿr�   r   c                 C   sz   | d }t |ƒ}tƒ }| tdtj||d�d�¡ |j|dd� tj|dd�}t |d |k¡sdt	‚|d j
|ksvt	‚d S )Nr,   r-   r$   r.   rQ   r2   )r%   r   r4   r   r   Úarrayr8   r9   rS   rC   r   )r)   r   r;   Úvaluesr<   rU   r   r   r   Útest_preserve_single_dtypes–  s    r“   c              	   C   s¢   | d }t ƒ }tD ],}t|ƒ}| tt|ƒtj||d�d�¡ q|j|dd� t j	|dd�}tD ]<}t|ƒ}t 
|t|ƒ |k¡s†t‚|t|ƒ j|ks`t‚q`d S )Nr,   r$   r.   rQ   r2   )r   Ú
ALL_DTYPESr%   r4   r   r(   r   r‘   r8   r9   rS   rC   r   )r)   r;   r<   r   r’   rU   r   r   r   Útest_preserve_all_dtypes§  s    "r•   c                 C   s®   | d }t ƒ }| tddddgd�¡ d|jd< d|jd< d	|jd
< d|jd< t dddg¡|jd< |j|dd� t j|dd�}|jD ]"}t |j| |j| k¡s†t	‚q†d S )Nr,   r-   r    r!   r"   r.   ÚhelloÚbçn†ðù!	@ÚcTÚdÚerQ   r2   )
r   r4   r   Úmetar   r‘   r8   r9   rS   rC   )r)   r;   r<   rU   Úkeyr   r   r   Útest_preserve_meta»  s    




rž   c                 C   s8  | d }t ƒ }tdddgdd�|d< d|d jd	< d
ddgi|d jd
< d|d _d|d _d|jd< dddgi|jd< |j|dddd� t j|dd�}|d j|d jks°t‚|d j|d jksÈt‚|d j|d jksàt‚|d j|d jksøt‚|j|jk�s
t‚t	 
|d¡}|tdƒ }|jjdk�s4t‚d S )Nr,   r    r!   r"   Ús©r/   Úunitr-   ÚA0Úa0Úa1r   ú7.3fúA columnr—   Úc0r™   rQ   T©r3   Úserialize_metarX   r2   r{   ÚS)r   r   rœ   rK   Údescriptionr8   r9   r¡   rC   rL   rM   r   r   r   )r)   r;   r<   rU   Úh5Z
meta_linesr   r   r   Útest_preserve_serializedÐ  s&    


r­   c                  C   sú   t dƒ} tƒ }tdddgdd�|d< d|d jd	< d
ddgi|d jd
< d|d _d|d _d|jd< dddgi|jd< tj| dd�}|d j|d jksžt‚|d j|d jks¶t‚|d j|d jksÎt‚|d j|d jksæt‚|j|jksöt‚dS )zdTest the old meta format

    Only for some files created prior to v4.0, in compatibility mode.
    zdata/old_meta_example.hdf5r    r!   r"   rŸ   r    r-   r¢   r£   r¤   r   r¥   r¦   r—   r§   r™   rQ   r2   N)	r   r   r   rœ   rK   r«   r9   r¡   rC   )r;   r<   rU   r   r   r   Ú(test_preserve_serialized_old_meta_formatí  s    


r®   c                 C   s  | d }t ƒ }tdddgdd�|d< d|d jd	< d
ddgi|d jd
< d|d _d|d _d|jd< dddgi|jd< |j|dddd� t j|dd�}|d j|d jks°t‚|d j|d jksÈt‚|d j|d jksàt‚|d j|d jksøt‚|j|jk�s
t‚d S )Nr,   r    r!   r"   rŸ   r    r-   r¢   r£   r¤   r   r¥   r¦   r—   r§   r™   zthe_table/complicated/pathTr¨   r2   )	r   r   rœ   rK   r«   r8   r9   rC   r¡   rT   r   r   r   Ú,test_preserve_serialized_in_complicated_path  s*    


ür¯   c                 C   s,  | d }t ƒ }tdddgdd�|d< d|d jd	< d
ddgi|d jd
< d|d _d|d _d|jd< dddgi|jd< dd |jd< dd |jd< |j|dddd� t j|dd�}|d j|d jksÌt‚|d j|d jksät‚|d j|d jksüt‚|d j|d jk�st‚|j|jk�s(t‚dS )z(Test that very large datasets work, now!r,   r    r!   r"   rŸ   r    r-   r¢   r£   r¤   r   r¥   r¦   r—   r§   r™   Ú0i  Zmeta_bigi   Zmeta_biggerstillrQ   Tr¨   r2   N)	r   r   rœ   rK   r«   r8   r9   r¡   rC   rT   r   r   r   Útest_metadata_very_large$  s$    


r±   c              	   C   sÀ   | d }t ƒ }| tddddgd�¡ d|jd< d|jd< d	|jd
< d|jd< t dddg¡|jd< t|jd< dt|jd ƒ› d�}tj	t
|d��}|j|dd� W 5 Q R X t|ƒdks¼t‚d S )Nr,   r-   r    r!   r"   r.   r–   r—   r˜   r™   Trš   r›   re   zAttribute `f` of type z+ cannot be written to HDF5 files - skippingr0   rQ   r2   )r   r4   r   rœ   r   r‘   r(   Útyper5   r6   r   r8   r�   rC   )r)   r;   r<   ZwtextrG   r   r   r   Útest_skip_meta?  s    




ÿr³   c              	   C   s~   | d }t ƒ }| tddddgd�¡ t|jd< t t¡�}|j|dd	d
� W 5 Q R X dt|j	ƒksht
‚dt|j	ƒkszt
‚d S )Nr,   r-   r    r!   r"   r.   re   rQ   T©r3   r©   zcannot represent an objectz<class 'str'>)r   r4   r   r(   rœ   r5   r?   Ú	Exceptionr8   rA   rC   )r)   r;   r<   Úerrr   r   r   Útest_fail_meta_serializeV  s    
r·   c           	   	   C   sð   | d }dd l }| |d¡�2}tƒ }| tddddgd�¡ |j|d	d
� W 5 Q R X |j|dd�}tj|d	d
�}t |d dddgk¡sŒt	‚tj|d d	d
�}t |d dddgk¡sºt	‚t |d	 ¡}t |d dddgk¡sät	‚| 
¡  d S )Nr,   r   rG   r-   r    r!   r"   r.   rQ   r2   r{   )ÚmoderH   )rL   rM   r   r4   r   r8   r9   r   rS   rC   rN   )	r)   r;   rL   rn   r<   re   rU   rt   Zt4r   r   r   Útest_read_h5py_objectsd  s    r¹   c                 C   sÂ  | d }t ƒ }dddg|d< dddg|d	< d
ddg|d< dddg|d< |j|ddd� t j|ddd�}t| ¡ | ¡ ƒD ]\}}t ||k¡sxt‚qxt |d jj	j
dk¡s°t‚t |d	 jj	j
dk¡sÌt‚t |d jj	j
dk¡sèt‚t |d jj	j
dk¡�st‚t j|dd�}t| ¡ | ¡ ƒD ]\}}t ||k¡�s&t‚�q&t |d jj	j
dk¡�sdt‚t |d	 jj	j
dk¡�s‚t‚t |d jj	j
dk¡�s t‚t |d jj	j
dk¡�s¾t‚d S )Nr,   r-   r—   r™   Úpr    r!   r"   Úqó   aó   bó   cr{   u   â„™u   Æ´u   â˜‚rŸ   rQ   Trq   F)r3   Zcharacter_as_bytesÚUÚir2   rª   )r   r8   r9   ÚzipZitercolsr   rS   rC   Úinfor   r   )r)   r;   Útr<   r   Zcol1rU   r   r   r   Útest_read_write_unicode_to_hdf5  s*    rÄ   Tc           	   
   C   s,  |r| j |j kst‚ddddddg}|| D ]ú}| }|}| d¡D ]B}zt||ƒ}t||ƒ}W qB tk
r‚   || }|| }Y qBX qB|dkr¦|d krši }|d kr¦i }t|tjƒrÒ|jj	dkrÒt
||d	d
�sÐt‚q,t|tjƒ�rtrü|jrü|j|jksút‚ntj||dd��s&t‚q,t ||k¡s,t‚q,d S )Nz	info.namezinfo.formatz	info.unitzinfo.descriptionz	info.metaz
info.dtypeÚ.re   gVçž¯Ò<)ZrtolÚsafe)Zcasting)Ú	__class__rC   ÚsplitÚgetattrÚAttributeErrorr   r   r   r   r   Úquantity_allcloser	   ÚnamesZcan_castrS   )	Zobj1Úobj2ÚattrsÚcompare_classZ
info_attrsÚattrr¤   Za2Zsubattrr   r   r   Úassert_objects_equalœ  s>    ú

rÑ   c           
      C   sÌ   | d }t tƒ}tdd„ |D ƒ|d�}|j|dddd� tj|ddd	�}|j|jksXt‚|j 	¡ D ]d\}}|| }t
| }d}	t|jtƒr¸t|ƒtksšt‚d
g}d}	t |j|k¡s¸t‚t||||	ƒ qbdS )zWTest writing as QTable and reading as Table.  Ensure correct classes
    come out.
    útest_simple.hdf5c                 S   s   g | ]}t | ‘qS r   ©r   ©r   r   r   r   r   Ú
<listcomp>Ó  s     z4test_hdf5_mixins_qtable_to_table.<locals>.<listcomp>©rÌ   rI   ÚrootT©rK   r3   r©   ©rK   r3   r¡   FN)Úsortedr   r   r8   r   r9   ÚcolnamesrC   ÚcolumnsÚitemsr   r   rÂ   r   r²   r   r   rS   rA   rÑ   )
r)   ÚfilenamerÌ   rÃ   rU   r   r   Zcol2rÎ   rÏ   r   r   r   Ú test_hdf5_mixins_qtable_to_tableÊ  s     rß   Ú	table_clsc           
      C   s  |d }t tƒ}g }|D ]}| t| ¡ q| dd„ |D ƒ|d�}d|jd< ddd	d
g|jd< dddg|jd< |j|dddd� | j|ddd�}|jd dks¢t‚|jd ddd	d
gks¼t‚|jd dddgksÔt‚|j|jksät‚t	 
|d¡}t|d jjƒ}	|	|k�st‚| ¡  dS )zGTest write/read all cols at once and validate intermediate column namesrÒ   c                 S   s   g | ]}t | ‘qS r   rÓ   rÔ   r   r   r   rÕ   õ  s     z+test_hdf5_mixins_as_one.<locals>.<listcomp>rÖ   ZspamÚCÚthisÚisr-   ÚcommentÚcommentsÚfirstÚsecondÚthirdÚhistoryrI   r×   TrØ   rÙ   r{   N)rÚ   r   Úextendr   rœ   r8   r9   rC   rÛ   rL   rM   Úlistr   rÌ   rN   )
rà   r)   rÞ   rÌ   Zall_serialized_namesr   rÃ   rU   r¬   Zh5_namesr   r   r   Útest_hdf5_mixins_as_oneë  s&    
rì   Úname_colc                 C   s  |d }|\}}ddg}| |||gd|dgd�}d|| j _ttdƒƒd	d
idœ|| j _|jsjt d¡ |j|dddd� | j	|ddd�}|j
|j
ksœt‚|j
D ].}	|	dkr´dgnt|	 }
t||	 ||	 |
ƒ q¢| d¡�r|| jjjtjksöt‚|| jjjtjk�st‚dS )z<Test write/read one col at a time and do detailed validationrÒ   g      ð?g       @Úc1Úc2rÖ   zmy descriptioné2   r-   ZÈbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rë   Údictz7column is not a mixin (e.g. Quantity subclass in Table)rI   r×   TrØ   rÙ   )rî   rï   r/   ÚtmN)rÂ   r«   rë   Úrangerœ   Zhas_mixin_columnsr5   Úskipr8   r9   rÛ   rC   r   rÑ   Ú
startswithÚ_timeZjd1rÇ   r   r   Zjd2)rà   rí   r)   rÞ   r   r   r™   rÃ   rU   ZcolnameÚcomparer   r   r   Útest_hdf5_mixins_per_column
  s"    

rø   zcolumn type unsupportedc                 C   s2   |d }|\}}t |g|gd�j|dddd� d S )Nztest_simple.fitsrÖ   rI   r×   TrØ   )r   r8   )rƒ   rí   r)   rÞ   r   r   r   r   r   Útest_fits_unsupported_mixin)  s       ÿrù   c                 C   sÞ   | d }t dd�}dddg|d< d|d jd< |j|d	d
dd� t |¡}|jdksXt‚|j|jksht‚|jD ]j}t 	|| j|| jk¡s�t‚t 	|| || k¡sªt‚d|| _d|| _t 	|| || k¡snt‚qndS )aH  Test round-trip of MaskedColumn through HDF5 using default serialization
    that writes a separate mask column.  Note:

    >>> simple_table(masked=True)
    <Table masked=True length=3>
      a      b     c
    int64 float64 str1
    ----- ------- ----
       --     1.0    c
        2     2.0   --
        3      --    e
    ztest.h5T)Úmaskedr¾   ó   dó   er™   r    rI   r×   rØ   FN)
r   Úmaskr8   r   r9   rú   rC   rÛ   r   rS   )r)   rÞ   rÃ   rU   r   r   r   r   Ú$test_round_trip_masked_table_default5  s    




rþ   c               	   C   sö   t jddddd��Ú} tƒ }| tdddgd	d
�¡ |j| ddd� tj| dd�}t||kƒs`t‚|j	d d�|j	d d�ks|t‚tƒ }| tdddgdd
�¡ |j| ddddd� tj| dd�}t||kƒsÌt‚|j	d d�|j	d d�ksèt‚W 5 Q R X d S )Nztest_data.h5rG   rk   Frl   rw   é   é   Úcmr    r/   Tr´   r2   )Úouté   é   é*   Úg)r3   r©   r>   rX   )
rL   rM   r   r4   r   r8   r9   rS   rC   rÂ   )r  r<   rU   rt   r   r   r   Útest_overwrite_serialized_metaW  s    r  c                 C   sb   t j dd¡}tƒ }dddg|d< |j|dd� tj|dd�}tj|dd	d
�}t j |¡r^t‚d S )Nú~r,   r    r!   r"   r-   rQ   r2   rI   rJ   )Úosr3   Újoinr   r8   r9   ÚexistsrC   )r*   r;   r<   r   r   r   Útest_read_write_tilde_pathn  s    r  )T)cr	  Únumpyr   r5   Zastropy.io.misc.hdf5r   Zastropy.tabler   r   r   Zastropy.table.table_helpersr   Zastropy.unitsr   rË   Zastropy.units.quantityr   Zastropy.utils.compatr	   Z"astropy.utils.compat.optional_depsr
   Zastropy.utils.datar   Zastropy.utils.exceptionsr   Zastropy.utils.miscr   rL   Zastropy.io.tests.mixin_columnsr   r   r   rÝ   r   Zuint8Zuint16Zuint32Zuint64Zint8Zint16Zint32Zint64Zfloat32Zfloat64r#   r”   r%   Zfixturer*   ÚmarkZskipifr=   rF   rO   rV   rY   r[   r]   ra   rf   rg   rh   rj   ro   rp   rs   ru   rv   rz   r~   r€   r�   r‰   r‹   rŽ   r�   r�   Zparametrizer“   r•   rž   r­   r®   r¯   r±   r³   r·   r¹   rÄ   rÑ   rß   rì   rë   rø   Zxfailrù   rþ   r  r  r   r   r   r   Ú<module>   s  þÿô	







	



	

	


	
	
























.
 

!
