o
    g’×i˜+  ã                   @   sÌ   d Z ddlZddlmZ ddlmZ ddlmZ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ÚTestCaseÚ	make_namec                   C   ó   t j t jjt jj¡S ©N)Úh5pyÚh5fÚget_obj_countÚOBJ_ALLÚOBJ_FILE© r   r   úS/home/ubuntu/SoloSpeech/.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ejjdddd„ ƒZdS )ÚTestDealloczj
        Behavior on object deallocation.  Note most of this behavior is
        delegated to FileID.
    zglobal object counters)Úreasonc                 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__ÚpytestÚmarkÚthread_unsafer$   r   r   r   r   r   !   s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestDriverRegistrationc                    sl   d g‰ ‡ fdd„}t ƒ }t ||¡ |  |t ¡ ¡ |  ¡ }tj||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_faplr   r   r   )ÚdriverÚdriver_arg_0Údriver_arg_1Úmoder   )r5   r6   )r   r   Úregister_driverÚassertInÚregistered_driversr   r   r   )r   r3   Únamer!   r   r1   r   Útest_register_driverN   s   ÿþz+TestDriverRegistration.test_register_driverc                 C   s    t ƒ }t |dd„ ¡ |  |t ¡ ¡ t |¡ |  |t ¡ ¡ |  t¡}|  	¡ }tj
||dd W d   ƒ n1 s<w   Y  |  t|jƒd|› d¡ d S )Nc                 S   s   d S r
   r   )r.   r   r   r   Ú<lambda>d   s    z?TestDriverRegistration.test_unregister_driver.<locals>.<lambda>r   ©r4   r7   zUnknown driver type 'ú')r   r   r8   r9   r:   Úunregister_driverÚassertNotInÚassertRaisesÚ
ValueErrorr   r   r   ÚstrÚ	exception)r   r;   Úer!   r   r   r   Útest_unregister_driverb   s   
þz-TestDriverRegistration.test_unregister_driverN)r%   r&   r'   r<   rG   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   s4   d}t jjdk r|| _d| _d S d| | _d| _d S )Ni   )é   r   r   i	  é   iÿ  )r   ÚversionÚhdf5_version_tupleÚdflt_chunk_cacheÚdflt_chunk_nslots)r   ÚMiBr   r   r   ÚsetUpr   s   


zTestCache.setUpc                 C   s>   |   ¡ }t |d¡}|  t|j ¡  ¡ ƒd| j| j	dg¡ d S )Nr   r   ç      è?©
r   r   r   r   ÚlistÚidÚget_access_plistÚ	get_cacherN   rM   ©r   r!   r"   r   r   r   Útest_defaults{   s
   ÿzTestCache.test_defaultsc                 C   s@   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒd| jddg¡ d S )Nr   i   )Úrdcc_nbytesr   rQ   )	r   r   r   r   rS   rT   rU   rV   rN   rW   r   r   r   Útest_nbytes   ó
   ÿzTestCache.test_nbytesc                 C   s@   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒdd| jdg¡ d S )Nr   é}   )Úrdcc_nslotsr   rQ   )	r   r   r   r   rS   rT   rU   rV   rM   rW   r   r   r   Útest_nslots‡   r[   zTestCache.test_nslotsc                 C   sB   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒd| j| j	dg¡ d S )Nr   g      Ð?)Úrdcc_w0r   rR   rW   r   r   r   Útest_w0   s
   ÿzTestCache.test_w0N)r%   r&   r'   rP   rX   rZ   r^   r`   r   r   r   r   rH   q   s    	rH   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   r4   ÚfilenameÚreprÚcreate_datasetrS   ÚrangeÚclose©r   rb   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Úrrc   rd   zanother.testé   re   )	r   r   r   rS   rj   rB   Ú	Exceptionri   rk   rl   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Úgetvaluerm   ÚassertGreaterrq   )r   rb   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Úgetsizerm   rv   rq   Úremove)r   r!   rb   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   rc   rd   re   )ÚtempfileÚNamedTemporaryFiler;   r   r   ri   rS   rj   r   r   rz   r{   Úisfilerk   ÚassertFalse)r   rb   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 )Nrb   Úxr>   Úrogue)rB   rp   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)rp   ©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   rc   rd   re   )	rr   rs   r   r   ri   rS   rj   rB   rp   )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Úwriterp   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   rc   rd   re   T)rr   rs   r   r   rB   rp   ri   rS   rj   rŽ   rk   )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   )rr   rs   r   r   rk   rB   rp   rl   r   r   r   Útest_exception_closeö   s   z TestFileObj.test_exception_closec                 C   s„   t tj | jtdƒ¡dƒ}t |d¡}| d¡}|  	t
j¡ |jddt ¡ d W d   ƒ n1 s3w   Y  | ¡  | ¡  d S )Nzfoo{}.h5Úwbr   Úgrouprf   Úfoo)rf   Údtype)ry   rz   r{   ÚjoinÚtempdirr   r   r   Úcreate_grouprB   rr   ÚUnsupportedOperationri   Ústring_dtyperk   )r   rb   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 r   )rr   rs   r   r   ri   rS   rj   r   r‹   rB   rp   rl   r   r   r   Útest_method_vanish	  s   $zTestFileObj.test_method_vanishN)r%   r&   r'   rm   rq   rw   r~   r)   r*   Úfilterwarningsr„   r‡   r   r•   r   Úskipr–   r    r¡   r   r   r   r   ra   ”   s     	ý


ra   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   )rj   r   rD   )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   ©rD   ©Ú.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   rS   rj   rk   )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   rS   Úsortedrj   rW   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é   rc   )r   r   r   r¸   ÚassertGreaterEqualrT   Ú
get_offset)r   r¸   r"   r   r   r   Ú*test_file_create_with_meta_block_size_40965  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·   ro   rc   rI   )r   r   r   r¸   r»   rT   r¼   Ú
assertLess)r   r¸   r¹   r"   r   r   r   Ú)test_file_create_with_meta_block_size_512B  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   r)   rr   r€   rz   r   r   r   r,   rH   ra   r¤   rµ   r   r   r   r   Ú<module>   s"   	,$#~