o
    bi<                    @   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 ddl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(G dd de Z)ej*+d e,dfej-dfej.dfe/d!fej0d!fej1d!fej2d"d#d$d%fej2d&d#d$d%fej2d"d'd%fej2d&d'd%fe2 d%fgd(d) Z3G d*d+ d+e Z4e
5d,ej6j7vd-G d.d/ d/e Z8e
5d,ej6j7vd-G d0d1 d1e Z9e
5d2ej6j7vd3G d4d5 d5e Z:e
5d6ej6j7vd7G d8d9 d9e Z;e
5d:ej6j7vd;G d<d= d=e Z<e
5d>ej6j7vd?G d@dA dAe Z=e
5dBej6j7vdCG dDdE dEe Z>G dFdG dGe Z?G dHdI dIe Z@G dJdK dKe ZAG dLdM dMe ZBG dNdO dOe ZCG dPdQ dQe ZDG dRdS dSe ZEG dTdU dUe ZFG dVdW dWe ZGG dXdY dYe ZHG dZd[ d[e ZIG d\d] d]e ZJG d^d_ d_e ZKG d`da dae ZLG dbdc dce ZMej*jNejjOddkdedfZPG dgdh dhe ZQG didj dje ZRG dkdl dle ZSG dmdn dne ZTG dodp dpe ZUdqdr ZVe
WejjOdskpBejjOdtkoBejjOduk dvdwdx ZXdydz ZYd{d| ZZd}d~ Z[dd Z\dd Z]dd Z^dd Z_dd Z`G dd de ZaG dd de ZbdddZcdddZdej*j+ddd ecfdd ecfdd ecfdd edfgg ddZeedk rdndZfej*+ddefgeedd Zgej*jhedk ddfeedd Zieedd Zjeedd Zkeedd Zleedd Zmd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)version)NUMPY_RELEASE_VERSIONc                   @      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   K/home/ubuntu/.local/lib/python3.10/site-packages/h5py/tests/test_dataset.pysetUp'   s   zBaseDataset.setUpc                 C   s   | j r
| j   d S 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                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	TestReprz5
        Feature: repr(Dataset) behaves sensibly
    c                 C   s&   | j jdddd}t|dksJ d S )Nfoo   int32dtypez,<HDF5 dataset "foo": shape (4,), type "<i4">r   create_datasetreprr   dsr   r   r   test_repr_basic4      zTestRepr.test_repr_basicc                 C   s,   | j dd}| j   t|dksJ dS )z( repr() works on live and dead datasets r"   r#   z<Closed HDF5 dataset>N)r   r)   r   r*   r+   r   r   r   test_repr_closed8   s   
zTestRepr.test_repr_closedc                 C   s&   | j jd ddd}t|dksJ d S )Nr#   r%   r&   z2<HDF5 dataset (anonymous): shape (4,), type "<i4">r(   r+   r   r   r   test_repr_anonymous>   r.   zTestRepr.test_repr_anonymousN)r   r   r   __doc__r-   r/   r0   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       | 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_scalarI      z"TestCreateShape.test_create_scalarc                 C   r3   )z Create a size-1 dataset r"   r   Nr4   r7   r   r   r   test_create_simpleN   r:   z"TestCreateShape.test_create_simplec                 C       | j dd}| |jd dS )z+ Create a size-1 dataset with integer shaper"   r   r;   Nr4   r7   r   r   r   test_create_integerS   r:   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"   ?   rA   bar   
   <   Nr   r)   r5   r6   sizer7   r   r   r   test_create_extendedX      z$TestCreateShape.test_create_extendedc                 C   sX   | j dd}| |jd | |jd | j dd}| |jd | |jd dS )r?   r"   rA   r@   rB   rC   rF   NrG   r7   r   r   r   test_create_integer_extendeda   rJ   z,TestCreateShape.test_create_integer_extendedc                 C   s&   | j dd}| |jtd dS )) Confirm that the default dtype is float r"   r@   z=f4Nr   r)   r5   r'   npr7   r   r   r   test_default_dtypej   s   z"TestCreateShape.test_default_dtypec                 C   s<   |  t | jd W d   dS 1 sw   Y  dS )z  Missing shape raises TypeError r"   NassertRaises	TypeErrorr   r)   r   r   r   r   test_missing_shapeo   s   "z"TestCreateShape.test_missing_shapec                 C   sF   | j jddtjd}t dv rtdt   | |j	tj dS )rL   r"   r@   r&   )ppc64lez(Storage of long double deactivated on %sN)
r   r)   rN   
longdoubleplatformmachinepytestxfailr5   r'   r7   r   r   r   test_long_doublet   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 )rL   r"   r@   r[   r&   N)r   r)   rN   r'   r5   r7   r   r   r   test_complex256{   s   
zTestCreateShape.test_complex256c                 C   s<   | j dd}| |jd | j dd}| |jd d S )Ns   foor;   s   bar/baz   r4   r   r8   dset2r   r   r   test_name_bytes   s   zTestCreateShape.test_name_bytesN)r   r   r   r1   r9   r<   r>   rI   rK   rO   rS   rZ   r   skipIfhasattrrN   r\   ra   r   r   r   r   r2   C   s    		
r2   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   0   t dd}| jjd|d}| |j|j dS )z- Create a scalar dataset from existing array r   r   r"   dataNrN   onesr   r)   r5   r6   r   rg   r8   r   r   r   r9         z!TestCreateData.test_create_scalarc                 C   re   )z/ Create an extended dataset from existing data r@   r   r"   rf   Nrh   rj   r   r   r   rI      rk   z#TestCreateData.test_create_extendedc                 C   s4   | j jdddd}| |tj | d| j v  dS )z1 Create dataset with missing intermediate groups z/foo/bar/bazrE   rE   z<i4)r6   r'   N)r   r)   assertIsInstanceh5pyr   
assertTruer+   r   r   r   test_dataset_intermediate_group      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   r&   r"   rE      r6   rg   .N)rN   aranger   r)   r5   r6   assertArrayEqualreshaperj   r   r   r   test_reshape   s   zTestCreateData.test_reshapec                 C   s@   |  t t| jd j W d   dS 1 sw   Y  dS )zE Binding Dataset to a non-DatasetID identifier fails with ValueError /N)rQ   
ValueErrorr   r   idr   r   r   r   test_appropriate_low_level_id   s   "z,TestCreateData.test_appropriate_low_level_idc                 C   sb   |j  }t|tjsJ | |ksJ |d u r!| sJ d S | r'J | |ks/J d S r   )r|   get_type
isinstancer   TypeStringIDget_csetis_variable_strget_size)r   r8   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                        j | tjd d d S Nr   )r   r   
CSET_ASCIIr8   r   r   r   check_vlen_ascii      z?TestCreateData.test_create_bytestring.<locals>.check_vlen_asciia   abcrf   b   defcdr&   Nr   r)   rN   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   S3r&   rf   rt   r   )r   r)   rN   r   r   r   r   r7   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                    r   r   )r   r   	CSET_UTF8r   r   r   r   check_vlen_utf8   r   z;TestCreateData.test_create_strings.<locals>.check_vlen_utf8r   abcrf   r   defr   r   r&   r   )r   r   r   r   r   test_create_strings   s   z"TestCreateData.test_create_stringsc                 C   sN   |  t | jjdtjddgddd W d    d S 1 s w   Y  d S )Nr   r   r   U3r&   rf   )rQ   rR   r   r)   rN   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   r&   )r   r)   ro   r	   r|   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   r&   rf   )r   r)   rn   Emptyro   r	   r|   r   r   r   r   !test_empty_create_via_Empty_class   s   z0TestCreateData.test_empty_create_via_Empty_classc                 C   sH   |  t | jjddtdd W d    d S 1 sw   Y  d S )NrB   r$   rt   ru   )rQ   r{   r   r)   rN   rv   r   r   r   r   test_create_incompatible_data   s   "z,TestCreateData.test_create_incompatible_dataN)r   r   r   r1   r9   rI   rp   ry   r}   r   r   r   r   r   r   r   r   r   r   r   r   rd      s    

rd   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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   rE   2   rF   F   Z   Nrr   rE      r   r         	   rD   r^   rD   rt   c           
      C   sl   t jt|dd|}|jd||d}t j|ddd}| }	|| |	|< |||| t j	||	 d S )Nint64r&   r8   rf   )
rN   rv   r
   rx   r)   fullcopyread_directtestingassert_array_equal)
r   writable_filesource_shape
dest_shape
source_seldest_selsource_valuesr8   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 )Nr8   rE   rE   r   r&   rf   )r)   rN   rv   ri   r   r   r   r   r   r8   r   r   r   r   test_no_sel   s   
zTestReadDirectly.test_no_selc                 C   sl   |j ddd}tdd}tt ||tjdd tjdd  W d    d S 1 s/w   Y  d S 	Nedsetr   r&   r   r   rE   r   rF   )r)   rN   ri   rX   raisesrR   r   s_)r   r   
empty_dsetr   r   r   r   
test_empty   s
   $"zTestReadDirectly.test_emptyc                 C   T   |j dddd}td}tt || W d    d S 1 s#w   Y  d S Nr8   r   r   r&      r)   rN   ri   rX   r   rR   r   r   r   r   r   test_wrong_shape  
   
"z!TestReadDirectly.test_wrong_shapec                 C   X   |j dddd}tjddd}tt || W d    d S 1 s%w   Y  d S Nr8   rl   r   r&   F)orderr   r   r   r   r   test_not_c_contiguous  
   "z&TestReadDirectly.test_not_c_contiguousc                 C   sz   d}|j d|tjd}tj|tjd}|| tjdtjd}tt || W d    d S 1 s6w   Y  d S )N)r   r   r8   r&   )r      )r)   rN   r   zerosr   rX   r   rR   )r   r   r6   r8   r   arr2r   r   r   test_zero_length  s   
"z!TestReadDirectly.test_zero_length)r   r   r   r1   rX   markparametrizerN   r   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   rE   r   rF   r   r   Nr   r   r   r   r   r^   rD   rt   c           	      C   sj   |j d|ddd}tt||}tj|ddd}|| ||< |||| tj|d d  | d S )Nr8   r%   r   r'   	fillvaluer&   )	r)   rN   rv   r
   rx   r   write_directr   r   )	r   r   r   r   r   r   r8   r   r   r   r   r   test_write_direct$  s   	z#TestWriteDirectly.test_write_directc                 C   sf   |j ddd}tt |tdtjdd tjdd  W d    d S 1 s,w   Y  d S r   )r)   rX   r   rR   r   rN   ri   r   )r   r   r   r   r   r   r   4  s   *"zTestWriteDirectly.test_emptyc                 C   r   r   r)   rN   ri   rX   r   rR   r   r   r   r   r   r   9  r   z"TestWriteDirectly.test_wrong_shapec                 C   r   r   r   r   r   r   r   r   ?  r   z'TestWriteDirectly.test_not_c_contiguous)r   r   r   r1   rX   r   r   rN   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"   rs   r   N)r   require_datasetrm   r   r5   r6   r7   r   r   r   test_createL  s   zTestCreateRequire.test_createc                 C   s0   | j ddd}| j ddd}| || dS )z) require_dataset yields existing dataset r"   rs   r   Nr   r   r5   r_   r   r   r   test_create_existingR  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"   rE   r   rB   r   bazs   bazNr   r_   r   r   r   test_create_1DX  s   z TestCreateRequire.test_create_1Dc                 C   sP   | j ddd | t | j ddd W d   dS 1 s!w   Y  dS )z6 require_dataset with shape conflict yields TypeError r"   rs   r   )rE   r$   Nr   r)   rQ   rR   r   r   r   r   r   test_shape_conflictf  s   "z%TestCreateRequire.test_shape_conflictc                 C   sL   | j d | t | j ddd W d   dS 1 sw   Y  dS )z< require_dataset with object type conflict yields TypeError r"   rs   r   N)r   create_grouprQ   rR   r   r   r   r   r   test_type_conflictl  s   "z$TestCreateRequire.test_type_conflictc                 C   sP   | j ddd}| t | j ddd W d   dS 1 s!w   Y  dS )zL require_dataset with dtype conflict (strict mode) yields TypeError
        r"   rs   r   S10Nr   r7   r   r   r   test_dtype_conflictr  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"   rs   r   TexactN)r   r)   r   r5   r_   r   r   r   test_dtype_exacty  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"   rs   i4i2Fr   N)r   r)   r   r5   r'   rN   r_   r   r   r   test_dtype_close  s   z"TestCreateRequire.test_dtype_closeN)r   r   r   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   F  s    r   c                   @   X   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   r6   chunksNr   r)   r5   r   r7   r   r   r   test_create_chunks     z$TestCreateChunked.test_create_chunksc                 C   s$   | j jdddd}| |jd dS )z Create via chunks integer r"   r   rE   r   r   Nr   r7   r   r   r   test_create_chunks_integer  r  z,TestCreateChunked.test_create_chunks_integerc                 C   B   |  t | jjdddd W d   dS 1 sw   Y  dS )z& Illegal chunk size raises ValueError r"   r   r   r   NrQ   r{   r   r)   r   r   r   r   test_chunks_mismatch     "z&TestCreateChunked.test_chunks_mismatchc                 C   D   |  t | jjddddd W d   dS 1 sw   Y  dS )z3 Chunked format required for given storage options r"   r   r   F)r6   maxshaper   Nr  r   r   r   r   test_chunks_false  s   "z#TestCreateChunked.test_chunks_falsec                 C   r  )z> Attempting to create chunked scalar dataset raises TypeError r"   r   r   r   NrP   r   r   r   r   test_chunks_scalar  r  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   r^   N)r   r)   rm   r   tupler5   lenr7   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"   rt   
S100000000Tr6   r'   r   r;   Nr   r7   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"   )rt   r   r   )r   r   r   r  rE   r   N(         r   r^   )r   r)   rN   r%   ro   allr7   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 d   n1 sw   Y  t jtdd}| jjdddd	 W d   dS 1 s<w   Y  dS )
z, Auto-chunking of empty datasets not allowedr   matchr"   S100T)r'   r   Nr   r'   r  )rX   r   rR   r   r)   )r   errr   r   r   test_auto_chunks_no_shape  s   "z+TestCreateChunked.test_auto_chunks_no_shapeN)r   r   r   r1   r   r  r  r	  r  r  r  r  r  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 )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         @r   r   r   N)r   r)   r5   r7   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)   r5   r   assertNotIsInstancerN   ndarrayr7   r   r   r   test_property  rq   z!TestCreateFillvalue.test_propertyc                 C   r=   )z0 .fillvalue property works correctly if not set r"   r   r   N)r   r)   r5   r   r7   r   r   r   test_property_none  r:   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   i8r;   r&   r   r"   r   r   r$   N)rN   r'   ri   r   r)   r5   r   assertAlmostEqual)r   dtvr8   r   r   r   test_compound  s
   z!TestCreateFillvalue.test_compoundc                 C   sH   |  t | jjddddgdd}W d   dS 1 sw   Y  dS )z$ Bogus fill value raises ValueError r"   r   r   i)r   r   *   r   Nr  r7   r   r   r   test_exc  s
   
"zTestCreateFillvalue.test_excN)	r   r   r   r1   r!  r$  r%  r+  r/  r   r   r   r   r    s    r  c                   @   sl   e Zd ZdZdd Zedejj	vd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 )TestFillTimezI
        Feature: Datasets created with specified fill time property
    c                 C   sT   | j jdddd}|j }| | tjj | |d d | |d d dS )z Fill time default to IFSET r"   r   r  r   r   r   N	r   r)   r|   get_create_plistr5   get_fill_timern   h5dFILL_TIME_IFSETr   r8   plistr   r   r   test_fill_time_default  s
   
z#TestFillTime.test_fill_time_defaultgzipDEFLATE is not installedc                 C   sV   | j jddddd}|j }| | tjj | |d d | |d d dS )	z5 Fill time is IFSET for compressed dataset (chunked) r"   r   r9  r  )compressionr   r   r   Nr1  r6  r   r   r   test_compressed_default   s   
z$TestFillTime.test_compressed_defaultc                 C   sV   | j jddddd}|j }| | tjj | 	|d d | 	|d d dS )	z Fill time set to NEVER r"   r   r  neverr   	fill_timer   r   N)
r   r)   r|   r2  r5   r3  rn   r4  FILL_TIME_NEVERassertNotEqualr6  r   r   r   test_fill_time_never
  s   
z!TestFillTime.test_fill_time_neverc                 C   s6   | j jddddd}|j }| | tjj dS )z# Fill time explicitly set to ALLOC r"   r   r  allocr>  N)	r   r)   r|   r2  r5   r3  rn   r4  FILL_TIME_ALLOCr6  r   r   r   test_fill_time_alloc  s
   
z!TestFillTime.test_fill_time_allocc                 C   s8   | j jdddddd}|j }| | tjj dS )z# Fill time explicitly set to IFSET r"   r   r]   r  ifset)r   r   r?  Nr1  r6  r   r   r   test_fill_time_ifset  s
   
z!TestFillTime.test_fill_time_ifsetc                 C   B   |  t | jjdddd}W d   dS 1 sw   Y  dS )z2 Choice of fill_time is 'alloc', 'never', 'ifset' r"   r   fill_badr?  Nr  r7   r   r   r   test_invalid_fill_time"  r  z#TestFillTime.test_invalid_fill_timec                 C   rH  )z fill_time must be a string r"   r   r^   rJ  Nr  r7   r   r   r   test_non_str_fill_time'  r  z#TestFillTime.test_non_str_fill_timec                 C   sx   | j jddddd}|j }| | tjj t	
|dd d s'J |d t	
|dd d s:J dS )z= The resize dataset will be filled (by default fill value 0) r"   r
  r   r   )r  r   N        )r   r)   r|   r2  r5   r3  rn   r4  r5  rN   iscloser  resizer6  r   r   r   #test_resize_chunk_fill_time_default,  s   

 z0TestFillTime.test_resize_chunk_fill_time_defaultc                 C   s|   | j jddddddd}|j }| | tjj t	
|dd d r)J |d t	
|dd d r<J dS )	z$ The resize dataset won't be filled r"   r
  r   r  r=  rM  )r  r   r?  r   N)r   r)   r|   r2  r5   r3  rn   r4  r@  rN   rO  anyrP  r6  r   r   r   !test_resize_chunk_fill_time_never8  s   

 z.TestFillTime.test_resize_chunk_fill_time_neverN)r   r   r   r1   r8  r   rb   rn   filtersencoder<  rB  rE  rG  rK  rL  rQ  rS  r   r   r   r   r0    s    
	
r0  zdt,expectedrN  utf-8r   encodingr       asciirX  c                 C   s"   |j dd| d}|j|ksJ d S )Nr"   r   r&   )r)   r   )r)  r   r   r8   r   r   r   test_get_unset_fill_valueF  s   r\  c                   @      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 f8typexr   r&   N)	rN   r'   r   r)   r5   r|   r~   ro   	committedr7   r   r   r   
test_named_  s
   zTestCreateNamedType.test_namedN)r   r   r   r1   rc  r   r   r   r   r^  Y      r^  r9  r:  c                   @   0   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   rr   r9  r   r;  compression_optsNr   r)   r5   r;  ri  r7   r   r   r   	test_gzipo  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"   rg  r9  r;  r$   Nrj  r7   r   r   r   test_gzip_implicitv     z!TestCreateGzip.test_gzip_implicitc                 C   s   | j jdddd}| |jd | |jd tjjj}z4t	 tjj_| 
t | j jdddd}W d   n1 s<w   Y  W |tjj_dS W |tjj_dS |tjj_w )z. Create with gzip level by specifying integer r"   rg  r   rl  r9  N)r   r)   r5   r;  ri  rn   _hldataset_LEGACY_GZIP_COMPRESSION_VALSr  rQ   r{   )r   r8   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 d   n1 sw   Y  |  t | jjdddd W d   n1 s9w   Y  |  t | jjddddd W d   dS 1 sYw   Y  dS )	z= Illegal gzip level (explicit or implicit) raises ValueError r"   rg     rl  Nr9  rh  )rQ   r{   RuntimeErrorr   r)   r   r   r   r   test_gzip_exc  s   "zTestCreateGzip.test_gzip_excN)r   r   r   r1   rk  rm  rs  rw  r   r   r   r   rf  h  s    rf  c                   @       e Zd ZdZdd Zdd ZdS )TestCreateCompressionNumberz?
        Feature: Datasets created with a compression code
    c                 C   sj   t jjj}zt t jj_| jjddt jjdd}W |t jj_n|t jj_w | 	|j
d | 	|jd dS )z^ Create with compression number of gzip (h5py.h5z.FILTER_DEFLATE) and a compression level of 7r"   rg  )r   rh  r9  r   N)rn   ro  rp  rq  r  r   r)   h5zFILTER_DEFLATEr5   r;  ri  )r   rr  r8   r   r   r   test_compression_number  s   
z3TestCreateCompressionNumber.test_compression_numberc                 C   s   |  t}| jjdddd W d   n1 sw   Y  | dt|j |  t}| jjdddd W d   n1 s@w   Y  | dt|j tjj	j
}z6t tjj	_
|  t | jjddtjjd W d   n1 suw   Y  W |tjj	_
dS W |tjj	_
dS |tjj	_
w )	z* Create with invalid compression numbers  r"   rg  irl  NzInvalid filterr   zUnknown compression)rQ   r{   r   r)   assertInstr	exceptionrn   ro  rp  rq  r  
IndexErrorrz  r{  )r   err  r   r   r   test_compression_number_invalid  s"   
z;TestCreateCompressionNumber.test_compression_number_invalidN)r   r   r   r1   r|  r  r   r   r   r   ry    s    ry  lzfzLZF is not installedc                   @   rx  )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"   rg  r  rl  Nr   rB   )rg   r;  r   )	r   r)   r5   r;  ri  rN   rv   flushrw   )r   r8   testdatareaddatar   r   r   test_lzf  s   

zTestCreateLZF.test_lzfc                 C   r  )z& Giving lzf options raises ValueError r"   rg  r  r$   rh  Nr  r   r   r   r   test_lzf_exc  s
   "zTestCreateLZF.test_lzf_excN)r   r   r   r1   r  r  r   r   r   r   r    s    r  szipzSZIP is not installedc                   @   r]  )TestCreateSZIPr  c                 C   s   | j jddddd}dS )z Create with explicit szip r"   rg  r  )ec   rh  N)r   r)   r7   r   r   r   	test_szip  s   
zTestCreateSZIP.test_szipN)r   r   r   r1   r  r   r   r   r   r        r  shufflezSHUFFLE is not installedc                   @   r]  )TestCreateShufflez8
        Feature: Datasets can use shuffling filter
    c                 C   "   | j jdddd}| |j dS )z Enable shuffle filter r"   rg  T)r  N)r   r)   ro   r  r7   r   r   r   test_shuffle     zTestCreateShuffle.test_shuffleN)r   r   r   r1   r  r   r   r   r   r    r  r  
fletcher32zFLETCHER32 is not installedc                   @   r]  )TestCreateFletcher32z=
        Feature: Datasets can use the fletcher32 filter
    c                 C   r  )z Enable fletcher32 filter r"   rg  T)r  N)r   r)   ro   r  r7   r   r   r   test_fletcher32  r  z$TestCreateFletcher32.test_fletcher32N)r   r   r   r1   r  r   r   r   r   r    rd  r  scaleoffsetzSCALEOFFSET is not installedc                   @   H   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   D   |  t | jjddtdd}W d   dS 1 sw   Y  dS )z[ Ensure that a scale factor is required for scaleoffset compression of floating point data r"   rg  Tr'   r  NrQ   r{   r   r)   floatr7   r   r   r    test_float_fails_without_options     "z6TestCreateScaleOffset.test_float_fails_without_optionsc                 C   r  )z# Check when scaleoffset is negetiver"   rg  gr  Nr  r7   r   r   r   test_non_integer  r  z&TestCreateScaleOffset.test_non_integerc                 C   r  )z% Check when dtype is unsupported typer"   rg  Tr  N)rQ   rR   r   r)   boolr7   r   r   r   test_unsupport_dtype  r  z*TestCreateScaleOffset.test_unsupport_dtypec                 C   s   d}d}dd|  }t jj| d | }| jjd|t j|d}|jdus&J ||d	< | jj}| j  t	
|d
| _| jd d	 }| j||d|  d ||k rTJ dS )z2 Scaleoffset filter works for floating point data r$   r   i,  r   rE   g      ?r"   r  N.r)	precision)rN   randomrandr   r)   float64r  filenamer   rn   r   rw   r  )r   scalefacr6   ranger  r8   r  r  r   r   r   
test_float  s   
z TestCreateScaleOffset.test_floatc                 C   s   d}d}t jjdd| d |t jd}| jjd|t jdd	}|jd
us%J ||d< | jj}| j  t	
|d| _| jd d }| || d
S )zB Scaleoffset filter works for integer data with default precision r  r  r   r^   r   rH   r'   r"   Tr  N.r  )rN   r  randintr   r   r)   r  r  r   rn   r   rw   r   nbitsr6   r  r8   r  r  r   r   r   test_int3  s   
zTestCreateScaleOffset.test_intc                 C   s   d}d}t jjdd| |t jd}| jjd|t j|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  r  r   r^   r  r"   r  .r  N)rN   r  r  r   r   r)   ro   r  r  r   rn   r   rw   r  r   r   r   test_int_with_minbitsH  s   
z+TestCreateScaleOffset.test_int_with_minbitsc                 C   s   d}d}t jjdd|d  d |t jd}| jjd|t j|d}| |jdk ||d	< | jj}| j	  t
|d
| _| jd d	 }||k rKJ dS )r  r  r  r   r^   r   r  r"   r  .r  N)rN   r  r  r   r   r)   ro   r  r  r   rn   r   r  r  r   r   r   test_int_with_minbits_lossy\  s   "
z1TestCreateScaleOffset.test_int_with_minbits_lossyN)r   r   r   r1   r  r  r  r  r  r  r  r   r   r   r   r    s    r  c                   @   r  )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us*J t	|d}|
 }W d   n1 s>w   Y  || ksKJ t|j    }t| jjj }	||	ksiJ dS )	z' Create and access an external dataset rD   r   r   r"   z	${ORIGIN}r'   externalefile_prefix.Nrb)rN   r  r   r   	UNLIMITEDr   r)   r'   r  openreadtobytespathlibPathr|   get_access_plistget_efile_prefixdecodeas_posixr  parent)
r   r6   r  ext_filer  r8   fidcontentsr  r  r   r   r   test_contentsw  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us2J t|d}| }W d   n1 sFw   Y  || ksSJ t|j    }t|j }	||	ksoJ | jjd||j
tj|d}
|
jdusJ |
d	 |k dS )
z< Create and access an external dataset using an efile_prefixr  r   r"   r  .Nr  )r  r   )rN   r  r   ospathbasenamer   r  r   r)   r'   dirnamer  r  r  r  r  r  r|   r  r  r  r  r  r   )r   r6   r  r  r  r8   r  r  r  r  r`   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"   r  r  N)r   r)   r   r   r   r   r   test_name_str  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"   r  r  N)r   r)   r  r  r   r   r   r   r   test_name_path  s   

zTestExternal.test_name_pathc                    sN   |    d}t fddt|D }| jjdd|d}t|j|ks%J dS )z9 External argument may be an iterable of multiple tuples r   c                 3   s    | ]
} |d  d fV  qdS )  Nr   .0ra  r  r   r   	<genexpr>  s    z/TestExternal.test_iter_multi.<locals>.<genexpr>poor  r  N)r   iterr  r   r)   r  r  )r   Nr  r8   r   r  r   test_iter_multi  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 ]"\}}| | | jjd||d W d   n1 sPw   Y  q3dS )z" Test with invalid external lists r  r   zh5f.UNLIMITEDr"   r  N)r   rR   r   r  r{   rQ   r   r)   )r   r6   r  exc_typer  r   r   r   test_invalid  s   

	zTestExternal.test_invalidc                 C   sR   |   }d}d}| jjd|||d}|jdu sJ |j|ks J |j|ks'J dS )z$ Create expandable external dataset )   @   )Nr  r"   )r6   r  r  N)r   r   r)   r   r6   r  )r   r  r6   r  exp_dsetr   r   r   test_create_expandable  s   z#TestExternal.test_create_expandableN)r   r   r   r1   r  r  r  r  r  r  r  r   r   r   r   r  s  s    	r  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   sF   |j  }| t|tjj | | | |r| s!J d S d S r   )	r|   r~   r5   r`  rn   r   r   r   r   )r   r,   r   variabler   r   r   r   assert_string_type  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 therera     as   bcyr&   zN)r   r  rn   r   r   rN   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 there4   ra  r   bcr  r&   r  N)	chrr   r  rn   r   r   rN   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  ra  F)r  r  N)rN   bytes_r   r  rn   r   r   r5   r|   r~   r   r+   r   r   r   test_string_fixed  s   
z TestAutoCreate.test_string_fixedN)T)r   r   r   r1   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 )TestCreateLikec                 C   sV   t ddd| jd< | jd| jd  | jd }| |jd | |jd  d S )Nr   r   lollike_lolr   r   )	rN   rv   rx   r   create_dataset_liker5   r6   assertIsr   )r   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 )
Nhondar  T)rg   track_timesr   hyundaiibmFlenovo)r   r)   rN   rv   rA  rn   h5gget_objinfo_idmtimer  r5   )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  r5   r6   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d Zd	S )
TestChunkIteratorc                 C   sF   | j dd}| t |  W d    d S 1 sw   Y  d S )Nr"   r   )r   r)   rQ   rR   iter_chunksr7   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   r   a   r   r)   slicer5   listr  rN   r   r   r8   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_2d6  s     
 
 
0zTestChunkIterator.test_2dc                 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f}tdd}| t|||ft| d S )	Nr"   r  r^   r^   r  rt   r$   r   r   )r   r)   r  r5   r  r  )r   r8   r   selr   r   r   test_2d_partial_sliceC  s   
"z'TestChunkIterator.test_2d_partial_sliceN)r   r   r   r  r  r  r  r   r   r   r   r  (  s
    r  c                   @   r   )
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"   rg  r   rF   r  Nr   r)   assertIsNotr   r5   r  r7   r   r   r   r   T  rn  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  NrB   r  r7   r   r   r   r   Z  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"   rg  r  r  r   r   Nr   r)   r5   r6   rP  r7   r   r   r   test_resizec  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	  )rr   Nr"  r7   r   r   r   test_resize_1Dl  s   
zTestResize.test_resize_1Dc                 C   sL   | j jdddd}| t |d W d   dS 1 sw   Y  dS )z. Resizing past maxshape triggers an exception r"   rg  r  r  )r   r   N)r   r)   rQ   	ExceptionrP  r7   r   r   r   test_resize_overs  s   "zTestResize.test_resize_overc                 C   sH   | j dd}| t |d W d   dS 1 sw   Y  dS )z/ Resizing non-chunked dataset raises TypeError r"   rg  r  N)r   r)   rQ   rR   rP  r7   r   r   r   test_resize_nonchunkedy  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"   rg  r  r  r   r   axisr!  N)r   r)   rP  r5   r6   r7   r   r   r   test_resize_axis  rn  zTestResize.test_resize_axisc                 C   sP   | j jdddd}| t |jddd W d   dS 1 s!w   Y  dS )	z  Illegal axis raises ValueError r"   rg  r  r  r   r^   r(  N)r   r)   rQ   r{   rP  r7   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)   r5   r6   r  r7   r   r   r   test_zero_dim  rn  zTestResize.test_zero_dimN)r   r   r   r1   r   r   r#  r$  r&  r'  r*  r+  r-  r   r   r   r   r  N  s    		r  c                   @   rx  )	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"   rM  |S10NrM   r7   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) r  r-  r"   rM  N)rN   r'   float16r   r)   r5   )r   	complex32r8   r   r   r   test_dtype_complex32  s   zTestDtype.test_dtype_complex32N)r   r   r   r1   r0  r3  r   r   r   r   r.        r.  c                   @   rx  )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,  r6  N)r   r)   r5   r  r7   r   r   r   test_len  s   zTestLen.test_lenc                 C   s~   | j dd}| |jd tjdkr-| t t| W d   n1 s'w   Y  n| t|d | | d dS )z Python len() vs Dataset.len() r"   )        r,  iNr8  )	r   r)   r5   r6   sysmaxsizerQ   OverflowErrorr  r7   r   r   r   test_len_big  s   

zTestLen.test_len_bigN)r   r   r   r1   r7  r<  r   r   r   r   r5    r4  r5  c                   @   rx  )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 rr   r   r&   rs   r"   rf   rt   N)	rN   rv   rx   r   r)   zipr5   r  rw   )r   rg   r8   ra  r  r   r   r   	test_iter  s   zTestIter.test_iterc                 C   sN   | j jddd}| t dd |D  W d   dS 1 s w   Y  dS )z0 Iterating over scalar dataset raises TypeError r"   r   r6   c                 S   s   g | ]}|qS r   r   r  r   r   r   
<listcomp>  s    z-TestIter.test_iter_scalar.<locals>.<listcomp>N)r   r)   rQ   rR   r7   r   r   r   test_iter_scalar  s   "zTestIter.test_iter_scalarN)r   r   r   r1   r?  rB  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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 rZ  r[  ra  r   r&   N)rn   string_dtyper   r)   r|   r~   r5   r`  r   r   r   r   check_string_dtyper'   rX  r   r)  r,   r   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 rZ  r[     barra  r   r   r   Nrn   rD  r   r)   r5   asstrr  r   r   r)  
fill_valuer,   r   r   r   test_vlen_bytes_fillvalue  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 ra  r   r&   rV  N)rn   rD  r   r)   r|   r~   r5   r`  r   r   r   r   rE  r'   rX  rF  r   r   r   r    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árra  r   r   r   rV  N)rn   rD  r   r)   r5   rU  rK  r   rL  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/  ra  r   r&   rE   rZ  N)rN   r'   r   r)   r|   r~   r5   r`  rn   r   r   assertFalser   r   r   r   rE  rX  r   rF  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 )
rH  rZ  rE   rW  rI  ra  r   r   r   NrJ  rL  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 d    n1 sow   Y  tj|d d tj|
dgd dd d S )NrV  r   rW  ra  r   r&      cùr   r   r^   r$   rD      UrE   S)rn   rD  r   r)   r|   r~   r5   r   r   r   rU  rN   r   r   rQ   rR   r   r   )r   r)  r,   r   sr   r   r   test_fixed_utf8  s   
"0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 )
rO  rV  rE   rW  rP  ra  r   r   r   N)	rn   rD  rU  r   r)   r5   rK  r  r   rL  r   r   r   test_fixed_utf_8_fillvalue%  s   
 z&TestStrings.test_fixed_utf_8_fillvaluec                 C   sL   t d}| t | jjdd|d}W d   dS 1 sw   Y  dS )zA Fixed-length unicode datasets are unsupported (raise TypeError) z|U10ra  r   r&   N)rN   r'   rQ   rR   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
        rZ  r[  ra  r   r&      Hellor   N)rn   rD  r   r)   r5   r`  bytesr   r)  r,   rg   outr   r   r   test_roundtrip_vlen_bytes4  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/  ra  r   r&   r^  r   N)rN   r'   r   r)   r5   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 )Nra  r   r&      fàilter   )	rn   rD  r   r)   rm   r_  rK  r~  r5   r`  r   r   r   test_retrieve_vlen_unicodeJ  s   z&TestStrings.test_retrieve_vlen_unicodec                 C   s   | j jddt d}d}||d< |d}| t |d  W d    n1 s*w   Y  | |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 )Nra  r   r&   rd  r   rZ  ignorefiltelatin-1rE   r   )r   r)   rn   rD  rK  rQ   UnicodeDecodeErrorr5   rA  r  rN   r   r   r   r   asarray)r   r,   rg   strwrap1r   r   r   
test_asstrT  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   r   ra  r   r&   rU  rV  r   rZ  rf  r   rh  r   )rn   rD  r   r)   rN   r   rU  rm   r  rK  r~  r5   rA  r   r   r   r`  r   r   r   test_asstr_fixedo  s   zTestStrings.test_asstr_fixedc                 C   sX   t d}| jjdd|d}d}| t ||d< W d   dS 1 s%w   Y  dS )zGEncoding error when writing a non-ASCII string to an ASCII vlen datasetrZ  ra  r   r&   rd  r   N)rn   rD  r   r)   rQ   UnicodeEncodeError)r   r)  r,   rg   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
        ra  r   r&   r  r  utf8r   N)	rn   rD  r   r)   r  rU  r5   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
        rZ  ra  r   r&   zASCII stringr   N)rn   rD  r   r)   r5   r`  r_  rU  r`  r   r   r   test_vlen_bytes_write_ascii_str  s   
z+TestStrings.test_vlen_bytes_write_ascii_strN)r   r   r   r1   r  rN  r  rQ  rS  rT  rZ  r[  r]  rb  rc  re  rl  rm  ro  rq  rr  r   r   r   r   rC    s&    
	
			
rC  c                   @   re  )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
 ||< q+|| jd< | jd d }| 	t 
||k | |j|j dS )z: Compound types are read back in correct order (issue 236)weightcputimewalltimeparents_offset	n_parentsstatusendpoint_typer  r&   r   test.N)rN   r'   r  uint32uint8r#  fieldsr  r   ro   r  r5   )r   r)  r  keyoutdatar   r   r   test_rt  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 ||< q| jj	dd|d}|jD ]}|| ||< q6| jd d	 }| 
t ||k | |j|j d S )
Nrt  rt   rz  r{  r&   rH   r   r|  .)rN   r'   r  r~  r#  r  r  r6   r   r)   ro   r  r5   )r   r)  r  r  r,   r  r   r   r   test_assign  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 ||< q|| 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sJ d S )	Nra  r  r  r{  r&   r   r|  r  )rN   r'   r  r#  r  r  r   r   r   rj  r%   astyper  )r   r)  r  r  dt_intr   r   r   test_fields  s0   

$" zTestCompound.test_fieldsc                 C   s   t dtt jfdtt jfg}t dt|fdt jfg}t jtddt jdt jtdd	t jdf}t jtd
dt jdt jtddt jdf}t jt j||g|ddft j|g|ddfg|d}|| jd< | jd }| j	||dd d S )Nr   r   f1f2r   rt   r&   rD   r   rE   rt  r     r^   r,   F)check_alignment)
rN   r'   rn   
vlen_dtyper%   r   r   r  r   rw   )r   dt_innerr)  inner1inner2rg   ra  r   r   r   test_nested_compound_vlen  s(   

z&TestCompound.test_nested_compound_vlenN)r   r   r   r1   r  r  r  r  r   r   r   r   rs    s    #rs  c                   @   r   )TestSubarrayc                 C   sl   | j jdddd}g d|d< tj|d d  g dg g dg|d d < tj|d d  g dg d S Nr   r;   3int8r&   r   r^   rt   r   )r$   r   rD   )r   r)   rN   r   r   r+   r   r   r   test_write_list  s
    zTestSubarray.test_write_listc                 C   sx   | j jdddd}tg d|d< tj|d d  g dg tg dg|d d < tj|d d  g dg d S r  )r   r)   rN   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    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.  )REDGREEN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-  basetypera  r  r&   N)rn   
enum_dtypeEDICTr   r)   r'   check_enum_dtyper5   )r   r)  r,   dt2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  ra  r  r&   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   )	rn   r  r  r   r)   r5   rw   rN   r   r\  r   r   r   test_readwrite-  s   &zTestEnum.test_readwriteN)r   r   r   r1   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 )Nra  r   r&   .)r   r)   r5   r'   rN   ri   rw   )r   r)  r8   rg   r   r   r   	_exectest=  s
   zTestFloats._exectestr1  zNumPy float16 support requiredc                 C   s   |  td dS )z Mini-floats round trip r1  N)r  rN   r'   r   r   r   r   	test_miniD  s   zTestFloats.test_minic                 C   s>   t tdr| tjjtd dS | tjjtd dS )z Test mapping for float16 r1  z<f2z<f4N)rc   rN   r5   r   
IEEE_F16LEr'   r   r   r   r   test_mini_mappingJ  s   
zTestFloats.test_mini_mappingN)r   r   r   r1   r  r   
skipUnlessrc   rN   r  r  r   r   r   r   r  7  s    
r  c                   @   rx  )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)   rn   r  r   r  r  r5   )r   r,   ds_mtimer   r   r   test_disable_track_timesX  s   z'TestTrackTimes.test_disable_track_timesc                 C   r  )z3 check that when give track_times an invalid value r"   r#   nullr  NrP   r   r   r   r   test_invalid_track_times^  r  z'TestTrackTimes.test_invalid_track_timesN)r   r   r   r1   r  r  r   r   r   r   r  R  s    r  c                   @   rx  )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 ra  r   Nr  r  r   r   r  r   r   )NN)r   r)   r5   r6   rN   r   r+   r   r   r   test_array_conversionj  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-  ra  r  r   r  r&   .r   N)r   r)   rN   emptyr5   r6   r'   )r   r)  r,   r   r   r   r   test_readingu  s   zTestZeroShape.test_readingN)r   r   r   r1   r  r  r   r   r   r   r  d  s    r  )r   rE   rD   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  ra  rf   .)	r   r   rN   rv   rx   rg   r   r)   r8   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  rE   r   r   N)rN   r   r8   	regionrefrw   rg   r   slicrefr   r   r   test_create_ref  s   zTestRegionRefs.test_create_refc                 C   s,   | j jd d }| j | }|jdksJ d S )Nr   )r8   r  rH   )r   r  ra  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/J |  tj|jdtjj	|}|| |d ksIJ d S )Nscalar      ?r&  rg   r'      .r   )r   r)   rn   h5screateSCALARselect_noneh5rr|   DATASET_REGIONr   rN   r'   
select_all)r   r,   sidr  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  rE   r   r   )rE      N)rN   r   r8   r  r5   r6   	selectionr  r   r   r   test_ref_shape  s   zTestRegionRefs.test_ref_shapeN)
r   r   r   r1   r   r  empty_regionref_xfailr  r  r  r   r   r   r   r    s    

r  c                   @   r    )	
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 Nra  r   r   r&   r   .r&  )r   r)   rN   rv   r  rw   r   r8   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)   rN   rv   r5   r  r  r7   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)   rN   rv   rj  r  rw   r  r   r   r   test_astype_wrapper_asarray  s   z&TestAstype.test_astype_wrapper_asarrayN)r   r   r   r1   r  r  r  r   r   r   r   r    s
    r  c                   @   r]  )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,  ra  r   r&   r   r-  )rN   r'   r   r)   r5   )r   r)  r8   r   r   r   test_scalar_compound  s   z'TestScalarCompound.test_scalar_compoundN)r   r   r   r1   r  r   r   r   r   r    s    r  c                   @   sn   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d ZdS )TestVlenc                 C   sR  t t}| jjdd|d}td|d< td|d< g d|d< td|d< | |d td | |d td | |d tg d | |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#   r&   rt   r   r   r  r^   r   r$   )
rn   r  intr   r)   rN   rv   rw   r   r   r\  r   r   r   r    s    
&"zTestVlen.test_intc                 C   s6   t t}| jjdd|d}| jdd|d j d S )Nr  r;   r&   vlen2r   )rn   r  r  r   r)   r'   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   r  r;   r&   r  r   )	r  rn   r  r   r)   r  r   r   r'   )r   r)  r,   fnamer   r   r   test_reuse_struct_from_other  s   
$z%TestVlen.test_reuse_struct_from_otherc                 C   s@  t t}| jjdd|d}tddg|d< tdg|d< g d|d	< | |d tddg | |d tdg | |d	 tg d
 tjg dtdgt	d|dd	< | |d td | |d td ttg dtg dg|dd	< | |d td | |d td d S )Nr  r  r&   gffffff?333333?r   r   )r  r^   rt   r^   r  )皙?g?g @g@r$   r$   r   )r  r  皙@)皙?r  r  rt   )
rn   r  r  r   r)   rN   r   rw   rv   r   r\  r   r   r   test_convert  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 )Nr  r  r&   r   r  rt   r^   )	rn   r  r  r   r)   rN   rv   r   r   r\  r   r   r   test_multidim  s   
zTestVlen.test_multidimr  c                 C   sP  t |}| jj|d|d}tjg d|d}tjg d|d}tjg dtdd}||}g d}	tj|	|d}
g d}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.
        rM  r&   )r         @g      >@)g33333Y@gi@gfffffX@g      %g     r)r   r^   rV  r%   )r  r  g      @rN  g      )r   ir   r   i'  r   r   r   r^   rt   r$   g333333?r  N)rn   r  r   r)   rN   r   r'   r  rw   r  r   )r   np_dtdataset_namer)  r,   array_0array_1array_2casted_array_2list_3list_array_3list_4list_array_4r   r   r   _help_float_testing  s2   


zTestVlen._help_float_testingc                 C      t d}| | d S )Nr1  rN   r'   r  r   r  r   r   r   test_numpy_float16D     
zTestVlen.test_numpy_float16c                 C   r  )Nfloat32r  r  r   r   r   test_numpy_float32H  r  zTestVlen.test_numpy_float32c                 C   r  )Nr  r  r  r   r   r   test_numpy_float64_from_dtypeL  r  z&TestVlen.test_numpy_float64_from_dtypec                 C   s   t j}| | d S r   )rN   r  r  r  r   r   r   test_numpy_float64_2P  s   zTestVlen.test_numpy_float64_2c                 C   s  | j jddtdd tg d}|ddd | j d d< t| j d d |ddd ksBJ | j d d  d	|ddd  | j jd
dtdd tg d}|ddd | j d
 d< t| j d
 d |ddd ksJ | j d
 d  d	|ddd  dS )z4Test that non-contiguous arrays are stored correctlyncr   r  r&   )TFTTFFFNr^   r   z != nc2int8)r^   r$   r   r   r   rt   r   )r   r)   rn   r  rN   r   r  )r   ra  r  r   r   r   test_non_contiguous_arraysT  s   FJz#TestVlen.test_non_contiguous_arraysc                 C   sf   t jdd}d}| jjdd||d}tt tj|	 t
d W d    d S 1 s,w   Y  d S )NrZ  r[  rI  ra  r   r   r&   )rn   rD  r   r)   rX   r   r{   rN   r   rK  r  rL  r   r   r   test_asstr_array_dtypeb  s   "zTestVlen.test_asstr_array_dtypeN)r  )r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s    
	0r  c                   @   r   )TestLowOpenc                 C   s   | j dd}|j }dS )z Test H5Dget_access_plist r"   r#   N)r   r)   r|   r  )r   r,   p_listr   r   r   test_get_access_listl  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 ra  r      xN)rn   h5pr  DATASET_ACCESSr   r)   r4  r  r|   rm   	DatasetID)r   daplr8   dsidr   r   r   	test_daplq  s
   zTestLowOpen.test_daplN)r   r   r   r  r  r   r   r   r   r  j  s    r  c               	   C   sb  ddl m}  |  }t|d}|jddddd d	|d d d < W d    n1 s+w   Y  |d t|d
l}|d j}| dksIJ tdD ]0}t	t
t
|dd }||}|j|kshJ |jdksoJ |jd usvJ |jdks}J qM|d}|jdksJ |jdksJ |jd usJ |jdksJ W d    d S 1 sw   Y  d S )Nr   BytesIOr   r|  r  rl   r   r6   r   r'   r   r  r   rE   r  )ior
  rn   r   r)   seekr|   get_num_chunksr  r  rN   r   unravel_indexget_chunk_infochunk_offsetfilter_maskbyte_offsetrH   get_chunk_info_by_coord)r
  buffoutfinr,   joffsetsir   r   r   test_get_chunk_detailsz  s.   



"r  )r   r  rt   )r   rE   rE   )r   rE   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 d
   n1 s+w   Y  |d t|d6}|d j}| }|dksKJ i  t|D ]}|	|}| |j
< qQ fdd}|| W d
   d
S 1 stw   Y  d
S )z%H5Dchunk_iter() for chunk informationr   r	  r   r|  r  rl   r   r  r   Nr  r   c                    sN    | j  }| j |j ksJ | j|jksJ | j|jksJ | j|jks%J d S r   )r  r  r  rH   )
chunk_infoknowncir   r   callback  s
   
z!test_chunk_iter.<locals>.callback)r  r
  rn   r   r)   r  r|   r  r  r  r  
chunk_iter)r
  r  r   r  
num_chunksr  r  r!  r   r  r   test_chunk_iter  s$   


"r$  c                 C   s.   | j ddd}|jd u sJ |jd u sJ d S )Nr  r%   r&   )r)   r6   r  )r   r,   r   r   r   test_empty_shape  s   r%  c                  C   s   ddl m}  |  }t|d}|jddd W d    n1 s!w   Y  |d t|d(}|d jd u s;J |d j d u sFJ |d j	 dksQJ W d    d S 1 s\w   Y  d S )Nr   r	  r   r  r~  r&   r  )
r  r
  rn   r   r)   r  r   r|   
get_offsetget_storage_size)r
  r  r  r  r   r   r   test_zero_storage_size  s   
"r(  c                 C   s   t t jjt t jjd g}| jd|t jd}|jt t jks$J t j|d d  t j	|t jd ||d d < t j|d d  t j	|t jd d S )Nr   ra  r  r&   )
rN   iinfor   maxr)   uint64r'   r   r   r   )r   rg   r,   r   r   r   test_python_int_uint64  s    "&r,  c                 C   s<   | j ddtjd}tjjddd}||d d g ddf< d S )	Nrg   )r   r  r^   r&      )r   rt   r^   r  )r   r^   r$   .)r)   rN   r~  r  r  )r   r   blockr   r   r   test_setitem_fancy_indexing  s   r/  c                  C   F   t td} | d d dksJ W d    d S 1 sw   Y  d S )Nzvlen_string_dset.h5DS1r   s   Partingr   r   r   r   r   r   test_vlen_spacepad     "r4  c                  C   r0  )Nzvlen_string_dset_utc.h5ds1r   s   2009-12-20T10:16:18.662409Zr2  r3  r   r   r   test_vlen_nullterm  r5  r7  c                 C   s0   d}| j ddtj|dd}t||jv sJ d S )N   rg   rl   T)r6   r'   r;  allow_unknown_filter)r)   rN   r~  r~  _filters)r   fake_filter_idr,   r   r   r   test_allow_unknown_filter  s   
r<  c               
   C   s  ddl m}  |  }t|d0}|jdddddd	d
d}|j  }|j  dd |ks2J |dks8J W d   n1 sBw   Y  |	d t|d0}|j
ddddddd}|j  }|j  dd |kstJ |dkszJ W d   dS 1 sw   Y  dS )z2Chunk cache configuration for individual datasets.r   r	  r   ra  )rE   r   )r   r$   r       r    )r6   r   r'   rdcc_nbytesrdcc_w0rdcc_nslotsr   N)r>  r=  r  r    0 q=
ףp?  )r6   r'   r?  r@  rA  )rD  rB  rC  )r  r
  rn   r   r)   r|   r  get_chunk_cache	get_cacher  r   )r
  r  r  r,   ds_chunk_cacher  r   r   r   test_dset_chunk_cache  s*   
"rH  c                   @   rx  )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s$J t||k||kks1J d}t|| }t||k||kksGJ t||k||kksTJ dS )z
        Create a h5py dataset, extract one element convert to numpy
        Check that it returns symmetric response to == and !=
        r   r   r|  r'   rg   r  gMbP?N)	r   r)   r  rN   r  r  r  r  nanmax)r   r6   r8   valdelta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J ||k||kks(J dS )z
        Create a h5py dataset and check basetype compatibility.
        Check that operation is symmetric, even if it is potentially
        not meaningful.
        rJ  r|  rK  rN  N)r   r)   r  rN   r  r  )r   r6   r8   rM  r   r   r   test_basetype_commutative&  s   
z)TestCommutative.test_basetype_commutativeN)r   r   r   r1   rP  rQ  r   r   r   r   rI  	  s    rI  c                   @   rx  )TestVirtualPrefixz%
    Test setting virtual prefix
    c                 C   sR   d}d}| j jd|ttjj| |d}t|j	 
   }||ks'J d S )NrJ  /path/to/virtualr|  )r'   rg   virtual_prefix)r   r)   r  rN   r  r  r  r  r|   r  get_virtual_prefixr  r  )r   r6   rT  r8   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 )NrS  r"   rs   r   )rT  )r   r   r  r  r|   r  rU  r  r  r5   rm   r   r6   )r   rT  r8   rV  r   r   r   test_virtual_prefix_requireD  s   z-TestVirtualPrefix.test_virtual_prefix_requireN)r   r   r   r1   rW  rX  r   r   r   r   rR  6  s    
rR  r   c                 C   s"   t jdd}d}| jd|||dS )NrZ  r[  s   fillra  r   )rn   rD  r)   filer6   r)  rM  r   r   r   ds_strM  s   r[  c                 C   sF   t dtjddfdt jfg}t jd|d}t ||| d< | d S )Nr"   rZ  r[  rB   )fillrN  r&   ra  )rN   r'   rn   rD  r  rj  broadcast_torY  r   r   r   	ds_fieldsS  s   r^  zview_getter,make_dsc                 C   s   | S r   r   r,   r   r   r   <lambda>`  s    r`  c                 C   s   | j tdS )Nr&   )r  r   r_  r   r   r   r`  a  s    c                 C   s   |   S r   )rK  r_  r   r   r   r`  b  s    c                 C   s
   |  dS )Nr"   )r  r_  r   r   r   r`  c  s   
 )r,   r  rK  r  )ids)r^   r   Fr   Tc                 C   s"   ||}| |}t j||d d S )Nr   )rN   r   )view_gettermake_dsr   r   r,   viewr   r   r   test_array_copyk  s   rf  z"forbidding copies requires numpy 2c                 C   sR   ||}| |}t jtdd tj|dd W d    d S 1 s"w   Y  d S )Nz#memory allocation cannot be avoidedr  Frb  )rX   r   r{   rN   r   rc  rd  r   r,   re  r   r   r   test_array_copy_falses  s
   "rh  c                 C   s2   ||}| |}t j|ddjt dksJ d S )Nr/  r&   )rN   r   r'   rg  r   r   r   test_array_dtype  s   "ri  c                 C   sB   ||dd}| |}t |d ttfsJ t|jdksJ d S )Nr   r@  )r   r_  r~  rN   r   r6   rg  r   r   r   test_array_scalar  s   rj  c                 C   s,   ||dd}| |}t |jdksJ d S )Nr   rD   r@  )rN   r   r6   rg  r   r   r   test_array_nd  s   rl  c                 C   sf   ||dd}| |}|j t tksJ |jdksJ |jdks"J |jdks)J t|dks1J d S )Nrk  r@  r^   rr   r   )r'   rN   r   ndimr6   rH   r  rg  r   r   r   test_view_properties  s   rn  )r   )nr1   r  r  r9  numpyrN   rV   rX   warningscommonr   r   
data_filesr   rn   r   r   r   h5py._hl.baser	   r
   r   r   h5py.h5py_warningsr   r   h5py._hl.selectionsro  
selectionsr  h5py.tests.commonr   r   r!   r2   rd   r   r   r   r   r  r0  r   r   r  r%   r   r  r  r  rD  r\  r^  rb   rT  rU  rf  ry  r  r  r  r  r  r  r  r  r  r  r.  r5  r=  rC  rs  r  r  r  r  r  rY   hdf5_version_tupler  r  r  r  r  r  r  r  r$  r%  r(  r,  r/  r4  r7  r<  rH  rI  rR  r[  r^  view_gettersCOPY_IF_NEEDEDrf  skipifrh  ri  rj  rl  rn  r   r   r   r   <module>   s   			FY<(CC&T

,'ql,&D Tg
0 

-









