o
    gi4                     @   s&  d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ e Zejjejjdk d	d
ejjej dd
gZejjeed dd
ZejdkrWejnejZejdeddejejddejddejddejddejddejddejddejddejddejddejdded dejd!ded"dejd#d$ed%ed&g	d'd( Zejdd)d)dejdd*d*dejdd+d+dejdd,d,dejdd-d-dejd!d.d.dejd#d/d/ed&gZejd0ed1d2 Zd3d4 Zejd5g d6d7d8 Z ejd0ed9d: Z!d;d< Z"dS )=z*
Testing native complex number datatypes.
    N)
get_config)h5t   )	make_name)get_data_file_path)   r   r   zRequires HDF5 >= 2.0)reasonz2Native HDF5 complex number datatypes not available
complex256z)complex256 type is not available in numpybigzh5type_str, size, orderCOMPLEX_IEEE_F16LE   COMPLEX_IEEE_F16BEF16BE)idCOMPLEX_IEEE_F32LE   F32LECOMPLEX_IEEE_F32BEF32BECOMPLEX_IEEE_F64LE   F64LECOMPLEX_IEEE_F64BEF64BENATIVE_FLOAT_COMPLEXzfloat-nativeNATIVE_DOUBLE_COMPLEXzdouble-nativeNATIVE_LDOUBLE_COMPLEX    zlong-native)r   marksc                 C   s>   t t| }t|tjsJ | |ksJ | |ksJ dS )z8Low-level checks of HDF5 native complex number datatypesN)getattrr   
isinstanceTypeComplexIDget_size	get_order)
h5type_strsizeorderh5type r(   \/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/h5py/tests/test_native_complex.pytest_hdf5_dtype.   s   
r*   <c8>c8<c16>c16z=c8z=c16z=c32zh5type_str, dtc                 C   s   t t| jt|ksJ dS )z<Translate native HDF5 complex number datatype to NumPy dtypeN)r   r   dtypenp)r$   dtr(   r(   r)   test_cmplx_type_trnsltT   s   r2   c                 C   sz  t | tjsJ |  dksJ | dtjksJ | dtjks$J t | dtj	s/J t | dtj	s:J | d
 | d
  |jksMJ |jtjf    r` dkr`\dkr` n    rp dkrp\dkrpdkrqn  n  tj}n,    r dkr\dkr n    r dkr\dkrdkrn  n  tj}n  }t| d |ksJ | d |ksJ d	S )
z$Check h5py's old complex number typer   r   r   >=r
   <littleN)r    r   TypeCompoundIDget_nmembersget_member_namecfg_r_name_i_nameget_member_typeTypeFloatIDr"   itemsize	byteordersysORDER_BEORDER_LEAssertionErrorr#   )datatypenp_dtypeexpected_unreachabler(   r(   r)   check_compound_complex_datatypeZ   s(   
FFrI   r1   )r+   r,   r-   r.   c                 C   s   t jddt jd  |}| jt||d}t jd|d}||jd< t|j	
 t | t|jd
 t | t j|d | t j|jd | dS )	z<Test default translation when creating datasets & attributesd                 ?)dataffffff?@r/   c.N)r0   randomrandastypecreate_datasetr   arrayattrsrI   r   get_typer/   get_idtestingassert_array_equal)writable_filer1   complex_arraydsrO   r(   r(   r)   test_default_createt   s   "
r]   c                 C   s   t t|}t|}tjddtjd  |}| jt|dt	
|d}||dd< tjd|d}|jjd|t	
|d t|j tjsLJ t|jd tjsZJ tj|d | tj|jd | dS )	zFExplicitly use native complex datatype to create datasets & attributesrJ   rK   )rJ   rN   NrM   rO   .)r   r   r0   r/   rP   rQ   rR   rS   r   h5pyDatatyperT   rU   creater    r   rV   r!   rW   rX   rY   )rZ   r$   r1   r'   np_dtr[   r\   rO   r(   r(   r)   test_explicit_create   s   

"rb   c                  C   sb   t jtddd} tdd |  D ]}t|j |j qW d   dS 1 s*w   Y  dS )zKCheck the resulting dtype of the two-field compound data as complex numberszcompound-dtype-complex.h5r)modec                 S   s   t | tjS )N)r    r^   Dataset)objr(   r(   r)   <lambda>   s    z(test_dtype_cmpnd_cmplx.<locals>.<lambda>N)	r^   Filer   filtervaluesrI   r   rV   r/   )frf   r(   r(   r)   test_dtype_cmpnd_cmplx   s
   "rl   )#__doc__rA   numpyr0   pytestr^   h5py.h5r   r   commonr   
data_filesr   r:   markskipifversionhdf5_version_tuplehas_native_complex
pytestmarkhasattrREQUIRE_NUMPY_COMPLEX256r@   rB   rC   NATIVE_BYTE_ORDERparametrizeparamr*   H5_VS_NUMPY_DTYPESr2   rI   r]   rb   rl   r(   r(   r(   r)   <module>   sz   	





