B
    ¬»ˆdÁ  ã               @   s   d dl Zd dlZddlmZmZ e ejjdk d¡G dd„ deƒƒZ	e ejjdkd¡G d	d
„ d
eƒƒZ
e ejjdkd¡G dd„ deƒƒZdS )é    Né   )ÚutÚTestCase)r   é	   é²   z6SWMR is available. Skipping backwards compatible testsc               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestSwmrNotAvailablezÝ Test backwards compatibility behaviour when using SWMR functions with
    an older version of HDF5 which does not have this feature available.
    Skip this test if SWMR features *are* available in the HDF5 library.
    c             C   s8   t  | ¡ t d¡ d¡| _| jjddd| jd| _d S )Né   ÚfÚdata)r   )N)ÚchunksÚmaxshaper
   )	r   ÚsetUpÚnpÚarangeÚastyper
   r	   Úcreate_datasetÚdset)Úself© r   úN/var/www/html/venv/lib/python3.7/site-packages/h5py/tests/test_dataset_swmr.pyr      s    
zTestSwmrNotAvailable.setUpc          	   C   s>   | j j}| j  ¡  |  t¡ tj|ddd| _ W d Q R X d S )NÚrT)Úswmr)r	   ÚfilenameÚcloseÚassertRaisesÚ
ValueErrorÚh5pyÚFile)r   Úfnamer   r   r   Útest_open_swmr_raises   s    
z*TestSwmrNotAvailable.test_open_swmr_raisesc          	   C   s$   |   t¡ | j ¡  W dQ R X dS )zd If the SWMR feature is not available then Dataset.refresh() should throw an AttributeError
        N)r   ÚAttributeErrorr   Úrefresh)r   r   r   r   Útest_refresh_raises   s    z(TestSwmrNotAvailable.test_refresh_raisesc          	   C   s$   |   t¡ | j ¡  W dQ R X dS )zi If the SWMR feature is not available the Dataset.flush() should
        throw an AttributeError
        N)r   r    r   Úflush)r   r   r   r   Útest_flush_raises    s    z&TestSwmrNotAvailable.test_flush_raisesc             C   s   | j jrt‚dS )z. The SWMR getter should just be False
        N)r	   Ú	swmr_modeÚAssertionError)r   r   r   r   Útest_swmr_mode_false'   s    z)TestSwmrNotAvailable.test_swmr_mode_falsec          	   C   s.   |   t¡ d| j_W dQ R X | jjr*t‚dS )zl If the SWMR feature is not available, setting swmr_mode = True
        should raise a RuntimeError
        TN)r   ÚRuntimeErrorr	   r%   r&   )r   r   r   r   Útest_set_swmr_mode_raises,   s    z.TestSwmrNotAvailable.test_set_swmr_mode_raisesN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r$   r'   r)   r   r   r   r   r      s   r   zSWMR requires HDF5 >= 1.9.178c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestDatasetSwmrReadz| Testing SWMR functions when reading a dataset.
    Skip this test if the HDF5 library does not have the SWMR features.
    c             C   sh   t  | ¡ t d¡ d¡| _| jjddd| jd| _| jj	}| j 
¡  tj|ddd	| _| jd | _d S )
Nr   r	   r
   )r   )N)r   r   r
   r   T)r   )r   r   r   r   r   r
   r	   r   r   r   r   r   r   )r   r   r   r   r   r   :   s    

zTestDatasetSwmrRead.setUpc             C   s   |   | jj¡ dS )z/ Verify that the file is initially in SWMR modeN)Ú
assertTruer	   r%   )r   r   r   r   Útest_initial_swmr_mode_onD   s    z-TestDatasetSwmrRead.test_initial_swmr_mode_onc             C   s   |   | j| j¡ d S )N)ÚassertArrayEqualr   r
   )r   r   r   r   Útest_read_dataH   s    z"TestDatasetSwmrRead.test_read_datac             C   s   | j  ¡  d S )N)r   r!   )r   r   r   r   Útest_refreshK   s    z TestDatasetSwmrRead.test_refreshc          	   C   s0   |   t¡ d| j_W dQ R X |  | jj¡ dS )zŒ Verify when reading a file cannot be forcibly switched to swmr mode.
        When reading with SWMR the file must be opened with swmr=True.TN)r   Ú	Exceptionr	   r%   r/   )r   r   r   r   Útest_force_swmr_mode_on_raisesN   s    z2TestDatasetSwmrRead.test_force_swmr_mode_on_raisesc          	   C   s0   |   t¡ d| j_W dQ R X |  | jj¡ dS )zž Switching SWMR write mode off is only possible by closing the file.
        Attempts to forcibly switch off the SWMR mode should raise a ValueError.
        FN)r   r   r	   r%   r/   )r   r   r   r   Útest_force_swmr_mode_off_raisesU   s    z3TestDatasetSwmrRead.test_force_swmr_mode_off_raisesN)
r*   r+   r,   r-   r   r0   r2   r3   r5   r6   r   r   r   r   r.   4   s   
r.   c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestDatasetSwmrWritez| Testing SWMR functions when reading a dataset.
    Skip this test if the HDF5 library does not have the SWMR features.
    c             C   sH   t j|  ¡ ddd| _t d¡ d¡| _| jjdd| jj	dd	d
| _
dS )za First setup a file with a small chunked and empty dataset.
        No data written yet.
        ÚwZlatest)Zlibveré   r	   r
   )r   )é   )N)ÚshapeÚdtyper   r   N)r   r   Úmktempr	   r   r   r   r
   r   r<   r   )r   r   r   r   r   c   s    zTestDatasetSwmrWrite.setUpc             C   s   |   | jj¡ dS )z3 Verify that the file is not initially in SWMR modeN)ZassertFalser	   r%   )r   r   r   r   Útest_initial_swmr_mode_offp   s    z/TestDatasetSwmrWrite.test_initial_swmr_mode_offc             C   s   d| j _|  | j j¡ dS )z  Switch to SWMR mode and verify TN)r	   r%   r/   )r   r   r   r   Útest_switch_swmr_mode_ont   s    z-TestDatasetSwmrWrite.test_switch_swmr_mode_onc          	   C   sF   d| j _|  | j j¡ |  t¡ d| j _W dQ R X |  | j j¡ dS )zž Switching SWMR write mode off is only possible by closing the file.
        Attempts to forcibly switch off the SWMR mode should raise a ValueError.
        TFN)r	   r%   r/   r   r   )r   r   r   r   Ú test_switch_swmr_mode_off_raisesy   s
    z5TestDatasetSwmrWrite.test_switch_swmr_mode_off_raisesc             C   s^   d| j _|  | j j¡ | j | jj¡ | j| jdd…< | j ¡  | j ¡  |  	| j| j¡ dS )z) Extend and flush a SWMR dataset
        TN)
r	   r%   r/   r   Úresizer
   r;   r#   r!   r1   )r   r   r   r   Útest_extend_dsetƒ   s    

z%TestDatasetSwmrWrite.test_extend_dsetc             C   sº   d| j _|  | j j¡ | j d¡ | j| jdd …< | j ¡  | j ¡  |  | j| j¡ | j d¡ | j| jdd …< | j ¡  | j ¡  |  | jdd… | j¡ |  | jdd… | j¡ d S )NT)r9   r   )é   r9   rC   )	r	   r%   r/   r   rA   r
   r#   r!   r1   )r   r   r   r   Útest_extend_dset_multiple‘   s    



z.TestDatasetSwmrWrite.test_extend_dset_multipleN)
r*   r+   r,   r-   r   r>   r?   r@   rB   rD   r   r   r   r   r7   ]   s   
r7   )Únumpyr   r   Úcommonr   r   Z
skipUnlessÚversionZhdf5_version_tupler   r.   r7   r   r   r   r   Ú<module>   s   ,(