a
    Re                     @   s   d Z ddlZddlmZ ddlZddlmZmZm	Z	 ddl
mZ ddlm  m  mZ ddlm  m  mZ ddlm  m  mZ ddlm  m  mZ dd Zdd	d
Zdd ZejfddZdd Zdd Z dd Z!dd Z"dd Z#dS )z# Testing mio5_utils Cython module

    N)BytesIO)assert_array_equalassert_equalassert_)raisesc                  C   sV   dD ]L} t j| t jd}| }t|}t| | t|}t| | qd S )N)      i   dtype)nparrayZuint32byteswapm5uZbyteswap_u4r   item)valabcd r   Y/var/www/sunrise/env/lib/python3.9/site-packages/scipy/io/matlab/tests/test_mio5_utils.pytest_byteswap   s    

r   Fc           
      C   s   t | } t| j}| j}|s`|d }d|d  }d|fd|fd| fg}|r|dd|f nZ|d }d	| }|d
krd|fd|fd| fg}nd|fd|fd| fg}|r|dd|f t jd|d}	||	d< ||	d< ||	d< |	S )z( Makes a simple matlab tag, full or sde u4   mdtype
byte_countr   paddingu1u2   <r   r	   )r   r
   bocZto_numpy_code	byteorderitemsizeappendzeros)
base_dtr   r   sdeZbor   Zudtr   Zall_dttagr   r   r   	_make_tag    s<    
r*   c                 G   s6   |  d | d |D ]}| | q| d d S )Nr   )truncateseekwrite)streamstringssr   r   r   _write_streamA   s
    

r1   c                 C   sF   G dd d}| }| |_ ||_d|_t |_d|_d|_d|_|S )Nc                   @   s   e Zd ZdS )z_make_readerlike.<locals>.RN)__name__
__module____qualname__r   r   r   r   RJ   s   r5   TF)	Z
mat_stream
byte_orderZstruct_as_recordsysgetdefaultencodingZuint16_codecZchars_as_stringsZ	mat_dtypeZ
squeeze_me)r.   r6   r5   rr   r   r   _make_readerlikeI   s    
r:   c                  C   s\   t  } t| }t|}tt|j tddtj	dd}d|d< t
| |  tt|j d S )Ni4r   Tr(      r   )r   r:   r   
VarReader5assert_raisesOSErrorZread_tagr*   mio5pmiINT32r1   tobytes
ValueError)str_ior9   c_readerr)   r   r   r   test_read_tagW   s    
rG   c                  C   sL   t ddtjdd} |  }t|}t|}t|| j}t	||   d S )Nr;   r   Tr<   )
r*   rA   rB   rC   r   streamsZmake_streamZ
_read_intor$   r   )r)   Ztag_strrE   str0   r   r   r   test_read_streamf   s    
rJ   c                  C   s   t  } t| }ddtjfddtjfddtjffD ]\}}}dD ]}||_t|}t	|j
|dk t	|j|tjk d	D ]v}t||}t||||}	|	 }
t| |
 | }t	|| t| |
|
 | }t	|| | }t	|| qxq>q0d S )
Nr      r;   r   i2)r    >r    )FT)r   r:   rA   miUINT16rB   ZmiINT16r6   r   r>   r   Zlittle_endianZ
is_swappedr"   native_coder   r
   Znewbyteorderr*   rC   r1   read_numeric)rE   r9   r'   r   r   Z	byte_coderF   Zsde_fdtr   a_strelr   r   r   test_read_numerico   s.    






rU   c                  C   sb   t  } t| d}t|}td}t|dtjd}|	 }t
| | | }t|jjdu  d S )Nr    z<u2rK   r   T)r   r:   r   r>   r   r
   r*   rA   rO   rC   r1   rQ   r   flagsZ	writeable)rE   r9   rF   rR   r   rS   rT   r   r   r   test_read_numeric_writeable   s    



rW   c                  C   s   t  } t| tj}t|}tddg}tjd|d}t	j
|d< d|d< t }|dg t| | d  | d	 ||}t|d
 d	|d< t| |  | d	 ||}t|d
 | d	 |dg ||}t|d
gd  d S )N)r   r   )r   r   r!   r	   r   r   r   s           r    r   )r   r:   r"   rP   r   r>   r   r
   r&   rA   ZmiINT8Z
VarHeader5Zset_dimsr1   rC   r,   Z	read_charr   r   )rE   r9   rF   Ztag_dtr)   hdrr   r   r   r   test_zero_byte_string   s,    









rZ   )F)$__doc__r7   ior   numpyr   Znumpy.testingr   r   r   Zpytestr   r?   Zscipy.io.matlab._byteordercodesZmatlabZ_byteordercodesr"   Zscipy.io.matlab._streamsZ_streamsrH   Zscipy.io.matlab._mio5_paramsZ_mio5_paramsrA   Zscipy.io.matlab._mio5_utilsZ_mio5_utilsr   r   r*   r1   rP   r:   rG   rJ   rU   rW   rZ   r   r   r   r   <module>   s$   
!	