B
    ¬»ˆ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   úG/var/www/html/venv/lib/python3.7/site-packages/h5py/tests/test_file2.pyÚnfiles   s    r   c               C   s   t j t jjt jj¡S )N)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sec2)r   )ÚplistÚargsÚkwargs)Úcalled_withr   r   Úset_faplQ   s    z=TestDriverRegistration.test_register_driver.<locals>.set_faplz
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 d Q R X |  
t|jƒd¡ d S )Nz
new-driverc             S   s   d S )Nr   )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,   r4   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   i	  i   g      è?)r   r   r   r   ÚlistÚidÚget_access_plistÚ	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   i	  g      è?)r   r   r   r   r6   r7   r8   r9   )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   i   g      è?)r   r   r   r   r6   r7   r8   r9   )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   i	  i   )r   r   r   r   r6   r7   r8   r9   )r   r   r   r   r   r   Útest_w0‚   s    zTestCache.test_w0N)r   r   r   r:   r;   r=   r>   r   r   r   r   r5   o   s   r5   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_datasetr6   ÚrangeÚclose)r   r@   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ÚrrA   rB   zanother.testé   )rC   )	r   r   r   r6   rG   r/   Ú	ExceptionrF   rH   )r   r@   r   r   r   r   Ú
check_read”   s
    $zTestFileObj.check_readc          	   C   sT   t  ¡ B}|  t| ¡ ƒd¡ |  |¡ |  t| ¡ ƒd¡ |  |¡ W d Q R X d S )Nr   )ÚioÚBytesIOr   ÚlenÚgetvaluerI   ÚassertGreaterrM   )r   r@   r   r   r   Útest_BytesIO›   s
    

zTestFileObj.test_BytesIOc          	   C   s   |   ¡ }zvt|dƒB}|  tj |¡d¡ |  |¡ |  tj |¡d¡ |  |¡ W d Q R X t|dƒ}|  |¡ W d Q R X W d t 	|¡ X d S )Nzwb+r   Úrb)
r   Úopenr   ÚosÚpathÚgetsizerI   rR   rM   Úremove)r   r   r@   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   rA   rB   )rC   )ÚtempfileÚNamedTemporaryFileÚnamer   r   rF   r6   rG   r   r   rV   rW   ÚisfilerH   ZassertFalse)r   r@   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 )Nr@   Úx)r%   r(   Zrogue)r/   rL   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)rL   )r   Úbr   r   r   ÚreadintoË   s    z?TestFileObj.test_exception_read.<locals>.BrokenBytesIO.readintoN)r   r   r   rc   r   r   r   r   ÚBrokenBytesIOÊ   s   rd   r   rA   rB   )rC   )	rN   rO   r   r   rF   r6   rG   r/   rL   )r   rd   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 d 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 )NzI am broken)Úallow_writeÚsuperÚwriterL   )r   rb   )Ú	__class__r   r   rh   Ö   s    z=TestFileObj.test_exception_write.<locals>.BrokenBytesIO.write)r   r   r   rf   rh   Ú__classcell__r   r   )ri   r   rd   Ô   s   rd   r   rA   rB   )rC   T)rN   rO   r   r   r/   rL   rF   r6   rG   rf   rH   )r   rd   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   )rN   rO   r   r   rH   r/   rL   )r   r@   r   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 d Q R X d S )Nza.h5Úwbr   ÚgrouprC   Zfoo)rC   Zdtype)rU   rV   rW   ÚjoinÚtempdirr/   rN   ÚUnsupportedOperationr   r   Úcreate_grouprF   Zstring_dtype)r   r@   r   rn   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 )Nr   rA   rB   )rC   )rN   rO   r   r   rF   r6   rG   r   rc   r/   rL   )r   r@   r   r   r   r   Útest_method_vanish÷   s    $zTestFileObj.test_method_vanishN)r   r   r   rI   rM   rS   rZ   r_   ra   re   rk   r   Úskiprl   rs   rt   r   r   r   r   r?   ‰   s   	

r?   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestTrackOrderc             C   s@   x:t dƒD ].}|d dkr*| t|ƒ¡ q
|g|t|ƒ< q
W d S )Néd   é
   r   )rG   rr   r1   )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)Útrack_orderc             S   s   g | ]}t |ƒ‘qS r   )r1   )Ú.0ry   r   r   r   ú
<listcomp>  s    z3TestTrackOrder.test_track_order.<locals>.<listcomp>rw   )r   r   r   rz   r   r6   rG   )r   r   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   F)r{   c             S   s   g | ]}t |ƒ‘qS r   )r1   )r|   ry   r   r   r   r}     s    z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>rw   )r   r   r   rz   r   r6   ÚsortedrG   )r   r   r   r   r   r   Útest_no_track_order  s
    

z"TestTrackOrder.test_no_track_orderN)r   r   r   rz   r~   r€   r   r   r   r   rv      s   rv   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 d Q R X d S )Ni   r   Úlatest)Úmeta_block_sizeÚlibveré   rA   )r   r   r   rƒ   ÚassertGreaterEqualr7   Ú
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 d Q R X d S )Ni   r‚   r   )rƒ   r„   rK   rA   é   )r   r   r   rƒ   r†   r7   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pytestrN   r[   rV   r   r   r   r   r5   r?   rv   r   r   r   r   r   Ú<module>   s    ,"w