U
    Hvf;                     @   s  d dl Z d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
mZmZ d dlZd dlmZmZ d dlmZ dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(ej)*d4d5d6d7d8d9d:d;d<d=d>d?gej)*d@dAdBdCgej)*dDdEdFgej)*dGdHdIgej)*dJdHdIgdKdL Z+dS )M    N)BytesIO)assert_equalassert_assert_array_equalbreak_cyclessuppress_warningsIS_PYPY)raiseswarns)wavfilec                 C   s   t jt jtd| S )Ndata)ospathjoindirname__file__)fn r   ?/tmp/pip-unpacked-wheel-96ln3f52/scipy/io/tests/test_wavfile.pydatafile   s    r   c                  C   sT   dD ]J} d}t jt|| d\}}t|d tt|jtj t|j	d ~qd S )NFTtest-44100Hz-le-1ch-4bytes.wavmmapD  )i:  
r   readr   r   r   np
issubdtypedtypeint32shaper   filenamerater   r   r   r   test_read_1   s    
r%   c                  C   sT   dD ]J} d}t jt|| d\}}t|d tt|jtj t|j	d ~qd S )Nr   ztest-8000Hz-le-2ch-1byteu.wavr   @  )i      )
r   r   r   r   r   r   r   r   uint8r!   r"   r   r   r   test_read_2   s    
r)   c                  C   sT   dD ]J} d}t jt|| d\}}t|d tt|jtj t|j	d ~qd S )Nr   z#test-44100Hz-2ch-32bit-float-le.wavr   r   i  r'   )
r   r   r   r   r   r   r   r   float32r!   r"   r   r   r   test_read_3,   s    
r,   c               
   C   st   dD ]j} t  .}|tjd d}tjt|| d\}}W 5 Q R X t|d tt	|j
tj t|jd ~qd S )Nr   z,Chunk .non-data. not understood, skipping itz)test-48000Hz-2ch-64bit-float-le-wavex.wavr   i  )i  r'   )r   filterr   WavFileWarningr   r   r   r   r   r   r   Zfloat64r!   )r   supr#   r$   r   r   r   r   test_read_49   s     
r0   c                  C   sz   dD ]p} d}t jt|| d\}}t|d tt|jtj t|jj	dkpbt
j	dkob|jj	dk t|jd ~qd S )	Nr   z#test-44100Hz-2ch-32bit-float-be.wavr   r   >big=r*   )r   r   r   r   r   r   r   r   r+   	byteordersysr!   r"   r   r   r   test_read_5I   s    

r6   c                  C   s   dD ]} d}t jt|| d\}}t|d tt|jtj t|j	d t|d@ d t|
 d t|d	 d
 t| d ~qd S )Nr   ztest-8000Hz-le-5ch-9S-5bit.wavr   r&   )	         r      r   r      )r   r   r   r   r   r   r   r   r(   r!   maxminr"   r   r   r   test_5_bit_odd_size_no_padX   s    
r?   c                  C   s   dD ]} d}t jt|| d\}}t|d tt|jtj t|j	d t|d@ d t|
 d t|d	 d t| d
 ~qd S )Nr   ztest-8000Hz-le-4ch-9S-12bit.wavr   r&   )r7         r   i  r;   i )r   r   r   r   r   r   r   r   Zint16r!   r=   r>   r"   r   r   r   test_12_bit_even_sizeo   s    
rB   c               	   C   s   d} t jt| dd\}}t|d tt|jtj t|j	d t|d@ d t|dd	d
gdddgdddgdddgdddgg d S )Ntest-8000Hz-le-3ch-5S-24bit.wavFr   r&   r8         r   i   i  i i   i  i i   @i ?   i i   r   r#   r$   r   r   r   r   test_24_bit_odd_size_with_pad   s    
rI   c                  C   s   d} t jt| dd\}}t|d tt|jtj t|j	d t|d@ d t|d@ 
  t|d	d
ddddddddg
 d S )N&test-8000Hz-le-1ch-10S-20bit-extra.wavFr   i  )
   rF   r   i   i i  i ?i  i i  i i  i i  )r   r   r   r   r   r   r   r   r    r!   anyrH   r   r   r   test_20_bit_extra_data   s$    
rM   c                  C   s   d} t jt| dd\}}t|d tt|jtj t|j	d t|d@ d dd	d
gdddgdddgdddgdddgg}t|| d S )Ntest-8000Hz-le-3ch-5S-36bit.wavFr   r&   rD   ir            l   ` i            l   ` i               l      ` i   l      ` i    
r   r   r   r   r   r   r   r   Zint64r!   r#   r$   r   correctr   r   r   test_36_bit_odd_size   s    
rU   c                  C   s   d} t jt| dd\}}t|d tt|jtj t|j	d t|d@ d dd	d
gdddgdddgdddgdddgg}t|| d S )Ntest-8000Hz-le-3ch-5S-45bit.wavFr   r&   rD   i r   rO   l   i  rP   l   i  rQ   l      i   l      i   rR   rS   r   r   r   test_45_bit_even_size   s    
rW   c                  C   s   d} t jt| dd\}}t|d tt|jtj t|j	d t|d@ d dd	d
gdddgdddgdddgdddgg}t|| d S )Ntest-8000Hz-le-3ch-5S-53bit.wavFr   r&   rD   i  r   rO   l x i rP   l x i rQ   l    x i   l    x i   rR   rS   r   r   r   test_53_bit_odd_size   s    
rY   c                  C   s   dD ]} d}t jt|dd\}}t|d tt|jtj t|j	d ddd	gd
ddgdddgdddgdddgg}t|| ~qd S )Nr   ztest-8000Hz-le-3ch-5S-64bit.wavFr   r&   rD   rO   l rP   l r   rQ   l       l    r'   rR   )r   r#   r$   r   rT   r   r   r   test_64_bit_even_size  s    

r]   c               
   C   s<   dD ]2} t tdd tjt| dd\}}W 5 Q R X qd S )N>   rX   rJ   rN   rC   rV   zmmap.*not compatiblematchTr   )r	   
ValueErrorr   r   r   rH   r   r   r   test_unsupported_mmap  s    ra   c                  C   sR   dD ]H\} }t jt| dd\}}t jt|dd\}}t|| t|| qd S )N>   ztest-44100Hz-be-1ch-4bytes.wavr   ztest-8000Hz-be-3ch-5S-24bit.wavrC   Fr   )r   r   r   r   )ZrifxZriffZrate1Zdata1rate2data2r   r   r   	test_rifx%  s
    
rf   c                  C   sR   dD ]H} d}t t|d,}ttdd tj|| d W 5 Q R X W 5 Q R X qd S )Nr   zexample_1.ncrbz CDF.*'RIFF' and 'RIFX' supportedr^   r   openr   r	   r`   r   r   r   r#   fpr   r   r   test_read_unknown_filetype_fail1  s
    rl   c                  C   sR   dD ]H} d}t t|d,}ttdd tj|| d W 5 Q R X W 5 Q R X qd S )Nr   zTransparent Busy.anirg   zNot a WAV file.*ACONr^   r   rh   rj   r   r   r    test_read_unknown_riff_form_type:  s
    rm   c                  C   sR   dD ]H} d}t t|d,}ttdd tj|| d W 5 Q R X W 5 Q R X qd S )Nr   z!test-8000Hz-le-1ch-1byte-ulaw.wavrg   z2Unknown wave file format.*MULAW.*Supported formatsr^   r   rh   rj   r   r   r   test_read_unknown_wave_formatC  s
    rn   c                  C   sz   dD ]p} d}t t|dT}ttjdd: tj|| d\}}|jdksLt|dksXtd|d< W 5 Q R X W 5 Q R X qd S )	Nr   z(test-44100Hz-le-1ch-4bytes-early-eof.wavrg   zReached EOFr^   r   r   r   )ri   r   r
   r   r.   r   sizeAssertionError)r   r#   rk   r$   r   r   r   r   test_read_early_eof_with_dataM  s    rq   c                  C   sR   dD ]H} d}t t|d,}ttdd tj|| d W 5 Q R X W 5 Q R X qd S )Nr   z0test-44100Hz-le-1ch-4bytes-early-eof-no-data.wavrg   zUnexpected end of file.r^   r   rh   rj   r   r   r   test_read_early_eofZ  s
    rr   c                  C   sR   dD ]H} d}t t|d,}ttdd tj|| d W 5 Q R X W 5 Q R X qd S )Nr   z/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wavrg   zIncomplete chunk ID.*b'f'r^   r   rh   rj   r   r   r   test_read_incomplete_chunkc  s
    rs   c                  C   sR   dD ]H} d}t t|d,}ttdd tj|| d W 5 Q R X W 5 Q R X qd S )Nr   z,test-8000Hz-le-3ch-5S-24bit-inconsistent.wavrg   zheader is invalidr^   r   rh   rj   r   r   r   test_read_inconsistent_headerl  s
    rt   dt_strz<i2z<i4z<i8z<f4z<f8z>i2z>i4z>i8z>f4z>f8z|u1channelsr\   r'   r8   r$   r&   i }  r   FTrealfilec              	   C   s  t |}| rt|d}nt }t jd|}|dkrJ|d d df }|jdkr`||}n|d |}t	
||| t	j||d\}	}
t||	 t|
jjdk|
jd	 t||
 | rd|
d< n"tjtd
d d|
d< W 5 Q R X | r|rtrtjdkrt  t  d S )Nztemp.wavd   r\   r   fr<   r   )<r3   |)msgz	read-onlyr^   win32)r   r   strr   r   randomZrandkindZastyper   writer   r   r   r4   r   pytestr	   r`   r   r5   platformr   )rw   r   r$   rv   ru   Ztmpdirr   Ztmpfiler   rd   re   r   r   r   test_write_roundtripy  s,    




r   ),r   r5   ior   Znumpyr   Znumpy.testingr   r   r   r   r   r   r   r	   r
   Zscipy.ior   r   r%   r)   r,   r0   r6   r?   rB   rI   rM   rU   rW   rY   r]   ra   rf   rl   rm   rn   rq   rr   rs   rt   markZparametrizer   r   r   r   r   <module>   sV    		
		     