o
    h                     @   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 ]&} t j| t jd}| }t|}t| | t|}t| | qd S )N)      i   dtype)nparrayuint32byteswapm5ubyteswap_u4r   item)valabcd r   Y/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/io/matlab/tests/test_mio5_utils.pytest_byteswap   s   

r   Fc           
      C   s   t | } t| j}| j}|s0|d }d|d  }d|fd|fd| fg}|r/|dd|f n-|d }d	| }|d
krHd|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
   bocto_numpy_code	byteorderitemsizeappendzeros)
base_dtr   r   sdebor   udtr   all_dttagr   r   r   	_make_tag    s>   
r0   c                 G   s6   |  d | d |D ]}| | q| d d S )Nr   )truncateseekwrite)streamstringssr   r   r   _write_streamA   s
   

r7   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    r;   TF)	
mat_stream
byte_orderstruct_as_recordsysgetdefaultencodinguint16_codecchars_as_strings	mat_dtype
squeeze_me)r4   r=   r;   rr   r   r   _make_readerlikeI   s   
rF   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   rF   r   
VarReader5assert_raisesOSErrorread_tagr0   mio5pmiINT32r7   tobytes
ValueError)str_iorE   c_readerr/   r   r   r   test_read_tagW   s   
rT   c                  C   sL   t ddtjdd} |  }t|}t|}t|| j}t	||   d S )NrG   r   TrH   )
r0   rN   rO   rP   r   streamsmake_stream
_read_intor'   r   )r/   tag_strrR   str6   r   r   r   test_read_streamf   s   
rZ   c                  C   s   t  } t| }ddtjfddtjfddtjffD ]a\}}}dD ]Y}||_t|}t	|j
|dk t	|j|tjk d	D ];}t||}t||||}	|	 }
t| |
 | }t	|| t| |
|
 | }t	|| | }t	|| q<qqd S )
Nr       rG   r   i2)r"   >r"   )FT)r   rF   rN   miUINT16rO   miINT16r=   r   rJ   r   little_endian
is_swappedr$   native_coder   r
   newbyteorderr0   rP   r7   read_numeric)rR   rE   r*   r   r   	byte_coderS   sde_fdtr   a_strelr   r   r   test_read_numerico   s4   






rk   c                  C   sb   t  } t| d}t|}td}t|dtjd}|	 }t
| | | }t|jjdu  d S )Nr"   z<u2r[   r   T)r   rF   r   rJ   r   r
   r0   rN   r_   rP   r7   re   r   flags	writeable)rR   rE   rS   rh   r   ri   rj   r   r   r   test_read_numeric_writeable   s   



rn   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   rF   r$   rc   r   rJ   r   r
   r)   rN   miINT8
VarHeader5set_dimsr7   rP   r2   	read_charr   r   )rR   rE   rS   tag_dtr/   hdrr   r   r   r   test_zero_byte_string   s,   









rv   )F)$__doc__r?   ior   numpyr   numpy.testingr   r   r   pytestr   rK   scipy.io.matlab._byteordercodesmatlab_byteordercodesr$   scipy.io.matlab._streams_streamsrU   scipy.io.matlab._mio5_params_mio5_paramsrN   scipy.io.matlab._mio5_utils_mio5_utilsr   r   r0   r7   rc   rF   rT   rZ   rk   rn   rv   r   r   r   r   <module>   s&    
!	