o
    b¦µ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 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   úI/home/ubuntu/.local/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                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	TestCachec                 C   s6   |   ¡ }t |d¡}|  t|j ¡  ¡ ƒg d¢¡ d S )Nr   )r   é	  é   ç      è?©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   ó:   |   ¡ }tj|ddd}|  t|j ¡  ¡ ƒg d¢¡ d S )Nr   é   )Úrdcc_nbytes)r   rC   rN   rE   rF   rK   r   r   r   Útest_nbytesv   ó
   ÿzTestCache.test_nbytesc                 C   rM   )Nr   é}   )Úrdcc_nslots)r   rR   rD   rE   rF   rK   r   r   r   Útest_nslots|   rQ   zTestCache.test_nslotsc                 C   rM   )Nr   ç      Ð?)Úrdcc_w0)r   rC   rD   rU   rF   rK   r   r   r   Útest_w0‚   rQ   zTestCache.test_w0N)r#   r$   r%   rL   rP   rT   rW   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_datasetrG   ÚrangeÚclose©r   rY   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ÚrrZ   r[   zanother.testé   r\   )	r
   r   r   rG   ra   r<   Ú	Exceptionr`   rb   rc   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Úgetvaluerd   ÚassertGreaterrh   )r   rY   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Úgetsizerd   rm   rh   Úremove)r   r   rY   r   r   r   Ú	test_file¢   s   
üÿýzTestFileObj.test_filez$ignore:unclosed file: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   rZ   r[   r\   )ÚtempfileÚNamedTemporaryFileÚnamer
   r   r`   rG   ra   r   r   rq   rr   Úisfilerb   ÚassertFalse)r   rY   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 )NrY   Úxr9   Úrogue)r<   rg   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)rg   ©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   rZ   r[   r\   )	ri   rj   r
   r   r`   rG   ra   r<   rg   )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Úwriterg   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   rZ   r[   r\   T)ri   rj   r
   r   r<   rg   r`   rG   ra   r†   rb   )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   )ri   rj   r
   r   rb   r<   rg   rc   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   Úgroupr]   Úfoo)r]   Údtype)rp   rq   rr   ÚjoinÚtempdirr
   r   Úcreate_groupr<   ri   ÚUnsupportedOperationr`   Ústring_dtyperb   )r   rY   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 rv   )ri   rj   r
   r   r`   rG   ra   r   rƒ   r<   rg   rc   r   r   r   Útest_method_vanishþ   s   $zTestFileObj.test_method_vanishN)r#   r$   r%   rd   rh   rn   ru   ÚpytestÚmarkÚfilterwarningsr|   r   r…   r   r   ÚskiprŽ   r˜   r™   r   r   r   r   rX   ‰   s     	ý


rX   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   )ra   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   rG   ra   rb   )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   rG   Úsortedra   rK   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é   rZ   )r   r   r   r²   ÚassertGreaterEqualrH   Ú
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   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±   rf   rZ   é   )r   r   r   r²   rµ   rH   r¶   Ú
assertLess)r   r²   r³   r    r   r   r   Ú)test_file_create_with_meta_block_size_5127  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š   ri   rw   rq   r   r   r   r'   rB   rX   rž   r¯   r   r   r   r   Ú<module>   s"   	,"~