U
    ½mœdd(  ã                   @   sÈ   d Z ddlZddlmZ ddlmZ ddlmZmZ ddlZddl	Z	ddl
Z
ddlZdd„ Zd	d
„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )z!
    Tests the h5py.File object.
é    N©Ú_drivers)ÚFileé   )ÚutÚTestCasec                   C   s   t j t jjt jj¡S ©N)Úh5pyÚh5fÚget_obj_countÚOBJ_ALLZOBJ_FILE© r   r   úN/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/h5py/tests/test_file2.pyÚnfiles   s    r   c                   C   s   t j t jjt jj¡S r   )r	   r
   r   r   Z	OBJ_GROUPr   r   r   r   Úngroups   s    r   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestDealloczj
        Behavior on object deallocation.  Note most of this behavior is
        delegated to FileID.
    c                 C   sð   t ƒ }tƒ }|  ¡ }t |d¡}|d }|  t ƒ |d ¡ |  tƒ |d ¡ ~|  |¡ |  t ƒ |¡ |  tƒ |d ¡ |j}|  |¡ |  t ƒ |d ¡ |  tƒ |d ¡ ~|  t ƒ |d ¡ |  tƒ |¡ ~|  t ƒ |¡ |  tƒ |¡ dS )z\ File objects close automatically when out of scope, but
        other objects remain open. Úwú/r   N)r   r   Úmktempr	   r   ÚassertEqualÚ
assertTrueÚfile)ÚselfZstart_nfilesZstart_ngroupsÚfnameÚfÚgr   r   r   Útest_autoclose(   s*    

zTestDealloc.test_autocloseN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   !   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDriverRegistrationc                    sf   d g‰ ‡ fdd„}t  d|¡ |  dt  ¡ ¡ |  ¡ }t j|ddddd |  ˆ dddd	œfg¡ d S )
Nc                    s   ||fˆ d< t d | ƒS )Nr   Zsec2r   )ÚplistÚargsÚkwargs©Zcalled_withr   r   Úset_faplQ   s    z=TestDriverRegistration.test_register_driver.<locals>.set_faplú
new-driverr   r   r   )ÚdriverÚdriver_arg_0Údriver_arg_1Úmoder   )r)   r*   )r	   Úregister_driverÚassertInÚregistered_driversr   r   r   )r   r&   r   r   r%   r   Útest_register_driverN   s    ÿþz+TestDriverRegistration.test_register_driverc              	   C   s~   t  ddd„ ¡ |  dt  ¡ ¡ t  d¡ |  dt  ¡ ¡ |  t¡}|  ¡ }t j	|ddd W 5 Q R X |  
t|jƒd¡ d S )Nr'   c                 S   s   d S r   r   )r"   r   r   r   Ú<lambda>b   ó    z?TestDriverRegistration.test_unregister_driver.<locals>.<lambda>r   ©r(   r+   z Unknown driver type "new-driver")r	   r,   r-   r.   Zunregister_driverZassertNotInÚassertRaisesÚ
ValueErrorr   r   r   ÚstrÚ	exception)r   Úer   r   r   r   Útest_unregister_drivera   s    
z-TestDriverRegistration.test_unregister_driverN)r   r   r   r/   r8   r   r   r   r   r!   M   s   r!   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	TestCachec                 C   s:   |   ¡ }t |d¡}|  t|j ¡  ¡ ƒddddg¡ d S )Nr   r   é	  é   ç      è?©r   r	   r   r   ÚlistÚidZget_access_plistZ	get_cache©r   r   r   r   r   r   Útest_defaultsp   s
    
ÿzTestCache.test_defaultsc                 C   s>   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒddddg¡ d S )Nr   i   )Zrdcc_nbytesr   r:   r<   r=   r@   r   r   r   Útest_nbytesv   s
    
ÿzTestCache.test_nbytesc                 C   s>   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒddddg¡ d S )Nr   é}   )Zrdcc_nslotsr   r;   r<   r=   r@   r   r   r   Útest_nslots|   s
    
ÿzTestCache.test_nslotsc                 C   s>   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒddddg¡ d S )Nr   g      Ð?)Zrdcc_w0r   r:   r;   r=   r@   r   r   r   Útest_w0‚   s
    
ÿzTestCache.test_w0N)r   r   r   rA   rB   rD   rE   r   r   r   r   r9   o   s   r9   c                   @   sn   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
e d¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestFileObjc                 C   s„   t  |d¡}|  |jd¡ |  |jt|ƒ¡ |jdttdƒƒd |  t|ƒdg¡ |  t|d d d … ƒttdƒƒ¡ | 	¡  d S )Nr   ÚfileobjÚtesté   ©Údata)
r	   r   r   r(   ÚfilenameÚreprÚcreate_datasetr>   ÚrangeÚclose©r   rG   r   r   r   r   Úcheck_write‹   s    $zTestFileObj.check_writec                 C   sj   t  |d¡}|  t|ƒdg¡ |  t|d d d … ƒttdƒƒ¡ | jt|jdttdƒƒd | ¡  d S )NÚrrH   rI   zanother.testé   rJ   )	r	   r   r   r>   rO   r3   Ú	ExceptionrN   rP   rQ   r   r   r   Ú
check_read”   s
    $zTestFileObj.check_readc              	   C   sT   t  ¡ B}|  t| ¡ ƒd¡ |  |¡ |  t| ¡ ƒd¡ |  |¡ W 5 Q R X d S )Nr   )ÚioÚBytesIOr   ÚlenÚgetvaluerR   ÚassertGreaterrV   )r   rG   r   r   r   Útest_BytesIO›   s
    

zTestFileObj.test_BytesIOc              	   C   s   |   ¡ }zvt|dƒB}|  tj |¡d¡ |  |¡ |  tj |¡d¡ |  	|¡ W 5 Q R X t|dƒ}|  	|¡ W 5 Q R X W 5 t |¡ X d S )Nzwb+r   Úrb)
r   ÚosÚremoveÚopenr   ÚpathÚgetsizerR   r[   rV   )r   r   rG   r   r   r   Ú	test_file¢   s    
zTestFileObj.test_filec                 C   s˜   t  ¡ }|j}t |d¡}~|jdttdƒƒd |  t|ƒdg¡ |  t|d d d … ƒttdƒƒ¡ |  	t
j |¡¡ | ¡  |  t
j |¡¡ d S ©Nr   rH   rI   rJ   )ÚtempfileÚNamedTemporaryFileÚnamer	   r   rN   r>   rO   r   r   r^   ra   ÚisfilerP   ZassertFalse)r   rG   r   r   r   r   r   Útest_TemporaryFile¯   s    $zTestFileObj.test_TemporaryFilec                 C   sF   | j ttjd ddd | j ttjdddd | j ttj| ddd d S )NrG   Úxr2   Zrogue)r3   rU   r	   r   )r   r   r   r   Útest_exception_openÀ   s     ÿ ÿ ÿzTestFileObj.test_exception_openc                 C   sL   G dd„ dt jƒ}t |ƒ d¡}|jdttdƒƒd |  tt|d ¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z6TestFileObj.test_exception_read.<locals>.BrokenBytesIOc                 S   s   t dƒ‚d S ©NzI am broken)rU   ©r   Úbr   r   r   ÚreadintoË   s    z?TestFileObj.test_exception_read.<locals>.BrokenBytesIO.readintoN)r   r   r   ro   r   r   r   r   ÚBrokenBytesIOÊ   s   rp   r   rH   rI   rJ   )	rW   rX   r	   r   rN   r>   rO   r3   rU   )r   rp   r   r   r   r   Útest_exception_readÈ   s    zTestFileObj.test_exception_readc                 C   sZ   G dd„ dt jƒ}|ƒ }t |d¡}z | jt|jdt	t
dƒƒd W 5 d|_| ¡  X d S )Nc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )z7TestFileObj.test_exception_write.<locals>.BrokenBytesIOFc                    s   | j rtƒ  |¡S tdƒ‚d S rl   )Úallow_writeÚsuperÚwriterU   rm   ©Ú	__class__r   r   rt   Ö   s    z=TestFileObj.test_exception_write.<locals>.BrokenBytesIO.write)r   r   r   rr   rt   Ú__classcell__r   r   ru   r   rp   Ô   s   rp   r   TrH   rI   rJ   )rW   rX   r	   r   rr   rP   r3   rU   rN   r>   rO   )r   rp   Zbior   r   r   r   Útest_exception_writeÒ   s    
ÿ
z TestFileObj.test_exception_writez-Incompletely closed files can cause segfaultsc                 C   s.   t  ¡ }t |d¡}| ¡  |  t|j¡ d S )Nr   )rW   rX   r	   r   rP   r3   rU   rQ   r   r   r   Útest_exception_closeæ   s    z TestFileObj.test_exception_closec              	   C   s\   t tj | jd¡dƒ}|  tj¡0 t 	|d¡}| 
d¡}|jddt ¡ d W 5 Q R X d S )Nza.h5Úwbr   ÚgrouprK   Zfoo)rK   Zdtype)r`   r^   ra   ÚjoinÚtempdirr3   rW   ÚUnsupportedOperationr	   r   Úcreate_grouprN   Zstring_dtype)r   rG   r   r{   r   r   r   Útest_exception_writeonlyí   s
    
z$TestFileObj.test_exception_writeonlyc                 C   sj   t  ¡ }t |d¡}|jdttdƒƒd |  t|d d d … ƒttdƒƒ¡ d |_|  	t
t|d ¡ d S rd   )rW   rX   r	   r   rN   r>   rO   r   ro   r3   rU   rQ   r   r   r   Útest_method_vanish÷   s    $zTestFileObj.test_method_vanishN)r   r   r   rR   rV   r\   rc   ri   rk   rq   rx   r   Úskipry   r€   r   r   r   r   r   rF   ‰   s   	


rF   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestTrackOrderc                 C   s<   t dƒD ].}|d dkr(| t|ƒ¡ q|g|t|ƒ< qd S )Néd   é
   r   )rO   r   r5   )r   r   Úir   r   r   Úpopulate  s    zTestTrackOrder.populatec                 C   sD   |   ¡ }tj|ddd}|  |¡ |  t|ƒdd„ tdƒD ƒ¡ d S )Nr   T©Ztrack_orderc                 S   s   g | ]}t |ƒ‘qS r   ©r5   ©Ú.0r†   r   r   r   Ú
<listcomp>  s     z3TestTrackOrder.test_track_order.<locals>.<listcomp>r„   )r   r	   r   r‡   r   r>   rO   r@   r   r   r   Útest_track_order	  s    

ÿzTestTrackOrder.test_track_orderc                 C   sH   |   ¡ }tj|ddd}|  |¡ |  t|ƒtdd„ tdƒD ƒƒ¡ d S )Nr   Frˆ   c                 S   s   g | ]}t |ƒ‘qS r   r‰   rŠ   r   r   r   rŒ     s     z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>r„   )r   r	   r   r‡   r   r>   ÚsortedrO   r@   r   r   r   Útest_no_track_order  s    

ÿz"TestTrackOrder.test_no_track_orderN)r   r   r   r‡   r   r   r   r   r   r   rƒ      s   rƒ   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestFileMetaBlockSizez
        Feature: The meta block size can be manipulated, changing how metadata
        is aggregated and the offset of the first dataset.
    c              	   C   sT   d}t |  ¡ d|dd2}d|d< |  |j|¡ |  |d j ¡ |¡ W 5 Q R X d S )Ni   r   Úlatest©Úmeta_block_sizeÚlibveré   rH   )r   r   r   r“   ÚassertGreaterEqualr?   Ú
get_offset)r   r“   r   r   r   r   Ú*test_file_create_with_meta_block_size_4096  s     ýz@TestFileMetaBlockSize.test_file_create_with_meta_block_size_4096c              	   C   sr   d}d}t |  ¡ d||dL}d|d< |  |j|¡ |  |d j ¡ |¡ |  |d j ¡ |d ¡ W 5 Q R X d S )Ni   r‘   r   r’   rT   rH   é   )r   r   r   r“   r–   r?   r—   Z
assertLess)r   r“   r”   r   r   r   r   Ú)test_file_create_with_meta_block_size_512,  s     ýz?TestFileMetaBlockSize.test_file_create_with_meta_block_size_512N)r   r   r   r    r˜   rš   r   r   r   r   r     s   r   )r    r	   Zh5py._hl.filesr   r   Úcommonr   r   ZpytestrW   re   r^   r   r   r   r!   r9   rF   rƒ   r   r   r   r   r   Ú<module>
   s    ,"w