U
    ?hq                  
   @   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 k
r   Y nX e! Z!de!kr<e!"d g Z#e!D ]DZ$e% 0 e&de' e(e)e$ej*s|e#+e$ W 5 Q R X qDe#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%<=Zdmeyignorec                  C   s   ddddddddg} t d}t | |\}}}}t|d	g t|d
g t|ddg t|ddddg tt t| |dk d S )N                  db1ga{!@g'eֿg      @g      g'er   gZo̙g'e)pywtWaveletwavedecr   r   r   dwt_max_levellen)xr   ZcA3ZcD3ZcD2ZcD1 r   L/var/www/html/venv/lib/python3.8/site-packages/pywt/tests/test_multilevel.pytest_wavedec<   s    
r    c                  C   sz   t ttjtdd t ttjg d dddddddd	g} t| d
}t|\}}t||}d}t	t|tj|d d S )N   haarr   r   r   r   r   r   r   r   "Unexpected detail coefficient type)
r
   
ValueErrorr   waverecnponesr   coeffs_to_arrayarray_to_coeffsr   )r   coeffsarrcoeff_slicesZcoeffs_from_arrmessager   r   r   test_waverec_invalid_inputsG   s    r.   c                  C   s|   t jd} | d}tD ]\\}}||}t |rR|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%   rstateZx0dttolr   r*   r   r   r   test_waverec_accuraciesX   s    


r@   c                  C   sL   ddddddddg} t | d}d |d	< d |d
< tt |djt|  d S )Nr   r   r   r   r   r   r   r      r   )r   r   r   r%   sizer   r   r*   r   r   r   test_waverec_nonec   s
    rD   c                  C   s6   ddddddg} t | d}tt |d| dd d S )	Nr   r   r   r   r   r   -q=r3   )r   r   r   r%   rC   r   r   r   test_waverec_odd_lengthm   s    rG   c               
   C   sH   t ddddddddg} | d } t| d	}tt|d	| d
d d S )Nr   r   r   r   r   r   r   r0   r   rE   rF   )r&   arrayr   r   r   r%   rC   r   r   r   test_waverec_complexs   s    rI   c                  C   s   t d} tttD ]n\}}tjd|d}d|}t j|| dd}|D ]}t	|j
|kd|  qHt || }t	|j
|kd|  qd S )	Nr"   r!   r;   "wrong dtype returned for {0} inputrA   levelz	wavedec: z	waverec: )r   r   zip	dtypes_in
dtypes_outr&   r'   formatr   r   r;   r%   )waveletdt_indt_outr   errmsgr*   cx_roundtripr   r   r   test_multilevel_dtypes_1dz   s    

rX   c                  C   s^   t jd} | d}tD ]>}tjjD ]0}tj|||d}t	tj
|||d|ttd q&qd S )Nr/   P   moder3   r2   )r&   r4   r5   r6   wavelistr   Modesmodesr   r   r%   
tol_singler=   rrR   r[   r*   r   r   r   test_waverec_all_wavelets_modes   s    
  rc   c                  C   s   t jd} | dd}tD ]n\}}||}t |rV|d| dd|jj 7 }t	
|d}tt|dk tt	|d|||d qd S )Nr/   r   r0   r   r   r1   )r&   r4   r5   r6   r7   r8   r9   r:   r;   r   wavedec2r   r   r   waverec2r<   r   r   r   test_waverec2_accuracies   s    

rf   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|  qb|D ]}t	|j
|kd|  qt |||g| }	t	|	j
|kd|  qd S )	Nr"   r!   r!   rJ   rK   rA   rL   z
wavedec2: z
waverec2: )r   r   rN   rO   rP   r&   r'   rQ   rd   r   r;   re   )
rR   rS   rT   r   rU   cAcoeffsD2coeffsD1rV   rW   r   r   r   test_multilevel_dtypes_2d   s    

rk   c                  C   s`   t jd} | dd}tD ]>}tjjD ]0}tj|||d}t	tj
|||d|ttd q(qd S Nr/   rY   `   rZ   r\   )r&   r4   r5   r6   r]   r   r^   r_   rd   r   re   r`   ra   r   r   r    test_waverec2_all_wavelets_modes   s      rn   c                  C   sD   t dd } t| d}tt|dk tt|d| dd d S )Nr   r   r0   r   r   rE   rF   )r&   r'   r   rd   r   r   r   re   datar*   r   r   r   test_wavedec2_complex   s    rr   c                  C   s   t d} tttj| d d S )Nr   r"   )r&   r'   r
   r$   r   rd   rq   r   r   r   test_wavedec2_invalid_inputs   s    
rt   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 q2d S Nrg   r"   r#   )	r
   r$   r   re   r&   r'   r   wavedecnr   dec_funcr*   r-   r   r   r   test_waverec2_invalid_inputs   s    ry   c                  C   sT   t d} t| d}t|}t|d |d< t d|d d< tttj|d d S )Nrg   r   r   )   r   )	r&   r'   r   rd   listzerosr
   r$   re   rC   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   rE   rF   )r&   r'   r   rd   r   re   rC   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   rd   r   shapere   rC   r   r   r   test_waverec2_none_coeffs   s    r   c                  C   s`   t jd} tddD ]D}| jd|  }t|d}tt|dk t	t
|d|td qd S )Nr/   r   r   )r   r   r   rF   )r&   r4   r5   ranger6   r   rv   r   r   r   waverecn
tol_double)r=   ndr   r*   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rA   rA   rA   r   r!   r!   r!   daar   r   r   )rz   rz   rz   )r&   r'   r	   r   r   r   r*   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 ru   )r   r   rd   r&   r'   r   r$   r   rw   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   )rA   rA   )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   adaro   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"   rz   rL   )r&   rH   r
   r$   r   rv   r'   rs   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
 ^ t
dt t||D ]@\}}dD ]2}|| d|dd}||d|d	}t| |||d
 qbqVW 5 Q R X d S )N@   r!   rE   r   )periodization	symmetricr"      r[   rM   rZ   r1   )r&   r   r   r   r   rd   rv   r%   re   r   warningscatch_warningssimplefilterUserWarningrN   r   )	rq   r?   Z	dec_funcsZ	rec_funcsrx   Zrec_funcr[   r*   rb   r   r   r   test_wavedecn_many_levelsH  s    
r   c                  C   s   t jd} | ddd}tD ]f\}}||}t |rZ|d| ddd|jj 7 }t	
||d}tt	|d|||d qd S )Nr/   r   r0   r   r1   )r&   r4   r5   r6   r7   r8   r9   r:   r;   r   rv   r   r   r<   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|  qf| D ]\}}	t	|	j
|kd|  qt |||g| }
t	|
j
|kd|  qd S )	Nr"   rg   rJ   rK   rA   rL   z
wavedecn: z
waverecn: )r   r   rN   rO   rP   r&   r'   rQ   rv   r   r;   itemsr   )rR   rS   rT   r   rU   rh   ri   rj   keyrV   rW   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   r0   r   rE   rF   )r&   r'   r   rv   r   r   rp   r   r   r   test_wavedecn_complexs  s    r   c                  C   sF   t d} tD ]2\}}t| |d}tt|d| ||d qd S )Nr   r   r1   )r&   r'   r7   r   rv   r8   r   r   )r   r>   r?   r*   r   r   r   test_waverecn_dtypesy  s    
r   c                  C   s`   t jd} | dd}tD ]>}tjjD ]0}tj|||d}t	tj
|||d|ttd q(qd S rl   )r&   r4   r5   r6   r]   r   r^   r_   rv   r   r   r`   ra   r   r   r    test_waverecn_all_wavelets_modes  s      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!   rA   r   r   r   )drV   )
r&   r   r   r   r(   r   r
   r$   rH   dict)Za_coeffsr+   
arr_slicesr*   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 ]}tD ]}t|}tt |j|j}|d	krqp|| d
 |||d}	t|	\}
}tj|
||d}|| d |||d}t||ddd qpqhqDd S )Nr/   r   r   decrecrA   r   r   rd   rv      r   r   r   rZ   Zoutput_formatr   -C6?r\   )r&   r4   r5   r   r   r%   rd   re   rv   r   r6   r^   r_   r]   r   r   minr   dec_lenr(   r)   r   )rngparamsNfx1r[   wavewmaxlevelr*   	coeff_arrr,   coeffs2x1rr   r   r    test_wavedecn_coeff_reshape_even  s*    
r   c                  C   s   t jd} d}td}d}d}dD ]}| j|g|  }tj||||d}tj||d\}}	|d k	rtt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 )Nr/   r   db2rz   r   ))r   r   r   r   r   r   rA   r   rA   Nr[   axesr   r   r   rA   r   r   r   r\   )r&   r4   r5   r   r   r6   rv   r(   r
   r$   r)   r   r   )r   r[   r   r   ndimr   r   r*   r   r,   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 )	Nr/       r   r   rZ   )paddingr   r"   )r&   r4   r5   r6   r   rv   r
   r$   r(   nansumisnanr   r	   r   )r   r   r[   r*   r   r,   ZnpadZcoeffs_haarr   r   r   test_coeffs_to_array_padding  s    r   c                  C   s   t jd} | dd}tjjD ]}dD ]}t|}tt 	|j
|j}|dkrVq(tj|||d}t|\}}t||}	tj|	||d}
|
tdd |j
D  }
t||
d	d	d
 q(q d S )Nr/   #   !   r"   r   rZ   c                 S   s   g | ]}t |qS r   slice.0sr   r   r   
<listcomp>  s     z3test_waverecn_coeff_reshape_odd.<locals>.<listcomp>r   r\   )r&   r4   r5   r6   r   r^   r_   r   r   r   r   r   rv   r(   r)   r   tupler   )r   r   r[   r   r   r   r*   r   r,   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 )NrA   r"   r   )r   rv   r&   r'   r(   r
   r$   r)   )r*   r+   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 ]}tD ]}t|}tt |j|j}|d	krqp|| d
 |||d}	t|	\}
}}tj|
|||d}|| d |||d}t||ddd qpqhqDd S )Nr/   r   r   rA   r   r      r   r   r   rZ   r   r   r   r\   )r&   r4   r5   r   r   r%   rd   re   rv   r   r6   r^   r_   r]   r   r   r   r   r   ravel_coeffsunravel_coeffsr   )r   r   r   r   r   r[   r   r   r   r*   r   slicesshapesr   r   r   r   r   test_wavedecn_coeff_ravel  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 ]n}td	}|| d
 |||dd}t|\}}	}
tj||	|
|d}|| d |||d}t||ddd qhqDd S )Nr/   r   r   rA   r   r   rz   r   r   r   r   r   r   r   rZ   r   r\   )r&   r4   r5   r   r   r%   rd   re   rv   r   r6   r^   r_   r   r   r   r   )r   r   r   r   r   r[   r   r*   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 ]}dD ]}t|}tt 	|j
|j}|dkrVq(tj|||d}t|\}}}	t|||	}
tj|
||d}|tdd |j
D  }t||d	d	d
 q(q d S )Nr/   r   r   r   r   rZ   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r   Y  s     z1test_waverecn_coeff_ravel_odd.<locals>.<listcomp>r   r\   )r&   r4   r5   r6   r   r^   r_   r   r   r   r   r   rv   r   r   r   r   r   )r   r   r[   r   r   r   r*   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 )Nrg   r"   c                 S   s   g | ]}t |qS r   r{   r   rV   r   r   r   r   c  s     z2test_ravel_wavedec2_with_lists.<locals>.<listcomp>r   rd   r   r   r\   c                 S   s   g | ]}t |d d qS )Nr   r   r   r   r   r   r   k  s     )r&   r'   r   r   rd   r   r   re   r   r
   r$   )r   wavr*   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|  d d d g| 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   rg   r   r   Zddd)	r   r   r&   r'   r
   r$   r   rd   rv   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 )NrA   r"   r   r   )r   rv   r&   r'   r   r
   r$   r   )r*   r+   r   r   r   r   r   test_unravel_invalid_inputs  s    r   c               	   C   s   t d} dD ]}dD ]}t jjD ]}t jt|| ||d}t j|| ||d}t|d j	|d  |d j
}tdt|D ]8}||  D ]&\}}	||	j
7 }t|| | |	j	 qq|t |}
t|
| t |}
t|
| q"qqd S )Nr   )r   )r   r   )r         Nr   r   r   r   r   )r   r   r^   r_   rv   r&   r'   Zwavedecn_shapesr	   r   rB   r   r   r   Zwavedecn_size)r   
data_shaper   r[   r*   r   Zexpected_sizerM   kvrB   r   r   r   test_wavedecn_shapes_and_size  s,    
  




r   c               
   C   sv   t ddfD ]b} dD ]X}dD ]N}t jjD ]@}t jt|| ||d}t || |}tt	|dd  | q*qqqd S )Nr   Zsym8r   r   r   r   )
r   r   r^   r_   rv   r&   r'   Zdwtn_max_levelr	   r   )r   r   r   r[   r*   max_levr   r   r   test_dwtn_max_level  s     r   c                  C   sR   t jd} | d}dD ]2}tj|d|d}tj|d|d}t||dd qd S )Nr   r   r   r   rA   r"   axis+=r2   r&   r4   r5   standard_normalr   r   r%   r   r=   rq   r  coefsr   r   r   r   test_waverec_axes_subsets  s    
r  c                  C   sR   t jd} | d}dD ]2}tj|d|d}tj|d|d}t||dd qd S )Nr   rz   rz   r   r   r   r  r  r  r  r   r   r   test_waverec_axis_db2  s    
r
  c                  C   sX   t jd} | d}tddD ]2}tj|d|d}tj|d|d}t||dd q d S )	Nr   r   r   rA   r"   r   r  r  )	r&   r4   r5   r  r   r   rd   re   r   r=   rq   r   r  r   r   r   r   test_waverec2_axes_subsets  s    
r  c                  C   sX   t jd} | d}tddD ]2}tj|d|d}tj|d|d}t||dd q d S )	Nr   )r!   r!   r!   r!   r   r   r"   r   r  r  )	r&   r4   r5   r  r   r   rv   r   r   r  r   r   r   test_waverecn_axes_subsets  s    
r  c                  C   sR   t jd} | d}dD ]2}tj|d|d}tj|d|d}t||dd qd S )Nr   rg   r   r"   r   r  r  )r&   r4   r5   r  r   rv   r   r   r  r   r   r   test_waverecn_int_axis  s    
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   rs   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%   rV   r   r   r   test_waverec_axis_error  s    r  c                  C   s>   t tdd} | d d d | d< ttt j| ddd d S )Nrz   r"   r   r   r   r   r  r  r   r   r   !test_waverec_shape_mismatch_error  s    r  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 Nro   r"   r   r   )r   r   r   )r&   r'   r
   	TypeErrorr   rd   r$   rs   r   r   r   test_wavedec2_axes_errors  s    
r  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 r  )r&   r'   r   rd   r
   r  re   r$   rq   rV   r   r   r   test_waverec2_axes_errors	  s
    
r  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   rv   rs   r   r   r   test_wavedecn_axes_errors  s    
r  c                  C   sB   t d} t| d}tttj|ddd tttj|ddd d S r  )r&   r'   r   rv   r
   r$   r   r  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 )Nr/   r   rz   r"   sym2r   c                 S   s   g | ]\}}t j||qS r   )r   Z_dwtr   )r   r   nfr   r   r   r   .  s     z4test_per_axis_wavelets_and_modes.<locals>.<listcomp>r   r   r  r  r   rA   rZ   ).r   )r&   r4   r5   r6   r   r   rN   r   Z_extensionsZ_pywtr^   Zreflectrv   r   r   r	   r   r   r
   r$   rd   re   )r=   rq   waveletsZ
max_levelsr_   r  Zdata2Zcoefs2r   r   r    test_per_axis_wavelets_and_modes%  s<    

 r!  c               	   C   s   t jd} tddD ]}tttD ]\}}dD ]}| d| }||}t	j
|d|d}t	|}|jjt jt jfkrt||ddd	 nt||d
d
d	 t|jj|k t|j|k q0q$qd S )Nr   r   r   )r   Nr!   r"   levelsr   r\   r  )r&   r4   r5   r   rN   rO   rP   r  r8   r   
fswavedecn
fswaverecnr:   r;   float32float16r   r   r*   )r=   r   rS   rT   r$  rq   Tr   r   r   r   $test_fswavedecn_fswaverecn_roundtripQ  s    

r*  c                  C   sT   t jd} d}| d| }tj|ddd}t|j| t|}t|j| d S )Nr   rA   r"  r"   r#  )	r&   r4   r5   r  r   r%  r   r*   r&  r=   r   rq   r)  r   r   r   r   &test_fswavedecn_fswaverecn_zero_levelsd  s    
r,  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   rz   r"   )r   rA   r   r#  r  r  r  )r   r   r   r   r   )r&   r4   r5   r  r   r%  r&  r   r
   r$   r   r   intlog2r   r   r+  r   r   r   *test_fswavedecn_fswaverecn_variable_levelso  s    
r0  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   r-  )r"   r   Zsym3)Zperiodicr   r   )rR   r[   r   r  r  rA   rZ   )r&   r4   r5   r  r   r%  r   r	   r   r,   r   r   r&  r   r
   r$   )r=   r   rq   r   r_   r)  axr   r   r   r   6test_fswavedecn_fswaverecn_variable_wavelets_and_modes  s    
r2  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!   rz   r   r   r   r"   r   r  r  )r   r   N)r&   r4   r5   r  r   r   r%  r&  r   r
   r$   )r=   rq   r   r)  r   r   r   r   'test_fswavedecn_fswaverecn_axes_subsets  s    

r3  c               	   C   s   t d} d}tj| d|d}d| j }t|| |j | }t||k |D ]}|| }t	|j| j qPt 
|||< 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  r#  r   c                 S   s   g | ]}|d  qS r   r   r   r   r   r   r     s     z)test_fswavedecnresult.<locals>.<listcomp>)r&   r'   r   r%  r   r   ZapproxZdetail_keysr   r	   Z
zeros_liker
   r$   __setitem__r|   r   r   r   r   r8   r'  r*   )rq   r$  resultZ
approx_keyZdkeysr   r   r   r   r   test_fswavedecnresult  s(    

  r6  c                  C   sx   t d} ttjtjtjgtjtjtj	gD ]F\}}dt
dfD ].}tt|| |d || d}tt|||d qBq,d S )Nr	  Zmorl)rR   r   )r&   r'   rN   r   r   rd   rv   r%   re   r   DiscreteContinuousWaveletr
   r$   )rq   Zdec_funZrec_funZcwaverV   r   r   r    test_error_on_continuous_wavelet  s    

r8  c                     s   t d d} tjtjfD ]P}dD ]F}| | |d}t  fddt|| D }tt|dd  | q"qdD ]B}tj | | |fd}tt|dd  t	 j
| | |  qpd S )	N)   r   r   )Zdb8r   )r   )rA   r   r   r   c                    s"   g | ]\}}t  j| |qS r   )r   r   r   )r   r1  r   rs   r   r   r     s   z&test_default_level.<locals>.<listcomp>r   r   )r&   r'   r   rd   rv   r   rN   r	   r   r   r   )rR   rx   r   rV   r   r1  r   rs   r   test_default_level  s    
r:  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rP|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 q4d S )Nr   r"  rg   r   r   gHz>r\   r0   r   rA   c                 S   s   g | ]}| tjqS r   r8   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   r;  )r   r   r   r   r   r   
<dictcomp>  s    z0test_waverec_mixed_precision.<locals>.<dictcomp>)r&   r4   r5   r   r   r%   rd   re   rv   r   r6   r8   r'  r   r	   r;   float64r<  
complex128r   r   r   )r=   funcZifuncr   r   Zcoeffs_realrb   r*   r   r   r   test_waverec_mixed_precision  s>    







rA  )q
__future__r   r   r   r   	itertoolsr   numpyr&   ZpytestZnumpy.testingr   r   r   r	   r
   r   r   r   r   Zint8r(  r'  r>  r<  r?  rO   rP   r`   r   r7   Z
complex256AttributeErrorr]   removeZdel_listrR   r   r   FutureWarning
isinstancer7  r   appendZdel_indr    r.   r@   rD   rG   rI   rX   rc   rf   rk   markZslowrn   rr   rt   ry   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  r  r  r  r!  r*  r,  r0  r2  r3  r6  r8  r:  rA  r   r   r   r   <module>   s   ( 















	,!