
    dd(                        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 Zd Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )z!
    Tests the h5py.File object.
    N_drivers)File   )utTestCasec                  ~    t           j                            t           j        j        t           j        j                  S N)h5pyh5fget_obj_countOBJ_ALLOBJ_FILE     5lib/python3.11/site-packages/h5py/tests/test_file2.pynfilesr      s$    8!!$("2DH4EFFFr   c                  ~    t           j                            t           j        j        t           j        j                  S r
   )r   r   r   r   	OBJ_GROUPr   r   r   ngroupsr      s$    8!!$("2DH4FGGGr   c                       e Zd ZdZd ZdS )TestDealloczj
        Behavior on object deallocation.  Note most of this behavior is
        delegated to FileID.
    c                    t                      }t                      }|                                 }t          j        |d          }|d         }|                     t                      |dz              |                     t                      |dz              ~|                     |           |                     t                      |           |                     t                      |dz              |j        }|                     |           |                     t                      |dz              |                     t                      |dz              ~|                     t                      |dz              |                     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gs         r   test_autoclosezTestDealloc.test_autoclose(   s    xx		IeS!!cF<>222M!O444<000M!O444F<>222M!O444<>222M222<000M22222r   N)__name__
__module____qualname____doc__r&   r   r   r   r   r   !   s-         
"3 "3 "3 "3 "3r   r   c                       e Zd Zd Zd ZdS )TestDriverRegistrationc                 "   d gfd}t          j        d|           |                     dt          j                               |                                 }t          j        |dddd           |                     ddddfg           d S )	Nc                 <    ||fd<   t          d         |           S )Nr   sec2r   )plistargskwargscalled_withs      r   set_faplz=TestDriverRegistration.test_register_driver.<locals>.set_faplQ   s#    !6\KNF#E***r   
new-driverr   r   r   )driverdriver_arg_0driver_arg_1moder   )r7   r8   )r   register_driverassertInregistered_driversr   r   r   )r    r4   r#   r3   s      @r   test_register_driverz+TestDriverRegistration.test_register_driverN   s    f	+ 	+ 	+ 	+ 	+ 	\8444lD$;$=$=>>>	%11	 	 	 	 	1a889:	
 	
 	
 	
 	
r   c                     t          j        dd            |                     dt          j                               t          j        d           |                     dt          j                               |                     t                    5 }|                                 }t          j	        |dd           d d d            n# 1 swxY w Y   | 
                    t          |j                  d           d S )Nr5   c                     d S r
   r   )r0   s    r   <lambda>z?TestDriverRegistration.test_unregister_driver.<locals>.<lambda>b   s     r   r   r6   r9   z Unknown driver type "new-driver")r   r:   r;   r<   unregister_driverassertNotInassertRaises
ValueErrorr   r   r   str	exception)r    er#   s      r   test_unregister_driverz-TestDriverRegistration.test_unregister_drivera   s   \+=+=>>>lD$;$=$=>>>|,,,t'>'@'@AAAz** 	<aKKMMEIeLs;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	Q[))+MNNNNNs   ,CCCN)r'   r(   r)   r=   rI   r   r   r   r,   r,   M   s7        
 
 
&O O O O Or   r,   c                   &    e Zd Zd Zd Zd Zd ZdS )	TestCachec                     |                                  }t          j        |d          }|                     t	          |j                                                                                  g d           d S )Nr   )r   	           ?r   r   r   r   listidget_access_plist	get_cacher    r#   r$   s      r   test_defaultszTestCache.test_defaultsp   so    IeS!!ad3355??AABB000	2 	2 	2 	2 	2r   c                     |                                  }t          j        |dd          }|                     t	          |j                                                                                  g d           d S )Nr      )rdcc_nbytes)r   rM   rX   rO   rP   rU   s      r   test_nbyteszTestCache.test_nbytesv   st    IeSd333ad3355??AABB---	/ 	/ 	/ 	/ 	/r   c                     |                                  }t          j        |dd          }|                     t	          |j                                                                                  g d           d S )Nr   }   )rdcc_nslots)r   r\   rN   rO   rP   rU   s      r   test_nslotszTestCache.test_nslots|   st    IeSc222ad3355??AABB000	2 	2 	2 	2 	2r   c                     |                                  }t          j        |dd          }|                     t	          |j                                                                                  g d           d S )Nr         ?)rdcc_w0)r   rM   rN   r`   rP   rU   s      r   test_w0zTestCache.test_w0   st    IeS$///ad3355??AABB000	2 	2 	2 	2 	2r   N)r'   r(   r)   rV   rZ   r^   rb   r   r   r   rK   rK   o   sP        2 2 2/ / /2 2 22 2 2 2 2r   rK   c                   |    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 ej        d	          d
             Zd Zd ZdS )TestFileObjc                    t          j        |d          }|                     |j        d           |                     |j        t          |                     |                    dt          t          d                               |                     t          |          dg           |                     t          |d         d d                    t          t          d                               |	                                 d S )Nr   fileobjtest   data)
r   r   r   r6   filenamereprcreate_datasetrQ   rangecloser    rf   r$   s      r   check_writezTestFileObj.check_write   s    Igs##9---T']]333	d599oo666a6(+++ail++T%))__===						r   c           
         t          j        |d          }|                     t          |          dg           |                     t          |d         d d                    t          t	          d                               |                     t          |j        dt          t	          d                               |                                 d S )Nrrg   rh   zanother.test   ri   )	r   r   r   rQ   rn   rD   	Exceptionrm   ro   rp   s      r   
check_readzTestFileObj.check_read   s    Igs##a6(+++ail++T%))__===)Q%5~DQVWXQYQYNN[[[						r   c                    t          j                    5 }|                     t          |                                          d           |                     |           |                     t          |                                          d           |                     |           d d d            d S # 1 swxY w Y   d S )Nr   )ioBytesIOr   lengetvaluerq   assertGreaterrv   )r    rf   s     r   test_BytesIOzTestFileObj.test_BytesIO   s    Z\\ 	%WS!1!1!3!344a888W%%%s7#3#3#5#566:::OOG$$$		% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   BB66B:=B:c                 t   |                                  }	 t          |d          5 }|                     t          j                            |          d           |                     |           |                     t          j                            |          d           |                     |           d d d            n# 1 swxY w Y   t          |d          5 }|                     |           d d d            n# 1 swxY w Y   t          j	        |           d S # t          j	        |           w xY w)Nzwb+r   rb)
r   openr   ospathgetsizerq   r|   rv   remove)r    r#   rf   s      r   	test_filezTestFileObj.test_file   s   		eU## )w  !7!7;;;  )))""27??5#9#91===(((	) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 eT"" )g((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) IeBIesS   D! BC7D! CD! 
CD! D 4D!  DD! DD! !D7c                    t          j                    }|j        }t          j        |d          }~|                    dt          t          d                               |                     t          |          dg           |                     t          |d         d d                    t          t          d                               | 	                    t          j                            |                     |                                 |                     t          j                            |                     d S Nr   rg   rh   ri   )tempfileNamedTemporaryFilenamer   r   rm   rQ   rn   r   r   r   r   isfilero   assertFalse)r    rf   r#   r$   s       r   test_TemporaryFilezTestFileObj.test_TemporaryFile   s     -//Igs## 	
d599oo666a6(+++ail++T%))__===u--...				../////r   c                     |                      t          t          j        d dd           |                      t          t          j        ddd           |                      t          t          j        | dd           d S )Nrf   xrA   rogue)rD   ru   r   r   )r    s    r   test_exception_openzTestFileObj.test_exception_open   s    )TY!* 	 	6 	6 	6)TY!* 	 	6 	6 	6)TY!* 	 	6 	6 	6 	6 	6r   c                      G d dt           j                  }t          j         |            d          }|                    dt          t          d                               |                     t          t
          |d                    d S )Nc                       e Zd Zd ZdS )6TestFileObj.test_exception_read.<locals>.BrokenBytesIOc                      t          d          NzI am broken)ru   )r    bs     r   readintoz?TestFileObj.test_exception_read.<locals>.BrokenBytesIO.readinto   s    ...r   N)r'   r(   r)   r   r   r   r   BrokenBytesIOr      s#        / / / / /r   r   r   rg   rh   ri   )	rx   ry   r   r   rm   rQ   rn   rD   ru   )r    r   r$   s      r   test_exception_readzTestFileObj.test_exception_read   s    	/ 	/ 	/ 	/ 	/BJ 	/ 	/ 	/ Immoos++	d599oo666)T1V955555r   c           
      f    G d dt           j                  } |            }t          j        |d          }	 |                     t
          |j        dt          t          d                               d|_	        |
                                 d S # d|_	        |
                                 w xY w)Nc                   "     e Zd ZdZ fdZ xZS )7TestFileObj.test_exception_write.<locals>.BrokenBytesIOFc                 r    | j         r!t                                          |          S t          d          r   )allow_writesuperwriteru   )r    r   	__class__s     r   r   z=TestFileObj.test_exception_write.<locals>.BrokenBytesIO.write   s2    # 3 77==+++#M222r   )r'   r(   r)   r   r   __classcell__)r   s   @r   r   r      s=        K3 3 3 3 3 3 3 3 3r   r   r   rg   rh   ri   T)rx   ry   r   r   rD   ru   rm   rQ   rn   r   ro   )r    r   bior$   s       r   test_exception_writez TestFileObj.test_exception_write   s    	3 	3 	3 	3 	3BJ 	3 	3 	3 mooIc3	i)96#'b		??  4 4 4 #COGGIIIII #COGGIIIIs   =B B0z-Incompletely closed files can cause segfaultsc                     t          j                    }t          j        |d          }|                                 |                     t          |j                   d S )Nr   )rx   ry   r   r   ro   rD   ru   rp   s      r   test_exception_closez TestFileObj.test_exception_close   sI    *,,Igs##)QW-----r   c                    t          t          j                            | j        d          d          }|                     t          j                  5  t          j	        |d          }|
                    d          }|                    ddt          j                               d d d            d S # 1 swxY w Y   d S )Nza.h5wbr   grouprj   foo)rj   dtype)r   r   r   jointempdirrD   rx   UnsupportedOperationr   r   create_grouprm   string_dtype)r    rf   r$   r   s       r   test_exception_writeonlyz$TestFileObj.test_exception_writeonly   s     rw||DL&994@@r677 	P 	P	'3''ANN7++E  e4;L;N;N OOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   AB44B8;B8c                    t          j                    }t          j        |d          }|                    dt          t          d                               |                     t          |d         d d                    t          t          d                               d |_        | 	                    t          t
          |d                    d S r   )rx   ry   r   r   rm   rQ   rn   r   r   rD   ru   rp   s      r   test_method_vanishzTestFileObj.test_method_vanish   s    *,,Igs##	d599oo666ail++T%))__===)T1V955555r   N)r'   r(   r)   rq   rv   r}   r   r   r   r   r   r   skipr   r   r   r   r   r   rd   rd      s            % % %  0 0 0"6 6 66 6 6  ( RW<==. . >=.P P P6 6 6 6 6r   rd   c                        e Zd Zd Zd Zd ZdS )TestTrackOrderc                     t          d          D ]A}|dz  dk    r#|                    t          |                     .|g|t          |          <   Bd S )Nd   
   r   )rn   r   rF   )r    r$   is      r   populatezTestTrackOrder.populate  s\    s 	  	 A2v{{s1vv&&&&C#a&&			  	 r   c                     |                                  }t          j        |dd          }|                     |           |                     t          |          d t          d          D                        d S )Nr   Ttrack_orderc                 ,    g | ]}t          |          S r   rF   .0r   s     r   
<listcomp>z3TestTrackOrder.test_track_order.<locals>.<listcomp>  s    555Q#a&&555r   r   )r   r   r   r   r   rQ   rn   rU   s      r   test_track_orderzTestTrackOrder.test_track_order	  sx    IeSd333aa55%**555	7 	7 	7 	7 	7r   c           	         |                                  }t          j        |dd          }|                     |           |                     t          |          t          d t          d          D                                  d S )Nr   Fr   c                 ,    g | ]}t          |          S r   r   r   s     r   r   z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>  s     < < <AQ < < <r   r   )r   r   r   r   r   rQ   sortedrn   rU   s      r   test_no_track_orderz"TestTrackOrder.test_no_track_order  s    IeSe444aa < <s < < <==	? 	? 	? 	? 	?r   N)r'   r(   r)   r   r   r   r   r   r   r   r      sA             7 7 7? ? ? ? ?r   r   c                       e Zd ZdZd Z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                 ,   d}t          |                                 d|d          5 }d|d<   |                     |j        |           |                     |d         j                                        |           d d d            d S # 1 swxY w Y   d S )Ni   r   latestmeta_block_sizelibver   rg   )r   r   r   r   assertGreaterEqualrR   
get_offset)r    r   r$   s      r   *test_file_create_with_meta_block_size_4096z@TestFileMetaBlockSize.test_file_create_with_meta_block_size_4096  s    KKMM3+
 
 
 	P AfIQ.@@@##AfIL$;$;$=$=OOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   AB		BBc                    d}d}t          |                                 d||          5 }d|d<   |                     |j        |           |                     |d         j                                        |           |                     |d         j                                        |dz             d d d            d S # 1 swxY w Y   d S )Ni   r   r   r   rt   rg      )r   r   r   r   r   rR   r   
assertLess)r    r   r   r$   s       r   )test_file_create_with_meta_block_size_512z?TestFileMetaBlockSize.test_file_create_with_meta_block_size_512,  s"    KKMM3+
 
 
 
	J AfIQ.@@@##AfIL$;$;$=$=OOOOOAfIL3355q7HIII
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	J 
	Js   B
CCCN)r'   r(   r)   r*   r   r   r   r   r   r   r     sD         
P P PJ J J J Jr   r   )r*   r   h5py._hl.filesr   r   commonr   r   pytestrx   r   r   r   r   r   r,   rK   rd   r   r   r   r   r   <module>r      s     # # # # # #                        				  				G G GH H H)3 )3 )3 )3 )3( )3 )3 )3XO O O O OX O O OD2 2 2 2 2 2 2 24t6 t6 t6 t6 t6( t6 t6 t6n? ? ? ? ?X ? ? ?0#J #J #J #J #JH #J #J #J #J #Jr   