o
    i ed(                     @   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   D/var/www/myenv/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                   @   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   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_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   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   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   groupr]   foo)r]   dtype)rp   rq   rr   jointempdirr<   ri   UnsupportedOperationr
   r   create_groupr`   string_dtype)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   r|   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 )Nd   
   r   )ra   r   r>   )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track_orderc                 S      g | ]}t |qS r   r>   .0r   r   r   r   
<listcomp>      z3TestTrackOrder.test_track_order.<locals>.<listcomp>r   )r   r
   r   r   r   rG   ra   rK   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   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_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   pytestri   rw   rq   r   r   r   r'   rB   rX   r   r   r   r   r   r   <module>   s"   	,"w