B
    `0                 @   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   sZ   xTdD ]L} t j| t jd}| }t|}t| | t|}t| | qW d S )N)      i   )dtype)nparrayZuint32Zbyteswapm5uZbyteswap_u4r   item)valabcd r   T/home/dcms/DCMS/lib/python3.7/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!   s6    


r'   c             G   s:   |  d | d x|D ]}| | qW | d d S )Nr   )truncateseekwrite)streamstringssr   r   r   _write_streamB   s
    


r.   c             C   sH   G dd dt }| }| |_||_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   r2   TF)
objectZ
mat_stream
byte_orderZstruct_as_recordsysgetdefaultencodingZuint16_codecZchars_as_stringsZ	mat_dtypeZ
squeeze_me)r+   r4   r2   rr   r   r   _make_readerlikeJ   s    
r8   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   r8   r   
VarReader5assert_raisesIOErrorZread_tagr'   mio5pmiINT32r.   tobytes
ValueError)str_ior7   c_readerr&   r   r   r   test_read_tagX   s    
rD   c              C   sL   t ddtjdd} |  }t|}t|}t|| j}t	||   d S )Nr9   r   T)r%   )
r'   r>   r?   r@   	cStringIOstreamsZmake_streamZ
_read_intor!   r   )r&   Ztag_strrB   str-   r   r   r   test_read_streamg   s    
rH   c              C   s  t  } t| }xddtjfddtjfddtjffD ]\}}}xdD ]}||_t|}t	|j
|dk t	|j|tjk x~d	D ]v}t||}t||||}	|	 }
t| |
 | }t	|| t| |
|
 | }t	|| | }t	|| q~W qBW q2W d S )
Nr      r9   r   i2)r   >r   )FT)rE   r8   r>   miUINT16r?   ZmiINT16r4   r   r;   r   Zlittle_endianZ
is_swappedr   native_coder
   r	   Znewbyteorderr'   r@   r.   read_numeric)rB   r7   r$   r   r   Z	byte_coderC   Zsde_fdtr   a_strelr   r   r   test_read_numericp   s,    






rS   c              C   sb   t  } t| d}t|}td}t|dtjd}|	 }t
| | | }t|jjdk d S )Nr   z<u2rI   r   T)rE   r8   r   r;   r
   r	   r'   r>   rM   r@   r.   rO   r   flagsZ	writeable)rB   r7   rC   rP   r   rQ   rR   r   r   r   test_read_numeric_writeable   s    



rU   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   )rE   r8   r   rN   r   r;   r
   r	   r#   r>   ZmiINT8Z
VarHeader5Zset_dimsr.   r@   r)   Z	read_charr   r   )rB   r7   rC   Ztag_dtr&   hdrr   r   r   r   test_zero_byte_string   s,    









rX   )F)$__doc__r5   ior   rE   numpyr
   Znumpy.testingr   r   r   Zpytestr   r<   Zscipy.io.matlab.byteordercodesZmatlabZbyteordercodesr   Zscipy.io.matlab.streamsrF   Zscipy.io.matlab.mio5_paramsZmio5_paramsr>   Zscipy.io.matlab.mio5_utilsZ
mio5_utilsr   r   r'   r.   rN   r8   rD   rH   rS   rU   rX   r   r   r   r   <module>   s&   
!	