o
    µ2úhÀ*  ã                   @   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   ó   t j t jjt jj¡S ©N)Úh5pyÚh5fÚget_obj_countÚOBJ_ALLÚOBJ_FILE© r   r   úP/var/www/html/chatgem/venv/lib/python3.10/site-packages/h5py/tests/test_file2.pyÚnfiles   ó   r   c                   C   r   r	   )r
   r   r   r   Ú	OBJ_GROUPr   r   r   r   Úngroups   r   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)ÚselfÚstart_nfilesÚ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   Úsec2r   )ÚplistÚargsÚkwargs©Ú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   )r1   r2   )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   ƒ n1 s9w   Y  |  
t|jƒd¡ d S )Nr/   c                 S   s   d S r	   r   )r)   r   r   r   Ú<lambda>b   s    z?TestDriverRegistration.test_unregister_driver.<locals>.<lambda>r   ©r0   r3   z Unknown driver type 'new-driver')r
   r4   r5   r6   Úunregister_driverÚassertNotInÚassertRaisesÚ
ValueErrorr   r   r   ÚstrÚ	exception)r   Úer   r   r   r   Útest_unregister_drivera   s   
þz-TestDriverRegistration.test_unregister_driverN)r#   r$   r%   r7   rA   r   r   r   r   r'   M   s    r'   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	TestCachec                 C   s(   d}t jjdk r|| _d S d| | _d S )Ni   )é   r   r   é   )r
   ÚversionÚhdf5_version_tupleÚdflt_chunk_cache)r   ÚMiBr   r   r   ÚsetUpp   s   
zTestCache.setUpc                 C   s<   |   ¡ }t |d¡}|  t|j ¡  ¡ ƒdd| jdg¡ d S )Nr   r   é	  ç      è?©	r   r
   r   r   ÚlistÚidÚget_access_plistÚ	get_cacherG   ©r   r   r    r   r   r   Útest_defaultsw   s
   ÿzTestCache.test_defaultsc                 C   s:   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒg d¢¡ d S )Nr   é   )Úrdcc_nbytes)r   rJ   rS   rK   )r   r
   r   r   rM   rN   rO   rP   rQ   r   r   r   Útest_nbytes}   s
   ÿzTestCache.test_nbytesc                 C   s@   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒdd| jdg¡ d S )Nr   é}   )Úrdcc_nslotsr   rK   rL   rQ   r   r   r   Útest_nslotsƒ   ó
   ÿzTestCache.test_nslotsc                 C   s@   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒdd| jdg¡ d S )Nr   g      Ð?)Úrdcc_w0r   rJ   rL   rQ   r   r   r   Útest_w0‰   rY   zTestCache.test_w0N)r#   r$   r%   rI   rR   rU   rX   r[   r   r   r   r   rB   o   s    rB   c                   @   sz   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	¡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   r0   ÚfilenameÚreprÚcreate_datasetrM   Ú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Úrr^   r_   zanother.testé   r`   )	r
   r   r   rM   re   r<   Ú	Exceptionrd   rf   rg   r   r   r   Ú
check_read›   s
   $zTestFileObj.check_readc                 C   sj   t  ¡ '}|  t| ¡ ƒd¡ |  |¡ |  t| ¡ ƒd¡ |  |¡ W d   ƒ d S 1 s.w   Y  d S )Nr   )ÚioÚBytesIOr   ÚlenÚgetvaluerh   ÚassertGreaterrl   )r   r]   r   r   r   Útest_BytesIO¢   s   

"üzTestFileObj.test_BytesIOc              	   C   sÐ   |   ¡ }z]t|dƒ&}|  tj |¡d¡ |  |¡ |  tj |¡d¡ |  |¡ W d   ƒ n1 s3w   Y  t|dƒ}|  |¡ W d   ƒ n1 sMw   Y  W t 	|¡ d S W t 	|¡ d S t 	|¡ w )Nzwb+r   Úrb)
r   Úopenr   ÚosÚpathÚgetsizerh   rq   rl   Úremove)r   r   r]   r   r   r   Ú	test_file©   s   
üÿýzTestFileObj.test_filezignore::ResourceWarningc                 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   r^   r_   r`   )ÚtempfileÚNamedTemporaryFileÚnamer
   r   rd   rM   re   r   r   ru   rv   Úisfilerf   Ú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]   Úxr9   Úrogue)r<   rk   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ƒ‚©NzI am broken)rk   ©r   Úbr   r   r   Úreadinto×   s   z?TestFileObj.test_exception_read.<locals>.BrokenBytesIO.readintoN)r#   r$   r%   r‡   r   r   r   r   ÚBrokenBytesIOÖ   s    rˆ   r   r^   r_   r`   )	rm   rn   r
   r   rd   rM   re   r<   rk   )r   rˆ   r    r   r   r   Útest_exception_readÔ   s   zTestFileObj.test_exception_readc                 C   sf   G dd„ dt jƒ}|ƒ }t |d¡}z| jt|jdttdƒƒd W d|_	| 
¡  d S d|_	| 
¡  w )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ƒ‚r„   )Úallow_writeÚsuperÚwriterk   r…   ©Ú	__class__r   r   rŒ   â   s   z=TestFileObj.test_exception_write.<locals>.BrokenBytesIO.write)r#   r$   r%   rŠ   rŒ   Ú__classcell__r   r   r   r   rˆ   à   s    rˆ   r   r^   r_   r`   T)rm   rn   r
   r   r<   rk   rd   rM   re   rŠ   rf   )r   rˆ   Ú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   )rm   rn   r
   r   rf   r<   rk   rg   r   r   r   Útest_exception_closeò   s   z TestFileObj.test_exception_closec                 C   s€   t tj | jd¡dƒ}t |d¡}| d¡}|  t	j
¡ |jddt ¡ d W d   ƒ n1 s1w   Y  | ¡  | ¡  d S )Nza.h5Úwbr   Úgroupra   Úfoo)ra   Údtype)rt   ru   rv   ÚjoinÚtempdirr
   r   Úcreate_groupr<   rm   ÚUnsupportedOperationrd   Ústring_dtyperf   )r   r]   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 rz   )rm   rn   r
   r   rd   rM   re   r   r‡   r<   rk   rg   r   r   r   Útest_method_vanish  s   $zTestFileObj.test_method_vanishN)r#   r$   r%   rh   rl   rr   ry   ÚpytestÚmarkÚfilterwarningsr€   rƒ   r‰   r‘   r   Úskipr’   rœ   r   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<   t dƒD ]}|d dkr| t|ƒ¡ q|g|t|ƒ< qd S )Néd   é
   r   )re   r™   r>   )r   r    Úir   r   r   Úpopulate  s
   ûzTestTrackOrder.populatec                 C   st   |   ¡ }tj|ddd}|  |¡ |  t|ƒdd„ tdƒD ƒ¡ | ¡  t |¡}|  t|ƒdd„ tdƒD ƒ¡ d S )Nr   T©Útrack_orderc                 S   ó   g | ]}t |ƒ‘qS r   ©r>   ©Ú.0r¥   r   r   r   Ú
<listcomp>  ó    z3TestTrackOrder.test_track_order.<locals>.<listcomp>r£   c                 S   r©   r   rª   r«   r   r   r   r­      r®   )r   r
   r   r¦   r   rM   re   rf   )r   r   r    Úf2r   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   r©   r   rª   r«   r   r   r   r­   '  r®   z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>r£   )r   r
   r   r¦   r   rM   Úsortedre   rQ   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   sj   d}t |  ¡ d|dd}d|d< |  |j|¡ |  |d j ¡ |¡ W d   ƒ d S 1 s.w   Y  d S )Ni   r   Úlatest©Úmeta_block_sizeÚlibveré   r^   )r   r   r   r¶   ÚassertGreaterEqualrN   Ú
get_offset)r   r¶   r    r   r   r   Ú*test_file_create_with_meta_block_size_40961  s   ý"øz@TestFileMetaBlockSize.test_file_create_with_meta_block_size_4096c                 C   sˆ   d}d}t |  ¡ d||d,}d|d< |  |j|¡ |  |d j ¡ |¡ |  |d j ¡ |d ¡ W d   ƒ d S 1 s=w   Y  d S )Ni   r´   r   rµ   rj   r^   rC   )r   r   r   r¶   r¹   rN   rº   Ú
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
   Úh5py._hl.filesr   r   Úcommonr   r   rž   rm   r{   ru   r   r   r   r'   rB   r\   r¢   r³   r   r   r   r   Ú<module>   s"   	,"!~