o
    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   K/mnt/sdb/aimis/docanh/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 )Nd   
   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"   	,"!~