
    j                     n   d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlZddlmZmZmZmZmZ ddlmZ ddlmZ ddlZddlZ G d	 d
e          Z G d de          Zej        j         G d de                      Z G d de          Z G d de          Zej                            ej         j!        d         dk    oej         j!        d         dz  dk    d           G d de                      Z" G d de          Z# G d de          Z$ ej%        e d           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+ G d) d*e          Z, G d+ d,e          Z- G d- d.e          Z.ej        j/         G d/ d0                      Z0 G d1 d2e          Z1ej                            d3ej2        v d4           G d5 d6                      Z3d7 Z4ej                            ej         j!        d8k     d9          ej                            d3ej2        v d4          ej        5                    d:g d;          d<                                     Z6d= Z7ej        j8        d>             Z9dS )?z`
    File object test module.

    Tests all aspects of File objects, including their creation.
    N)ProcessPoolExecutor)sha256   )utTestCaseUNICODE_FILENAMESclosed_tempfile	make_name)
direct_vfdFilec                       e Zd ZdZd Zd Zd Zd Zej	        
                     ej        d          dk    o
ej        dk    d	
          d             Zd Zd Zd Zd ZdS )TestFileOpenz=
        Feature: Opening files with Python-style modes.
    c                    |                                  }t          j        t                    5  t	          |          5  	 ddd           n# 1 swxY w Y   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        |t          j                   	 t	          |          5 }| 	                    |           | 
                    |j        d           ddd           n# 1 swxY w Y   t          j        |t          j                   n$# t          j        |t          j                   w xY wt          |d          5 }|                    d           ddd           n# 1 swxY w Y   |                     t                     5  t	          |           ddd           dS # 1 swxY w Y   dS )z8 Default semantics in the presence or absence of a file Nwrwb    )mktemppytestraisesFileNotFoundErrorr   oschmodstatS_IREAD
assertTrueassertEqualmodeS_IWRITEopenwriteassertRaisesOSErrorselffnamefs      W/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/h5py/tests/test_file.pytest_defaultzTestFileOpen.test_default)   s    ],-- 	 	e                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 % 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
%%%	+e ."""  ---. . . . . . . . . . . . . . . HUDM****BHUDM**** % 	!GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	w'' 	 	KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A#A A#A	A#A	A##A'*A'>BBB7D. 1D7D. DD. 
DD. .!E"FFF)GG
G
c                 >   |                                  }t          |d          }|                     |           |                    d           |                                 t          |d          }|                     d|           |                                 dS )z' Mode 'w' opens file in overwrite mode r   fooN)r   r   r   create_groupcloseassertNotInr&   r'   fids      r)   test_createzTestFileOpen.test_createC   s    5#		5#$$$		    c                 &   |                                  }t          |d          }|                     |           |                                 |                     t
                    5  t          |d           ddd           dS # 1 swxY w Y   dS )z( Mode 'w-' opens file in exclusive mode w-N)r   r   r   r.   r#   FileExistsErrorr0   s      r)   test_create_exclusivez"TestFileOpen.test_create_exclusiveN   s    5$		// 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (BB
B
c                    |                                  }t          |d          }	 |                     |           |                    d           d|v sJ 	 |                                 n# |                                 w xY wt          |d          }	 d|v sJ |                    d           d|v sJ 	 |                                 dS # |                                 w xY w)zE Mode 'a' opens file in append/readwrite mode, creating if necessary ar,   barN)r   r   r   r-   r.   r0   s      r)   test_appendzTestFileOpen.test_appendW   s    5#	OOC   U###C<<<<<IIKKKKCIIKKKK5#	C<<<<U###C<<<<<IIKKKKKCIIKKKKs   0A, ,B!C C$CIBUILDWHEEL1linuxz7Linux docker cibuildwheel environment permissions issuereasonc                 $   |                                  }t          |d          5 }|                    d           ddd           n# 1 swxY w Y   t          j        |t
          j                   	 t          j        t                    5  t          |d           ddd           n# 1 swxY w Y   t          j        |t
          j        t
          j
        z             dS # t          j        |t
          j        t
          j
        z             w xY w)z' Mode 'a' fails when file is read-only r9   r,   N)r   r   r-   r   r   r   r   r   r   PermissionErrorr    r0   s      r)   test_append_permissionsz$TestFileOpen.test_append_permissionsk   sY    % 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
%%%	:// ! !UC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! HUDL4=899999BHUDL4=89999sA   AAA2C! B(C! (B,,C! /B,0C! !.Dc                    |                                  }t          |d          }|                                 |                     |           t          |d          }|                     |           |                     t                    5  |                    d           ddd           n# 1 swxY w Y   |                                 dS )z& Mode 'r' opens file in readonly mode r   r   r,   N)r   r   r.   assertFalser   r#   
ValueErrorr-   r0   s      r)   test_readonlyzTestFileOpen.test_readonly|   s    5#		5#z** 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$		s   B//B36B3c                 *   |                                  }t          |d          }|                    d           |                                 t          |d          }d|v sJ |                    d           d|v sJ |                                 dS )z1 Mode 'r+' opens existing file in readwrite mode r   r,   r+r:   N)r   r   r-   r.   r0   s      r)   test_readwritezTestFileOpen.test_readwrite   s    5#		5$||||||||		r3   c                 8   |                                  }|                     t                    5  t          |d           ddd           n# 1 swxY w Y   |                     t                    5  t          |d           ddd           dS # 1 swxY w Y   dS )z( Modes 'r' and 'r+' do not create files r   NrI   )r   r#   r   r   r&   r'   s     r)   test_nonexistent_filez"TestFileOpen.test_nonexistent_file   s   011 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	011 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AAA1BBBc                     |                      t                    5  t          |                                 d           ddd           dS # 1 swxY w Y   dS )z  Invalid modes raise ValueError mongooseN)r#   rF   r   r   )r&   s    r)   test_invalid_modezTestFileOpen.test_invalid_mode   s    z** 	, 	,
+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   #AAAN)__name__
__module____qualname____doc__r*   r2   r7   r;   r   markskipifr   getenvsysplatformrC   rG   rJ   rM   rP    r3   r)   r   r   #   s           4	 	 	    ( [	.!!S(DS\W-DH   : :	 :
 
 

 
 
  , , , , ,r3   r   c                       e Zd ZdZd ZdS )TestSpaceStrategyzE
        Feature: Create file with specified file space strategy
    c                    |                                  }t          |dddd          }|                     |           |                     t                    5  t          |dd           ddd           n# 1 swxY w Y   |                     t                    5  t          |                                  dd	           ddd           n# 1 swxY w Y   t          d
          }t          d          }t          d          }|                    |dd          }d|d<   |                    |dd          }d|d<   ||= |                                 t          |d          }|j        	                                }|
                                }|d         dk    sJ |d         dk    sJ |d         dk    sJ |                    |dd          }d|d<   |                                 dS )z& Create file with file space strategy r   pageTd   )fs_strategy
fs_persistfs_thresholdr9   )r`   Ninvalidxyz)r_   uint8)dtyper   .r      )r   r   r   r#   rF   r
   create_datasetr.   idget_create_plistget_file_space_strategy)	r&   r'   r1   rd   re   rf   dsetplistfs_strats	            r)   test_create_with_space_strategyz1TestSpaceStrategy.test_create_with_space_strategy   si   5#6"6 6 6z** 	1 	10000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 z** 	< 	<;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< cNNcNNcNN!!!V7!;;S	!!!V7!;;S	F		5#''))0022{a{d""""{c!!!!!!!V7!;;S			s$   A77A;>A;%CCCN)rQ   rR   rS   rT   rq   rZ   r3   r)   r\   r\      s-         ! ! ! ! !r3   r\   c                   V   e Zd ZdZd Zd Zej                            e	j
        j        dk    d          d             Zej                            e	j
        j        dk     d	          d
             Zej                            e	j
        j        dk     d	          d             Zd ZdS )TestPageBufferingz)
        Feature: Use page buffering
    c                 $   |                                  }t          |ddd          5  	 ddd           n# 1 swxY w Y   |                     t                    5  t          |dd           ddd           n# 1 swxY w Y   |                     t                    5  t          |ddd           ddd           n# 1 swxY w Y   |                     t                    5  t          |ddd           ddd           dS # 1 swxY w Y   dS )	z;Allow page buffering only with fs_strategy="page".
        r   r^    @  )r   r`   page_buf_sizeNr   rv   fsm	aggregater   r   r#   r$   rL   s     r)   test_only_with_page_strategyz.TestPageBuffering.test_only_with_page_strategy   s2    %cvWMMM 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	w'' 	9 	9S8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9w'' 	L 	LSe7KKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Lw'' 	R 	RSkQQQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	RsB   6::A::A>A>B??CC$DD	D	c                    |                                  }d}d}d}t          |dd|||          5 }|j                                        }|                     |                                |||f           ddd           dS # 1 swxY w Y   dS )zHVerify set page buffer size, and minimum meta and raw eviction criteria.ru      C   r   r^   )r   r`   rv   min_meta_keepmin_raw_keepNr   r   rk   get_access_plistr   get_page_buffer_size)r&   r'   pbsmmmrr(   fapls          r)   test_check_page_buf_sizez*TestPageBuffering.test_check_page_buf_size   s    %cv #2BH H H 	IKL4((**DT66883B-HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   ABB	B)r         zRequires HDF5 <= 1.14.3r?   c                    |                                  }d}t          |dd|          5  	 ddd           n# 1 swxY w Y   |                     t                    5  t          |d|dz
             ddd           dS # 1 swxY w Y   dS )	z;Page buffer size must be greater than file space page size.ru   r   r^   r   r`   fs_page_sizeNr   r   rw   rz   )r&   r'   fsps      r)   test_too_small_pbsz$TestPageBuffering.test_too_small_pbs   s    %cvCHHH 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	w'' 	7 	7SA6666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   8<<B  BBr   r      Requires HDF5 >= 1.14.4c                 P   |                                  }d}t          |d          5  	 ddd           n# 1 swxY w Y   t          |d|          5 }|j                                        }|                                d         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )z(Open non-PAGE file with page buffer set.ru   r   )r   Nr   rw   r   r   r   rk   r   r   r&   r'   r   r(   r   s        r)   test_open_nonpage_pbsz'TestPageBuffering.test_open_nonpage_pbs   s/    %c""" 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	%c555 	74((**D,,..q1Q66666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   6:::BB"Bc                 Z   |                                  }d}t          |dd|          5  	 ddd           n# 1 swxY w Y   t          |d|dz
            5 }|j                                        }|                                d	         |k    sJ 	 ddd           dS # 1 swxY w Y   dS )
zBAdjust page buffer size automatically when smaller than file page.ru   r   r^   r   Nr   r_   rw   r   r   r   s        r)   test_smaller_pbsz"TestPageBuffering.test_smaller_pbs  s7    %cvCHHH 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	%cS999 	9Q4((**D,,..q1S88888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   8<<:B  B$'B$c                 ~   |                                  }d}d|z  }t          |dd|          5  	 ddd           n# 1 swxY w Y   t          |d|dz
  	          5 }|j                                        }|                     |                                d
         |           ddd           dS # 1 swxY w Y   dS )zVerify actual page buffer size.ru   ri   r   r^   r   Nr   r   rw   r   r   )r&   r'   r   r   r(   r   s         r)   test_actual_pbsz!TestPageBuffering.test_actual_pbs  sS   #g%cvCHHH 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	%cQ777 	B14((**DT6688;SAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs"   =AAAB22B69B6N)rQ   rR   rS   rT   r{   r   r   rU   rV   h5pyversionhdf5_version_tupler   r   r   r   rZ   r3   r)   rs   rs      s"        R R R	I 	I 	I [7*D8  : :7 7: :7 [7*D8  : :7 7: :7 [7*D4  6 69 96 69	B 	B 	B 	B 	Br3   rs   c                       e Zd ZdZd Zd ZdS )	TestModesz?
        Feature: File mode can be retrieved via file.mode
    c                 <   |                                  }t          |d          5 }|                     |j        d           ddd           n# 1 swxY w Y   t          |d          5 }|                     |j        d           ddd           dS # 1 swxY w Y   dS )z/ Mode equivalent can be retrieved via property r   rI   Nr   )r   r   r   r   r%   s      r)   test_mode_attrzTestModes.test_mode_attr  s   % 	+QVT***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+% 	*QVS)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s#   AAA(BBBc                    |                                  }|                                  }t          |d          }|                                 t          |d          }	 t          j        |d          |d<   |d         j        }|                     |j        d           |                                 |                                 n-# |                                 |                                 w xY wt          |d          }	 |d         j        }|                     |j        d           |                                 |                                 dS # |                                 |                                 w xY w)zU Mode property works for files opened via external links

        Issue 190.
        r   /ExternalrI   r   N)r   r   r.   r   ExternalLinkfiler   r   )r&   fname1fname2f1f2f3s         r)   test_mode_externalzTestModes.test_mode_external'  s>   
 &#



&#	!.vs;;BzNJ$BRWd+++HHJJJHHJJJJ HHJJJHHJJJJ&#	J$BRWc***HHJJJHHJJJJJ HHJJJHHJJJJs   A C *C1(E *FN)rQ   rR   rS   rT   r   r   rZ   r3   r)   r   r     s<         * * *    r3   r   c                       e Zd ZdZ ej        ej        dk    d          d             Z ej        e	d          d             Z
 ej        ej        dk    d          d             Zd	 Zd
 Zd Zd Zd Zd ZdS )TestDriverszz
        Feature: Files can be opened with low-level HDF5 drivers. Does not
        include MPI drivers (see bottom).
    posixz"Stdio driver is supported on posixc                    t          |                                 dd          }|                     |           |                     |j        d           |                                 t          |                                 dd          }|                     |           |                     |j        d           |                                 dS )z$ Stdio driver is supported on posix r   stdiodriverr9   Nr   r   r   r   r   r.   r&   r1   s     r)   
test_stdiozTestDrivers.test_stdioK  s     4;;==#g666W---		 4;;==#g666W---		r3   zODIRECT driver is supported on Linux if hdf5 is built with the appriorate flags.c           	         t          |                                 dd          }|                     |           |                     |j        d           |j                                                                        }|                                 t          |                                 dd          }|                     |           |                     |j        d           |                                 ||d         |d         d|d         z  f|d         dz  |d         d|d         z  f|d         d|d         z  d	|d         z  ffD ]\  }}}t          |                                 dd|||
          5 }|j                                                                        }|d         }|d         }|d         }	||k    sJ ||k    sJ |	|	k    sJ 	 ddd           n# 1 swxY w Y   dS )z$ DIRECT driver is supported on Linuxr   directr   r9   r   r   r   ri      )r   	alignment
block_size	cbuf_sizeN)	r   r   r   r   r   rk   r   get_fapl_directr.   )
r&   r1   default_faplr   r   r   actual_faplactual_alignmentactual_block_sizeactual_cbuf_sizes
             r)   test_directzTestDrivers.test_directY  sE   
 4;;==#h777X...v..00@@BB		 4;;==#h777X...		$ a,q/1|A3FGa1$l1oq<?7JKa!l1o"5q<?7JK	1 	< 	<,Iz9 dkkmmS )!+ )+ + + 
< /2!f5577GGII#.q> $/N!#.q> '94444(J6666'+;;;;;;
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
< 
<	< 	<s   =AG&&G*	-G*	z!Sec2 driver is supported on posixc                    t          |                                 dd          }|                     |           |                     |j        d           |                                 t          |                                 dd          }|                     |           |                     |j        d           |                                 dS )z# Sec2 driver is supported on posix r   sec2r   r9   Nr   r   s     r)   	test_sec2zTestDrivers.test_sec2  s     4;;==#f555V,,,		 4;;==#f555V,,,		r3   c                    |                                  }t          |ddd          }|                     |           |                     |j        d           |                                 |                     t          j        	                    |                     t          |                                  dd          }|                     |           |                     |j        d           |                                 dS )z- Core driver is supported (no backing store) r   coreFr   backing_storer9   r   N)
r   r   r   r   r   r.   rE   r   pathexistsr0   s      r)   	test_corezTestDrivers.test_core  s    5#fEBBBV,,,		../// 4;;==#f555V,,,		r3   c                    |                                  }t          |ddd          }|                    d           |                                 t          |d          }d|v sJ |                                 |                     t
                    5  t          |dd           ddd           dS # 1 swxY w Y   dS )	z3 Core driver saves to file when backing store used r   r   Tr   r,   r   )r   N)r   r   r-   r.   r#   	TypeErrorr0   s      r)   test_backingzTestDrivers.test_backing  s    5#fDAAA		5#||||		y)) 	1 	140000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   B55B9<B9c                    |                                  }t          |d          }|                    d           |                                 t          |dd          }|                     |           d|v sJ |                     t                    5  |                    d           ddd           n# 1 swxY w Y   |                                 dS )z0 Core driver can be used to open existing files r   r,   r   r   r   r:   N)r   r   r-   r.   r   r#   rF   r0   s      r)   rG   zTestDrivers.test_readonly  s    5#		5#f---||||z** 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$		s   B77B;>B;c                     |                                  }t          |dddd          }|                     |           |                                 dS )z* Core driver supports variable block size r   r      F)r   r   r   N)r   r   r   r.   r0   s      r)   test_blocksizezTestDrivers.test_blocksize  sQ    5#f!&( ( (		r3   c                 Z   |                                  }t          |dd          }|                                 |                     t          j                            |dz                        t          |dd          }|                     |           |                                 dS )z* Split stores metadata in a separate file r   splitr   z-m.h5r   N)r   r   r.   r   r   r   r   r0   s      r)   
test_splitzTestDrivers.test_split  s    5#g...		uw778885#g...		r3   c                    t          j                    }t          |dd          }|                     |           |                     |j        d           |                                 |                     t                    5  t          |dd           ddd           n# 1 swxY w Y   |                                 dS )z( Python file object driver is supported r   fileobjr   r   N)	tempfileTemporaryFiler   r   r   r   r.   r#   rF   )r&   tfr1   s      r)   test_fileobjzTestDrivers.test_fileobj  s    #%%2s9---Y///		z** 	) 	)S((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)





s   B##B'*B'N)rQ   rR   rS   rT   r   
skipUnlessr   namer   r   r   r   r   r   rG   r   r   r   rZ   r3   r)   r   r   D  s        
 R]27g%'KLL  ML R]:67 7-< -<7 7-<^ R]27g%'JKK  LK  1 1 1      
 
 
 
 
r3   r   ri   zNot HDF5 release version 1.x.yr?   c                   F    e Zd ZdZe fd            Zd Zd Zd Zd Z	 e
j        ej        j        dk     d          d	             Z e
j        ej        j        d
k     d          d             Z e
j        ej        j        dk     d          d             Zd Zd Z xZS )TestNewLibverze
        Feature: File format compatibility bounds can be specified when
        opening a file.
    c                 
   t                                                       t          j        j        dk     r	d| _        d S t          j        j        dk     r	d| _        d S t          j        j        dk     r	d| _        d S d| _        d S )Nr      r   v110)r      r   v112ri   r   r   v114v200)super
setUpClassr   r   r   latest)cls	__class__s    r)   r   zTestNewLibver.setUpClass  sw     <*Z77CJJJ\,z99CJJJ\,y88CJJJCJJJr3   c                     t          |                                 d          }|                     |j        d| j        f           |                                 dS )z Opening with no libver arg r   earliestNr   r   r   libverr   r.   r&   r(   s     r)   r*   zTestNewLibver.test_default  I    $$J#<===						r3   c                     t          |                                 dd          }|                     |j        | j        | j        f           |                                 dS )z  Opening with single libver arg r   r   r   Nr   r   s     r)   test_singlezTestNewLibver.test_single  sP    H555DK#=>>>						r3   c                     t          |                                 dd          }|                     |j        d| j        f           |                                 dS )z  Opening with "v108" libver arg r   v108r   Nr   r   s     r)   test_single_v108zTestNewLibver.test_single_v108	  N    F333FDK#8999						r3   c                     t          |                                 dd          }|                     |j        d| j        f           |                                 dS )z  Opening with "v110" libver arg r   r   r   Nr   r   s     r)   test_single_v110zTestNewLibver.test_single_v110  r   r3   r   zRequires HDF5 1.11.4 or laterc                     t          |                                 dd          }|                     |j        d| j        f           |                                 dS )z  Opening with "v112" libver arg r   r   r   Nr   r   s     r)   test_single_v112zTestNewLibver.test_single_v112  P     F333FDK#8999						r3   )r   r   r   zRequires HDF5 1.14 or laterc                     t          |                                 dd          }|                     |j        d| j        f           |                                 dS )z  Opening with "v114" libver arg r   r   r   Nr   r   s     r)   test_single_v114zTestNewLibver.test_single_v114  r  r3   r   zRequires HDF5 2.0 or laterc                     t          |                                 dd          }|                     |j        d| j        f           |                                 dS )z  Opening with "v200" libver arg r   r   r   Nr   r   s     r)   test_single_v200zTestNewLibver.test_single_v200%  r  r3   c                     t          |                                 dd          }|                     |j        d           |                                 dS )z Opening with two libver args r   )r   r   r   N)r   r   r   r   r.   r   s     r)   test_multiplezTestNewLibver.test_multiple-  sI    ,@AAA#7888						r3   c                     t          |                                 d          }|                     |j        d| j        f           |                                 dS )z6 Omitting libver arg results in maximum compatibility r   r   Nr   r   s     r)   	test_nonezTestNewLibver.test_none3  r   r3   )rQ   rR   rS   rT   classmethodr   r*   r   r   r   r   skipIfr   r   r   r   r  r  r  r	  __classcell__)r   s   @r)   r   r     sY        
         [          RYt|.;.0 0 0 0 RYt|.;,. . . . RYt|.:+- - - -        r3   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestUserblockz;
        Feature: Files can be create with user blocks
    c                 H   t          |                                 dd          }	 |                     |j        d           |                                 n# |                                 w xY wt          |                                 dd          }	 |                     |j        d           |                                 n# |                                 w xY wt          |                                 dd          }	 |                     |j        d           |                                 n# |                                 w xY w|                     t                    5  t          |                                 dd           ddd           dS # 1 swxY w Y   dS )zA User blocks created with w, w-, x and properties work correctly r5      userblock_sizerd   r   nonN)r   r   r   r  r.   r#   rF   r   s     r)   test_create_blocksizez#TestUserblock.test_create_blocksize@  s   S999	Q-s333GGIIIIAGGIIIIC888	Q-s333GGIIIIAGGIIIIC888	Q-s333GGIIIIAGGIIIIz** 	; 	;E::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s5   A A,C CD2 2E%%FFFc                    |                                  }t          |d          }|                                 |                     t                    5  t          j        |dd          }ddd           n# 1 swxY w Y   |                     t                    5  t          j        |dd          }ddd           dS # 1 swxY w Y   dS )z# User block only allowed for write r   r   r  r  NrI   )r   r   r.   r#   rF   r   r&   r   r(   s      r)   test_write_onlyzTestUserblock.test_write_onlyW  s8   {{}}sOO				z** 	9 	9	$C888A	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 z** 	: 	:	$S999A	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   A77A;>A;CCCc                    |                                  }t          |dd          }|                                 |                     t                    5  t          |dd          }ddd           n# 1 swxY w Y   t          |dd          }	 |                     |j        d           |                                 dS # |                                 w xY w)zA User block size must match that of file when opening for append r   r  r  r9   r   N)r   r   r.   r#   rF   r   r  r  s      r)   test_match_existingz!TestUserblock.test_match_existingc  s   {{}}s3///				z** 	5 	5T3t444A	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 s3///	Q-s333GGIIIIIAGGIIIIs   A44A8;A8C Cc                    |                                  }|                     t                    5  t          |dd          }ddd           n# 1 swxY w Y   |                     t                    5  t          |dd          }ddd           n# 1 swxY w Y   |                     t                    5  t          |dd          }ddd           dS # 1 swxY w Y   dS )z7 User block size must be a power of 2 and at least 512 r      r  Ni  i  )r   r#   rF   r   r  s      r)   test_power_of_twozTestUserblock.test_power_of_twor  s   {{}}z** 	4 	4T3s333A	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 z** 	4 	4T3s333A	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 z** 	5 	5T3t444A	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s5   AAA3BBB7CCCc                    |                                  }t          |dd          }|                    d           |                                 t	          |d          }	 |                    d           |                                 n# |                                 w xY wt          j        |d          }	 d|v sJ 	 |                                 n# |                                 w xY wt	          |d          }	 |                     |                    d          d           |                                 d	S # |                                 w xY w)
z= Test that writing to a user block does not destroy the file r   r  r  Foobarzr+bs   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXr   rbN)	r   r   r-   r.   r!   r"   r   r   read)r&   r   r(   pyfiles       r)   test_write_blockzTestUserblock.test_write_block  s(   {{}}s3///	x   				dE""	LL$$$LLNNNNFLLNNNNIdC  	q=====GGIIIIAGGIIIIdD!!	V[[--z:::LLNNNNNFLLNNNNs$   !B B!:C C, )D? ?EN)	rQ   rR   rS   rT   r  r  r  r  r"  rZ   r3   r)   r  r  :  si         ; ; ;.
: 
: 
:  5 5 5    r3   r  c                       e Zd ZdZd ZdS )TestContextManagerzC
        Feature: File objects can be used as context managers
    c                     t          |                                 d          5 }|                     |           ddd           n# 1 swxY w Y   |                     |            dS )z- File objects can be used in with statements r   N)r   r   r   r   s     r)   test_context_managerz'TestContextManager.test_context_manager  s    $++--%% 	!OOC   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!C     s   AA	A	N)rQ   rR   rS   rT   r&  rZ   r3   r)   r$  r$    s-         ! ! ! ! !r3   r$  z#Filesystem unicode support requiredc                   $    e Zd ZdZd Zd Zd ZdS )TestUnicodez6
        Feature: Unicode filenames are supported
    c                 >   |                      t          d                    }t          |d          }	 |                     |j        |           |                     |j        t                     |                                 dS # |                                 w xY w)zM Unicode filenames can be used, and retrieved properly via .filename
           prefixr   N)r   chrr   r   filenameassertIsInstancestrr.   r0   s      r)   test_unicodezTestUnicode.test_unicode  s     3v;;//5#	S\5111!!#,444IIKKKKKCIIKKKKs   ;B Bc                     |                      t          d                    }t          |d          5  	 ddd           n# 1 swxY w Y   t          j                            |          sJ dS )zG Unicode filenames can be used, and seen correctly from python
        r*  r+  r   N)r   r-  r   r   r   r   rL   s     r)   #test_unicode_hdf5_python_consistentz/TestUnicode.test_unicode_hdf5_python_consistent  s     3v;;//% 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	w~~e$$$$$$$s   AA	Ac                 V   |                      t          d                    }|                     t                    5  t	          |d           ddd           n# 1 swxY w Y   |                     t                    5  t	          |d           ddd           dS # 1 swxY w Y   dS )zV
        Modes 'r' and 'r+' do not create files even when given unicode names
        r*  r+  r   NrI   )r   r-  r#   r$   r   rL   s     r)   test_nonexistent_file_unicodez)TestUnicode.test_nonexistent_file_unicode  s    3v;;//w'' 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	w'' 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AA"A BB"%B"N)rQ   rR   rS   rT   r1  r3  r5  rZ   r3   r)   r(  r(    sK         	 	 	% % %    r3   r(  c                   $    e Zd ZdZd Zd Zd ZdS )TestFilePropertyzk
        Feature: A File object can be retrieved from any child object,
        via the .file property
    c                     |                                  }t          |d          }	 |d         j        }|                     ||           |                                 dS # |                                 w xY w)z, File object can be retrieved from subgroup r   r   N)r   r   r   r   r.   )r&   r'   hfilehfile2s       r)   test_propertyzTestFileProperty.test_property  sg    UC  	3Z_FUF+++KKMMMMMEKKMMMMs   #A A5c                 F   |                                  }t          |d          }|                    d          }|j        }|d         j        }|                                 |                     |           |                     |           |                     |           dS )z8 All retrieved File objects are closed at the same time r   r,   r   N)r   r   r-   r   r.   rE   )r&   r'   r9  grpr:  hfile3s         r)   
test_closezTestFileProperty.test_close  s    UC    ''s        r3   c                    t          |                                 d          }	 |                    d          }|                     |j        j        |j                   |                                 dS # |                                 w xY w)z9 Retrieved File objects have a meaningful mode attribute r   r,   N)r   r   r-   r   r   r   r.   )r&   r9  r=  s      r)   	test_modezTestFileProperty.test_mode  sp    T[[]]C((	$$U++CSX]EJ777KKMMMMMEKKMMMMs   :A4 4B
N)rQ   rR   rS   rT   r;  r?  rA  rZ   r3   r)   r7  r7    sK         
  
! 
! 
!    r3   r7  c                   $    e Zd ZdZd Zd Zd ZdS )	TestClosez*
        Feature: Files can be closed
    c                     t          |                                 d          }|                     |           |                                 |                     |           dS )z Close file via .close method r   N)r   r   r   r.   rE   r   s     r)   r?  zTestClose.test_close  sR    4;;==#&&		r3   c                    t          |                                 d          }|                                 |                     t                    5  |                    d           ddd           dS # 1 swxY w Y   dS )z0 Trying to modify closed file raises ValueError r   r,   N)r   r   r.   r#   rF   r-   r   s     r)   test_closed_filezTestClose.test_closed_file   s    4;;==#&&		z** 	$ 	$U###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   A44A8;A8c                     |                                  }t          j        |d          }|                    d           |                                 |                                 d S )Nr   test)r   r   r   r-   r.   r%   s      r)   "test_close_multiple_default_driverz,TestClose.test_close_multiple_default_driver  sP    IeS!!	v										r3   N)rQ   rR   rS   rT   r?  rF  rI  rZ   r3   r)   rC  rC    sK           $ $ $    r3   rC  c                       e Zd ZdZd ZdS )	TestFlushz+
        Feature: Files can be flushed
    c                     t          |                                 d          }|                                 |                                 dS )z Flush via .flush method r   N)r   r   flushr.   r   s     r)   
test_flushzTestFlush.test_flush  s7    4;;==#&&				r3   N)rQ   rR   rS   rT   rN  rZ   r3   r)   rK  rK    s-             r3   rK  c                       e Zd ZdZd ZdS )TestReprzE
        Feature: File objects provide a helpful __repr__ string
    c                    t          |                                 d          }|                     t          |          t                     |                                 |                     t          |          t                     dS )z8 __repr__ behaves itself when files are open and closed r   N)r   r   r/  reprr0  r.   r   s     r)   	test_reprzTestRepr.test_repr"  sd    4;;==#&&d3ii---		d3ii-----r3   N)rQ   rR   rS   rT   rS  rZ   r3   r)   rP  rP    s-         . . . . .r3   rP  c                       e Zd ZdZd ZdS )TestFilenamezO
        Feature: The name of a File object can be retrieved via .filename
    c                     |                                  }t          |d          }	 |                     |j        |           |                     |j        t
                     |                                 dS # |                                 w xY w)z, .filename behaves properly for string data r   N)r   r   r   r.  r/  r0  r.   r0   s      r)   test_filenamezTestFilename.test_filename0  sv    5#	S\5111!!#,444IIKKKKKCIIKKKKs   ;A7 7BN)rQ   rR   rS   rT   rW  rZ   r3   r)   rU  rU  *  s-             r3   rU  c                       e Zd ZdZd Zd ZdS )!TestCloseInvalidatesOpenObjectIDszO
        Ensure that closing a file invalidates object IDs, as appropriate
    c                    t          |                                 d          5 }|                    d          }|                     t	          |j                             |                     t	          |j                             |                                 |                     t	          |j                             |                     t	          |j                             ddd           n# 1 swxY w Y   t          |                                 d          5 }|                    d          }|                     t	          |j                             |                     t	          |j                             |                     t	          |j                             |                     t	          |j                             ddd           dS # 1 swxY w Y   dS )z; Closing a file invalidates any of the file's open objects r   r,   N)r   r   r-   r   boolrk   r.   rE   )r&   r   g1r   g2s        r)   r?  z,TestCloseInvalidatesOpenObjectIDs.test_closeA  s   $++--%% 	*''BOODKK(((OODKK(((HHJJJT"%[[)))T"%[[)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* $++--%% 	*''BOODKK(((OODKK(((T"%[[)))T"%[[)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s%   CC55C9<C9"B2G!!G%(G%c                    |                                  }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          |          }t          |          }|d         }|d         }|j        j        sJ |j        j        sJ |                                 |j        j        rJ |j        j        sJ |j        j        sJ |                                 |j        j        rJ |j        j        rJ d S )Nr   r,   )r   r   r-   rk   validr.   )r&   r'   r(   r   r   r\  r]  s          r)   test_close_one_handlez7TestCloseInvalidatesOpenObjectIDs.test_close_one_handleQ  s6   % 	"NN5!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" %[[%[[YYu{{u{{



5;u{{u{{



5;5;s   AAAN)rQ   rR   rS   rT   r?  r`  rZ   r3   r)   rY  rY  ;  s<         * * *     r3   rY  c                       e Zd ZdZd Zd ZdS )TestPathlibSupportz6
        Check that h5py doesn't break on pathlib
    c                     t                      5 }t          j        |          }t          |d          5 }|                     d           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z- Check that pathlib is accepted by h5py.File r   TN)r	   pathlibPathr   r   )r&   r(   r   r   s       r)   test_pathlib_accepted_filez-TestPathlibSupport.test_pathlib_accepted_filel  s     	&!<??DdC &B%%%& & & & & & & & & & & & & & &	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s4   %A.A
A.A	A.A	A..A25A2c                 d   t                      5 }t          j        |          }t          |d          5 }|j        }ddd           n# 1 swxY w Y   t          |d          5 }|j        }ddd           n# 1 swxY w Y   |                     ||           ddd           dS # 1 swxY w Y   dS )z1 Check that using pathlib does not affect naming r   N)r	   rd  re  r   r.  r   )r&   r(   r   h5f1pathlib_nameh5f2normal_names          r)   test_pathlib_name_matchz*TestPathlibSupport.test_pathlib_name_matchs  s`    	8!<??DdC -D#}- - - - - - - - - - - - - - -a ,"m, , , , , , , , , , , , , , ,\;777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8sW   %B%AB%A	B%A	B%#A7+B%7A;	;B%>A;	?B%%B),B)N)rQ   rR   rS   rT   rf  rl  rZ   r3   r)   rb  rb  g  s<         & & &8 8 8 8 8r3   rb  c                       e Zd ZdZd ZdS )
TestPicklez%Check that h5py.File can't be pickledc                    t          |                                 d          5 }|                     t                    5  t	          j        |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   )r   r   r#   r   pickledumps)r&   r   s     r)   test_dump_errorzTestPickle.test_dump_error  s    $++--%% 	!""9-- ! !R   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s4   A7AA7A#	#A7&A#	'A77A;>A;N)rQ   rR   rS   rT   rr  rZ   r3   r)   rn  rn  ~  s)        //! ! ! ! !r3   rn  c                   &    e Zd Zd Zd Zd Zd ZdS )TestMPIc                     ddl m} t          |dd|j                  5 }|sJ |j        dk    sJ 	 ddd           dS # 1 swxY w Y   dS z MPIO driver and options r   MPIr   mpior   commNmpi4pyrx  r   
COMM_WORLDr   r&   mpi_file_namerx  r(   s       r)   	test_mpiozTestMPI.test_mpio      -V#.III 	&QHH18v%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&   ?AAc                     ddl m} t          |dd|j                  5 }|sJ |j        dk    sJ 	 ddd           dS # 1 swxY w Y   dS )z& Testing creation of file with append r   rw  r9   ry  rz  Nr|  r  s       r)   test_mpio_appendzTestMPI.test_mpio_append  r  r  c                     ddl m} t          |dd|j                  5 }|j        rJ d|_        |j        sJ 	 ddd           dS # 1 swxY w Y   dS )z$ Enable atomic mode for MPIO driver r   rw  r   ry  rz  TN)r}  rx  r   r~  atomicr  s       r)   test_mpi_atomiczTestMPI.test_mpi_atomic  s    -V#.III 	Qx<AH8OO8O	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     ddl m} t          |dd|j                  }|                    t                                 |                                 |                                 dS rv  )r}  rx  r   r~  r-   r
   r.   r  s       r)   test_close_multiple_mpio_driverz'TestMPI.test_close_multiple_mpio_driver  s`    FHHH	y{{###										r3   N)rQ   rR   rS   r  r  r  r  rZ   r3   r)   rt  rt    sP        & & && & &      r3   rt  c                       e Zd ZdZd Zd ZdS )TestSWMRModez=
        Feature: Create file that switches on SWMR mode
    c                 2   |                                  }t          |dd          }|                    d          }|j        |j        j        cxk    rdk    sn J d|_        |j        |j        j        cxk    rdk    sn J |                                 d S )Nr   r   r   r,   rI   T)r   r   r-   r   r   	swmr_moder.   r&   r'   r1   gs       r)   test_file_mode_generalizesz'TestSWMRMode.test_file_mode_generalizes  s    5#h///U##x16;....$...... x16;....$......		r3   c                 2   |                                  }t          |dd          }|                    d          }|j        |j        j        cxk    rdk    sn J d|_        |j        |j        j        cxk    rdk    sn J |                                 d S )Nr   r   r   r,   FT)r   r   r-   r  r   r.   r  s       r)   test_swmr_mode_consistencyz'TestSWMRMode.test_swmr_mode_consistency  s    5#h///U##} 09999E999999} 08888D888888		r3   N)rQ   rR   rS   rT   r  r  rZ   r3   r)   r  r    s<         
 
 
    r3   r  HDF5_USE_FILE_LOCKINGz&HDF5_USE_FILE_LOCKING env. var. is setc                   $    e Zd ZdZd Zd Zd ZdS )TestFileLockingz"Test h5py.File file locking optionc                 "   |t          d          z  }t          j        |dd          5 }|                                 t	          j        t                    5  t          j        |dd          5 }	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j        |dd          5 }	 ddd           n# 1 swxY w Y   t          j        j        dk     r1t          j        |dd	          5 }	 ddd           n# 1 swxY w Y   nat	          j        t                    5  t          j        |dd	          5 }	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )
z2Test file locking when opening twice the same file	test{}.h5r   Tr   lockingr   FNr   best-effort)	r
   r   r   rM  r   r   r$   r   r   )r&   tmp_pathr'   r(   h5f_reads        r)   test_reopenzTestFileLocking.test_reopen  s,   9[111Yu3555 	GGIII w''  Yu3>>> (                             5sD999 X               |.;;Yu3FFF (               ]7++  5sMJJJ h                            	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   .FB0A>2B>BBBB	FB	FB	F7C9FC			FC		/F<D
>F
D	FD	F/E,E	E,EE,EE, F,E0	0F3E0	4FFFc                     |t          d          z  }t          j        t                    5  t	          j        |dd          5 }	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z&Test with erroneous file locking valuer  r   zunsupported-valuer  N)r
   r   r   rF   r   r   )r&   r  r'   r  s       r)   test_unsupported_lockingz(TestFileLocking.test_unsupported_locking  s    9[111]:&& 	 	5s4GHHH H              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   A*AA*A	A*A	A**A.1A.c                    |t          d          z  }t          |dd          5 }d|d<   ddd           n# 1 swxY w Y   t          j        d          }t	          |d	          5 }t          |d
d          5 }|                    t          |dd          }|                    d           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z<Test file locking option from different concurrent processesr  r   Tr  r   dataNspawn)
mp_contextmax_workersr   F
   )timeout)r
   r   multiprocessingget_contextr   submitopen_and_closeresult)r&   r  r'   r(   ctxexfutures          r)   test_multiprocessz!TestFileLocking.test_multiprocess  s   9[111 %c4000 	AAfI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )'223A>>>	&BDS%000	&45 YY~u3YMMFMM"M%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&sB   7;;'C:5B;/C;B?	?CB?	CCCN)rQ   rR   rS   rT   r  r  r  rZ   r3   r)   r  r    sI         -,  0  & & & & &r3   r  c                  R    t          | i |5  	 ddd           dS # 1 swxY w Y   dS )z1Open and close HDF5 file, for use in a subprocessNr   )argskwargss     r)   r  r     s|    	t	v		                   s     r   r   zlocking_arg,file_locking_props))F)r   r   )T)r   r   )r  )r   r   c                    | t          d          z  }| t          d          z  }t          j        |d          5 }d|d<   ddd           n# 1 swxY w Y   t          j        |d          5 }t          j        |d          |d<   ddd           n# 1 swxY w Y   t          j        |d	|
          5 }|j                                                                        }||k    sJ |d         }|j        j                                                                        }||k    sJ 	 ddd           dS # 1 swxY w Y   dS )z5Test that same file locking is used for external linkztest_main{}.h5ztest_linked{}.h5r   r   r  Nz/datalinkr   )r  )r
   r   r   r   rk   r   get_file_lockingr   )	r  locking_argfile_locking_props
fname_mainfname_elinkr(   locking_infoelink_datasetelink_locking_infos	            r)   test_file_locking_external_linkr    s   $ I&6777JY'9:::K 
;	$	$ &	              	:s	#	# <q%k7;;&	< < < < < < < < < < < < < < < 
:sK	8	8	8 8At,,..??AA11111 &	*/2CCEEVVXX!%7777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s6   AAA,BBB3A4D55D9<D9c                    | t          d          z  }t          j        |d          5 }t          d          D ]}g |t	          |          <   	 d d d            n# 1 swxY w Y   t          d          D ]c}t          j        |d          5 }d |                                D             }|                    |           ~d d d            n# 1 swxY w Y   dd S )Nr  r   r_   r  r   c                     g | ]	}|j         
S rZ   )rk   ).0ds     r)   
<listcomp>z!test_close_gc.<locals>.<listcomp>8  s    ---QAD---r3   )r
   r   r   ranger0  valuesappend)r  r.  r(   irefss        r)   test_close_gcr  +  sY   )K000H	8S	!	! Qs 	 	AAc!ffII	               2YY  Yx%% 	--!((**---DKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s#   %AA!A5CC	C	c                    t          d          t          d          fd}| t          d          z  } ||           t          j        d           | t          d          z  } ||           t          |                                                                          t          |                                                                          k    sJ d S )Nrd   re   c                     t          | dd          5 }|                    d          }|                    dd           d d d            d S # 1 swxY w Y   d S )Nr   T)track_orderr  f4)shaperh   )r   r-   rj   )r   hfr  rd   re   s      r)   r"   z%test_reproducible_file.<locals>.writeB  s    $... 	6"t44AQb555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   0AAAzf1{}.h5g?zf2{}.h5)r
   timesleepr   
read_bytes	hexdigest)r  r"   r   r   rd   re   s       @@r)   test_reproducible_filer  =  s    #A#A6 6 6 6 6 6
 
Ii((	(B	E"IIIJsOOO	Ii((	(B	E"III"--//"",,..&2I2I2S2S2U2UUUUUUUr3   ):rT   r  r   r   rp  r   r  rX   concurrent.futuresr   hashlibr   r   commonr   r   r   r	   r
   h5py._hl.filesr   r   r   rd  r   r\   rU   mpi_skiprs   r   r   rV   r   r   r   r  r$  r  r(  r7  rC  rK  rP  rU  rY  rb  rn  mpirt  r  environr  r  parametrizer  r  slowr  rZ   r3   r)   <module>r     s*        				     



 2 2 2 2 2 2        O O O O O O O O O O O O O O % % % % % %        |, |, |, |, |,8 |, |, |,~' ' ' ' ' ' ' 'T IB IB IB IB IB IB IB IBX( ( ( ( ( ( ( (VZ Z Z Z Z( Z Z Z~ L#A&!+ 0L#A&*a/+   
O O O O OH O O 
Od] ] ] ] ]H ] ] ]@
! 
! 
! 
! 
! 
! 
! 
!   "GHH! ! ! ! !( ! ! IH!H$ $ $ $ $x $ $ $N       8
 
 
 
 
 
 
 
. . . . .x . . .    8   ") ) ) ) ) ) ) )X8 8 8 8 8 8 8 8.! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !H    8   : +rz9C  E E1& 1& 1& 1& 1& 1& 1&E E1&h   L#j0$    rz)3    $   8 8 	 	  8*  $ V V V V Vr3   