o
    cdd(                     @   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_ALLZOBJ_FILE r   r   5lib/python3.10/site-packages/h5py/tests/test_file2.pynfiles      r   c                   C   r   r	   )r
   r   r   r   Z	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)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sec2r   )plistargskwargsZ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   )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    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   r*   r-   z Unknown driver type "new-driver")r
   r.   r/   r0   Zunregister_driverZassertNotInassertRaises
ValueErrorr   r   r   strZ	exception)r   er   r   r   r   test_unregister_drivera   s   
z-TestDriverRegistration.test_unregister_driverN)r   r    r!   r1   r8   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idZget_access_plistZ	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      )Zrdcc_nbytes)r   r:   rC   r<   r=   r@   r   r   r   test_nbytesv   
   zTestCache.test_nbytesc                 C   rB   )Nr   }   )Zrdcc_nslots)r   rF   r;   r<   r=   r@   r   r   r   test_nslots|   rE   zTestCache.test_nslotsc                 C   rB   )Nr         ?)Zrdcc_w0)r   r:   r;   rH   r=   r@   r   r   r   test_w0   rE   zTestCache.test_w0N)r   r    r!   rA   rD   rG   rI   r   r   r   r   r9   o   s
    r9   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_datasetr>   rangecloser   rK   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rrL   rM   zanother.test   rN   )	r
   r   r   r>   rS   r4   	ExceptionrR   rT   rU   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getvaluerV   assertGreaterrZ   )r   rK   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getsizerV   r_   rZ   remove)r   r   rK   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   rL   rM   rN   )tempfileZNamedTemporaryFilenamer
   r   rR   r>   rS   r   r   rc   rd   isfilerT   ZassertFalse)r   rK   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 )NrK   xr3   Zrogue)r4   rY   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)rY   r   br   r   r   readinto   s   z?TestFileObj.test_exception_read.<locals>.BrokenBytesIO.readintoN)r   r    r!   rr   r   r   r   r   BrokenBytesIO   s    rs   r   rL   rM   rN   )	r[   r\   r
   r   rR   r>   rS   r4   rY   )r   rs   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ro   )allow_writesuperwriterY   rp   	__class__r   r   rw      s   z=TestFileObj.test_exception_write.<locals>.BrokenBytesIO.write)r   r    r!   ru   rw   __classcell__r   r   rx   r   rs      s    rs   r   rL   rM   rN   T)r[   r\   r
   r   r4   rY   rR   r>   rS   ru   rT   )r   rs   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   )r[   r\   r
   r   rT   r4   rY   rU   r   r   r   test_exception_close   s   z TestFileObj.test_exception_closec                 C   sr   t tj| jdd}| tj t	|d}|
d}|jddt d W d    d S 1 s2w   Y  d S )Nza.h5wbr   grouprO   Zfoo)rO   Zdtype)rb   rc   rd   joinZtempdirr4   r[   UnsupportedOperationr
   r   create_grouprR   Zstring_dtype)r   rK   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 rh   )r[   r\   r
   r   rR   r>   rS   r   rr   r4   rY   rU   r   r   r   test_method_vanish   s   $zTestFileObj.test_method_vanishN)r   r    r!   rV   rZ   r`   rg   rl   rn   rt   r{   r   skipr|   r   r   r   r   r   r   rJ      s    	


rJ   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   )rS   r   r6   )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Ztrack_orderc                 S      g | ]}t |qS r   r6   .0r   r   r   r   
<listcomp>      z3TestTrackOrder.test_track_order.<locals>.<listcomp>r   )r   r
   r   r   r   r>   rS   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   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   r>   sortedrS   r@   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   rL   )r   r   r   r   assertGreaterEqualr?   
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   rX   rL      )r   r   r   r   r   r?   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pytestr[   ri   rc   r   r   r   r#   r9   rJ   r   r   r   r   r   r   <module>   s"   	,"w