U
    mh+                     @   s   d Z ddlZddlmZ e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uint32Zbyteswapm5uZbyteswap_u4r   item)valabcd r   I/tmp/pip-unpacked-wheel-9oz00b9h/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_streamB   s
    

r0   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   RK   s   r4   TF)	Z
mat_stream
byte_orderZstruct_as_recordsysgetdefaultencodingZuint16_codecZchars_as_stringsZ	mat_dtypeZ
squeeze_me)r-   r5   r4   rr   r   r   _make_readerlikeJ   s    
r9   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   r9   r   
VarReader5assert_raisesOSErrorZread_tagr)   mio5pmiINT32r0   tobytes
ValueError)str_ior8   c_readerr(   r   r   r   test_read_tagX   s    
rF   c                  C   sL   t ddtjdd} |  }t|}t|}t|| j}t	||   d S )Nr:   r   Tr;   )
r)   r@   rA   rB   	cStringIOstreamsZmake_streamZ
_read_intor#   r   )r(   Ztag_strrD   str/   r   r   r   test_read_streamg   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)rG   r9   r@   miUINT16rA   ZmiINT16r5   r   r=   r   Zlittle_endianZ
is_swappedr!   native_coder   r
   Znewbyteorderr)   rB   r0   read_numeric)rD   r8   r&   r   r   Z	byte_coderE   Zsde_fdtr   a_strelr   r   r   test_read_numericp   s.    






rU   c                  C   sb   t  } t| d}t|}td}t|dtjd}|	 }t
| | | }t|jjdk d S )Nr   z<u2rK   r   T)rG   r9   r   r=   r   r
   r)   r@   rO   rB   r0   rQ   r   flagsZ	writeable)rD   r8   rE   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   )rG   r9   r!   rP   r   r=   r   r
   r%   r@   ZmiINT8Z
VarHeader5Zset_dimsr0   rB   r+   Z	read_charr   r   )rD   r8   rE   Ztag_dtr(   hdrr   r   r   r   test_zero_byte_string   s,    









rZ   )F)%__doc__r6   ior   rG   Z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_paramsr@   Zscipy.io.matlab._mio5_utilsZ_mio5_utilsr   r   r)   r0   rP   r9   rF   rJ   rU   rW   rZ   r   r   r   r   <module>   s&   
!	