o
    gi                     @   s  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
 d
eZG dd deZejjG dd deZG dd deZG dd deZejjej j!d dkoej j!d d dkddG dd deZ"G dd deZ#G dd deZ$e%e d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+G d)d* d*eZ,G d+d, d,eZ-G d-d. d.eZ.ejj/G d/d0 d0Z0G d1d2 d2eZ1ejjd3ej2v d4dG d5d6 d6Z3d7d8 Z4ejjej j!d9k d:dejjd3ej2v d4dej5d;g d<d=d> Z6d?d@ Z7ejj8dAdB Z9dS )Cz`
    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                   @   s|   e Zd ZdZdd Zdd Zdd Zdd	 Zej	j
ed
dko$ejdkdddd Zdd Zdd Zdd Zdd ZdS )TestFileOpenz=
        Feature: Opening files with Python-style modes.
    c              
   C   sb  |   }tt t| W d   n1 sw   Y  W d   n1 s(w   Y  t|d W d   n1 s=w   Y  t|tj z)t|}| 	| | 
|jd W d   n1 sew   Y  W t|tj nt|tj w t|d}|d W d   n1 sw   Y  | t t| W d   dS 1 sw   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f r&   R/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/h5py/tests/test_file.pytest_default)   s0   


 
"zTestFileOpen.test_defaultc                 C   sP   |   }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$   fidr&   r&   r'   test_createC   s   



zTestFileOpen.test_createc                 C   s^   |   }t|d}| | |  | t t|d W d   dS 1 s(w   Y  dS )z( Mode 'w-' opens file in exclusive mode w-N)r   r   r   r+   r    FileExistsErrorr-   r&   r&   r'   test_create_exclusiveN   s   

"z"TestFileOpen.test_create_exclusivec                 C   s   |   }t|d}z| | |d d|v sJ W |  n|  w t|d}zd|v s1J |d d|v s<J W |  dS |  w )zE Mode 'a' opens file in append/readwrite mode, creating if necessary ar)   barN)r   r   r   r*   r+   r-   r&   r&   r'   test_appendW   s   




zTestFileOpen.test_appendCIBUILDWHEEL1linuxz7Linux docker cibuildwheel environment permissions issuereasonc                 C   s   |   }t|d}|d W d   n1 sw   Y  t|tj z4tt	 t|d W d   n1 s;w   Y  W t|tjtj
B  dS W t|tjtj
B  dS t|tjtj
B  w )z' Mode 'a' fails when file is read-only r3   r)   N)r   r   r*   r   r   r   r   r   r   PermissionErrorr   r-   r&   r&   r'   test_append_permissionsk   s   .z$TestFileOpen.test_append_permissionsc                 C   sx   |   }t|d}|  | | t|d}| | | t |d W d   n1 s1w   Y  |  dS )z& Mode 'r' opens file in readonly mode r   r   r)   N)r   r   r+   assertFalser   r    
ValueErrorr*   r-   r&   r&   r'   test_readonly|   s   



zTestFileOpen.test_readonlyc                 C   s\   |   }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+r4   N)r   r   r*   r+   r-   r&   r&   r'   test_readwrite   s   



zTestFileOpen.test_readwritec                 C   sv   |   }| t t|d W d   n1 sw   Y  | t t|d W d   dS 1 s4w   Y  dS )z( Modes 'r' and 'r+' do not create files r   Nr@   )r   r    r   r   r#   r$   r&   r&   r'   test_nonexistent_file   s   "z"TestFileOpen.test_nonexistent_filec                 C   s>   |  t t|  d W d   dS 1 sw   Y  dS )z  Invalid modes raise ValueError mongooseN)r    r>   r   r   )r#   r&   r&   r'   test_invalid_mode   s   "zTestFileOpen.test_invalid_modeN)__name__
__module____qualname____doc__r(   r/   r2   r5   r   markskipifr   getenvsysplatformr<   r?   rA   rC   rE   r&   r&   r&   r'   r   #   s    	
r   c                   @      e Zd ZdZdd ZdS )TestSpaceStrategyzE
        Feature: Create file with specified file space strategy
    c           	      C   s^  |   }t|ddddd}| | | t t|ddd W d   n1 s)w   Y  | t t|   dd	d W d   n1 sGw   Y  td
}td}td}|j|ddd}d|d< |j|ddd}d|d< ||= |  t|d}|j	 }|
 }|d dksJ |d dksJ |d dksJ |j|ddd}d|d< |  dS )z& Create file with file space strategy r   pageTd   )fs_strategy
fs_persistfs_thresholdr3   )rS   Ninvalidxyz)rR   uint8)dtyper   .r      )r   r   r   r    r>   r	   create_datasetr+   idget_create_plistget_file_space_strategy)	r#   r$   r.   rW   rX   rY   dsetplistfs_stratr&   r&   r'   test_create_with_space_strategy   s:   


z1TestSpaceStrategy.test_create_with_space_strategyN)rF   rG   rH   rI   rd   r&   r&   r&   r'   rP          rP   c                   @   s   e Zd ZdZdd Zdd Zejje	j
jdkddd	d
 Zejje	j
jdk dddd Zejje	j
jdk dddd Zdd ZdS )TestPageBufferingz)
        Feature: Use page buffering
    c                 C   s   |   }t|dddd W d   n1 sw   Y  | t t|ddd W d   n1 s3w   Y  | t t|dddd W d   n1 sPw   Y  | t t|dddd W d   dS 1 snw   Y  dS )	z;Allow page buffering only with fs_strategy="page".
        r   rQ    @  )r   rS   page_buf_sizeNr   rh   fsm	aggregater   r   r    r!   rB   r&   r&   r'   test_only_with_page_strategy   s   "z.TestPageBuffering.test_only_with_page_strategyc                 C   sn   |   }d}d}d}t|dd|||d}|j }| | |||f W d   dS 1 s0w   Y  dS )zHVerify set page buffer size, and minimum meta and raw eviction criteria.rg      C   r   rQ   )r   rS   rh   min_meta_keepmin_raw_keepNr   r   r^   get_access_plistr   get_page_buffer_size)r#   r$   pbsmmmrr%   faplr&   r&   r'   test_check_page_buf_size   s   
"z*TestPageBuffering.test_check_page_buf_size)r         zRequires HDF5 <= 1.14.3r9   c                 C   s~   |   }d}t|dd|d W d   n1 sw   Y  | t t|d|d d W d   dS 1 s8w   Y  dS )	z;Page buffer size must be greater than file space page size.rg   r   rQ   r   rS   fs_page_sizeNr   r   ri   rl   )r#   r$   fspr&   r&   r'   test_too_small_pbs   s   "z$TestPageBuffering.test_too_small_pbsr   rz      Requires HDF5 >= 1.14.4c                 C   s   |   }d}t|dd W d   n1 sw   Y  t|d|d}|j }| d dks3J W d   dS 1 s>w   Y  dS )z(Open non-PAGE file with page buffer set.rg   r   )r   Nr   ri   r   r   r   r^   rs   rt   r#   r$   r~   r%   rx   r&   r&   r'   test_open_nonpage_pbs   s   
"z'TestPageBuffering.test_open_nonpage_pbsc                 C   s   |   }d}t|dd|d W d   n1 sw   Y  t|d|d d}|j }| d	 |ks7J W d   dS 1 sBw   Y  dS )
zBAdjust page buffer size automatically when smaller than file page.rg   r   rQ   r|   Nr   rR   ri   r   r   r   r&   r&   r'   test_smaller_pbs  s   
"z"TestPageBuffering.test_smaller_pbsc                 C   s   |   }d}d| }t|dd|d W d   n1 sw   Y  t|d|d d	}|j }| | d
 | W d   dS 1 sFw   Y  dS )zVerify actual page buffer size.rg   r\   r   rQ   r|   Nr   r   ri   r   rr   )r#   r$   r~   ru   r%   rx   r&   r&   r'   test_actual_pbs  s   
"z!TestPageBuffering.test_actual_pbsN)rF   rG   rH   rI   rm   ry   r   rJ   rK   h5pyversionhdf5_version_tupler   r   r   r   r&   r&   r&   r'   rf      s"    
	



rf   c                   @       e Zd ZdZdd Zdd ZdS )	TestModesz?
        Feature: File mode can be retrieved via file.mode
    c                 C   s~   |   }t|d}| |jd W d   n1 sw   Y  t|d}| |jd W d   dS 1 s8w   Y  dS )z/ Mode equivalent can be retrieved via property r   r@   Nr   )r   r   r   r   r"   r&   r&   r'   test_mode_attr  s   "zTestModes.test_mode_attrc                 C   s   |   }|   }t|d}|  t|d}zt|d|d< |d j}| |jd W |  |  n	|  |  w t|d}z|d j}| |jd W |  |  dS |  |  w )zU Mode property works for files opened via external links

        Issue 190.
        r   /Externalr@   r   N)r   r   r+   r   ExternalLinkfiler   r   )r#   fname1fname2f1f2f3r&   r&   r'   test_mode_external'  s*   







zTestModes.test_mode_externalN)rF   rG   rH   rI   r   r   r&   r&   r&   r'   r     s    r   c                   @   s   e Zd ZdZeejdkddd Zee	ddd Z
eejdkd	d
d Zdd Zdd Zdd Zdd Zdd Zd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                 C   h   t |  ddd}| | | |jd |  t |  ddd}| | | |jd |  dS )z$ Stdio driver is supported on posix r   stdiodriverr3   Nr   r   r   r   r   r+   r#   r.   r&   r&   r'   
test_stdioK     

zTestDrivers.test_stdiozODIRECT driver is supported on Linux if hdf5 is built with the appriorate flags.c           
   	   C   sZ  t |  ddd}| | | |jd |j  }|  t |  ddd}| | | |jd |  ||d |d d|d  f|d d |d d|d  f|d d|d  d	|d  ffD ]F\}}}t |  dd|||d
-}|j  }|d }|d }|d }	||ksJ ||ksJ |	|	ksJ W d   n1 sw   Y  qddS )z$ DIRECT driver is supported on Linuxr   directr   r3   r   r   r{   r\      )r   	alignment
block_size	cbuf_sizeN)	r   r   r   r   r   r^   rs   get_fapl_directr+   )
r#   r.   default_faplr   r   r   actual_faplactual_alignmentactual_block_sizeactual_cbuf_sizer&   r&   r'   test_directY  s<   

zTestDrivers.test_directz!Sec2 driver is supported on posixc                 C   r   )z# Sec2 driver is supported on posix r   sec2r   r3   Nr   r   r&   r&   r'   	test_sec2  r   zTestDrivers.test_sec2c                 C   s   |   }t|dddd}| | | |jd |  | tj	| t|   ddd}| | | |jd |  dS )z- Core driver is supported (no backing store) r   coreFr   backing_storer3   r   N)
r   r   r   r   r   r+   r=   r   pathexistsr-   r&   r&   r'   	test_core  s   

zTestDrivers.test_corec                 C   s   |   }t|dddd}|d |  t|d}d|v s J |  | t t|ddd W d   dS 1 s<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    	TypeErrorr-   r&   r&   r'   test_backing  s   

"zTestDrivers.test_backingc                 C   s   |   }t|d}|d |  t|ddd}| | d|v s$J | t |d W d   n1 s9w   Y  |  dS )z0 Core driver can be used to open existing files r   r)   r   r   r   r4   N)r   r   r*   r+   r   r    r>   r-   r&   r&   r'   r?     s   


zTestDrivers.test_readonlyc                 C   s0   |   }t|ddddd}| | |  dS )z* Core driver supports variable block size r   r      F)r   r   r   N)r   r   r   r+   r-   r&   r&   r'   test_blocksize  s   

zTestDrivers.test_blocksizec                 C   sX   |   }t|ddd}|  | tj|d  t|d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   r-   r&   r&   r'   
test_split  s   
zTestDrivers.test_splitc                 C   sz   t  }t|ddd}| | | |jd |  | t t|ddd W d   n1 s2w   Y  |  dS )z( Python file object driver is supported r   fileobjr   r   N)	tempfileTemporaryFiler   r   r   r   r+   r    r>   )r#   tfr.   r&   r&   r'   test_fileobj  s   
zTestDrivers.test_fileobjN)rF   rG   rH   rI   r   
skipUnlessr   namer   r
   r   r   r   r   r?   r   r   r   r&   r&   r&   r'   r   D  s     

/

r   r\   zNot HDF5 release version 1.x.yr9   c                       s   e Zd ZdZe fddZdd Zdd Zdd	 Zd
d Z	e
ejjdk ddd Ze
ejjdk ddd Ze
ejjdk ddd Zdd Zdd Z  ZS )TestNewLibverze
        Feature: File format compatibility bounds can be specified when
        opening a file.
    c                    sV   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r\   r   r   v114v200)super
setUpClassr   r   r   latest)cls	__class__r&   r'   r     s   




zTestNewLibver.setUpClassc                 C   .   t |  d}| |jd| jf |  dS )z Opening with no libver arg r   earliestNr   r   r   libverr   r+   r#   r%   r&   r&   r'   r(        zTestNewLibver.test_defaultc                 C   s4   t |  ddd}| |j| j| jf |  dS )z  Opening with single libver arg r   r   r   Nr   r   r&   r&   r'   test_single  s   zTestNewLibver.test_singlec                 C   2   t |  ddd}| |jd| jf |  dS )z  Opening with "v108" libver arg r   v108r   Nr   r   r&   r&   r'   test_single_v108	     zTestNewLibver.test_single_v108c                 C   r   )z  Opening with "v110" libver arg r   r   r   Nr   r   r&   r&   r'   test_single_v110  r   zTestNewLibver.test_single_v110r   zRequires HDF5 1.11.4 or laterc                 C   r   )z  Opening with "v112" libver arg r   r   r   Nr   r   r&   r&   r'   test_single_v112     zTestNewLibver.test_single_v112)r   rz   r   zRequires HDF5 1.14 or laterc                 C   r   )z  Opening with "v114" libver arg r   r   r   Nr   r   r&   r&   r'   test_single_v114  r   zTestNewLibver.test_single_v114r   zRequires HDF5 2.0 or laterc                 C   r   )z  Opening with "v200" libver arg r   r   r   Nr   r   r&   r&   r'   test_single_v200%  r   zTestNewLibver.test_single_v200c                 C   s,   t |  ddd}| |jd |  dS )z Opening with two libver args r   )r   r   r   N)r   r   r   r   r+   r   r&   r&   r'   test_multiple-  s   zTestNewLibver.test_multiplec                 C   r   )z6 Omitting libver arg results in maximum compatibility r   r   Nr   r   r&   r&   r'   	test_none3  r   zTestNewLibver.test_none)rF   rG   rH   rI   classmethodr   r(   r   r   r   r   skipIfr   r   r   r   r   r   r   r   __classcell__r&   r&   r   r'   r     s,    


r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestUserblockz;
        Feature: Files can be create with user blocks
    c                 C   s   t |  ddd}z| |jd W |  n|  w t |  ddd}z| |jd W |  n|  w t |  ddd}z| |jd W |  n|  w | t t |  ddd W d   dS 1 snw   Y  dS )zA User blocks created with w, w-, x and properties work correctly r0      userblock_sizerW   r   nonN)r   r   r   r   r+   r    r>   r   r&   r&   r'   test_create_blocksize@  s   "z#TestUserblock.test_create_blocksizec                 C   s   |   }t|d}|  | t tj|ddd}W d   n1 s%w   Y  | t tj|ddd}W d   dS 1 sCw   Y  dS )z# User block only allowed for write r   r   r   r   Nr@   )r   r   r+   r    r>   r   r#   r   r%   r&   r&   r'   test_write_onlyW  s   
"zTestUserblock.test_write_onlyc                 C   s   |   }t|ddd}|  | t t|ddd}W d   n1 s&w   Y  t|ddd}z| |jd W |  dS |  w )zA User block size must match that of file when opening for append r   r   r   r3   r   N)r   r   r+   r    r>   r   r   r   r&   r&   r'   test_match_existingc  s   z!TestUserblock.test_match_existingc                 C   s   |   }| t t|ddd}W d   n1 sw   Y  | t t|ddd}W d   n1 s7w   Y  | t t|ddd}W d   dS 1 sTw   Y  dS )z7 User block size must be a power of 2 and at least 512 r      r   Ni  i  )r   r    r>   r   r   r&   r&   r'   test_power_of_twor  s   "zTestUserblock.test_power_of_twoc                 C   s   |   }t|ddd}|d |  t|d}z|d W |  n|  w t|d}zd|v s7J W |  n|  w t|d}z| |dd W |  d	S |  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%   pyfiler&   r&   r'   test_write_block  s    


zTestUserblock.test_write_blockN)	rF   rG   rH   rI   r   r   r   r   r   r&   r&   r&   r'   r   :  s    r   c                   @   rO   )TestContextManagerzC
        Feature: File objects can be used as context managers
    c                 C   sH   t |  d}| | W d   n1 sw   Y  | |  dS )z- File objects can be used in with statements r   N)r   r   r   r   r&   r&   r'   test_context_manager  s   z'TestContextManager.test_context_managerN)rF   rG   rH   rI   r   r&   r&   r&   r'   r     re   r   z#Filesystem unicode support requiredc                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	TestUnicodez6
        Feature: Unicode filenames are supported
    c                 C   sP   | j tdd}t|d}z| |j| | |jt W |  dS |  w )zM Unicode filenames can be used, and retrieved properly via .filename
           prefixr   N)r   chrr   r   filenameassertIsInstancestrr+   r-   r&   r&   r'   test_unicode  s   
zTestUnicode.test_unicodec                 C   sN   | j tdd}t|d W d   n1 s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   rB   r&   r&   r'   #test_unicode_hdf5_python_consistent  s
   z/TestUnicode.test_unicode_hdf5_python_consistentc                 C   s~   | j tdd}| t t|d W d   n1 sw   Y  | t t|d W d   dS 1 s8w   Y  dS )zV
        Modes 'r' and 'r+' do not create files even when given unicode names
        r   r   r   Nr@   )r   r   r    r!   r   rB   r&   r&   r'   test_nonexistent_file_unicode  s   "z)TestUnicode.test_nonexistent_file_unicodeN)rF   rG   rH   rI   r  r  r  r&   r&   r&   r'   r     s
    r   c                   @   r   )	TestFilePropertyzk
        Feature: A File object can be retrieved from any child object,
        via the .file property
    c                 C   sB   |   }t|d}z|d j}| || W |  dS |  w )z, File object can be retrieved from subgroup r   r   N)r   r   r   r   r+   )r#   r$   hfilehfile2r&   r&   r'   test_property  s   

zTestFileProperty.test_propertyc                 C   sV   |   }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+   r=   )r#   r$   r  grpr  hfile3r&   r&   r'   
test_close  s   




zTestFileProperty.test_closec                 C   sD   t |  d}z|d}| |jj|j W |  dS |  w )z9 Retrieved File objects have a meaningful mode attribute r   r)   N)r   r   r*   r   r   r   r+   )r#   r  r
  r&   r&   r'   	test_mode  s
   
zTestFileProperty.test_modeN)rF   rG   rH   rI   r	  r  r  r&   r&   r&   r'   r    s
    
r  c                   @   r   )		TestClosez*
        Feature: Files can be closed
    c                 C   s.   t |  d}| | |  | | dS )z Close file via .close method r   N)r   r   r   r+   r=   r   r&   r&   r'   r    s   
zTestClose.test_closec                 C   sP   t |  d}|  | t |d W d   dS 1 s!w   Y  dS )z0 Trying to modify closed file raises ValueError r   r)   N)r   r   r+   r    r>   r*   r   r&   r&   r'   test_closed_file   s
   "zTestClose.test_closed_filec                 C   s2   |   }t|d}|d |  |  d S )Nr   test)r   r   r   r*   r+   r"   r&   r&   r'   "test_close_multiple_default_driver  s
   
z,TestClose.test_close_multiple_default_driverN)rF   rG   rH   rI   r  r  r  r&   r&   r&   r'   r    s
    r  c                   @   rO   )	TestFlushz+
        Feature: Files can be flushed
    c                 C   s"   t |  d}|  |  dS )z Flush via .flush method r   N)r   r   flushr+   r   r&   r&   r'   
test_flush  s   zTestFlush.test_flushN)rF   rG   rH   rI   r  r&   r&   r&   r'   r    re   r  c                   @   rO   )TestReprzE
        Feature: File objects provide a helpful __repr__ string
    c                 C   s:   t |  d}| t|t |  | t|t dS )z8 __repr__ behaves itself when files are open and closed r   N)r   r   r  reprr  r+   r   r&   r&   r'   	test_repr"  s   zTestRepr.test_reprN)rF   rG   rH   rI   r  r&   r&   r&   r'   r    re   r  c                   @   rO   )TestFilenamezO
        Feature: The name of a File object can be retrieved via .filename
    c                 C   sH   |   }t|d}z| |j| | |jt W |  dS |  w )z, .filename behaves properly for string data r   N)r   r   r   r   r  r  r+   r-   r&   r&   r'   test_filename0  s   
zTestFilename.test_filenameN)rF   rG   rH   rI   r  r&   r&   r&   r'   r  *  re   r  c                   @   r   )!TestCloseInvalidatesOpenObjectIDszO
        Ensure that closing a file invalidates object IDs, as appropriate
    c                 C   s   t |  d1}|d}| t|j | t|j |  | t|j | t|j W d   n1 s;w   Y  t |  d.}|d}| t|j | t|j | t|j | t|j W d   dS 1 sxw   Y  dS )z; Closing a file invalidates any of the file's open objects r   r)   N)r   r   r*   r   boolr^   r+   r=   )r#   r   g1r   g2r&   r&   r'   r  A  s   

"z,TestCloseInvalidatesOpenObjectIDs.test_closec                 C   s   |   }t|d}|d W d    n1 sw   Y  t|}t|}|d }|d }|jjs4J |jjs:J |  |jjrDJ |jjsJJ |jjsPJ |  |jjrZJ |jjr`J d S )Nr   r)   )r   r   r*   r^   validr+   )r#   r$   r%   r   r   r  r  r&   r&   r'   test_close_one_handleQ  s"   z7TestCloseInvalidatesOpenObjectIDs.test_close_one_handleN)rF   rG   rH   rI   r  r  r&   r&   r&   r'   r  ;  s    r  c                   @   r   )TestPathlibSupportz6
        Check that h5py doesn't break on pathlib
    c              	   C   sz   t  0}t|}t|d}| d W d   n1 sw   Y  W d   dS W d   dS 1 s6w   Y  dS )z- Check that pathlib is accepted by h5py.File r   TN)r   pathlibPathr   r   )r#   r%   r   r   r&   r&   r'   test_pathlib_accepted_filel  s   
"z-TestPathlibSupport.test_pathlib_accepted_filec              	   C   s   t  D}t|}t|d}|j}W d   n1 sw   Y  t|d}|j}W d   n1 s4w   Y  | || W d   dS 1 sJw   Y  dS )z1 Check that using pathlib does not affect naming r   N)r   r!  r"  r   r   r   )r#   r%   r   h5f1pathlib_nameh5f2normal_namer&   r&   r'   test_pathlib_name_matchs  s   
"z*TestPathlibSupport.test_pathlib_name_matchN)rF   rG   rH   rI   r#  r(  r&   r&   r&   r'   r   g  s    r   c                   @   rO   )
TestPicklez%Check that h5py.File can't be pickledc              	   C   sx   t |  d+}| t t| W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )Nr   )r   r   r    r   pickledumps)r#   r   r&   r&   r'   test_dump_error  s   "zTestPickle.test_dump_errorN)rF   rG   rH   rI   r,  r&   r&   r&   r'   r)  ~  s    r)  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestMPIc                 C   Z   ddl m} t|dd|jd}|sJ |jdksJ W d   dS 1 s&w   Y  dS z MPIO driver and options r   MPIr   mpior   commNmpi4pyr1  r   
COMM_WORLDr   r#   mpi_file_namer1  r%   r&   r&   r'   	test_mpio  
   "zTestMPI.test_mpioc                 C   r.  )z& Testing creation of file with append r   r0  r3   r2  r3  Nr5  r8  r&   r&   r'   test_mpio_append  r;  zTestMPI.test_mpio_appendc                 C   s^   ddl m} t|dd|jd}|jrJ d|_|jsJ W d   dS 1 s(w   Y  dS )z$ Enable atomic mode for MPIO driver r   r0  r   r2  r3  TN)r6  r1  r   r7  atomicr8  r&   r&   r'   test_mpi_atomic  s   
"zTestMPI.test_mpi_atomicc                 C   s>   ddl m} t|dd|jd}|t  |  |  dS r/  )r6  r1  r   r7  r*   r	   r+   r8  r&   r&   r'   test_close_multiple_mpio_driver  s
   z'TestMPI.test_close_multiple_mpio_driverN)rF   rG   rH   r:  r<  r>  r?  r&   r&   r&   r'   r-    s
    	r-  c                   @   r   )TestSWMRModez=
        Feature: Create file that switches on SWMR mode
    c                 C   sv   |   }t|ddd}|d}|j|jj  krdks!J  J d|_|j|jj  kr2dks5J  J |  d S )Nr   r   r   r)   r@   T)r   r   r*   r   r   	swmr_moder+   r#   r$   r.   gr&   r&   r'   test_file_mode_generalizes  s   
""z'TestSWMRMode.test_file_mode_generalizesc                 C   sv   |   }t|ddd}|d}|j|jj  krdks!J  J d|_|j|jj  kr2dks5J  J |  d S )Nr   r   r   r)   FT)r   r   r*   rA  r   r+   rB  r&   r&   r'   test_swmr_mode_consistency  s   
""z'TestSWMRMode.test_swmr_mode_consistencyN)rF   rG   rH   rI   rD  rE  r&   r&   r&   r'   r@    s    r@  HDF5_USE_FILE_LOCKINGz&HDF5_USE_FILE_LOCKING env. var. is setc                   @   r   )	TestFileLockingz"Test h5py.File file locking optionc              
   C   s  |t d }tj|ddd}|  tt  tj|ddd}W d   n1 s,w   Y  W d   n1 s;w   Y  tj|ddd}W d   n1 sSw   Y  tjjdk rwtj|dd	d}W d   n1 sqw   Y  n5tt  tj|dd	d}W d   n1 sw   Y  W d   n1 sw   Y  W d   dS W d   dS W d   dS 1 sw   Y  dS )
z2Test file locking when opening twice the same file	test{}.h5r   Tr   lockingr   FNr   best-effort)	r	   r   r   r  r   r   r!   r   r   )r#   tmp_pathr$   r%   h5f_readr&   r&   r'   test_reopen  s8    "zTestFileLocking.test_reopenc              	   C   s|   |t d }tt) tj|ddd}W d   n1 sw   Y  W d   dS W d   dS 1 s7w   Y  dS )z&Test with erroneous file locking valuerH  r   zunsupported-valuerI  N)r	   r   r   r>   r   r   )r#   rL  r$   rM  r&   r&   r'   test_unsupported_locking  s   "z(TestFileLocking.test_unsupported_lockingc              	   C   s   |t d }t|ddd}d|d< W d   n1 sw   Y  td}t|dd	7}t|d
dd}|jt|ddd}|jdd W d   n1 sNw   Y  W d   dS W d   dS 1 sfw   Y  dS )z<Test file locking option from different concurrent processesrH  r   TrI  r   dataNspawn)
mp_contextmax_workersr   F
   )timeout)r	   r   multiprocessingget_contextr   submitopen_and_closeresult)r#   rL  r$   r%   ctxexfuturer&   r&   r'   test_multiprocess  s   


Pz!TestFileLocking.test_multiprocessN)rF   rG   rH   rI   rN  rO  r^  r&   r&   r&   r'   rG    s
    rG  c                  O   s4   t | i |	 W d   dS 1 sw   Y  dS )z1Open and close HDF5 file, for use in a subprocessNr   )argskwargsr&   r&   r'   rY     s   "rY  r   r   zlocking_arg,file_locking_props))F)r   r   )T)r   r   )rK  )r   r   c           	      C   s   | t d }| t d }t|d}d|d< W d   n1 s!w   Y  t|d}t|d|d< W d   n1 s?w   Y  tj|d	|d
(}|j  }||ksZJ |d }|jj  }||kslJ W d   dS 1 sww   Y  dS )z5Test that same file locking is used for external linkztest_main{}.h5ztest_linked{}.h5r   r   rP  Nz/datalinkr   )rJ  )r	   r   r   r   r^   rs   get_file_lockingr   )	rL  locking_argfile_locking_props
fname_mainfname_elinkr%   locking_infoelink_datasetelink_locking_infor&   r&   r'   test_file_locking_external_link  s   
"rj  c              	   C   s   | t d }t|d}tdD ]}g |t|< qW d    n1 s$w   Y  tdD ]'}t|d}dd | D }|| ~W d    n1 sOw   Y  q-d S )NrH  r   rR   rT  r   c                 S   s   g | ]}|j qS r&   )r^   ).0dr&   r&   r'   
<listcomp>8  s    z!test_close_gc.<locals>.<listcomp>)r	   r   r   ranger  valuesappend)rL  r   r%   irefsr&   r&   r'   test_close_gc+  s   
rs  c                    sx   t d t d fdd}| t d }|| td | t d }|| t|  t|  ks:J d S )NrW   rX   c                    sR   t | ddd}|j dd}|jddd W d    d S 1 s"w   Y  d S )Nr   T)track_orderrT  f4)shaper[   )r   r*   r]   )r   hfrC  rW   rX   r&   r'   r   B  s   "z%test_reproducible_file.<locals>.writezf1{}.h5g?zf2{}.h5)r	   timesleepr   
read_bytes	hexdigest)rL  r   r   r   r&   rx  r'   test_reproducible_file=  s   
(r}  ):rI   rV  r   r   r*  r   ry  rM   concurrent.futuresr   hashlibr   r   commonr   r   r   r   r	   h5py._hl.filesr
   r   r   r!  r   rP   rJ   mpi_skiprf   r   r   rK   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r)  mpir-  r@  environrG  rY  parametrizerj  rs  slowr}  r&   r&   r&   r'   <module>   s   	*L+  R`$',
$4
