
    biJ              	          d dl Z d dlZd dlmZmZ d dlZd dlZd dlZd dl	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 Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$ejJ                  jL                  d        Z' G d d      Z(d Z)d Z*d Z+d Z,d Z-d Z.d  Z/d! Z0ejJ                  jc                  d"g d#      ejJ                  jc                  d$g d%      ejJ                  jc                  d&d'd(g      ejJ                  jc                  d)d*d+g      ejJ                  jc                  d,d*d+g      d-                                    Z2ejJ                  jc                  d.ejf                  g      d/        Z4d0 Z5y)1    N)BytesIOUnsupportedOperation)assert_equalassert_assert_array_equalbreak_cyclesIS_PYPY)raiseswarns)wavfilec                     t         j                  j                  t         j                  j                  t              d|       S )Ndata)ospathjoindirname__file__)fns    V/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/io/tests/test_wavfile.pydatafiler      s&    77<<162>>    c                     dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       ~ y )NFTtest-44100Hz-le-1ch-4bytes.wavmmapD  )i:  
r   readr   r   r   np
issubdtypedtypeint32shaper   filenamerater   s       r   test_read_1r(      se     3\\(8"44@
dT5!djj"((34TZZ)r   c                     dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       ~ y )Nr   test-8000Hz-le-2ch-1byteu.wavr   @  )i      )
r   r   r   r   r   r    r!   r"   uint8r$   r%   s       r   test_read_2r.   !   se     2\\(8"44@
dT4 djj"((34TZZ*r   c                     dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       ~ y )Nr   #test-44100Hz-2ch-32bit-float-le.wavr   r   i  r,   )
r   r   r   r   r   r    r!   r"   float32r$   r%   s       r   test_read_3r3   .   se     8\\(8"44@
dT5!djj"**56TZZ*r   c                     dD ]  } t        j                         5  t        j                  ddt        j                         d}t        j
                  t        |      |       \  }}d d d        t        d       t        t        j                  j                  t        j                               t        |j                  d       ~ y # 1 sw Y   fxY w)Nr   ignorez,Chunk .non-data. not understood, skipping itz)test-48000Hz-2ch-64bit-float-le-wavex.wavr   i  )i  r,   )warningscatch_warningsfilterwarningsr   WavFileWarningr   r   r   r   r    r!   r"   float64r$   r%   s       r   test_read_4r;   ;   s     $$& 	E##>&&
 CH hx&8tDJD$	E 	T5!djj"**56TZZ*	E 	Es   AC

C	c                     dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t	        |j                  j                  dk(  xs. t        j                  dk(  xr |j                  j                  dk(         t        |j                  d       ~ y )	Nr   #test-44100Hz-2ch-32bit-float-be.wavr   r   >big=r1   )r   r   r   r   r   r    r!   r"   r2   	byteordersysr$   r%   s       r   test_read_5rC   N   s     
8\\(8"44@
dT5!djj"**56

$$+ M0F 1L04

0D0D0K	NTZZ*
r   c                     dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       t        |j                         d       t        |d	   d
       t        |j                         d       ~ y )Nr   test-8000Hz-le-5ch-9S-5bit.wavr   r+   )	         r      r   r      )r   r   r   r   r   r    r!   r"   r-   r$   maxminr%   s       r   test_5_bit_odd_size_no_padrN   ]   s      3\\(8"44@
dT4 djj"((34TZZ( 	TJ&* 	TXXZ,T$Z%TXXZ#!r   c                     dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       t        |j                         d       t        |d	   d       t        |j                         d
       ~ y )Nr   test-8000Hz-le-4ch-9S-12bit.wavr   r+   )rF         r   i  rJ   i )r   r   r   r   r   r    r!   r"   int16r$   rL   rM   r%   s       r   test_12_bit_even_sizerT   t   s      4\\(8"44@
dT4 djj"((34TZZ( 	T//3 	TXXZ!45T$Z#TXXZ!56!r   c            	      T   d} t        j                  t        |       d      \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       t        |g dg d	g d
g dg dg       y )Ntest-8000Hz-le-3ch-5S-24bit.wavFr   r+   rG         r   )i   i  i )i   i  i r   r   r   )i   @i ?   ) r\   i   r   r&   r'   r   s      r   test_24_bit_odd_size_with_padr^      s     1Hhx0u=JD$tBMM$**bhh/0V$ a  <<<<<	> ?r   c                  r   d} t        j                  t        |       d      \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       t	        |dz  j                                t        |g d	       y )
N&test-1234Hz-le-1ch-10S-20bit-extra.wavFr     )
   rY   r   i   )
i i  i ?i  i i  i i  i i  )r   r   r   r   r   r    r!   r"   r#   r$   anyr]   s      r   test_20_bit_extra_datard      s     8Hhx0u=JD$tBMM$**bhh/0U# a  TE\ !  
 
r   c                  X   d} t        j                  t        |       d      \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       g dg d	g d
g dg dg}t        ||       y )Ntest-8000Hz-le-3ch-5S-36bit.wavFr   r+   rW   ir   )         l   ` i   )         l   ` i   rZ   )            l      ` i   )      ` rj       
r   r   r   r   r   r    r!   r"   int64r$   r&   r'   r   corrects       r   test_36_bit_odd_sizerp      s    0Hhx0u=JD$tBMM$**bhh/0V$ 	!1% NMMMM	OG wr   c                  X   d} t        j                  t        |       d      \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       g dg d	g d
g dg dg}t        ||       y )Ntest-8000Hz-le-3ch-5S-45bit.wavFr   r+   rW   i r   )rg   l   i  )rh   l   i  rZ   )ri   l      i   )      rs   i   rl   rn   s       r   test_45_bit_even_sizert      s    0Hhx0u=JD$tBMM$**bhh/0V$ # LKKKK	MG wr   c                  X   d} t        j                  t        |       d      \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       t        |dz  d       g dg d	g d
g dg dg}t        ||       y )Ntest-8000Hz-le-3ch-5S-53bit.wavFr   r+   rW   i  r   )rg   l x i )rh   l x i rZ   )ri   l    x i   )    x rw   i   rl   rn   s       r   test_53_bit_odd_sizerx      s    0Hhx0u=JD$tBMM$**bhh/0V$ q! IHHHH	JG wr   c                  J   dD ]  } d}t        j                  t        |      |       \  }}t        |d       t	        t        j                  |j                  t
        j                               t        |j                  d       g dg dg dg d	g d
g}t        ||       ~ y )Nr   test-8000Hz-le-3ch-5S-64bit.wavr   r+   rW   )rg   l )rh   l rZ   )ri   l       )    r~   r,   rl   )r   r&   r'   r   ro   s        r   test_64_bit_even_sizer     s     4\\(8"44@
dT4 djj"((34TZZ( JIIII	K 	T7#'r   c                      dD ]?  } t        t        d      5  t        j                  t	        |       d      \  }}d d d        A y # 1 sw Y   LxY w)N>   rV   rf   rr   rv   r`   zmmap.*not compatiblematchTr   )r
   
ValueErrorr   r   r   r]   s      r   test_unsupported_mmapr     sZ    ? E
 J&<= 	E hx&8tDJD$	E 	EE
	E 	Es   $AA	c                      dD ]c  \  } }t        j                  t        |       d      \  }}t        j                  t        |      d      \  }}t        ||       t        ||       e y )N>   ztest-8000Hz-be-3ch-5S-24bit.wavrV   test-44100Hz-be-1ch-4bytes.wavr   Fr   )r   r   r   r   )rifxriffrate1data1rate2data2s         r   	test_rifxr   *  s]    < #
d ||HTN?u||HTN?uUE"UE"#r   c                      dD ]c  \  } }t        j                  t        |       d      \  }}t        j                  t        |      d      \  }}t        ||       t        ||       e y )N>   z$test-8000Hz-le-3ch-5S-24bit-rf64.wavrV   #test-44100Hz-le-1ch-4bytes-rf64.wavr   Fr   )r   r   r   r   )rf64r   r   r   r   r   s         r   	test_rf64r   6  s]    < )
d ||HTN?u||HTN?u5%(5%()r   c                    t        j                  d      }t        | j                  d            }d}t         j                  j                  ddd      j                  |      }t        j                  |||       t        j                  |d      \  }}t        ||       |j                   d	}|j                  j                  d
v sJ |       t        ||       d|d<   y )N<i8temp.wavr   r      )rk   Tr   z! byteorder not in ('<', '=', '|')<r@   |)r    r"   strr   randomrandintastyper   writer   r   rA   r   )tmpdirr"   tmpfiler'   r   r   r   msgs           r   test_write_roundtrip_rf64r   B  s    HHUOE&++j)*GD99QX.55e<DMM'4&<<d3LE5u[[M:
;C;;  O38S83tU#E!Hr   c                   &    e Zd Zd Zd ZddZd Zy)Nonseekablec                     || _         y N)fp)selfr   s     r   __init__zNonseekable.__init__W  s	    r   c                      y)NF r   s    r   seekablezNonseekable.seekableZ  s    r   c                8    | j                   j                  |      S r   )r   r   )r   sizes     r   r   zNonseekable.read]  s    ww||D!!r   c                 8    | j                   j                          y r   )r   closer   s    r   r   zNonseekable.close`  s    r   N)r|   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   V  s    "r   r   c                     dD ]  } t        |       }t        |d      5 }t        |d      5 }t        j                  |      \  }}t        j                  t	        |            \  }}t        j                  |d      \  }}	t        ||       t        ||       t        ||	       t        ||	       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)N)r   r*   r0   r=   rE   rP   rV   r`   rf   rr   rv   rz   r   r   rbFr   )r   openr   r   r   r   )
r&   dfnamefp1fp2r   r   r   r   rate3data3s
             r   test_streamsr   d  s    < ' (#&$ 	'3VT(: 	'c"<<,LE5"<<C(89LE5"<<U;LE5&&&&	' 	' 	''	' 	' 	' 	's#   CBC.CC
CC	c                      dD ]S  } d}t        t        |      d      5 }t        t        d      5  t	        j
                  ||        d d d        d d d        U y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr   zexample_1.ncr   z)CDF.*'RIFF', 'RIFX', and 'RF64' supportedr   r   r   r   r
   r   r   r   r   r&   r   s      r   test_read_unknown_filetype_failr   ~  so     ,!(8$d+ 	,r
*UV ,Rd+,	, 	,,, ,	, 	,"   A&AA&A#A&&A/	c                      dD ]S  } d}t        t        |      d      5 }t        t        d      5  t	        j
                  ||        d d d        d d d        U y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr   zTransparent Busy.anir   zNot a WAV file.*ACONr   r   r   r   s      r    test_read_unknown_riff_form_typer     so     ,)(8$d+ 	,r
*@A ,Rd+,	, 	,,, ,	, 	,r   c                      dD ]S  } d}t        t        |      d      5 }t        t        d      5  t	        j
                  ||        d d d        d d d        U y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr   z!test-8000Hz-le-1ch-1byte-ulaw.wavr   z2Unknown wave file format.*MULAW.*Supported formatsr   r   r   r   s      r   test_read_unknown_wave_formatr     ss     ,6(8$d+ 	,r
 +, - ,Rd+,	, 	,,, ,	, 	,r   c                  8   dD ]}  } d}t        t        |      d      5 }t        t        j                  d      5  t        j
                  ||       \  }}|j                  dkD  sJ |dk(  sJ d|d<   d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)	Nr   z(test-44100Hz-le-1ch-4bytes-early-eof.wavr   zReached EOFr   r   r   r   )r   r   r   r   r9   r   r   )r   r&   r   r'   r   s        r   test_read_early_eof_with_datar     s     =(8$d+ 	rw--]C $\\"48
dyy1}$}u}$}Q	 	 	 	s"   B8B1BB	BB	c                      dD ]S  } d}t        t        |      d      5 }t        t        d      5  t	        j
                  ||        d d d        d d d        U y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr   z0test-44100Hz-le-1ch-4bytes-early-eof-no-data.wavr   zUnexpected end of file.r   r   r   r   s      r   test_read_early_eofr     so     ,E(8$d+ 	,r
*CD ,Rd+,	, 	,,, ,	, 	,r   c                      dD ]S  } d}t        t        |      d      5 }t        t        d      5  t	        j
                  ||        d d d        d d d        U y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr   z/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wavr   zIncomplete chunk ID.*b'f'r   r   r   r   s      r   test_read_incomplete_chunkr     so     ,D(8$d+ 	,r
*EF ,Rd+,	, 	,,, ,	, 	,r   c                      dD ]S  } d}t        t        |      d      5 }t        t        d      5  t	        j
                  ||        d d d        d d d        U y # 1 sw Y   xY w# 1 sw Y   lxY w)Nr   z,test-8000Hz-le-3ch-5S-24bit-inconsistent.wavr   zheader is invalidr   r   r   r   s      r   test_read_inconsistent_headerr     so     ,A(8$d+ 	,r
*=> ,Rd+,	, 	,,, ,	, 	,r   dt_str)z<i2z<i4r   z<f4z<f8z>i2z>i4z>i8z>f4z>f8z|u1channels)r}   r,   rG   r'   r+   i }  r   FTrealfilec                    t        j                  |      }| rkt        |j                  t        t	        j
                               d            }t        j                  t        j                  j                  |      d       n
t               }t         j                  j                  d|      }|dk(  r	|d d df   }|j                  dk(  r|j                  |      }n|dz  j                  |      }t        j                   |||       t        j"                  ||	      \  }	}
t%        ||	       t'        |
j                  j(                  d
v |
j                         t+        ||
       | rd|
d<   n)t-        j.                  t0        d      5  d|
d<   d d d        | r3|r0t2        r)t4        j6                  dk(  rt9                t9                y y y y y # 1 sw Y   ?xY w)Nr   T)exist_okd   r}   r   frK   r   r   )r   z	read-onlyr   win32)r    r"   r   r   	threadingget_native_idr   makedirsr   r   r   r   randkindr   r   r   r   r   r   rA   r   pytestr
   r   r	   rB   platformr   )r   r   r'   r   r   r   r"   r   r   r   r   s              r   test_write_roundtripr     si    HHVEfkk#i&=&=&?"@*MN
BGGOOG,t<)99>>#x(D1}AqDzzzS{{5!S  'MM'4&<<d3LE5uEKK!!_4%++FtU#a]]:[9 	E!H	 DW)@ 		 *AWDx	 	s   	GGr"   c                 H   t        | j                  d            }t        j                  j	                  d      }|j                  d      j                  |      }d}t        j                  t        d      5  t        j                  |||       d d d        y # 1 sw Y   y xY w)Nr   ra   )r   rG   r+   Unsupportedr   )r   r   r    r   default_rngr   r   r
   r   r   r   )r   r"   r   rngr   r'   s         r   test_wavfile_dtype_unsupportedr     sz    &++j)*G
))


%C::h&&u-DD	z	7 +gtT*+ + +s   7BB!c                     t        j                  t        d            } t        j                  t
              5  | j                  dd       d d d        t        j                  t
              5  | j                  dd       d d d        | j                  dt        j                        }|dk(  s
J d|        y # 1 sw Y   mxY w# 1 sw Y   ExY w)Ns     r   rG   r|   r,   z$Failed to seek to end, got position )	r   SeekEmulatingReaderr   r   r
   r   seekr   SEEK_END)readerposs     r   'test_seek_emulating_reader_invalid_seekr     s    (()=>F 
+	, Aq 
+	, B ++a
%C!8A;C5AA8  s   B7,C7C C)6r   rB   ior   r   r   r6   numpyr    numpy.testingr   r   r   r   r	   r   r
   r   scipy.ior   r   r(   r.   r3   r;   rC   rN   rT   r^   rd   rp   rt   rx   r   r   r   r   markxslowr   r   r   r   r   r   r   r   r   r   parametrizer   float16r   r   r   r   r   <module>r      s   	 
 .   2 2    ?


&.,?.< 0 0 00E	#	)  & '4,,,
,,,  $N OY/$/%/eT]3" 4 0 0 0O"J 2::,/+ 0+Br   