U
    ½mœd£ ã                   @   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
mZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlZddlm  m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ƒZ"G dd„ dƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd„ deƒZ&ej' (de)dfej*dfej+dfe,dfej-dfej.dfej/dd d!�d"fej/d#d d!�d"fej/dd$�d"fej/d#d$�d"fe /¡ d"fg¡d%d&„ ƒZ0G d'd(„ d(eƒZ1e
 2d)ej3j4kd*¡G d+d,„ d,eƒƒZ5e
 2d)ej3j4kd*¡G d-d.„ d.eƒƒZ6e
 2d/ej3j4kd0¡G d1d2„ d2eƒƒZ7e
 2d3ej3j4kd4¡G d5d6„ d6eƒƒZ8e
 2d7ej3j4kd8¡G d9d:„ d:eƒƒZ9e
 2d;ej3j4kd<¡G d=d>„ d>eƒƒZ:e
 2d?ej3j4kd@¡G dAdB„ dBeƒƒZ;G dCdD„ dDeƒZ<G dEdF„ dFeƒZ=G dGdH„ dHeƒZ>G dIdJ„ dJeƒZ?G dKdL„ dLeƒZ@G dMdN„ dNeƒZAG dOdP„ dPeƒZBG dQdR„ dReƒZCG dSdT„ dTeƒZDG dUdV„ dVeƒZEG dWdX„ dXeƒZFG dYdZ„ dZeƒZGG d[d\„ d\eƒZHG d]d^„ d^eƒZIG d_d`„ d`eƒZJej'jKejjLdakdbdc�ZMG ddde„ deeƒZNG dfdg„ dgeƒZOG dhdi„ dieƒZPG djdk„ dkeƒZQG dldm„ dmeƒZRe
 SejjLdnkdo¡dpdq„ ƒZTe
 SejjLdrk�p|ejjLdsk�o|ejjLdtk du¡dvdw„ ƒZUdxdy„ ZVdzd{„ ZWd|d}„ ZXd~d„ ZYd€d�„ ZZd‚dƒ„ Z[ej'j\ejjLd„k d…dc�d†d‡„ ƒZ]dˆd‰„ Z^G dŠd‹„ d‹eƒZ_G dŒd�„ d�eƒZ`dS )Žzü
    Dataset testing operations.

    Tests all dataset operations, including creation, with the exception of:

    1. Slicing operations for read and write, handled by module test_slicing
    2. Type conversion for read and write (currently untested)
é    Né   )ÚutÚTestCase)Úget_data_file_path)ÚFileÚGroupÚDataset)Úis_empty_dataspaceÚproduct)Úh5fÚh5t)ÚH5pyDeprecationWarning)Úversionc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseDatasetc                 C   s   t |  ¡ dƒ| _d S )NÚw)r   ÚmktempÚf©Úself© r   úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/h5py/tests/test_dataset.pyÚsetUp'   s    zBaseDataset.setUpc                 C   s   | j r| j  ¡  d S ©N)r   Úcloser   r   r   r   ÚtearDown*   s    zBaseDataset.tearDownN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   &   s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestReprz5
        Feature: repr(Dataset) behaves sensibly
    c                 C   s<   | j  dd¡}|  t|ƒt¡ | j  ¡  |  t|ƒt¡ dS )z( repr() works on live and dead datasets Úfoo©é   N)r   Úcreate_datasetÚassertIsInstanceÚreprÚstrr   ©r   Údsr   r   r   Útest_repr_open4   s    
zTestRepr.test_repr_openN)r   r   r   Ú__doc__r(   r   r   r   r   r   /   s   r   c                   @   st   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d„ Z
dd„ Ze eedƒ d¡dd„ ƒZdd„ ZdS )ÚTestCreateShapez@
        Feature: Datasets can be created from a shape only
    c                 C   s    | j  dd¡}|  |jd¡ dS )z Create a scalar dataset r   r   N©r   r"   ÚassertEqualÚshape©r   Údsetr   r   r   Útest_create_scalarB   s    z"TestCreateShape.test_create_scalarc                 C   s    | j  dd¡}|  |jd¡ dS )z Create a size-1 dataset r   ©r   Nr+   r.   r   r   r   Útest_create_simpleG   s    z"TestCreateShape.test_create_simplec                 C   s    | j  dd¡}|  |jd¡ dS )z+ Create a size-1 dataset with integer shaper   r   r1   Nr+   r.   r   r   r   Útest_create_integerL   s    z#TestCreateShape.test_create_integerc                 C   sX   | j  dd¡}|  |jd¡ |  |jd¡ | j  dd¡}|  |jd¡ |  |jd¡ dS )ú Create an extended dataset r   ©é?   r6   Úbar©é   é
   é<   N©r   r"   r,   r-   Úsizer.   r   r   r   Útest_create_extendedQ   s    z$TestCreateShape.test_create_extendedc                 C   sX   | j  dd¡}|  |jd¡ |  |jd¡ | j  dd¡}|  |jd¡ |  |jd¡ dS )r4   r   r6   r5   r7   r8   r;   Nr<   r.   r   r   r   Útest_create_integer_extendedZ   s    z,TestCreateShape.test_create_integer_extendedc                 C   s&   | j  dd¡}|  |jt d¡¡ dS )ú) Confirm that the default dtype is float r   r5   z=f4N©r   r"   r,   ÚdtypeÚnpr.   r   r   r   Útest_default_dtypec   s    z"TestCreateShape.test_default_dtypec              	   C   s&   |   t¡� | j d¡ W 5 Q R X dS )z  Missing shape raises TypeError r   N©ÚassertRaisesÚ	TypeErrorr   r"   r   r   r   r   Útest_missing_shapeh   s    z"TestCreateShape.test_missing_shapec                 C   sF   | j jddtjd�}t ¡ dkr2t dt ¡  ¡ |  |j	tj¡ dS )r@   r   r5   ©rB   )Úppc64lez(Storage of long double deactivated on %sN)
r   r"   rC   Z
longdoubleÚplatformÚmachineÚpytestÚxfailr,   rB   r.   r   r   r   Útest_long_doublem   s    z TestCreateShape.test_long_doubleÚ
complex256zNo support for complex256c                 C   s0   | j jddt d¡d�}|  |jt d¡¡ dS )r@   r   r5   rP   rI   N)r   r"   rC   rB   r,   r.   r   r   r   Útest_complex256t   s    
ÿzTestCreateShape.test_complex256c                 C   s<   | j  dd¡}|  |jd¡ | j  dd¡}|  |jd¡ d S )Ns   foor1   s   bar/baz)é   r+   ©r   r/   Údset2r   r   r   Útest_name_bytes{   s    zTestCreateShape.test_name_bytesN)r   r   r   r)   r0   r2   r3   r>   r?   rD   rH   rO   r   ÚskipIfÚhasattrrC   rQ   rU   r   r   r   r   r*   <   s   		
r*   c                   @   sx   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d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCreateDatazA
        Feature: Datasets can be created from existing data
    c                 C   s0   t  dd¡}| jjd|d�}|  |j|j¡ dS )z- Create a scalar dataset from existing array r   r   r   ©ÚdataN©rC   Úonesr   r"   r,   r-   ©r   rZ   r/   r   r   r   r0   ˆ   s    z!TestCreateData.test_create_scalarc                 C   s0   t  dd¡}| jjd|d�}|  |j|j¡ dS )z/ Create an extended dataset from existing data r5   r   r   rY   Nr[   r]   r   r   r   r>   Ž   s    z#TestCreateData.test_create_extendedc                 C   s4   | j jdddd�}|  |tj¡ |  d| j k¡ dS )z1 Create dataset with missing intermediate groups z/foo/bar/baz©r:   r:   z<i4)r-   rB   N)r   r"   r#   Úh5pyr   Ú
assertTruer&   r   r   r   Útest_dataset_intermediate_group”   s    z.TestCreateData.test_dataset_intermediate_groupc                 C   sH   t jddd�}| jjdd|d�}|  |jd¡ |  |d | d¡¡ dS )	z8 Create from existing data, and make it fit a new shape é   r   rI   r   ©r:   é   ©r-   rZ   .N)rC   Úaranger   r"   r,   r-   ÚassertArrayEqualÚreshaper]   r   r   r   Útest_reshapeš   s    zTestCreateData.test_reshapec              	   C   s*   |   t¡� t| jd jƒ W 5 Q R X dS )zE Binding Dataset to a non-DatasetID identifier fails with ValueError ú/N)rF   Ú
ValueErrorr   r   Úidr   r   r   r   Útest_appropriate_low_level_id¡   s    z,TestCreateData.test_appropriate_low_level_idc                 C   s`   |j  ¡ }t|tjƒst‚| ¡ |ks*t‚|d kr@| ¡ s\t‚n| ¡ rLt‚| ¡ |ks\t‚d S r   )	rl   Úget_typeÚ
isinstancer   ÚTypeStringIDÚAssertionErrorÚget_csetÚis_variable_strÚget_size)r   r/   ÚcsetÚlengthÚtidr   r   r   Úcheck_h5_string¦   s    
zTestCreateData.check_h5_stringc                    sz   ‡ fdd„}|ˆ j jddd�ƒ |ˆ j jdddgd�ƒ |ˆ j jddgdggd�ƒ |ˆ j jd	tjddgtd
�d�ƒ dS )z= Creating dataset with byte string yields vlen ASCII dataset c                    s   ˆ j | tjd d� d S ©N©rv   )rx   r   Ú
CSET_ASCII©r/   r   r   r   Úcheck_vlen_ascii²   s    z?TestCreateData.test_create_bytestring.<locals>.check_vlen_asciiÚaó   abcrY   Úbó   defÚcÚdrI   N©r   r"   rC   ÚarrayÚobject)r   r}   r   r   r   Útest_create_bytestring°   s     ÿz%TestCreateData.test_create_bytestringc                 C   s4   | j jdtjddgdd�d�}| j|tjdd� d S )	Nr~   r   r�   ZS3rI   rY   rd   rz   )r   r"   rC   r…   rx   r   r{   r.   r   r   r   Útest_create_np_s»   s    zTestCreateData.test_create_np_sc                    sz   ‡ fdd„}|ˆ j jddd�ƒ |ˆ j jdddgd�ƒ |ˆ j jddgdggd�ƒ |ˆ j jd	tjddgtd
�d�ƒ d S )Nc                    s   ˆ j | tjd d� d S ry   )rx   r   Ú	CSET_UTF8r|   r   r   r   Úcheck_vlen_utf8À   s    z;TestCreateData.test_create_strings.<locals>.check_vlen_utf8r~   ÚabcrY   r€   Údefr‚   rƒ   rI   r„   )r   rŠ   r   r   r   Útest_create_strings¿   s     ÿz"TestCreateData.test_create_stringsc              	   C   s8   |   t¡�$ | jjdtjddgdd�d� W 5 Q R X d S )Nr~   r   r�   ZU3rI   rY   )rF   rG   r   r"   rC   r…   r   r   r   r   Útest_create_np_uÉ   s    zTestCreateData.test_create_np_uc                 C   s*   | j jddd� |  t| j d jƒ¡ d S )Nr   r   rI   )r   r"   r`   r	   rl   r   r   r   r   Ú test_empty_create_via_None_shapeÍ   s    z/TestCreateData.test_empty_create_via_None_shapec                 C   s2   | j jdtjdd�d� |  t| j d jƒ¡ d S )Nr   r   rI   rY   )r   r"   r_   ÚEmptyr`   r	   rl   r   r   r   r   Ú!test_empty_create_via_Empty_classÑ   s    z0TestCreateData.test_empty_create_via_Empty_classc              	   C   s2   |   t¡� | jjddt d¡d� W 5 Q R X d S )Nr7   r!   rd   re   )rF   rk   r   r"   rC   rf   r   r   r   r   Útest_create_incompatible_dataÕ   s    z,TestCreateData.test_create_incompatible_dataN)r   r   r   r)   r0   r>   ra   ri   rm   rx   r‡   rˆ   r�   rŽ   r�   r‘   r’   r   r   r   r   rX   ‚   s   

rX   c                   @   sÔ   e Zd ZdZej dddejdd… ejdd… fddejdd… ejd	d
… fddejd
d…d
d
…f ejd
d
…d
d…f fddejdd
d…df ejd
d
… fg¡dd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zd
S )ÚTestReadDirectlyzI
        Feature: Read data directly from Dataset into a Numpy array
    ú+source_shape,dest_shape,source_sel,dest_sel©éd   r   r:   é2   r;   ©éF   éZ   N©rb   r:   ©é   r�   r�   ©é   é   é	   ©r9   rR   r9   rd   c           
      C   sl   t jt|ƒdd� |¡}|jd||d�}t j|ddd�}| ¡ }	|| |	|< | |||¡ t j 	||	¡ d S )NÚint64rI   r/   rY   éÿÿÿÿ)
rC   rf   r
   rh   r"   ÚfullÚcopyÚread_directÚtestingÚassert_array_equal)
r   Úwritable_fileÚsource_shapeÚ
dest_shapeÚ
source_selÚdest_selZsource_valuesr/   ÚarrÚexpectedr   r   r   Útest_read_directá   s    	z!TestReadDirectly.test_read_directc                 C   sN   |j ddtjddd�d�}tjddd�}| |¡ tj |tjddd�¡ d S )Nr/   ©r:   r:   r£   rI   rY   )r"   rC   rf   r\   r§   r¨   r©   ©r   rª   r/   r¯   r   r   r   Útest_no_seló   s    
zTestReadDirectly.test_no_selc              	   C   sV   |j ddd�}t dd¡}t t¡�( | |tjdd… tjdd… ¡ W 5 Q R X d S ©	NZedsetr£   rI   r•   r   r:   r—   r;   )r"   rC   r\   rM   ÚraisesrG   r§   Ús_)r   rª   Ú
empty_dsetr¯   r   r   r   Ú
test_emptyù   s    zTestReadDirectly.test_emptyc              	   C   s>   |j dddd�}t d¡}t t¡� | |¡ W 5 Q R X d S ©Nr/   r•   r£   rI   ©éÈ   ©r"   rC   r\   rM   r¶   rG   r§   r³   r   r   r   Útest_wrong_shapeÿ   s    
z!TestReadDirectly.test_wrong_shapec              	   C   sB   |j dddd�}tjddd�}t t¡� | |¡ W 5 Q R X d S ©Nr/   r^   r£   rI   ÚF)Úorderr½   r³   r   r   r   Útest_not_c_contiguous  s    z&TestReadDirectly.test_not_c_contiguous)r   r   r   r)   rM   ÚmarkÚparametrizerC   r·   r±   r´   r¹   r¾   rÂ   r   r   r   r   r“   Û   s   .$üþ

r“   c                   @   sÌ   e Zd ZdZej dddejdd… ejdd… fddejdd… ejd	d
… fddejd
d…d
d
…f ejd
d
…d
d…f fddejdd
d…df ejd
d
… fg¡dd„ ƒZ	dd„ Z
dd„ Zdd„ Zd
S )ÚTestWriteDirectlyz>
        Feature: Write Numpy array directly into Dataset
    r”   r•   r   r:   r—   r;   r˜   rš   Nr›   rœ   r�   rž   r¢   rR   r9   rd   c           	      C   sj   |j d|ddd�}t t|ƒ¡ |¡}tj|ddd�}|| ||< | |||¡ tj |d d … |¡ d S )Nr/   Úint32r¤   ©rB   Ú	fillvaluerI   )	r"   rC   rf   r
   rh   r¥   Úwrite_directr¨   r©   )	r   rª   r«   r¬   r­   r®   r/   r¯   r°   r   r   r   Útest_write_direct  s    	z#TestWriteDirectly.test_write_directc              	   C   sP   |j ddd�}t t¡�. | t d¡tjdd… tjdd… ¡ W 5 Q R X d S rµ   )r"   rM   r¶   rG   rÉ   rC   r\   r·   )r   rª   r¸   r   r   r   r¹   !  s    zTestWriteDirectly.test_emptyc              	   C   s>   |j dddd�}t d¡}t t¡� | |¡ W 5 Q R X d S rº   ©r"   rC   r\   rM   r¶   rG   rÉ   r³   r   r   r   r¾   &  s    
z"TestWriteDirectly.test_wrong_shapec              	   C   sB   |j dddd�}tjddd�}t t¡� | |¡ W 5 Q R X d S r¿   rË   r³   r   r   r   rÂ   ,  s    z'TestWriteDirectly.test_not_c_contiguous)r   r   r   r)   rM   rÃ   rÄ   rC   r·   rÊ   r¹   r¾   rÂ   r   r   r   r   rÅ     s   .$üþ
rÅ   c                   @   sP   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d„ Z
dd„ ZdS )ÚTestCreateRequirezS
        Feature: Datasets can be created only if they don't exist in the file
    c                 C   s.   | j  ddd¡}|  |t¡ |  |jd¡ dS )z& Create new dataset with no conflicts r   rc   r   N)r   Úrequire_datasetr#   r   r,   r-   r.   r   r   r   Útest_create9  s    zTestCreateRequire.test_createc                 C   s0   | j  ddd¡}| j  ddd¡}|  ||¡ dS )z) require_dataset yields existing dataset r   rc   r   N©r   rÍ   r,   rS   r   r   r   Útest_create_existing?  s    z&TestCreateRequire.test_create_existingc                 C   sˆ   | j  ddd¡}| j  ddd¡}|  ||¡ | j  ddd¡}| j  ddd¡}|  ||¡ | j  ddd¡}| j  ddd¡}|  ||¡ dS )	z; require_dataset with integer shape yields existing datasetr   r:   r   r7   r²   Zbazs   bazNrÏ   rS   r   r   r   Útest_create_1DE  s    z TestCreateRequire.test_create_1Dc              	   C   s:   | j  ddd¡ |  t¡� | j  ddd¡ W 5 Q R X dS )z6 require_dataset with shape conflict yields TypeError r   rc   r   )r:   r!   N©r   r"   rF   rG   rÍ   r   r   r   r   Útest_shape_conflictS  s    z%TestCreateRequire.test_shape_conflictc              	   C   s6   | j  d¡ |  t¡� | j  ddd¡ W 5 Q R X dS )z< require_dataset with object type conflict yields TypeError r   rc   r   N)r   Zcreate_grouprF   rG   rÍ   r   r   r   r   Útest_type_conflictY  s    z$TestCreateRequire.test_type_conflictc              	   C   s:   | j  ddd¡}|  t¡� | j  ddd¡ W 5 Q R X dS )zL require_dataset with dtype conflict (strict mode) yields TypeError
        r   rc   r   ZS10NrÒ   r.   r   r   r   Útest_dtype_conflict_  s    z%TestCreateRequire.test_dtype_conflictc                 C   s4   | j  ddd¡}| j jddddd�}|  ||¡ dS )z* require_dataset with exactly dtype match r   rc   r   T©ÚexactN)r   r"   rÍ   r,   rS   r   r   r   Útest_dtype_exactf  s    z"TestCreateRequire.test_dtype_exactc                 C   sH   | j  ddd¡}| j jddddd�}|  ||¡ |  |jt d¡¡ dS )zJ require_dataset with convertible type succeeds (non-strict mode)
        r   rc   Úi4Úi2FrÖ   N)r   r"   rÍ   r,   rB   rC   rS   r   r   r   Útest_dtype_closem  s    z"TestCreateRequire.test_dtype_closeN)r   r   r   r)   rÎ   rÐ   rÑ   rÓ   rÔ   rÕ   rØ   rÛ   r   r   r   r   rÌ   3  s   rÌ   c                   @   sX   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d„ Z
dd„ Zdd„ ZdS )ÚTestCreateChunkedzL
        Feature: Datasets can be created by manually specifying chunks
    c                 C   s$   | j jdddd�}|  |jd¡ dS )z Create via chunks tuple r   r•   r²   ©r-   ÚchunksN©r   r"   r,   rÞ   r.   r   r   r   Útest_create_chunks|  s    z$TestCreateChunked.test_create_chunksc                 C   s$   | j jdddd�}|  |jd¡ dS )z Create via chunks integer r   r•   r:   rÝ   r²   Nrß   r.   r   r   r   Útest_create_chunks_integer�  s    z,TestCreateChunked.test_create_chunks_integerc              	   C   s,   |   t¡� | jjdddd� W 5 Q R X dS )z& Illegal chunk size raises ValueError r   r•   r»   rÝ   N©rF   rk   r   r"   r   r   r   r   Útest_chunks_mismatch†  s    z&TestCreateChunked.test_chunks_mismatchc              	   C   s.   |   t¡� | jjddddd� W 5 Q R X dS )z3 Chunked format required for given storage options r   r²   r–   F)r-   ÚmaxshaperÞ   Nrâ   r   r   r   r   Útest_chunks_false‹  s    z#TestCreateChunked.test_chunks_falsec              	   C   s,   |   t¡� | jjdddd� W 5 Q R X dS )z> Attempting to create chunked scalar dataset raises TypeError r   r   )r—   rÝ   NrE   r   r   r   r   Útest_chunks_scalar�  s    z$TestCreateChunked.test_chunks_scalarc                 C   s6   | j jdddd�}|  |jt¡ |  t|jƒd¡ dS )z Auto-chunking of datasets r   )r�   r–   TrÝ   rR   N)r   r"   r#   rÞ   Útupler,   Úlenr.   r   r   r   Útest_auto_chunks•  s    z"TestCreateChunked.test_auto_chunksc                 C   s&   | j jddddd�}|  |jd¡ dS )z7 Auto-chunking with pathologically large element sizes r   ©rd   Z
S100000000T©r-   rB   rÞ   r1   Nrß   r.   r   r   r   Útest_auto_chunks_abuse›  s    z(TestCreateChunked.test_auto_chunks_abusec                 C   s–   | j jddtjdd�}d|ddd…df< |  t |ddd…df dk¡¡ d	|d< |  t |d d	k¡¡ d
|dd…< |  t |dd… d
k¡¡ dS )z+ Test scalar assignment of chunked dataset r   )rd   r—   r—   )r   r—   r—   rë   r:   r   Né(   é   é   r   rR   )r   r"   rC   rÆ   r`   Úallr.   r   r   r   Útest_scalar_assignment   s    
 ÿ"z(TestCreateChunked.test_scalar_assignmentc              	   C   s\   t jtdd��}| jjdddd� W 5 Q R X t jtdd��}| jjdddd� W 5 Q R X d	S )
z, Auto-chunking of empty datasets not allowedr�   )Úmatchr   ZS100T)rB   rÞ   r�   ©rB   rä   N)rM   r¶   rG   r   r"   )r   Úerrr   r   r   Útest_auto_chunks_no_shape°  s    z+TestCreateChunked.test_auto_chunks_no_shapeN)r   r   r   r)   rà   rá   rã   rå   ræ   ré   rì   rñ   rõ   r   r   r   r   rÜ   v  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 )ÚTestCreateFillvaluez>
        Feature: Datasets can be created with fill value
    c                 C   s6   | j jdddd�}|  |d d¡ |  |d d¡ dS )z- Fill value is reflected in dataset contents r   r²   g      @©rÈ   r   r    N)r   r"   r,   r.   r   r   r   Útest_create_fillval¿  s    z'TestCreateFillvalue.test_create_fillvalc                 C   s4   | j jdddd�}|  |jd¡ |  |jtj¡ dS )z( Fill value is recoverable via property r   r²   g      @r÷   N)r   r"   r,   rÈ   ZassertNotIsInstancerC   Úndarrayr.   r   r   r   Útest_propertyÅ  s    z!TestCreateFillvalue.test_propertyc                 C   s    | j  dd¡}|  |jd¡ dS )z0 .fillvalue property works correctly if not set r   r²   r   N)r   r"   r,   rÈ   r.   r   r   r   Útest_property_noneË  s    z&TestCreateFillvalue.test_property_nonec                 C   sV   t  ddg¡}t jd|d�d }| jjdd||d�}|  |j|¡ |  |d	 |¡ d
S )z& Fill value works with compound types )r~   Úf4)r€   Úi8r1   rI   r   r   r²   rÇ   r!   N)rC   rB   r\   r   r"   r,   rÈ   ZassertAlmostEqual)r   ÚdtÚvr/   r   r   r   Útest_compoundÐ  s
    z!TestCreateFillvalue.test_compoundc              	   C   s2   |   t¡� | jjddddgdd�}W 5 Q R X dS )z$ Bogus fill value raises ValueError r   r²   ©r~   Úi)r€   r   é*   rÇ   Nrâ   r.   r   r   r   Útest_excØ  s
    
 ÿzTestCreateFillvalue.test_excN)	r   r   r   r)   rø   rú   rû   r   r  r   r   r   r   rö   ¹  s   rö   zdt,expectedç        úutf-8rŸ   ©Úencodingrv   ó    Úascii©r  c                 C   s"   |j dd| d�}|j|kst‚d S )Nr   r²   rI   )r"   rÈ   rq   )rþ   r°   rª   r/   r   r   r   Útest_get_unset_fill_valueß  s    r  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestCreateNamedTypezC
        Feature: Datasets created from an existing named type
    c                 C   sn   t  d¡| jd< | jjdd| jd d�}|  |jt  d¡¡ |  |j ¡ | jd j¡ |  |j ¡  ¡ ¡ dS )z7 Named type object works and links the dataset to type Zf8ÚtypeÚxr•   rI   N)	rC   rB   r   r"   r,   rl   rn   r`   Z	committedr.   r   r   r   Ú
test_namedø  s
    zTestCreateNamedType.test_namedN)r   r   r   r)   r  r   r   r   r   r  ò  s   r  ÚgzipzDEFLATE is not installedc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestCreateGzipz=
        Feature: Datasets created with gzip compression
    c                 C   s4   | j jddddd�}|  |jd¡ |  |jd¡ dS )z# Create with explicit gzip options r   ©r�   rb   r  r¡   ©ÚcompressionÚcompression_optsN©r   r"   r,   r  r  r.   r   r   r   Ú	test_gzip  s
    ÿzTestCreateGzip.test_gzipc                 C   s2   | j jdddd�}|  |jd¡ |  |jd¡ dS )z+ Create with implicit gzip level (level 4) r   r  r  ©r  r!   Nr  r.   r   r   r   Útest_gzip_implicit  s    z!TestCreateGzip.test_gzip_implicitc              	   C   s‚   | j jdddd�}|  |jd¡ |  |jd¡ tjjj}z8t	ƒ tjj_|  
t¡� | j jdddd�}W 5 Q R X W 5 |tjj_X dS )z. Create with gzip level by specifying integer r   r  r    r  r  N)r   r"   r,   r  r  r_   Ú_hlÚdatasetÚ_LEGACY_GZIP_COMPRESSION_VALSrç   rF   rk   )r   r/   Úoriginal_compression_valsr   r   r   Útest_gzip_number  s    
 zTestCreateGzip.test_gzip_numberc              	   C   s‚   |   ttf¡� | jjdddd� W 5 Q R X |   t¡� | jjdddd� W 5 Q R X |   t¡� | jjddddd� W 5 Q R X dS )	z= Illegal gzip level (explicit or implicit) raises ValueError r   r  é   r  éüÿÿÿr  r  N)rF   rk   ÚRuntimeErrorr   r"   r   r   r   r   Útest_gzip_exc#  s    ÿzTestCreateGzip.test_gzip_excN)r   r   r   r)   r  r  r  r#  r   r   r   r   r    s
   r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestCreateCompressionNumberz?
        Feature: Datasets created with a compression code
    c                 C   s`   t jjj}z(tƒ t jj_| jjddt jjdd�}W 5 |t jj_X |  	|j
d¡ |  	|jd¡ dS )z^ Create with compression number of gzip (h5py.h5z.FILTER_DEFLATE) and a compression level of 7r   r  )r    r  r  r    N)r_   r  r  r  rç   r   r"   Úh5zÚFILTER_DEFLATEr,   r  r  )r   r  r/   r   r   r   Útest_compression_number5  s    
z3TestCreateCompressionNumber.test_compression_numberc              	   C   sÌ   |   t¡�}| jjdddd� W 5 Q R X |  dt|jƒ¡ |   t¡�}| jjdddd� W 5 Q R X |  dt|jƒ¡ tjj	j
}z<tƒ tjj	_
|   t¡� | jjddtjjd� W 5 Q R X W 5 |tjj	_
X dS )	z* Create with invalid compression numbers  r   r  iüÿÿr  zInvalid filterr–   zUnknown compressionN)rF   rk   r   r"   ZassertInr%   Ú	exceptionr_   r  r  r  rç   Ú
IndexErrorr%  r&  )r   Úer  r   r   r   Útest_compression_number_invalidA  s    
$z;TestCreateCompressionNumber.test_compression_number_invalidN)r   r   r   r)   r'  r+  r   r   r   r   r$  .  s   r$  ÚlzfzLZF is not installedc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestCreateLZFú<
        Feature: Datasets created with LZF compression
    c                 C   sŽ   | j jdddd�}|  |jd¡ |  |jd¡ t d¡}| j jd|dd�}|  |jd¡ |  |jd¡ | j  ¡  | j d d	 }|  ||¡ dS )
z Create with explicit lzf r   r  r,  r  Nr–   r7   )rZ   r  r   )	r   r"   r,   r  r  rC   rf   Úflushrg   )r   r/   ÚtestdataÚreaddatar   r   r   Útest_lzf]  s    

zTestCreateLZF.test_lzfc              	   C   s.   |   t¡� | jjddddd� W 5 Q R X dS )z& Giving lzf options raises ValueError r   r  r,  r!   r  Nrâ   r   r   r   r   Útest_lzf_excm  s    ÿzTestCreateLZF.test_lzf_excN)r   r   r   r)   r2  r3  r   r   r   r   r-  V  s   r-  ÚszipzSZIP is not installedc                   @   s   e Zd ZdZdd„ ZdS )ÚTestCreateSZIPr.  c                 C   s   | j jddddd�}dS )z Create with explicit szip r   r  r4  )Úecé   r  N)r   r"   r.   r   r   r   Ú	test_szip{  s    ÿzTestCreateSZIP.test_szipN)r   r   r   r)   r8  r   r   r   r   r5  t  s   r5  ÚshufflezSHUFFLE is not installedc                   @   s   e Zd ZdZdd„ ZdS )ÚTestCreateShufflez8
        Feature: Datasets can use shuffling filter
    c                 C   s"   | j jdddd�}|  |j¡ dS )z Enable shuffle filter r   r  T)r9  N)r   r"   r`   r9  r.   r   r   r   Útest_shuffleˆ  s    zTestCreateShuffle.test_shuffleN)r   r   r   r)   r;  r   r   r   r   r:  �  s   r:  Ú
fletcher32zFLETCHER32 is not installedc                   @   s   e Zd ZdZdd„ ZdS )ÚTestCreateFletcher32z=
        Feature: Datasets can use the fletcher32 filter
    c                 C   s"   | j jdddd�}|  |j¡ dS )z Enable fletcher32 filter r   r  T)r<  N)r   r"   r`   r<  r.   r   r   r   Útest_fletcher32”  s    z$TestCreateFletcher32.test_fletcher32N)r   r   r   r)   r>  r   r   r   r   r=  Ž  s   r=  ÚscaleoffsetzSCALEOFFSET is not installedc                   @   sH   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d„ Z
dS )ÚTestCreateScaleOffsetz?
        Feature: Datasets can use the scale/offset filter
    c              	   C   s.   |   t¡� | jjddtdd�}W 5 Q R X dS )z[ Ensure that a scale factor is required for scaleoffset compression of floating point data r   r  T©rB   r?  N©rF   rk   r   r"   Úfloatr.   r   r   r   Ú test_float_fails_without_options   s    z6TestCreateScaleOffset.test_float_fails_without_optionsc              	   C   s.   |   t¡� | jjddtdd�}W 5 Q R X dS )z# Check when scaleoffset is negetiver   r  gš™™™™™¹¿rA  NrB  r.   r   r   r   Útest_non_integer¦  s    z&TestCreateScaleOffset.test_non_integerc              	   C   s.   |   t¡� | jjddtdd�}W 5 Q R X dS )z% Check when dtype is unsupported typer   r  TrA  N)rF   rG   r   r"   Úboolr.   r   r   r   Útest_unsupport_dtype¬  s    z*TestCreateScaleOffset.test_unsupport_dtypec                 C   sª   d}d}dd|  }t jj|Ž d | }| jjd|t|d�}|jdk	sJt‚||d	< | jj}| j 	¡  t
 |d
¡| _| jd d	 }| j||d|  d� ||k ¡ r¦t‚dS )z2 Scaleoffset filter works for floating point data r!   ©r–   i,  r�   r:   g      à?r   rA  N.Úr)Ú	precision)rC   ÚrandomÚrandr   r"   rC  r?  rq   Úfilenamer   r_   r   rg   rð   )r   Zscalefacr-   Úranger0  r/   rM  r1  r   r   r   Ú
test_float²  s    
z TestCreateScaleOffset.test_floatc                 C   sŠ   d}d}t jjdd| d |d�}| jjd|tdd	�}|jd
k	sDt‚||d< | jj}| j 	¡  t
 |d¡| _| jd d }|  ||¡ d
S )zB Scaleoffset filter works for integer data with default precision rï   rH  r   rR   r   ©r=   r   TrA  N.rI  )rC   rK  Úrandintr   r"   Úintr?  rq   rM  r   r_   r   rg   ©r   Únbitsr-   r0  r/   rM  r1  r   r   r   Útest_intÌ  s    
zTestCreateScaleOffset.test_intc                 C   sˆ   d}d}t jjdd| |d�}| jjd|t|d�}|  |jdk¡ ||d< | jj}| j 	¡  t
 |d	¡| _| jd d }|  ||¡ d
S )úD Scaleoffset filter works for integer data with specified precision rï   rH  r   rR   rP  r   rA  .rI  N)rC   rK  rQ  r   r"   rR  r`   r?  rM  r   r_   r   rg   rS  r   r   r   Útest_int_with_minbitsá  s    
z+TestCreateScaleOffset.test_int_with_minbitsc                 C   s”   d}d}t jjdd|d  d |d�}| jjd|t|d�}|  |jdk¡ ||d	< | jj}| j 	¡  t
 |d
¡| _| jd d	 }||k ¡ r�t‚dS )rV  rï   rH  r   rR   r   rP  r   rA  .rI  N)rC   rK  rQ  r   r"   rR  r`   r?  rM  r   r_   r   rð   rq   rS  r   r   r   Útest_int_with_minbits_lossyõ  s    
z1TestCreateScaleOffset.test_int_with_minbits_lossyN)r   r   r   r)   rD  rE  rG  rO  rU  rW  rX  r   r   r   r   r@  š  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 )ÚTestExternalzB
        Feature: Datasets with the external storage property
    c           
   	   C   sÎ   d}t j |¡}|  ¡ }|dtjfg}| jjd||j|dd�}||d< |jdk	sTt	‚t
|dƒ�}| ¡ }W 5 Q R X || ¡ ks‚t	‚tjjd	krÊt |j ¡  ¡  ¡ ¡ ¡ }t | jj¡j ¡ }	||	ksÊt	‚dS )
z' Create and access an external dataset ©r9   r–   r   r   z	${ORIGIN}©rB   ÚexternalÚefile_prefix.NÚrb©r   r:   r   )rC   rK  r   r   Ú	UNLIMITEDr   r"   rB   r\  rq   ÚopenÚreadÚtobytesr_   r   Úhdf5_version_tupleÚpathlibÚPathrl   Úget_access_plistÚget_efile_prefixÚdecodeÚas_posixrM  Úparent)
r   r-   r0  Úext_filer\  r/   ÚfidÚcontentsr]  rk  r   r   r   Útest_contents  s    zTestExternal.test_contentsc              	   C   s  d}t j |¡}|  ¡ }tj |¡dtjfg}| jj	d||j
|tj |¡d�}||d< |jdk	sdt‚t|dƒ�}| ¡ }W 5 Q R X || ¡ ks’t‚tjjdkrÖt |j ¡  ¡  ¡ ¡ ¡ }t |¡j ¡ }	||	ksÖt‚| jjd||j
tj |¡d	�}
|
jdk	�st‚|
d
 |k dS )z< Create and access an external dataset using an efile_prefixrZ  r   r   r[  .Nr^  r_  )r]  r   )rC   rK  r   ÚosÚpathÚbasenamer   r`  r   r"   rB   Údirnamer\  rq   ra  rb  rc  r_   r   rd  re  rf  rl   rg  rh  ri  rj  rk  rÍ   )r   r-   r0  rl  r\  r/   rm  rn  r]  rk  rT   r   r   r   Útest_contents_efile_prefix*  s"     z'TestExternal.test_contents_efile_prefixc                 C   s   | j jdd|  ¡ d� dS )z/ External argument may be a file name str only r   rZ  ©r\  N)r   r"   r   r   r   r   r   Útest_name_strH  s    zTestExternal.test_name_strc                 C   s    | j jddt |  ¡ ¡d� dS )z0 External argument may be a file name path only r   rZ  ru  N)r   r"   re  rf  r   r   r   r   r   Útest_name_pathM  s    
ÿzTestExternal.test_name_pathc                    sN   |   ¡ ‰ d}t‡ fdd„t|ƒD ƒƒ}| jjdd|d�}t|jƒ|ksJt‚dS )z9 External argument may be an iterable of multiple tuples r–   c                 3   s   | ]}ˆ |d  d fV  qdS )éè  Nr   ©Ú.0r  ©rl  r   r   Ú	<genexpr>X  s     z/TestExternal.test_iter_multi.<locals>.<genexpr>ZpoorZ  ru  N)r   ÚiterrN  r   r"   rè   r\  rq   )r   ÚNr\  r/   r   r{  r   Útest_iter_multiS  s
    zTestExternal.test_iter_multic              
   C   sœ   d}|   ¡ }t|gft|dgft|dtjgft|fgft|dfgft|dtjdfgft|ddfgffD ]0\}}|  |¡� | jjd||d� W 5 Q R X qfdS )z" Test with invalid external lists rZ  r   zh5f.UNLIMITEDr   ru  N)r   rG   r   r`  rk   rF   r   r"   )r   r-   rl  Úexc_typer\  r   r   r   Útest_invalid\  s    

ù	zTestExternal.test_invalidN)
r   r   r   r)   ro  rt  rv  rw  r  r�  r   r   r   r   rY    s   	rY  c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestAutoCreatezP
        Feature: Datasets auto-created from data produce the correct types
    Tc                 C   sB   |j  ¡ }|  t|ƒtjj¡ |  | ¡ |¡ |r>| ¡ s>t	‚d S r   )
rl   rn   r,   r  r_   r   rp   rr   rs   rq   )r   r'   ru   Úvariablerw   r   r   r   Úassert_string_typet  s
    
z!TestAutoCreate.assert_string_typec                 C   sx   d| j d< |  | j d tjj¡ ddg| j d< |  | j d tjj¡ tjddgtjd�| j d< |  | j d tjj¡ dS )	z<Assigning byte strings produces a vlen string ASCII dataset s   Hello therer  ó   as   bcÚyrI   ÚzN)r   r„  r_   r   r{   rC   r…   Úobject_r   r   r   r   Útest_vlen_bytes{  s    
zTestAutoCreate.test_vlen_bytesc                 C   s‚   dt dƒ | jd< |  | jd tjj¡ ddg| jd< |  | jd tjj¡ tjddggtjd�| jd< |  | jd tjj¡ d	S )
z?Assigning unicode strings produces a vlen string UTF-8 dataset úHello thereé4   r  r~   Úbcr†  rI   r‡  N)	Úchrr   r„  r_   r   r‰   rC   r…   rˆ  r   r   r   r   Útest_vlen_unicode†  s    z TestAutoCreate.test_vlen_unicodec                 C   sH   t  d¡| jd< | jd }| j|tjjdd� |  |j 	¡  
¡ d¡ dS )zV Assignment of fixed-length byte string produces a fixed-length
        ascii dataset rŠ  r  F)rƒ  rî   N)rC   Ústring_r   r„  r_   r   r{   r,   rl   rn   rt   r&   r   r   r   Útest_string_fixed’  s    
z TestAutoCreate.test_string_fixedN)T)r   r   r   r)   r„  r‰  rŽ  r�  r   r   r   r   r‚  o  s
   
r‚  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCreateLikec                 C   sV   t  d¡ dd¡| jd< | j d| jd ¡ | jd }|  |jd¡ |  |jd ¡ d S )Né   rŸ   ZlolZlike_lol)rŸ   rŸ   )	rC   rf   rh   r   Úcreate_dataset_liker,   r-   ZassertIsrÞ   )r   Zdsliker   r   r   Útest_no_chunksœ  s
    
zTestCreateLike.test_no_chunksc                 C   s°   | j jdt d¡dd�}|  dtj |j¡j	¡ | j  
d|¡}|  dtj |j¡j	¡ | j jdt d¡dd�}|  dtj |j¡j	¡ | j  
d	|¡}|  dtj |j¡j	¡ d S )
NZhondarï   T)rZ   Útrack_timesr   ZhyundaiZibmFZlenovo)r   r"   rC   rf   ÚassertNotEqualr_   Úh5gÚget_objinfoÚ_idÚmtimer“  r,   )r   ÚorigÚsimilarr   r   r   Útest_track_times£  s    ÿÿzTestCreateLike.test_track_timesc                 C   s@   | j jdddd�}| j  d|¡}|  |jd¡ |  |jd¡ dS )z) Test when other.maxshape != other.shape Úotherr²   r�   ©rä   Úsim©r�   N)r   r"   r“  r,   r-   rä   )r   rž  rœ  r   r   r   Útest_maxshape°  s    zTestCreateLike.test_maxshapeN)r   r   r   r”  r�  r¢  r   r   r   r   r‘  ›  s   r‘  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestChunkIteratorc              	   C   s0   | j  dd¡}|  t¡� | ¡  W 5 Q R X d S )Nr   r   )r   r"   rF   rG   Úiter_chunksr.   r   r   r   r”  ¹  s    z TestChunkIterator.test_no_chunksc                 C   s®   | j jdddd�}tdddƒftdddƒftdd	dƒftd	d
dƒff}|  t| ¡ ƒt|ƒ¡ tdddƒftdd	dƒftd	ddƒff}|  t| tjdd… ¡ƒt|ƒ¡ d S )Nr   r•   )é    ©rÞ   r   r¥  r   é@   é`   r–   r—   éa   ©r   r"   Úslicer,   Úlistr¤  rC   r·   ©r   r/   r°   r   r   r   Útest_1d¾  s    $ÿ(zTestChunkIterator.test_1dc                 C   s(  | j jdddd�}tdddƒtdddƒftdddƒtdd	dƒftdddƒtdddƒftdddƒtdd	dƒftdd
dƒtdddƒftdd
dƒtdd	dƒftd
d	dƒtdddƒftd
d	dƒtdd	dƒff}|  t| ¡ ƒt|ƒ¡ tdddƒtdddƒff}|  t| tjdd…dd…f ¡ƒt|ƒ¡ d S )Nr   ©r–   r–   )r¥  r§  r¦  r   r¥  r   r§  r–   r¨  é0   é4   rí   r—   rª  r­  r   r   r   Útest_2dÆ  s$     
ÿ 

ÿ 

ÿüzTestChunkIterator.test_2dN)r   r   r   r”  r®  r²  r   r   r   r   r£  ¸  s   r£  c                   @   sX   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d„ Z
dd„ Zdd„ ZdS )Ú
TestResizezF
        Feature: Datasets created with "maxshape" may be resized
    c                 C   s2   | j jdddd�}|  |jd¡ |  |jd¡ dS )z  Create dataset with "maxshape" r   r  ©r�   r;   rŸ  N©r   r"   ZassertIsNotrÞ   r,   rä   r.   r   r   r   rÎ   Ú  s    zTestResize.test_createc                 C   sR   | j jdddd�}|  |jd¡ |  |jd¡ | j jdddd�}|  |jd¡ dS )z6 Create dataset with "maxshape" using integer maxshaper   r¡  r�   rŸ  Nr7   rµ  r.   r   r   r   rÑ   à  s
    zTestResize.test_create_1Dc                 C   sT   | j jdddd�}|  |jd¡ | d¡ |  |jd¡ | d¡ |  |jd¡ dS )z( Datasets may be resized up to maxshape r   r  r´  rŸ  ©r�   r—   N©r   r"   r,   r-   Úresizer.   r   r   r   Útest_resizeé  s    

zTestResize.test_resizec                 C   s<   | j jdddd�}|  |jd¡ | d¡ |  |jd¡ dS )z> Datasets may be resized up to maxshape using integer maxshaper   r�   rí   rŸ  r¡  )rb   Nr·  r.   r   r   r   Útest_resize_1Dò  s    
zTestResize.test_resize_1Dc              	   C   s6   | j jdddd�}|  t¡� | d¡ W 5 Q R X dS )z. Resizing past maxshape triggers an exception r   r  r´  rŸ  )r�   r™   N)r   r"   rF   Ú	Exceptionr¸  r.   r   r   r   Útest_resize_overù  s    zTestResize.test_resize_overc              	   C   s2   | j  dd¡}|  t¡� | d¡ W 5 Q R X dS )z/ Resizing non-chunked dataset raises TypeError r   r  r´  N)r   r"   rF   rG   r¸  r.   r   r   r   Útest_resize_nonchunkedÿ  s    z!TestResize.test_resize_nonchunkedc                 C   s2   | j jdddd�}|jddd� |  |jd¡ d	S )
z Resize specified axis r   r  r´  rŸ  r—   r   ©Zaxisr¶  N)r   r"   r¸  r,   r-   r.   r   r   r   Útest_resize_axis  s    zTestResize.test_resize_axisc              	   C   s:   | j jdddd�}|  t¡� |jddd� W 5 Q R X dS )	z  Illegal axis raises ValueError r   r  r´  rŸ  r—   rR   r¾  N)r   r"   rF   rk   r¸  r.   r   r   r   Útest_axis_exc  s    zTestResize.test_axis_excc                 C   s2   | j jdddd�}|  |jd¡ |  |jd¡ dS )z? Allow zero-length initial dims for unlimited axes (issue 111) r   )é   r   )rÁ  NrŸ  N)r   r"   r,   r-   rä   r.   r   r   r   Útest_zero_dim  s    zTestResize.test_zero_dimN)r   r   r   r)   rÎ   rÑ   r¹  rº  r¼  r½  r¿  rÀ  rÂ  r   r   r   r   r³  Ô  s   		r³  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú	TestDtypezD
        Feature: Dataset dtype is available as .dtype property
    c                 C   s(   | j  ddd¡}|  |jt d¡¡ dS )z Retrieve dtype from dataset r   ©rŸ   ú|S10NrA   r.   r   r   r   Ú
test_dtype  s    zTestDtype.test_dtypec                 C   s<   t  dt jfdt jfg¡}| j dd|¡}|  |j|¡ dS )z7 Retrieve dtype from complex float16 dataset (gh-2156) rI  r  r   rÄ  N)rC   rB   Úfloat16r   r"   r,   )r   Z	complex32r/   r   r   r   Útest_dtype_complex32#  s    zTestDtype.test_dtype_complex32N)r   r   r   r)   rÆ  rÈ  r   r   r   r   rÃ    s   rÃ  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestLenzG
        Feature: Size of first axis is available via Python's len
    c                 C   s"   | j  dd¡}|  t|ƒd¡ dS )z Python len() (under 32 bits) r   )é8  rÁ  rÊ  N)r   r"   r,   rè   r.   r   r   r   Útest_len1  s    zTestLen.test_lenc              	   C   sj   | j  dd¡}|  |jd¡ tjdkrF|  t¡� t|ƒ W 5 Q R X n|  t|ƒd¡ |  | ¡ d¡ dS )z Python len() vs Dataset.len() r   )ì        rÁ  iÿÿÿrÌ  N)	r   r"   r,   r-   ÚsysÚmaxsizerF   ÚOverflowErrorrè   r.   r   r   r   Útest_len_big6  s    
zTestLen.test_len_bigN)r   r   r   r)   rË  rÐ  r   r   r   r   rÉ  +  s   rÉ  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestIterz;
        Feature: Iterating over a dataset yields rows
    c                 C   sX   t jddd� d¡}| jjd|d�}t||ƒD ]$\}}|  t|ƒd¡ |  ||¡ q.dS )	z& Iterating over a dataset yields rows rb   r   rI   rc   r   rY   rd   N)	rC   rf   rh   r   r"   Úzipr,   rè   rg   )r   rZ   r/   r  r†  r   r   r   Ú	test_iterH  s
    zTestIter.test_iterc              	   C   s8   | j jddd�}|  t¡� dd„ |D ƒ W 5 Q R X dS )z0 Iterating over scalar dataset raises TypeError r   r   )r-   c                 S   s   g | ]}|‘qS r   r   ry  r   r   r   Ú
<listcomp>T  s     z-TestIter.test_iter_scalar.<locals>.<listcomp>N)r   r"   rF   rG   r.   r   r   r   Útest_iter_scalarP  s    zTestIter.test_iter_scalarN)r   r   r   r)   rÓ  rÕ  r   r   r   r   rÑ  B  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d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%ÚTestStringszr
        Feature: Datasets created with vlen and fixed datatypes correctly
        translate to and from HDF5
    c                 C   sn   t jdd�}| jjdd|d�}|j ¡ }|  t|ƒt jj	¡ |  | 
¡ t jj¡ t  |j¡}|  |jd¡ dS )z3 Vlen bytes dataset maps to vlen ascii in the file r
  r  r  r•   rI   N)r_   Ústring_dtyper   r"   rl   rn   r,   r  r   rp   rr   r{   Úcheck_string_dtyperB   r  ©r   rþ   r'   rw   Zstring_infor   r   r   r‰  ^  s    
zTestStrings.test_vlen_bytesc                 C   sp   t jdd�}d}| jjdd||d�}|  | jd d |¡ |  | jd  ¡ d | ¡ ¡ |  | jd j|¡ dS )	ú& Vlen bytes dataset handles fillvalue r
  r  ó   barr  r•   rÇ   r   N©r_   r×  r   r"   r,   Úasstrri  rÈ   ©r   rþ   Z
fill_valuer'   r   r   r   Útest_vlen_bytes_fillvalueh  s    z%TestStrings.test_vlen_bytes_fillvaluec                 C   sj   t  ¡ }| jjdd|d�}|j ¡ }|  t|ƒt jj	¡ |  | 
¡ t jj¡ t  |j¡}|  |jd¡ dS )z5 Vlen unicode dataset maps to vlen utf-8 in the file r  r•   rI   r  N)r_   r×  r   r"   rl   rn   r,   r  r   rp   rr   r‰   rØ  rB   r  rÙ  r   r   r   rŽ  q  s    
zTestStrings.test_vlen_unicodec                 C   st   t  ¡ }d}| jjdd||d�}|  | jd d | d¡¡ |  | jd  ¡ d |¡ |  | jd j| d¡¡ dS )ú( Vlen unicode dataset handles fillvalue õ   bÃ¡rr  r•   rÇ   r   r  N)r_   r×  r   r"   r,   ÚencoderÝ  rÈ   rÞ  r   r   r   Útest_vlen_unicode_fillvalue{  s    z'TestStrings.test_vlen_unicode_fillvaluec                 C   s˜   t  d¡}| jjdd|d�}|j ¡ }|  t|ƒtj	j
¡ |  | ¡ ¡ |  | ¡ d¡ |  | ¡ tj	j¡ t |j¡}|  |jd¡ |  |jd¡ dS )zK Fixed-length bytes dataset maps to fixed-length ascii in the file
        rÅ  r  r•   rI   r:   r
  N)rC   rB   r   r"   rl   rn   r,   r  r_   r   rp   ZassertFalsers   rt   rr   r{   rØ  r  rv   rÙ  r   r   r   Útest_fixed_ascii„  s    

zTestStrings.test_fixed_asciic                 C   sr   t jddd�}d}| jjdd||d�}|  | jd d |¡ |  | jd  ¡ d | ¡ ¡ |  | jd j|¡ d	S )
rÚ  r
  r:   r  rÛ  r  r•   rÇ   r   NrÜ  rÞ  r   r   r   Útest_fixed_bytes_fillvalue’  s    z&TestStrings.test_fixed_bytes_fillvaluec              	   C   s  t jddd�}| jjdd|d�}|j ¡ }|  | ¡ t jj	¡ d}| 
d¡|d< ||d	< ||g|d
d…< tj||gtd�|dd…< tj| 
d¡gd
 |d�|dd…< |  t¡�  tj||gdd�|dd…< W 5 Q R X tj |d d… tj| 
d¡gd dd�¡ d S )Nr  rŸ   r  r  r•   rI   õ   cÃ¹r   r   rR   r!   r9   é   ÚUr:   ÚS)r_   r×  r   r"   rl   rn   r,   rr   r   r‰   râ  rC   r…   r†   rF   rG   r¨   r©   )r   rþ   r'   rw   Úsr   r   r   Útest_fixed_utf8›  s    
"$zTestStrings.test_fixed_utf8c                 C   sz   t jddd�}d d¡}| jjdd||d�}|  | jd d |¡ |  | jd  ¡ d | d¡¡ |  | jd j|¡ d	S )
rà  r  r:   r  rá  r  r•   rÇ   r   N)	r_   r×  râ  r   r"   r,   rÝ  ri  rÈ   rÞ  r   r   r   Útest_fixed_utf_8_fillvalue«  s    
 z&TestStrings.test_fixed_utf_8_fillvaluec              	   C   s6   t  d¡}|  t¡� | jjdd|d�}W 5 Q R X dS )zA Fixed-length unicode datasets are unsupported (raise TypeError) z|U10r  r•   rI   N)rC   rB   rF   rG   r   r"   ©r   rþ   r'   r   r   r   Útest_fixed_unicode´  s    
zTestStrings.test_fixed_unicodec                 C   sR   t jdd�}| jjdd|d�}d}||d< |d }|  t|ƒt¡ |  ||¡ dS )	zN writing and reading to vlen bytes dataset preserves type and content
        r
  r  r  r•   rI   ó   Helloïr   N)r_   r×  r   r"   r,   r  Úbytes©r   rþ   r'   rZ   Úoutr   r   r   Útest_roundtrip_vlen_bytesº  s    z%TestStrings.test_roundtrip_vlen_bytesc                 C   sR   t  d¡}| jjdd|d�}d}||d< |d }|  t|ƒt j¡ |  ||¡ dS )z[ Writing to and reading from fixed-length bytes dataset preserves
        type and content rÅ  r  r•   rI   rï  r   N)rC   rB   r   r"   r,   r  r�  rñ  r   r   r   Útest_roundtrip_fixed_bytesÅ  s    
z&TestStrings.test_roundtrip_fixed_bytesc                 C   s^   t  ¡ }| jjdd|d�}d}||d< |  |d t¡ | ¡ d }|  |t¡ |  ||¡ d S )Nr  r²   rI   õ   fÃ ilter   )	r_   r×  r   r"   r#   rð  rÝ  r%   r,   rñ  r   r   r   Útest_retrieve_vlen_unicodeÐ  s    z&TestStrings.test_retrieve_vlen_unicodec              	   C   sâ   | j jddt ¡ d�}d}||d< | d¡}|  t¡� |d }W 5 Q R X |  | dd¡d d¡ |  | d	¡d |¡ |  d
t	| ¡ ƒ¡ t
j | ¡ d d… t
j|gtd�¡ t
j t
 | ¡ ¡d d… t
j|gtd�¡ d S )Nr  r²   rI   rõ  r   r
  ÚignoreZfilteúlatin-1r:   r   )r   r"   r_   r×  rÝ  rF   ÚUnicodeDecodeErrorr,   r–  rè   rC   r¨   r©   r…   r†   Úasarray)r   r'   rZ   Zstrwrap1rò  r   r   r   Ú
test_asstrÚ  s"    
 ÿ ÿzTestStrings.test_asstrc                 C   sÈ   t jdd�}| jjdd|d�}d}tj| d¡|d�|d< |  |d tj¡ | 	¡ d }|  |t
¡ |  ||¡ |  | 	d	d
¡d d¡ |  | 	d¡d |¡ tj | 	¡ d d… tj|gtd�¡ d S )NrŸ   rz   r  r²   rI   ræ  r  r   r
  r÷  r‚   rø  r   )r_   r×  r   r"   rC   r…   râ  r#   Úbytes_rÝ  r%   r,   r–  r¨   r©   r†   rñ  r   r   r   Útest_asstr_fixedõ  s     ÿzTestStrings.test_asstr_fixedc              	   C   sB   t  d¡}| jjdd|d�}d}|  t¡� ||d< W 5 Q R X dS )zGEncoding error when writing a non-ASCII string to an ASCII vlen datasetr
  r  r•   rI   rõ  r   N)r_   r×  r   r"   rF   ÚUnicodeEncodeError)r   rþ   r'   rZ   r   r   r   Útest_unicode_write_error  s
    
z$TestStrings.test_unicode_write_errorc                 C   s\   t  ¡ }| jjdd|d�}dtdƒ  d¡}||d< |d }|  t|ƒt¡ |  ||¡ dS )	zJ Writing valid utf-8 byte strings to a unicode vlen dataset is OK
        r  r•   rI   rŠ  r‹  Úutf8r   N)	r_   r×  r   r"   r�  râ  r,   r  rð  rñ  r   r   r   Útest_unicode_write_bytes  s    z$TestStrings.test_unicode_write_bytesc                 C   sV   t  d¡}| jjdd|d�}d}||d< |d }|  t|ƒt¡ |  || d¡¡ dS )z: Writing an ascii str to ascii vlen dataset is OK
        r
  r  r•   rI   zASCII stringr   N)r_   r×  r   r"   r,   r  rð  râ  rñ  r   r   r   Útest_vlen_bytes_write_ascii_str  s    
z+TestStrings.test_vlen_bytes_write_ascii_strN)r   r   r   r)   r‰  rß  rŽ  rã  rä  rå  rë  rì  rî  ró  rô  rö  rû  rý  rÿ  r  r  r   r   r   r   rÖ  W  s$   
	
			
rÖ  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestCompoundz:
        Feature: Compound types correctly round-trip
    c              
   C   s°   t  dt jfdt jfdt jfdt jfdt jfdt jfdt jfg¡}t jd|d	�}|jD ]}t j d¡d
 ||< qV|| jd< | jd d }|  	t  
||k¡¡ |  |j|j¡ dS )z: Compound types are read back in correct order (issue 236)ÚweightZcputimeZwalltimeZparents_offsetZ	n_parentsÚstatusÚendpoint_type©r7  rI   r–   Útest.N)rC   rB   Úfloat64Zuint32Úuint8rù   ÚfieldsrK  r   r`   rð   r,   )r   rþ   r0  ÚkeyÚoutdatar   r   r   Útest_rt0  s    ú

zTestCompound.test_rtc                 C   s´   t  dt jdffdt jfg¡}t jd|d�}|jD ] }t jj|| jd�d ||< q2| jj	dd|d�}|jD ]}|| ||< ql| jd d	 }|  
t  ||k¡¡ |  |j|j¡ d S )
Nr  rd   r  r  rI   rP  r–   r  .)rC   rB   r	  r
  rù   r  rK  r-   r   r"   r`   rð   r,   )r   rþ   r0  r  r'   r  r   r   r   Útest_assignD  s    ÿ

zTestCompound.test_assignc                 C   s@  t  dt jfdt jfdt jfg¡}t jd|d�}|jD ]}t j d¡d ||< q6|| jd< t j | jd  ddg¡d d … |ddg ¡ t j | jd  d¡d d … |d ¡ t j t  	| jd  ddg¡¡|ddg ¡ t  dt j
fg¡}t j t j	| jd  dg¡|d�|dg  |¡¡ t| jd  d¡ƒdk�s<t‚d S )	Nr  r†  r‡  r  rI   r–   r  r7  )rC   rB   r	  rù   r  rK  r   r¨   r©   rú  rÆ   Úastyperè   rq   )r   rþ   r0  r  Zdt_intr   r   r   Útest_fieldsU  s6    ý

 
ÿ ÿ 
ÿþzTestCompound.test_fieldsN)r   r   r   r)   r  r  r  r   r   r   r   r  *  s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSubarrayc                 C   st   | j jdddd�}dddg|d< tj |d d … dddgg¡ d	d
dgg|d d …< tj |d d … d	d
dgg¡ d S ©Nr~   r1   Z3int8rI   r   rR   rd   r   r!   rŸ   r9   )r   r"   rC   r¨   r©   r&   r   r   r   Útest_write_listz  s
    zTestSubarray.test_write_listc                 C   s€   | j jdddd�}t dddg¡|d< tj |d d … dddgg¡ t d	d
dgg¡|d d …< tj |d d … d	d
dgg¡ d S r  )r   r"   rC   r…   r¨   r©   r&   r   r   r   Útest_write_array‚  s
    zTestSubarray.test_write_arrayN)r   r   r   r  r  r   r   r   r   r  y  s   r  c                   @   s,   e Zd ZdZddddœZdd„ Zdd	„ Zd
S )ÚTestEnumzM
        Feature: Enum datatype info is preserved, read/write as integer
    r   r   r  )ZREDZGREENZBLUEc                 C   sD   t j| jdd�}| jjdd|d�}|j}t  |¡}|  || j¡ dS )z= Enum datasets can be created and type correctly round-trips r  ©Zbasetyper  r¯  rI   N)r_   Ú
enum_dtypeÚEDICTr   r"   rB   Zcheck_enum_dtyper,   )r   rþ   r'   Zdt2Zdict2r   r   r   rÎ   “  s
    
zTestEnum.test_createc                 C   sp   t j| jdd�}| jjdd|d�}d|d< d|dd	d	…f< |  |d d¡ |  |dd	d	…f tjd
dd�¡ d	S )z/ Enum datasets can be read/written as integers rÙ   r  r  r¯  rI   r  )é#   é%   r   N)dr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )	r_   r  r  r   r"   r,   rg   rC   r…   rí  r   r   r   Útest_readwrite›  s    zTestEnum.test_readwriteN)r   r   r   r)   r  rÎ   r  r   r   r   r   r  ‹  s   r  c                   @   s:   e Zd ZdZdd„ Ze eedƒd¡dd„ ƒZ	dd	„ Z
d
S )Ú
TestFloatszA
        Test support for mini and extended-precision floats
    c                 C   sJ   | j jdd|d�}|  |j|¡ tjd|d�}||d< |  |d |¡ d S )Nr  r•   rI   .)r   r"   r,   rB   rC   r\   rg   )r   rþ   r/   rZ   r   r   r   Ú	_exectest«  s
    zTestFloats._exectestrÇ  zNumPy float16 support requiredc                 C   s   |   t d¡¡ dS )z Mini-floats round trip rÇ  N)r  rC   rB   r   r   r   r   Ú	test_mini²  s    zTestFloats.test_minic                 C   s<   t tdƒr"|  tjjt d¡¡ n|  tjjt d¡¡ dS )z Test mapping for float16 rÇ  z<f2z<f4N)rW   rC   r,   r   Z
IEEE_F16LErB   r   r   r   r   Útest_mini_mapping¸  s    
zTestFloats.test_mini_mappingN)r   r   r   r)   r  r   Ú
skipUnlessrW   rC   r  r   r   r   r   r   r  ¥  s
   
r  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestTrackTimesz"
        Feature: track_times
    c                 C   s2   | j jdddd�}tj |j¡j}|  d|¡ dS )zC check that when track_times=False, the time stamp=0 (Jan 1, 1970) r   r    F©r•  r   N)r   r"   r_   r—  r˜  r™  rš  r,   )r   r'   Zds_mtimer   r   r   Útest_disable_track_timesÆ  s    z'TestTrackTimes.test_disable_track_timesc              	   C   s,   |   t¡� | jjdddd� W 5 Q R X dS )z3 check that when give track_times an invalid value r   r    Únullr#  NrE   r   r   r   r   Útest_invalid_track_timesÌ  s    z'TestTrackTimes.test_invalid_track_timesN)r   r   r   r)   r$  r&  r   r   r   r   r"  À  s   r"  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestZeroShapez7
        Features of datasets with (0,)-shape axes
    c                 C   s|   | j jdddd�}|  |jt |¡j¡ | j jdddd�}|  |jt |¡j¡ | j jdd	d
d�}|  |jt |¡j¡ dS )z1 Empty datasets can be converted to NumPy arrays r  r   NrŸ  r†  ©r   r   r‡  ©r   r   )NN)r   r"   r,   r-   rC   r…   r&   r   r   r   Útest_array_conversionØ  s    z#TestZeroShape.test_array_conversionc                 C   s~   ddg}| j jdd|dd�}tjd|d�}|  |d j|j¡ |  |d j|j¡ |  |d	 j|j¡ |  |d	 j|j¡ d
S )z- Slicing into empty datasets works correctly )r~   r   )r€   r  r  r(  r   ró   rI   .r   N)r   r"   rC   Úemptyr,   r-   rB   )r   rþ   r'   r¯   r   r   r   Útest_readingã  s    zTestZeroShape.test_readingN)r   r   r   r)   r*  r,  r   r   r   r   r'  Ò  s   r'  )r   r:   r9   z+Issue with empty region refs in HDF5 1.10.6©Úreasonc                   @   s@   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
d„ Z	dS )ÚTestRegionRefsz3
        Various features of region references
    c                 C   s@   t  | ¡ t d¡ d¡| _| jjd| jd�| _| j| jd< d S )Ni'  r¯  r  rY   .)	r   r   rC   rf   rh   rZ   r   r"   r/   r   r   r   r   r   ú  s    
zTestRegionRefs.setUpc                 C   s@   t jdd…ddd…f }| jj| }|  | j| | j| ¡ dS )z4 Region references can be used as slicing arguments r’  r  r:   r–   rŸ   N)rC   r·   r/   Ú	regionrefrg   rZ   ©r   ZslicÚrefr   r   r   Útest_create_ref   s    zTestRegionRefs.test_create_refc                 C   s,   | j jd d… }| j | }|jdks(t‚d S )Nr   )r/   r0  r=   rq   )r   r2  rò  r   r   r   Útest_empty_region  s    
z TestRegionRefs.test_empty_regionc                 C   s–   | j jdddd�}tj tjj¡}| ¡  tj |jdtjj	|¡}|| t 
t d¡¡ks^t‚| ¡  tj |jdtjj	|¡}|| |d ks’t‚d S )NZscalarç      ð?rü   ©rZ   rB   ó   .r   )r   r"   r_   Zh5sÚcreateZSCALARZselect_noneZh5rrl   ZDATASET_REGIONr�   rC   rB   rq   Z
select_all)r   r'   Zsidr2  r   r   r   Útest_scalar_dataset  s    z"TestRegionRefs.test_scalar_datasetc                 C   sX   t jdd…ddd…f }| jj| }|  | jj |¡| jj¡ |  | jj |¡d¡ dS )z, Region reference shape and selection shape r’  r  r:   r–   rŸ   )r:   é   N)rC   r·   r/   r0  r,   r-   Z	selectionr1  r   r   r   Útest_ref_shape  s    zTestRegionRefs.test_ref_shapeN)
r   r   r   r)   r   r3  Úempty_regionref_xfailr4  r9  r;  r   r   r   r   r/  ô  s   

r/  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú
TestAstypez(.astype() wrapper & context manager
    c                 C   sL   | j jdddd�}t d¡|d< | d¡d d … }|  |tjddd�¡ d S ©Nr  r•   rÚ   rI   r–   .rü   )r   r"   rC   rf   r  rg   ©r   r/   r¯   r   r   r   Útest_astype_wrapper'  s    zTestAstype.test_astype_wrapperc                 C   s:   | j jdddd�}t d¡|d< |  dt| d¡ƒ¡ d S r>  )r   r"   rC   rf   r,   rè   r  r.   r   r   r   Útest_astype_wrapper_len.  s    z"TestAstype.test_astype_wrapper_lenc                 C   sN   | j jdddd�}t d¡|d< tj| d¡dd�}|  |tjddd�¡ d S r>  )r   r"   rC   rf   rú  r  rg   r?  r   r   r   Útest_astype_wrapper_asarray3  s    z&TestAstype.test_astype_wrapper_asarrayN)r   r   r   r)   r@  rA  rB  r   r   r   r   r=  $  s   r=  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestScalarCompoundzl
        Retrieval of a single field from a scalar compound dataset should
        strip the field info
    c                 C   s:   t  dg¡}| jjdd|d�}|  |d jt  d¡¡ d S )Nr  r  r   rI   r~   r  )rC   rB   r   r"   r,   )r   rþ   r/   r   r   r   Útest_scalar_compoundA  s    z'TestScalarCompound.test_scalar_compoundN)r   r   r   r)   rD  r   r   r   r   rC  :  s   rC  c                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestVlenc                 C   sV  t  t¡}| jjdd|d�}t d¡|d< t d¡|d< dddg|d< t d¡|d< |  |d t d¡¡ |  |d t d¡¡ |  |d t dddg¡¡ |  |d t d¡¡ tjt d¡t d	¡gt	d�|dd…< |  |d t d¡¡ |  |d t d	¡¡ t t d¡t d¡g¡|dd…< |  |d t d¡¡ |  |d t d¡¡ d S )
NÚvlenr    rI   rd   r   r   rR   rŸ   r!   )
r_   Ú
vlen_dtyperR  r   r"   rC   rf   rg   r…   r†   rí  r   r   r   rU  I  s     
&"zTestVlen.test_intc                 C   s6   t  t¡}| jjdd|d�}| j dd|d j¡ d S )NrF  r1   rI   Úvlen2r   )r_   rG  rR  r   r"   rB   rí  r   r   r   Útest_reuse_from_other[  s    
zTestVlen.test_reuse_from_otherc                 C   sl   dt fdt t ¡fg}| jjdd|d�}| jj}| j ¡  t |d¡| _| j dd| jd d d j¡ d S )Nr~   r€   rF  r1   rI   rH  r   )	rR  r_   rG  r   r"   rM  r   r   rB   )r   rþ   r'   Úfnamer   r   r   Útest_reuse_struct_from_other`  s    
z%TestVlen.test_reuse_struct_from_otherc                 C   sN  t  t¡}| jjdd|d�}t ddg¡|d< t dg¡|d< ddd	g|d< |  |d t ddg¡¡ |  |d t dg¡¡ |  |d t ddd	g¡¡ tjd
ddddgt d¡gt	d�|dd…< |  |d t d¡¡ |  |d t d¡¡ t t d
ddg¡t dddg¡g¡|dd…< |  |d t d	¡¡ |  |d t d	¡¡ d S )NrF  rê   rI   gffffffö?g333333ó?r   r   rR   rd   gš™™™™™¹?gš™™™™™ñ?gÍÌÌÌÌÌ @gÍÌÌÌÌÌ@r!   rŸ   çš™™™™™@çš™™™™™É?)
r_   rG  rR  r   r"   rC   r…   rg   rf   r†   rí  r   r   r   Útest_converth  s     
*ÿzTestVlen.test_convertc                 C   s®   t  t¡}| jjdd|d�}t d¡|d< tjt d¡t d¡gt d¡t d¡ggtd�|d d …d d …f< t t d¡t d¡gt d¡t d¡gg¡|d d …d d …f< d S )NrF  )rR   rR   rI   r   r)  rd   rR   )	r_   rG  rR  r   r"   rC   rf   r…   r†   rí  r   r   r   Útest_multidimy  s    
ÿÿÿzTestVlen.test_multidimrF  c                 C   sh  t  |¡}| jj|d|d�}tjdddg|d�}tjdddd	d
g|d�}tjdddgt d¡d�}| |¡}dddddg}	tj|	|d�}
ddddddg}tj||d�}||d< ||d< ||d< |	|d< ||d< |  ||d ¡ |  ||d ¡ |  ||d ¡ |  |
|d ¡ |  ||d ¡ tjddg|d�}
|
dd… |d< |  |
|d ¡ | j 	¡  | j 
¡  dS )z¿
        Helper for testing various vlen numpy data types.
        :param np_dt: Numpy datatype to test
        :param dataset_name: String name of the dataset to create for testing.
        rÄ  rI   r5  g       @g      >@g33333Y@gÍÌÌÌÌi@gfffff†X@g      %Àg     ÀrÀr   rR   rç  rÆ   g      Œ@r  g      à¿r¤   iœÿÿÿr   i'  r™   rd   r!   g333333Ó?rL  N)r_   rG  r   r"   rC   r…   rB   r  rg   r/  r   )r   Únp_dtZdataset_namerþ   r'   Zarray_0Zarray_1Zarray_2Zcasted_array_2Zlist_3Zlist_array_3Zlist_4Zlist_array_4r   r   r   Ú_help_float_testing‚  s2    


zTestVlen._help_float_testingc                 C   s   t  d¡}|  |¡ d S )NrÇ  ©rC   rB   rQ  ©r   rP  r   r   r   Útest_numpy_float16²  s    
zTestVlen.test_numpy_float16c                 C   s   t  d¡}|  |¡ d S )NÚfloat32rR  rS  r   r   r   Útest_numpy_float32¶  s    
zTestVlen.test_numpy_float32c                 C   s   t  d¡}|  |¡ d S )Nr	  rR  rS  r   r   r   Útest_numpy_float64_from_dtypeº  s    
z&TestVlen.test_numpy_float64_from_dtypec                 C   s   t j}|  |¡ d S r   )rC   r	  rQ  rS  r   r   r   Útest_numpy_float64_2¾  s    zTestVlen.test_numpy_float64_2c              	   C   s"  | j jddt d¡d� t dddddddg¡}|ddd… | j d d	< t| j d d	 |ddd… kƒsŽt| j d d	 › d
|ddd… › �ƒ‚| j jddt d¡d� t dddddddg¡}|ddd… | j d d	< t| j d d	 |ddd… kƒ�st| j d d	 › d
|ddd… › �ƒ‚dS )z4Test that non-contiguous arrays are stored correctlyÚncr²   rF  rI   TFNrR   r   z != Znc2Zint8r!   r   rŸ   r¤   rd   r    )r   r"   r_   rG  rC   r…   rð   rq   )r   r  r†  r   r   r   Útest_non_contiguous_arraysÂ  s    Fz#TestVlen.test_non_contiguous_arraysN)rF  )r   r   r   rU  rI  rK  rN  rO  rQ  rT  rV  rW  rX  rZ  r   r   r   r   rE  H  s   	
0rE  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestLowOpenc                 C   s   | j  dd¡}|j ¡ }dS )z Test H5Dget_access_plist r   r    N)r   r"   rl   rg  )r   r'   Zp_listr   r   r   Útest_get_access_listÓ  s    z TestLowOpen.test_get_access_listc                 C   sH   t j t jj¡}| j dd¡}~t j | jjd|¡}|  	|t jj
¡ dS )z# Test the dapl keyword to h5d.open r  r•   ó   xN)r_   Zh5pr8  ZDATASET_ACCESSr   r"   Zh5dra  rl   r#   Z	DatasetID)r   Zdaplr/   Údsidr   r   r   Ú	test_daplØ  s
    zTestLowOpen.test_daplN)r   r   r   r\  r_  r   r   r   r   r[  Ñ  s   r[  )r   r:   rŸ   z#chunk info requires  HDF5 >= 1.10.5c               	   C   s@  ddl m}  | ƒ }t |d¡�(}|jddddd� d	|d d d …< W 5 Q R X | d¡ t |d
¡�Ô}|d j}| ¡ dks~t‚t	dƒD ]`}t
t t |d¡¡d ƒ}| |¡}|j|ks¼t‚|jdksÊt‚|jd k	sØt‚|jdks†t‚q†| d¡}|jdk�st‚|jdk�st‚|jd k	�s"t‚|jdk�s2t‚W 5 Q R X d S )Nr   ©ÚBytesIOr   r  r¯  r^   rÙ   ©r-   rÞ   rB   r   rI  r–   r:   r)  )Úiora  r_   r   r"   Úseekrl   Úget_num_chunksrq   rN  rç   rC   r…   Zunravel_indexÚget_chunk_infoÚchunk_offsetÚfilter_maskÚbyte_offsetr=   Zget_chunk_info_by_coord)ra  ÚbufÚfoutÚfinr'   ÚjÚoffsetÚsir   r   r   Útest_get_chunk_detailsá  s*    



rp  )r   rï   rd   )r   r:   r:   )r   r:   éc   zJchunk iteration requires  HDF5 1.10.10 and later 1.10, or 1.12.3 and laterc               	      sÌ   ddl m}  | ƒ }t |d¡�(}|jddddd� d	|d d
d
…< W 5 Q R X | d¡ t |d¡�`}|d j}| ¡ }|dks‚t‚i ‰ t	|ƒD ]}| 
|¡}|ˆ |j< qŽ‡ fdd„}| |¡ W 5 Q R X d
S )z%H5Dchunk_iter() for chunk informationr   r`  r   r  r¯  r^   rÙ   rb  r   NrI  r–   c                    sN   ˆ | j  }| j |j kst‚| j|jks*t‚| j|jks:t‚| j|jksJt‚d S r   )rg  rq   rh  ri  r=   )Z
chunk_infoZknown©Úcir   r   Úcallback  s
    
z!test_chunk_iter.<locals>.callback)rc  ra  r_   r   r"   rd  rl   re  rq   rN  rf  rg  Z
chunk_iter)ra  rj  r   r^  Z
num_chunksrm  ro  rt  r   rr  r   Útest_chunk_iterÿ  s     


ru  c                 C   s.   | j ddd�}|jd kst‚|jd ks*t‚d S )Nr+  rÆ   rI   )r"   r-   rq   rä   )rª   r'   r   r   r   Útest_empty_shape  s    rv  c               	   C   sœ   ddl m}  | ƒ }t |d¡�}|jddd� W 5 Q R X | d¡ t |d¡�D}|d jd ksbt‚|d j 	¡ d ksxt‚|d j 
¡ dksŽt‚W 5 Q R X d S )Nr   r`  r   r+  r
  rI   rI  )rc  ra  r_   r   r"   rd  rÞ   rq   rl   Z
get_offsetZget_storage_size)ra  rj  rk  rl  r   r   r   Útest_zero_storage_size%  s    
rw  c                 C   sœ   t  t j¡jt  t j¡jd g}| jd|t jd�}|jt  t j¡ksHt‚t j 	|d d … t j
|t jd�¡ ||d d …< t j 	|d d … t j
|t jd�¡ d S )Nr   r  r6  rI   )rC   Ziinfor£   Úmaxr"   Zuint64rB   rq   r¨   r©   r…   )rª   rZ   r'   r   r   r   Útest_python_int_uint643  s     "ry  c                 C   s>   | j ddtjd�}tjjddd�}||d d …ddd	gd
f< d S )NrZ   )rŸ   rx  rR   rI   éÿ   )rŸ   rd   rR   rP  r   rR   r!   .)r"   rC   r
  rK  rQ  )rª   r¯   Úblockr   r   r   Útest_setitem_fancy_indexingA  s    r|  c               	   C   s0   t tdƒƒ�} | d d dks"t‚W 5 Q R X d S )Nzvlen_string_dset.h5ZDS1r   s   Parting©r   r   rq   ©r   r   r   r   Útest_vlen_spacepadH  s    r  c               	   C   s0   t tdƒƒ�} | d d dks"t‚W 5 Q R X d S )Nzvlen_string_dset_utc.h5Zds1r   s   2009-12-20T10:16:18.662409Zr}  r~  r   r   r   Útest_vlen_nulltermM  s    r€  )r   r:   rd   z>Appears you cannot pass an unknown filter id for HDF5 < 1.10.3c                 C   s0   d}| j ddtj|dd�}t|ƒ|jks,t‚d S )Né   rZ   r^   T)r-   rB   r  Zallow_unknown_filter)r"   rC   r
  r%   Ú_filtersrq   )rª   Zfake_filter_idr'   r   r   r   Útest_allow_unknown_filterR  s       þrƒ  c               
   C   sî   ddl m}  | ƒ }t |d¡�V}|jdddddd	d
d�}|j ¡  ¡ }|j ¡  ¡ dd… |ksdt	‚|dkspt	‚W 5 Q R X | 
d¡ t |d¡�T}|jddddddd�}|j ¡  ¡ }|j ¡  ¡ dd… |ksÔt	‚|dksàt	‚W 5 Q R X dS )z2Chunk cache configuration for individual datasets.r   r`  r   r  )r:   r�   )rŸ   r!   rÙ   é    rM  éå  )r-   rÞ   rB   Úrdcc_nbytesÚrdcc_w0Úrdcc_nslotsr   N)r…  r„  rM  rI  é  0 çq=
×£på?éÅ  )r-   rB   r†  r‡  rˆ  )r‹  r‰  rŠ  )rc  ra  r_   r   r"   rl   rg  Zget_chunk_cacheZ	get_cacherq   rd  rÍ   )ra  rj  rk  r'   Zds_chunk_cacherl  r   r   r   Útest_dset_chunk_cache`  s8         þ
    þrŒ  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTestCommutativez|
    Test the symmetry of operators, at least with the numpy types.
    Issue: https://github.com/h5py/h5py/issues/1947
    c                 C   s¬   d}| j jd|ttjj|Ž d�}t |d ¡}t ||k||kk¡sHt‚t ||k||kk¡sbt‚d}t 	|¡| }t ||k||kk¡sŽt‚t ||k||kk¡s¨t‚dS )z‹
        Create a h5py dataset, extract one element convert to numpy
        Check that it returns symmetric response to == and !=
        ©r–   r   r  ©rB   rZ   r   gü©ñÒMbP?N)
r   r"   rC  rC   rK  rL  r	  rð   rq   Znanmax)r   r-   r/   ÚvalÚdeltaZnvalr   r   r   Útest_numpy_commutative{  s    
ÿz&TestCommutative.test_numpy_commutativec                 C   sT   d}| j jd|ttjj|Ž d�}tdƒ}||k||kks<t‚||k||kksPt‚dS )z¦
        Create a h5py dataset and check basetype compatibility.
        Check that operation is symmetric, even if it is potentially
        not meaningful.
        rŽ  r  r�  r  N)r   r"   rC  rC   rK  rL  rq   )r   r-   r/   r�  r   r   r   Útest_basetype_commutative“  s    
ÿz)TestCommutative.test_basetype_commutativeN)r   r   r   r)   r’  r“  r   r   r   r   r�  v  s   r�  c                   @   sH   e Zd ZdZejejdk dd�dd„ ƒZejejdk dd�dd„ ƒZ	d	S )
ÚTestVirtualPrefixz%
    Test setting virtual prefix
    )r   r:   rR   z8Virtual prefix does not exist before HDF5 version 1.10.2r-  c                 C   sR   d}d}| j jd|ttjj|Ž |d�}t |j 	¡  
¡  ¡ ¡ ¡ }||ksNt‚d S )NrŽ  ú/path/to/virtualr  )rB   rZ   Úvirtual_prefix)r   r"   rC  rC   rK  rL  re  rf  rl   rg  Úget_virtual_prefixri  rj  rq   )r   r-   r–  r/   Úvirtual_prefix_readbackr   r   r   Útest_virtual_prefix_create§  s    
þz,TestVirtualPrefix.test_virtual_prefix_createc                 C   s^   d}| j jddd|d�}t |j ¡  ¡  ¡ ¡ ¡ }|  	||¡ |  
|t¡ |  	|jd¡ d S )Nr•  r   rc   r   )r–  )r   rÍ   re  rf  rl   rg  r—  ri  rj  r,   r#   r   r-   )r   r–  r/   r˜  r   r   r   Útest_virtual_prefix_require³  s    z-TestVirtualPrefix.test_virtual_prefix_requireN)
r   r   r   r)   r   rV   r   rd  r™  rš  r   r   r   r   r”  £  s   ÿ

ÿr”  )ar)   re  rp  rÍ  ÚnumpyrC   rK   rM   ÚwarningsÚcommonr   r   Ú
data_filesr   r_   r   r   r   Zh5py._hl.baser	   r
   r   r   Zh5py.h5py_warningsr   r   Zh5py._hl.selectionsr  Z
selectionsÚselr   r   r*   rX   r“   rÅ   rÌ   rÜ   rö   rÃ   rÄ   rR  rÆ   r£   rC  rU  r	  r×  r  r  rV   Úfiltersrâ  r  r$  r-  r5  r:  r=  r@  rY  r‚  r‘  r£  r³  rÃ  rÉ  rÑ  rÖ  r  r  r  r  r"  r'  rN   rd  r<  r/  r=  rC  rE  r[  r!  rp  ru  rv  rw  ry  r|  r  r€  Zskipifrƒ  rŒ  r�  r”  r   r   r   r   Ú<module>
   sÎ   		FY0(CC&
õ
,'qc,D TO
þ0 
ÿ
þ

þ

-