o
    7ήcq                  	   @   s  d dl mZmZmZ d dlZd dlmZ d dlZd dl	Z	d dl
mZmZmZmZmZmZmZmZ d dlZejejejejejejgZejejejejejejgZdZdZejefejefejefejefejefejefgZzeejg7 Zeejg7 Zeejefg7 ZW n	 e y   Y nw e! Z!de!v re!"d g Z#e!D ]*Z$e%  e&de' e(e)e$ej*se#+e$ W d   n1 sw   Y  qe#D ]Z,e!"e, qd	d
 Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6e	j7j8dd Z9dd  Z:d!d" Z;d#d$ Z<d%d& Z=d'd( Z>d)d* Z?d+d, Z@d-d. ZAd/d0 ZBd1d2 ZCd3d4 ZDd5d6 ZEd7d8 ZFd9d: ZGd;d< ZHd=d> ZId?d@ ZJdAdB ZKe	j7j8dCdD ZLdEdF ZMdGdH ZNdIdJ ZOdKdL ZPdMdN ZQdOdP ZRdQdR ZSdSdT ZTdUdV ZUdWdX ZVdYdZ ZWd[d\ ZXd]d^ ZYd_d` ZZdadb Z[dcdd Z\dedf Z]dgdh Z^didj Z_dkdl Z`dmdn Zadodp Zbdqdr Zcdsdt Zddudv Zedwdx Zfdydz Zgd{d| Zhd}d~ Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpdS )    )divisionprint_functionabsolute_importN)combinations)assert_almost_equalassert_allcloseassert_assert_equalassert_raisesassert_raises_regexassert_array_equalassert_warnsư>gvIh%<=dmeyignorec                  C   sv   g d} t d}t | |\}}}}t|dg t|dg t|ddg t|g d tt t| |dk d S )	N         r            db1ga{!@g'eֿg      @g      )g'er   gZo̙g'er   )pywtWaveletwavedecr   r   r   dwt_max_levellen)xr   cA3cD3cD2cD1 r$   A/tmp/pip-target-vg8gfxp4/lib/python/pywt/tests/test_multilevel.pytest_wavedec<   s   
r&   c                  C   sn   t ttjtdd t ttjg d g d} t| d}t|\}}t||}d}t	t|tj|d d S )N   haarr   r   "Unexpected detail coefficient type)
r
   
ValueErrorr   waverecnponesr   coeffs_to_arrayarray_to_coeffsr   )r   coeffsarrcoeff_slicescoeffs_from_arrmessager$   r$   r%   test_waverec_invalid_inputsG   s   r5   c                  C   s|   t jd} | d}tD ].\}}||}t |r)|d| d|jj 7 }t	
|d}tt	|d|||d qd S )N  r'                 ?r   atolrtol)r,   randomRandomStaterandndtypes_and_tolerancesastypeiscomplexobjrealdtyper   r   r   r+   rstatex0dttolr   r0   r$   r$   r%   test_waverec_accuraciesX   s   


rH   c                  C   s@   g d} t | d}d |d< d |d< tt |djt|  d S )Nr   r      r   )r   r   r   r+   sizer   r   r0   r$   r$   r%   test_waverec_nonec   s
   rL   c                  C   s.   g d} t | d}tt |d| dd d S )N)r   r   r   r   r   r   r   -q=r:   )r   r   r   r+   rK   r$   r$   r%   test_waverec_odd_lengthm   s   rO   c                  C   s<   t g d} | d } t| d}tt|d| dd d S )Nr   r7   r   rM   rN   )r,   arrayr   r   r   r+   rK   r$   r$   r%   test_waverec_complexs   s   rQ   c                  C   s   t d} tttD ]7\}}tjd|d}d|}t j|| dd}|D ]}t	|j
|kd|  q$t || }t	|j
|kd|  q
d S )	Nr(   r'   rB   "wrong dtype returned for {0} inputrI   levelz	wavedec: z	waverec: )r   r   zip	dtypes_in
dtypes_outr,   r-   formatr   r   rB   r+   )waveletdt_indt_outr   errmsgr0   cx_roundtripr$   r$   r%   test_multilevel_dtypes_1dz   s   

r`   c                  C   s^   t jd} | d}tD ]}tjjD ]}tj|||d}t	tj
|||d|ttd qqd S )Nr6   P   moder:   r9   )r,   r;   r<   r=   wavelistr   Modesmodesr   r   r+   
tol_singlerD   rrZ   rc   r0   r$   r$   r%   test_waverec_all_wavelets_modes   s   
rk   c                  C   s   t jd} | dd}tD ]7\}}||}t |r+|d| dd|jj 7 }t	
|d}tt|dk tt	|d|||d qd S )Nr6   r   r7   r   r   r8   )r,   r;   r<   r=   r>   r?   r@   rA   rB   r   wavedec2r   r   r   waverec2rC   r$   r$   r%   test_waverec2_accuracies   s   

rn   c            
      C   s   t d} tttD ]V\}}tjd|d}d|}t j|| dd\}}}t	|j
|kd|  |D ]}t	|j
|kd|  q1|D ]}t	|j
|kd|  q@t |||g| }	t	|	j
|kd|  q
d S )	Nr(   r'   r'   rR   rS   rI   rT   z
wavedec2: z
waverec2: )r   r   rV   rW   rX   r,   r-   rY   rl   r   rB   rm   )
rZ   r[   r\   r   r]   cAcoeffsD2coeffsD1r^   r_   r$   r$   r%   test_multilevel_dtypes_2d   s   

rs   c                  C   `   t jd} | dd}tD ]}tjjD ]}tj|||d}t	tj
|||d|ttd qqd S Nr6   ra   `   rb   rd   )r,   r;   r<   r=   re   r   rf   rg   rl   r   rm   rh   ri   r$   r$   r%    test_waverec2_all_wavelets_modes      rw   c                  C   sD   t dd } t| d}tt|dk tt|d| dd d S )Nr   r   r7   r   r   rM   rN   )r,   r-   r   rl   r   r   r   rm   datar0   r$   r$   r%   test_wavedec2_complex   s   r|   c                  C   s   t d} tttj| d d S )Nr   r(   )r,   r-   r
   r*   r   rl   r{   r$   r$   r%   test_wavedec2_invalid_inputs   s   
r~   c                  C   sb   t ttjtdd t ttjg d tjtjfD ]} | tdd}d}tt|tj|d qd S Nro   r(   r)   )	r
   r*   r   rm   r,   r-   r   wavedecnr   dec_funcr0   r4   r$   r$   r%   test_waverec2_invalid_inputs   s   r   c                  C   sT   t d} t| d}t|}t|d |d< t d|d d< tttj|d d S )Nro   r   r   )   r   )	r,   r-   r   rl   listzerosr
   r*   rm   rK   r$   r$   r%   "test_waverec2_coeff_shape_mismatch   s   
r   c                  C   s0   t d} t| d}tt|d| dd d S )N)
   r   r   rM   rN   )r,   r-   r   rl   r   rm   rK   r$   r$   r%   test_waverec2_odd_length   s   
r   c                  C   sB   t ddd} t| d}d|d< t| jt|djk d S )N   r   r   r   NNNr   )r,   arangereshaper   rl   r   shaperm   rK   r$   r$   r%   test_waverec2_none_coeffs   s   r   c                  C   s`   t jd} tddD ]"}| jd|  }t|d}tt|dk t	t
|d|td qd S )Nr6   r   r   )r   r   r   rN   )r,   r;   r<   ranger=   r   r   r   r   r   waverecn
tol_double)rD   ndr   r0   r$   r$   r%   test_waverecn   s   r   c                  C   s   t di i g} tt| djd tt| djd t di dt dig} t di i dt dig} tt| djd d S )NrI   rI   rI   r   r'   r'   r'   daar   r   r   )r   r   r   )r,   r-   r	   r   r   r   r0   r$   r$   r%   test_waverecn_empty_coeff  s   r   c                  C   s   d i g} t ttj| d tdi dd ig} t ttj| d tdtdtddg} t ttj| d tdtdtddg} t ttj| d dgggdgggdgggdgggd	g} t ttj| d t ttjg d
 d S )Nr   r   r   r   )r   foo)r   da      ?        adr   ddr(   )r
   r*   r   r   r,   r-   r   r$   r$   r%   test_waverecn_invalid_coeffs  s   (r   c                  C   s<   t jt jfD ]} | tdd}d}tt|t j|d qd S r   )r   r   rl   r,   r-   r   r*   r   r   r$   r$   r%   test_waverecn_invalid_inputs(  s   r   c                  C   s8   dggdggdggdggdg} t t| djd d S )Nr   r   r   r   )rI   rI   )r	   r   r   r   r   r$   r$   r%   test_waverecn_lists2  s    r   c                  C   s,   t ddt dig} tttj| d d S )Nr   adary   r   )r,   r-   r
   r*   r   r   r   r$   r$   r%   test_waverecn_invalid_coeffs28  s   r   c                  C   s<   t d} tttj| d t d} tttj| ddd d S )Nr   r(   r   rT   )r,   rP   r
   r*   r   r   r-   r}   r$   r$   r%   test_wavedecn_invalid_inputs>  s   

r   c            	   	   C   s   t ddd} d}tjtjtjg}tjtjtj	g}t
 5 t
dt t||D ] \}}dD ]}|| d|dd}||d|d	}t| |||d
 q1q+W d    d S 1 sWw   Y  d S )N@   r'   rM   r   )periodization	symmetricr(      rc   rU   rb   r8   )r,   r   r   r   r   rl   r   r+   rm   r   warningscatch_warningssimplefilterUserWarningrV   r   )	r{   rG   	dec_funcs	rec_funcsr   rec_funcrc   r0   rj   r$   r$   r%   test_wavedecn_many_levelsH  s   
"r   c                  C   s   t jd} | ddd}tD ]3\}}||}t |r-|d| ddd|jj 7 }t	
||d}tt	|d|||d qd S )Nr6   r   r7   r   r8   )r,   r;   r<   r=   r>   r?   r@   rA   rB   r   r   r   r   rC   r$   r$   r%   test_waverecn_accuraciesW  s   

 r   c                  C   s   t d} tttD ]^\}}tjd|d}d|}t j|| dd\}}}t	|j
|kd|  | D ]\}}	t	|	j
|kd|  q3| D ]\}}	t	|	j
|kd|  qFt |||g| }
t	|
j
|kd|  q
d S )	Nr(   ro   rR   rS   rI   rT   z
wavedecn: z
waverecn: )r   r   rV   rW   rX   r,   r-   rY   r   r   rB   itemsr   )rZ   r[   r\   r   r]   rp   rq   rr   keyr^   r_   r$   r$   r%   test_multilevel_dtypes_ndc  s   

r   c                  C   s4   t dd } t| d}tt|d| dd d S )Nr   r7   r   rM   rN   )r,   r-   r   r   r   r   rz   r$   r$   r%   test_wavedecn_complexs  s   r   c                  C   sF   t d} tD ]\}}t| |d}tt|d| ||d qd S )Nr   r   r8   )r,   r-   r>   r   r   r?   r   r   )r   rF   rG   r0   r$   r$   r%   test_waverecn_dtypesy  s
   
r   c                  C   rt   ru   )r,   r;   r<   r=   re   r   rf   rg   r   r   r   rh   ri   r$   r$   r%    test_waverecn_all_wavelets_modes  rx   r   c                  C   s   t dddg} t| \}}t|| d  t|||d   tttjg  tttj| d gd  tttj| d | d fg tttjd g tttj| dg tttj| d g t dgt	t dgt dgdg}tttj| d S )Nr'   rI   r   r   r   )dr^   )
r,   r   r   r   r.   r   r
   r*   rP   dict)a_coeffsr1   
arr_slicesr0   r$   r$   r%   test_coeffs_to_array  s    
(r   c               	   C   s  t jd} dtjtjddtjtjddtjtj	dd}d}|D ]\}| j
|g|| d   }tjjD ]I}tD ]D}t|}tt |j|j}|d	krOq8|| d
 |||d}	t|	\}
}tj|
||d}|| d |||d}t||ddd q8q4q"d S )Nr6   r   r   decrecrI   r   r   rl   r      r   r   r   rb   output_formatr   -C6?rd   )r,   r;   r<   r   r   r+   rl   rm   r   r   r=   rf   rg   re   r   r   minr   dec_lenr.   r/   r   )rngparamsNfx1rc   wavewmaxlevelr0   	coeff_arrr2   coeffs2x1rr$   r$   r%    test_wavedecn_coeff_reshape_even  s0   
r   c                  C   s   t jd} d}td}d}d}dD ]P}| j|g|  }tj||||d}tj||d\}}	|d ur:tt	tj| tt	tj|d	d tt	tj|d
d t
||	}
tj|
|||d}t||ddd qd S )Nr6   r   db2r   r   ))r   r   r   r   r   r   rI   r   rI   Nrc   axesr   r   r   rI   r   r$   r   rd   )r,   r;   r<   r   r   r=   r   r.   r
   r*   r/   r   r   )r   rc   r   r   ndimr   r   r0   r   r2   r   r   r$   r$   r%   'test_wavedecn_coeff_reshape_axes_subset  s*   


r   c                  C   s   t jd} | dd}d}tj|d|d}tttj|d d tj|t j	d\}}t 
t |}t|dk tj|dd\}}tt 
t |dk tt 
|dk|k tj|d|d}tj|d d\}}t|j|j d S )	Nr6       r   r   rb   )paddingr   r(   )r,   r;   r<   r=   r   r   r
   r*   r.   nansumisnanr   r	   r   )r   r   rc   r0   r   r2   npadcoeffs_haarr$   r$   r%   test_coeffs_to_array_padding  s   r   c                  C   s   t jd} | dd}tjjD ]M}dD ]H}t|}tt 	|j
|j}|dkr+qtj|||d}t|\}}t||}	tj|	||d}
|
tdd |j
D  }
t||
d	d	d
 qqd S )Nr6   #   !   r(   r   rb   c                 S      g | ]}t |qS r$   slice.0sr$   r$   r%   
<listcomp>      z3test_waverecn_coeff_reshape_odd.<locals>.<listcomp>r   rd   )r,   r;   r<   r=   r   rf   rg   r   r   r   r   r   r   r.   r/   r   tupler   )r   r   rc   r   r   r   r0   r   r2   r   r   r$   r$   r%   test_waverecn_coeff_reshape_odd  s    
r   c                  C   sF   t tdd} t | \}}ttt j|g  ttt j||d d S )NrI   r(   r   )r   r   r,   r-   r.   r
   r*   r/   )r0   r1   r   r$   r$   r%   #test_array_to_coeffs_invalid_inputs  s   r   c               	   C   s  t jd} dtjtjddtjtjddtjtj	dd}d}|D ]^}| j
|g|| d   }tjjD ]K}tD ]F}t|}tt |j|j}|d	krOq8|| d
 |||d}	t|	\}
}}tj|
|||d}|| d |||d}t||ddd q8q4q"d S )Nr6   r   r   rI   r   r      r   r   r   rb   r   r   r   rd   )r,   r;   r<   r   r   r+   rl   rm   r   r   r=   rf   rg   re   r   r   r   r   r   ravel_coeffsunravel_coeffsr   )r   r   r   r   r   rc   r   r   r   r0   r   slicesshapesr   r   r$   r$   r%   test_wavedecn_coeff_ravel  s0   

r   c                  C   s   t jd} dtjtjddtjtjddtjtj	dd}d}|D ]J}| j
|g|| d   }tjjD ]7}td	}|| d
 |||dd}t|\}}	}
tj||	|
|d}|| d |||d}t||ddd q4q"d S )Nr6   r   r   rI   r   r   r   r   r   r   r   r   r   r   rb   r   rd   )r,   r;   r<   r   r   r+   rl   rm   r   r   r=   rf   rg   r   r   r   r   )r   r   r   r   r   rc   r   r0   r   r   r   r   r   r$   r$   r%   $test_wavedecn_coeff_ravel_zero_level2  s&   

r   c                  C   s   t jd} | dd}tjjD ]O}dD ]J}t|}tt 	|j
|j}|dkr+qtj|||d}t|\}}}	t|||	}
tj|
||d}|tdd |j
D  }t||d	d	d
 qqd S )Nr6   r   r   r   r   rb   c                 S   r   r$   r   r   r$   r$   r%   r   Y  r   z1test_waverecn_coeff_ravel_odd.<locals>.<listcomp>r   rd   )r,   r;   r<   r=   r   rf   rg   r   r   r   r   r   r   r   r   r   r   r   )r   r   rc   r   r   r   r0   r   r   r   r   r   r$   r$   r%   test_waverecn_coeff_ravel_oddI  s    
r  c                  C   s   t d} td}t| |}dd |dd  D |dd < t|\}}}tj|||dd}t||}t| |ddd	 d
d |dd  D |dd < t	t
tj| d S )Nro   r(   c                 S   r   r$   r   r   r^   r$   r$   r%   r   c  r   z2test_ravel_wavedec2_with_lists.<locals>.<listcomp>r   rl   r   r   rd   c                 S   s   g | ]
}t |d d qS )Nr   r  r  r$   r$   r%   r   k  s    )r,   r-   r   r   rl   r   r   rm   r   r
   r*   )r   wavr0   r   r   r   r   r   r$   r$   r%   test_ravel_wavedec2_with_lists]  s   


r  c                  C   s   t tdd} d | d< ttt j|  t tdd} d| d< ttt j|  g d| d< ttt j|  d | d< ttt j|  t tdd} d | d d< ttt j|  d S )Nr'   r(   r   ro   r   r   ddd)	r   r   r,   r-   r
   r*   r   rl   r   r   r$   r$   r%   test_ravel_invalid_inputo  s   r  c                  C   sx   t tdd} t | \}}}ttt j||g  ttt j|g | ttt j||d d | ttt j|||d d S )NrI   r(   r   r   )r   r   r,   r-   r   r
   r*   r   )r0   r1   r   r   r$   r$   r%   test_unravel_invalid_inputs  s   r  c               	   C   s   t d} dD ]j}dD ]e}t jjD ]^}t jt|| ||d}t j|| ||d}t|d j	|d  |d j
}tdt|D ]}||  D ]\}}	||	j
7 }t|| | |	j	 qFq>t |}
t|
| t |}
t|
| qqqd S )Nr   )r   )r   r   )r         Nr   r   r   r   r   )r   r   rf   rg   r   r,   r-   wavedecn_shapesr	   r   rJ   r   r   r   wavedecn_size)r  
data_shaper   rc   r0   r   expected_sizerU   kvrJ   r$   r$   r%   test_wavedecn_shapes_and_size  s0   





r  c               
   C   sv   t ddfD ]1} dD ],}dD ]'}t jjD ] }t jt|| ||d}t || |}tt	|dd  | qqqqd S )Nr   sym8r	  r  r   r   )
r   r   rf   rg   r   r,   r-   dwtn_max_levelr	   r   )r  r  r   rc   r0   max_levr$   r$   r%   test_dwtn_max_level  s   r  c                  C   R   t jd} | d}dD ]}tj|d|d}tj|d|d}t||dd qd S )Nr   r   r   r   rI   r(   axis+=r9   r,   r;   r<   standard_normalr   r   r+   r   rD   r{   r  coefsr   r$   r$   r%   test_waverec_axes_subsets  s   
r"  c                  C   r  )Nr   r   r   r   r   r  r  r  r  r   r$   r$   r%   test_waverec_axis_db2     
r$  c                  C   X   t jd} | d}tddD ]}tj|d|d}tj|d|d}t||dd qd S )	Nr   r   r  rI   r(   r   r  r  )	r,   r;   r<   r  r   r   rl   rm   r   rD   r{   r   r!  r   r$   r$   r%   test_waverec2_axes_subsets     
r(  c                  C   r&  )	Nr   )r'   r'   r'   r'   r   r   r(   r   r  r  )	r,   r;   r<   r  r   r   r   r   r   r'  r$   r$   r%   test_waverecn_axes_subsets  r)  r*  c                  C   r  )Nr   ro   r   r(   r   r  r  )r,   r;   r<   r  r   r   r   r   r   r$   r$   r%   test_waverecn_int_axis  r%  r+  c                  C   s"   t d} tttj| ddd d S Nr   r(   r   r  )r,   r-   r
   r*   r   r   r}   r$   r$   r%   test_wavedec_axis_error  s   
r-  c                  C   s*   t tdd} ttt j| ddd d S r,  r   r   r,   r-   r
   r*   r+   r^   r$   r$   r%   test_waverec_axis_error  s   r0  c                  C   s>   t tdd} | d d d | d< ttt j| ddd d S )Nr   r(   r   r   r   r  r.  r/  r$   r$   r%   !test_waverec_shape_mismatch_error  s   r1  c                  C   sJ   t d} tttj| ddd tttj| ddd tttj| ddd d S Nry   r(   r   r   )r   r   r   )r,   r-   r
   	TypeErrorr   rl   r*   r}   r$   r$   r%   test_wavedec2_axes_errors  s   
r4  c                  C   sV   t d} t| d}tttj|ddd tttj|ddd tttj|ddd d S r2  )r,   r-   r   rl   r
   r3  rm   r*   r{   r^   r$   r$   r%   test_waverec2_axes_errors	  s
   
r6  c                  C   s6   t d} tttj| ddd tttj| ddd d S Nr   r(   r   r   r   )r   r   r   )r,   r-   r
   r*   r   r   r}   r$   r$   r%   test_wavedecn_axes_errors  s   
r9  c                  C   sB   t d} t| d}tttj|ddd tttj|ddd d S r7  )r,   r-   r   r   r
   r*   r   r5  r$   r$   r%   test_waverecn_axes_errors  s   
r:  c                  C   s  t jd} | ddd}tdddf}dd t|j|D }d	d
tjj	j
jf}t|||}tt||||dd tt|t|dd   t||d d |}tt||d d ||dd t|||d d }tt|||d d |dd tttj||d d  tttj|||d d d tttj||d d  tttj|||d d d |d }t||d d |d d }tt||d d |d d |dd tt|d d t|dd   d S )Nr6   r   r   r(   sym2r   c                 S   s   g | ]\}}t j||qS r$   )r   _dwtr   )r   r   nfr$   r$   r%   r   .  s    z4test_per_axis_wavelets_and_modes.<locals>.<listcomp>r   r   r  r  r   rI   rb   ).r   )r,   r;   r<   r=   r   r   rV   r   _extensions_pywtrf   reflectr   r   r   r	   r   r   r
   r*   rl   rm   )rD   r{   wavelets
max_levelsrg   r!  data2coefs2r$   r$   r%    test_per_axis_wavelets_and_modes%  s<   

 &rE  c               	   C   s   t jd} tddD ]T}tttD ]L\}}dD ]E}| d| }||}t	j
|d|d}t	|}|jjt jt jfv rFt||ddd	 nt||d
d
d	 t|jj|k t|j|k qqqd S )Nr   r   r   )r   Nr'   r(   levelsr   rd   r  )r,   r;   r<   r   rV   rW   rX   r  r?   r   
fswavedecn
fswaverecnrA   rB   float32float16r   r   r0   )rD   r   r[   r\   rH  r{   Tr   r$   r$   r%   $test_fswavedecn_fswaverecn_roundtripQ  s    

rN  c                  C   sT   t jd} d}| d| }tj|ddd}t|j| t|}t|j| d S )Nr   rI   rF  r(   rG  )	r,   r;   r<   r  r   rI  r   r0   rJ  rD   r   r{   rM  r   r$   r$   r%   &test_fswavedecn_fswaverecn_zero_levelsd  s   
rP  c                  C   s   t jd} d}| d| }tj|ddd}t|}t||dd tt	tj|dd	d tt	tj|dd
d t
ttj|dtt t |jd d d S )Nr   r   r   r(   )r   rI   r   rG  r  r  r8  )r   r   r   r   r   )r,   r;   r<   r  r   rI  rJ  r   r
   r*   r   r   intlog2r   r   rO  r$   r$   r%   *test_fswavedecn_fswaverecn_variable_levelso  s   

rT  c                  C   s   t jd} d}| d| }d}d}tj|||d}t|D ]}tt|j	| t
|j| || d  qt|}t||dd	 tttj||d d
  tttj||d |d d
 d d S )Nr   r   rQ  )r(   r   sym3)periodicr   r   )rZ   rc   r   r  r  rI   rb   )r,   r;   r<   r  r   rI  r   r	   r   r2   r   r   rJ  r   r
   r*   )rD   r   r{   rA  rg   rM  axr   r$   r$   r%   6test_fswavedecn_fswaverecn_variable_wavelets_and_modes  s   
$rX  c                  C   sf   t jd} | d}tddD ]}tj|d|d}t|}t||dd qt	t
tj|dd	d d
S )z.Fully separable DWT over only a subset of axesr   )r   r'   r   r   r   r   r(   r   r  r  )r   r   N)r,   r;   r<   r  r   r   rI  rJ  r   r
   r*   )rD   r{   r   rM  r   r$   r$   r%   'test_fswavedecn_fswaverecn_axes_subsets  s   

rY  c               	   C   s   t d} d}tj| d|d}d| j }t|| |j | }t||v |D ]}|| }t	|j| j q(t 
|||< tt|j|t tdd |jD  tt|j|t 
|t j t	|jj| j d S )N)r   r   r   r;  rG  r   c                 S   s   g | ]}|d  qS r   r$   r   r$   r$   r%   r     r   z)test_fswavedecnresult.<locals>.<listcomp>)r,   r-   r   rI  r   r   approxdetail_keysr   r	   
zeros_liker
   r*   __setitem__r   r   r   r   r   r?   rK  r0   )r{   rH  result
approx_keydkeysr  r   r$   r$   r%   test_fswavedecnresult  s$   

ra  c                  C   sx   t d} ttjtjtjgtjtjtj	gD ]#\}}dt
dfD ]}tt|| |d || d}tt|||d q!qd S )Nr#  morl)rZ   r   )r,   r-   rV   r   r   rl   r   r+   rm   r   DiscreteContinuousWaveletr
   r*   )r{   dec_funrec_funcwaver^   r$   r$   r%    test_error_on_continuous_wavelet  s   

rg  c                     s   t d d} tjtjfD ](}dD ]#}| | |d}t  fddt|| D }tt|dd  | qqdD ]!}tj | | |fd}tt|dd  t	 j
| | |  q8d S )	N)   r   r   )db8r   )r   )rI   r   r   r   c                    s"   g | ]\}}t  j| |qS r$   )r   r   r   )r   rW  r  r}   r$   r%   r     s    z&test_default_level.<locals>.<listcomp>r   r   )r,   r-   r   rl   r   r   rV   r	   r   r   r   )rZ   r   r   r^   r  rW  r$   r}   r%   test_default_level  s    
rj  c                  C   s  t jd} tjtjdftjtjdftjtj	dffD ]\}}}| j
| }||d}|d t j|d< ||d}t||ddd t|jt j |d|  }||d}|d t j|d< ||d}t||ddd t|jt j |jd	kr|d t j|d< |d	 t j|d	< |jd
kr|d t j|d< tdd |d	 D |d	< |jdkr|d t j|d< dd |d	  D |d	< ||d}t||ddd t|jt j qd S )Nr   rF  ro   r   r   gHz>rd   r7   r   rI   c                 S   s   g | ]}| tjqS r$   r?   r,   	complex64)r   r  r$   r$   r%   r     s    z0test_waverec_mixed_precision.<locals>.<listcomp>r   c                 S   s   i | ]\}}|| tjqS r$   rk  )r   r  r  r$   r$   r%   
<dictcomp>  s    z0test_waverec_mixed_precision.<locals>.<dictcomp>)r,   r;   r<   r   r   r+   rl   rm   r   r   r=   r?   rK  r   r	   rB   float64rl  
complex128r   r   r   )rD   funcifuncr   r   coeffs_realrj   r0   r$   r$   r%   test_waverec_mixed_precision  s@   










rs  )q
__future__r   r   r   r   	itertoolsr   numpyr,   pytestnumpy.testingr   r   r   r	   r
   r   r   r   r   int8rL  rK  rn  rl  ro  rW   rX   rh   r   r>   
complex256AttributeErrorre   removedel_listrZ   r   r   FutureWarning
isinstancerc  r   appenddel_indr&   r5   rH   rL   rO   rQ   r`   rk   rn   rs   markslowrw   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r"  r$  r(  r*  r+  r-  r0  r1  r4  r6  r9  r:  rE  rN  rP  rT  rX  rY  ra  rg  rj  rs  r$   r$   r$   r%   <module>   s   (















	,!