B
    \(              
   @   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	m
Z
mZ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y,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$xLe"D ]DZ%e& 0 e'de( e)e*e%ej+s~e$,e% W dQ R X qFW xe$D ]Z-e"#e- qW d	d
 Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6dd Z7ej8d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@ ZJej8dAdB ZKdCdD 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 Zoepdkre
  dS )    )divisionprint_functionabsolute_importN)combinations)
run_module_suiteassert_almost_equalassert_allcloseassert_assert_equalassert_raisesassert_raises_regexdecassert_array_equalassert_warnsgư>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   9lib/python3.7/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   zaWrong coefficient format, if using 'array_to_coeffs' please specify the 'output_format' parameter)r   
ValueErrorr   waverecnponesr   coeffs_to_arrayarray_to_coeffsr   AttributeError)r   coeffsarrcoeff_slicesZcoeffs_from_arrmessager   r   r    test_waverec_invalid_inputsG   s    r/   c              C   s   t jd} | d}xdtD ]\\}}||}t |rT|d| d|jj 7 }t	
|d}tt	|d|||d qW d S )Ni  r"   y              ?r   )atolrtol)r&   randomRandomStaterandndtypes_and_tolerancesastypeiscomplexobjrealdtyper   r   r   r%   )rstatex0dttolr   r+   r   r   r    test_waverec_accuraciesW   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_noneb   s
    rA   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   g-q=)r1   )r   r   r   r%   )r   r+   r   r   r    test_waverec_odd_lengthl   s    rB   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   y              ?r   g-q=)r1   )r&   arrayr   r   r   r%   )r   r+   r   r   r    test_waverec_complexr   s    rD   c              C   s   t d} xtttD ]r\}}tjd|d}d|}t j|| dd}x |D ]}t	|j
|kd|  qLW t || }t	|j
|kd|  qW d S )	Nr#   r"   )r9   z"wrong dtype returned for {0} inputr?   )levelz	wavedec: z	waverec: )r   r   zip	dtypes_in
dtypes_outr&   r'   formatr   r	   r9   r%   )waveletdt_indt_outr   errmsgr+   cx_roundtripr   r   r    test_multilevel_dtypes_1dy   s    


rP   c              C   sf   t jd} | d}xJtD ]B}x<tjjD ]0}tj|||d}t	tj
|||d|ttd q*W qW d S )Ni  P   )mode)r1   r0   )r&   r2   r3   r4   wavelistr   Modesmodesr   r   r%   
tol_single)r:   rrJ   rR   r+   r   r   r    test_waverec_all_wavelets_modes   s    

rX   c              C   s   t jd} | dd}xvtD ]n\}}||}t |rX|d| dd|jj 7 }t	
|d}tt|dk tt	|d|||d qW d S )Ni  r   y              ?r   r   )r0   r1   )r&   r2   r3   r4   r5   r6   r7   r8   r9   r   wavedec2r	   r   r   waverec2)r:   r;   r<   r=   r   r+   r   r   r    test_waverec2_accuracies   s    

r[   c        
      C   s   t d} xtttD ]\}}tjd|d}d|}t j|| dd\}}}t	|j
|kd|  x |D ]}t	|j
|kd|  qfW x |D ]}t	|j
|kd|  qW t |||g| }	t	|	j
|kd|  qW d S )	Nr#   )r"   r"   )r9   z"wrong dtype returned for {0} inputr?   )rE   z
wavedec2: z
waverec2: )r   r   rF   rG   rH   r&   r'   rI   rY   r	   r9   rZ   )
rJ   rK   rL   r   rM   cAcoeffsD2coeffsD1rN   rO   r   r   r    test_multilevel_dtypes_2d   s    



r_   c              C   sh   t jd} | dd}xJtD ]B}x<tjjD ]0}tj|||d}t	tj
|||d|ttd q,W qW d S )Ni  rQ   `   )rR   )r1   r0   )r&   r2   r3   r4   rS   r   rT   rU   rY   r   rZ   rV   )r:   rW   rJ   rR   r+   r   r   r     test_waverec2_all_wavelets_modes   s    
ra   c              C   sD   t dd } t| d}tt|dk tt|d| dd d S )N)r   r   y              ?r   r   g-q=)r1   )r&   r'   r   rY   r	   r   r   rZ   )datar+   r   r   r    test_wavedec2_complex   s    rc   c              C   s   t d} tttj| d d S )Nr   r#   )r&   r'   r   r$   r   rY   )rb   r   r   r    test_wavedec2_invalid_inputs   s    
rd   c               C   s*   t ttjtdd t ttjg d d S )N)r"   r"   r#   )r   r$   r   rZ   r&   r'   r   r   r   r    test_waverec2_invalid_inputs   s    re   c              C   sT   t d} t| d}t|}t|d |d< t d|d d< tttj|d d S )N)r"   r"   r   r   )   r   )	r&   r'   r   rY   listzerosr   r$   rZ   )r   r+   r   r   r    "test_waverec2_coeff_shape_mismatch   s    
ri   c              C   s0   t d} t| d}tt|d| dd d S )N)
   r   r   g-q=)r1   )r&   r'   r   rY   r   rZ   )r   r+   r   r   r    test_waverec2_odd_length   s    
rk   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   rY   r	   shaperZ   )r   r+   r   r   r    test_waverec2_none_coeffs   s    rp   c              C   sd   t jd} xRtddD ]D}| jd|  }t|d}tt|dk t	t
|d|td qW d S )Ni  r   r   )r   r   r   )r1   )r&   r2   r3   ranger4   r   wavedecnr	   r   r   waverecn
tol_double)r:   ndr   r+   r   r   r    test_waverecn   s    rv   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)r?   r?   r?   r   )r"   r"   r"   daa)r   r   r   )rf   rf   rf   )r&   r'   r
   r   rs   ro   )r+   r   r   r    test_waverecn_empty_coeff   s    rx   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?   rw   )r   r   r   )rw   foo)rw   dag      ?g        )adrz   ddr#   )r   r$   r   rs   r&   r'   )r+   r   r   r    test_waverecn_invalid_coeffs  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 )Ng      ?g        )r{   rz   r|   r   )r?   r?   )r
   r   rs   ro   )r+   r   r   r    test_waverecn_lists   s     r~   c              C   s,   t ddt dig} tttj| d d S )N)r   r   r   Zada)r   r   r   )r&   r'   r   r$   r   rs   )r+   r   r   r    test_waverecn_invalid_coeffs2&  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#   rf   )rE   )r&   rC   r   r$   r   rr   r'   )rb   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
 f t
dt xRt||D ]D\}}x:dD ]2}|| d|dd}||d|d	}t| |||d
 qfW qXW W d Q R X d S )N@   r"   g-q=r   )periodization	symmetricr#      )rR   rE   )rR   )r0   r1   )r&   rm   rn   r   r   rY   rr   r%   rZ   rs   warningscatch_warningssimplefilterUserWarningrF   r   )	rb   r=   Z	dec_funcsZ	rec_funcsdec_funcZrec_funcrR   r+   rW   r   r   r    test_wavedecn_many_levels6  s    

r   c              C   s   t jd} | ddd}xntD ]f\}}||}t |r\|d| ddd|jj 7 }t	
||d}tt	|d|||d q W d S )Ni  r   y              ?r   )r0   r1   )r&   r2   r3   r4   r5   r6   r7   r8   r9   r   rr   r   rs   )r:   r;   r<   r=   r   r+   r   r   r    test_waverecn_accuraciesE  s    

 r   c              C   s   t d} xtttD ]\}}tjd|d}d|}t j|| dd\}}}t	|j
|kd|  x(| D ]\}}	t	|	j
|kd|  qjW x(| D ]\}}	t	|	j
|kd|  qW t |||g| }
t	|
j
|kd|  qW d S )	Nr#   )r"   r"   )r9   z"wrong dtype returned for {0} inputr?   )rE   z
wavedecn: z
waverecn: )r   r   rF   rG   rH   r&   r'   rI   rr   r	   r9   itemsrs   )rJ   rK   rL   r   rM   r\   r]   r^   keyrN   rO   r   r   r    test_multilevel_dtypes_ndQ  s    

r   c              C   s4   t dd } t| d}tt|d| dd d S )N)r   r   r   y              ?r   g-q=)r1   )r&   r'   r   rr   r   rs   )rb   r+   r   r   r    test_wavedecn_complexa  s    r   c              C   sJ   t d} x:tD ]2\}}t| |d}tt|d| ||d qW d S )N)r   r   r   r   )r0   r1   )r&   r'   r5   r   rr   r6   r   rs   )r   r<   r=   r+   r   r   r    test_waverecn_dtypesg  s    
r   c              C   sh   t jd} | dd}xJtD ]B}x<tjjD ]0}tj|||d}t	tj
|||d|ttd q,W qW d S )Ni  rQ   r`   )rR   )r1   r0   )r&   r2   r3   r4   rS   r   rT   rU   rr   r   rs   rV   )r:   rW   rJ   rR   r+   r   r   r     test_waverecn_all_wavelets_modesn  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"   r?   r   r   )NNN)drN   )
r&   rm   rn   r   r(   r   r   r$   rC   dict)Za_coeffsr,   
arr_slicesr+   r   r   r    test_coeffs_to_arrayz  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}x|D ]}| j
|g|| d   }xtjjD ]}xtD ]}t|}tt |j|j}|d	krqv|| d
 |||d}	t|	\}
}tj|
||d}|| d |||d}t||ddd qvW qlW qFW d S )Ni  r   )r   r   recr?   r   )r   rY   rr      r   r   r   )rR   )output_formatr   g-C6?)r1   r0   )r&   r2   r3   r   r   r%   rY   rZ   rr   rs   r4   rT   rU   rS   r   r   minro   dec_lenr(   r)   r   )rngparamsNfx1rR   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}xdD ]}| j|g|  }tj||||d}tj||d\}}	|d k	rvtt	tj| tt	tj|d	d tt	tj|d
d t
||	}
tj|
|||d}t||ddd q(W d S )Ni  r   db2rf   r   ))r   )r   )r   )r   r   )r   r?   )r   r?   N)rR   axes)r   )r   r   r?   r   r   g-C6?)r1   r0   )r&   r2   r3   r   r   r4   rr   r(   r   r$   r)   rs   r   )r   rR   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 )	Ni      r   r   )rR   )Zpaddingr   r#   )r&   r2   r3   r4   r   rr   r   r$   r(   nansumZisnanr	   r
   ro   )r   r   rR   r+   r   r-   ZnpadZcoeffs_haarr   r   r    test_coeffs_to_array_padding  s    r   c              C   s   t jd} | dd}xtjjD ]}xdD ]}t|}tt 	|j
|j}|dkrZq,tj|||d}t|\}}t||}	tj|	||d}
|
tdd |j
D  }
t||
d	d	d
 q,W q"W d S )Ni  #   !   )r#   r   )rR   c             S   s   g | ]}t |qS r   )slice).0sr   r   r    
<listcomp>  s    z3test_waverecn_coeff_reshape_odd.<locals>.<listcomp>g-C6?)r1   r0   )r&   r2   r3   r4   r   rT   rU   r   r   r   ro   r   rr   r(   r)   rs   tupler   )r   r   rR   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 )Nr?   r#   ry   )r   rr   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}x|D ]}| j
|g|| d   }xtjjD ]}xtD ]}t|}tt |j|j}|d	krqv|| d
 |||d}	t|	\}
}}tj|
|||d}|| d |||d}t||ddd qvW qlW qFW d S )Ni  r   )r   r   r   r?   r   )r   rY   rr      r   r   r   )rR   )r   r   g-C6?)r1   r0   )r&   r2   r3   r   r   r%   rY   rZ   rr   rs   r4   rT   rU   rS   r   r   r   ro   r   ravel_coeffsunravel_coeffsr   )r   r   r   r   r   rR   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}x|D ]}| j
|g|| d   }xztjjD ]n}td	}|| d
 |||dd}t|\}}	}
tj||	|
|d}|| d |||d}t||ddd qlW qFW d S )Ni  r   )r   r   r   r?   r   )r   rY   rr   rf   r   r   r   r   )rR   rE   )r   r   )rR   g-C6?)r1   r0   )r&   r2   r3   r   r   r%   rY   rZ   rr   rs   r4   rT   rU   r   r   r   r   )r   r   r   r   r   rR   r   r+   r   r   r   r   r   r   r   r    $test_wavedecn_coeff_ravel_zero_level   s    


r   c              C   s   t jd} | dd}xtjjD ]}xdD ]}t|}tt 	|j
|j}|dkrZq,tj|||d}t|\}}}	t|||	}
tj|
||d}|tdd |j
D  }t||d	d	d
 q,W q"W d S )Ni  r   r   )r#   r   )rR   c             S   s   g | ]}t |qS r   )r   )r   r   r   r   r    r   G  s    z1test_waverecn_coeff_ravel_odd.<locals>.<listcomp>g-C6?)r1   r0   )r&   r2   r3   r4   r   rT   rU   r   r   r   ro   r   rr   r   r   rs   r   r   )r   r   rR   r   r   r   r+   r   r   r   r   r   r   r   r    test_waverecn_coeff_ravel_odd7  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 )N)r"   r"   r#   c             S   s   g | ]}t |qS r   )rg   )r   rN   r   r   r    r   Q  s    z2test_ravel_wavedec2_with_lists.<locals>.<listcomp>r   rY   )r   g-C6?)r1   r0   c             S   s   g | ]}t |d d qS )Nr   )rg   )r   rN   r   r   r    r   Y  s    )r&   r'   r   r   rY   r   r   rZ   r   r   r$   )r   wavr+   r   r   r   r   r   r   r   r    test_ravel_wavedec2_with_listsK  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   )r"   r"   )NNN)r"   r"   r"   Zddd)	r   r   r&   r'   r   r$   r   rY   rr   )r+   r   r   r    test_ravel_invalid_input]  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 )Nr?   r#   r   ry   )r   rr   r&   r'   r   r   r$   r   )r+   r,   r   r   r   r   r    test_unravel_invalid_inputsr  s    r   c           	   C   s   t d} xdD ]}xdD ]}xt jjD ]}t jt|| ||d}t j|| ||d}t|d j	|d  |d j
}xNtdt|D ]<}x6||  D ]&\}}	||	j
7 }t|| | |	j	 qW qW t |}
t|
| t |}
t|
| q(W qW qW d S )Nr   ))r   )r   r   )r         )Nr   r   )rR   r   r   r   )r   r   rT   rU   rr   r&   r'   Zwavedecn_shapesr
   ro   r@   rq   r   r   Zwavedecn_size)r   
data_shaper   rR   r+   r   Zexpected_sizerE   kvr@   r   r   r    test_wavedecn_shapes_and_size  s$    









r   c           
   C   s   xt ddgD ]n} xhdD ]`}xZdD ]R}xLt jjD ]@}t jt|| ||d}t || |}tt	|dd  | q2W q$W qW qW d S )Nr   Zsym8))r   )r   r   )r   r   r   )Nr   r   )rR   r   r   )
r   r   rT   rU   rr   r&   r'   Zdwtn_max_levelr
   r   )r   r   r   rR   r+   max_levr   r   r    test_dwtn_max_level  s    


r   c              C   sV   t jd} | d}x:dD ]2}tj|d|d}tj|d|d}t||dd qW d S )Nr   )r"   r"   r"   )r   r   r?   r#   )axisg+=)r0   )r&   r2   r3   standard_normalr   r   r%   r   )r:   rb   r   coefsr   r   r   r    test_waverec_axes_subsets  s    

r   c              C   sV   t jd} | d}x:dD ]2}tj|d|d}tj|d|d}t||dd qW d S )Nr   )rf   rf   )r   r   r   )r   g+=)r0   )r&   r2   r3   r   r   r   r%   r   )r:   rb   r   r   r   r   r   r    test_waverec_axis_db2  s    

r   c              C   s\   t jd} | d}x@tddD ]2}tj|d|d}tj|d|d}t||dd q"W d S )	Nr   )r"   r"   r"   )r   r   r?   r?   r#   )r   g+=)r0   )	r&   r2   r3   r   r   r   rY   rZ   r   )r:   rb   r   r   r   r   r   r    test_waverec2_axes_subsets  s    
r   c              C   s\   t jd} | d}x@tddD ]2}tj|d|d}tj|d|d}t||dd q"W d S )	Nr   )r"   r"   r"   r"   )r   r   r?   r   r   r#   )r   g+=)r0   )	r&   r2   r3   r   r   r   rr   rs   r   )r:   rb   r   r   r   r   r   r    test_waverecn_axes_subsets  s    
r   c              C   sV   t jd} | d}x:dD ]2}tj|d|d}tj|d|d}t||dd qW d S )Nr   )r"   r"   )r   r   r#   )r   g+=)r0   )r&   r2   r3   r   r   rr   rs   r   )r:   rb   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   )rb   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 )Nr   r#   r   )r   )r   r   r&   r'   r   r$   r%   )rN   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 )Nrf   r#   r   r   r   )r   )r   r   r&   r'   r   r$   r%   )rN   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 )N)r   r   r#   r   )r   )r   r   )r   r?   )r&   r'   r   	TypeErrorr   rY   r$   )rb   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 )N)r   r   r#   r   )r   )r   r   )r   r?   )r&   r'   r   rY   r   r   rZ   r$   )rb   rN   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 )N)r"   r"   r"   r#   )r   r   )r   )r   r   r   )r&   r'   r   r$   r   rr   )rb   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 )N)r"   r"   r"   r#   )r   r   )r   )r   r   r   )r&   r'   r   rr   r   r$   rs   )rb   rN   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 )Ni  rl   rf   r#   sym2r   c             S   s   g | ]\}}t j||qS r   )r   Z_dwtr   )r   ru   Znfr   r   r    r     s    z4test_per_axis_wavelets_and_modes.<locals>.<listcomp>r   r   g+=)r0   r   r?   )rR   ).r   )r&   r2   r3   r4   r   r   rF   ro   Z_extensionsZ_pywtrT   Zreflectrr   r   rs   r
   r   r   r   r$   rY   rZ   )r:   rb   waveletsZ
max_levelsrU   r   Zdata2Zcoefs2r   r   r     test_per_axis_wavelets_and_modes  s2     r   c           	   C   s   t jd} xtddD ]}xtttD ]\}}xdD ]}| d| }||}t	j
|d|d}t	|}|jjt jt jgkrt||ddd	 nt||d
d
d	 t|jj|k t|j|k q6W q(W qW d S )Nr   r   r   )r   N)r"   r#   )levelsgư>)r1   r0   g+=)r&   r2   r3   rq   rF   rG   rH   r   r6   r   
fswavedecn
fswaverecnr8   r9   float32float16r   r	   r+   )r:   r   rK   rL   r   rb   Tr   r   r   r    $test_fswavedecn_fswaverecn_roundtrip?  s    


r   c              C   sT   t jd} d}| d| }tj|ddd}t|j| t|}t|j| d S )Nr   r?   )r"   r#   )r   )	r&   r2   r3   r   r   r   r   r+   r   )r:   r   rb   r   r   r   r   r    &test_fswavedecn_fswaverecn_zero_levelsR  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   )rf   r#   )r   r?   r   )r   g+=)r0   )r   r   )r   r   r   r   r   )r&   r2   r3   r   r   r   r   r   r   r$   r   r   intZlog2r   ro   )r:   r   rb   r   r   r   r   r    *test_fswavedecn_fswaverecn_variable_levels]  s    
r   c              C   s   t jd} d}| d| }d}d}tj|||d}x:t|D ].}tt|j	| t
|j| || d  q@W t|}t||dd	 tttj||d d
  tttj||d |d d
 d d S )Nr   r   )rf   )r#   r   Zsym3)Zperiodicr   r   )rJ   rR   r   g+=)r0   r?   )rR   )r&   r2   r3   r   r   r   rq   r
   r   r-   r   ro   r   r   r   r$   )r:   r   rb   r   rU   r   axr   r   r   r    6test_fswavedecn_fswaverecn_variable_wavelets_and_modeso  s     
r   c              C   sj   t jd} | d}x:tddD ],}tj|d|d}t|}t||dd q"W t	t
tj|dd	d d
S )z.Fully separable DWT over only a subset of axesr   )r   r"   rf   r   )r   r   r?   r   r   r#   )r   g+=)r0   )r   r   N)r&   r2   r3   r   r   r   r   r   r   r   r$   )r:   rb   r   r   r   r   r   r    'test_fswavedecn_fswaverecn_axes_subsets  s    

r   c           	   C   s   t d} d}tj| d|d}d| j }t|| |j | }t||k x"|D ]}|| }t	|j| j qRW 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?   r   )r   )r   c             S   s   g | ]}|d  qS )r   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__rh   r   ro   r   r   r6   r   r+   )rb   r   resultZ
approx_keyZdkeysr   r   r   r   r    test_fswavedecnresult  s     


r   c              C   s   t d} xpttjtjtjgtjtjtj	gD ]J\}}x@dt
dgD ].}tt|| |d || d}tt|||d qFW q.W d S )N)rf   rf   Zmorl)rJ   r   )r&   r'   rF   r   r   rY   rr   r%   rZ   rs   DiscreteContinuousWaveletr   r$   )rb   Zdec_funZrec_funZcwaverN   r   r   r     test_error_on_continuous_wavelet  s    

r   c                 s   t d d} xdtjtjgD ]T}xNdD ]F}| | |d}t  fddt|| D }tt|dd  | q&W qW xJdD ]B}tj | | |fd}tt|dd  t	 j
| | |  qzW d S )	N)   r   r   )Zdb8r   ))r   r   )r?   r   )r   r?   )r   c                s"   g | ]\}}t  j| |qS r   )r   r   ro   )r   r   r   )rb   r   r    r     s   z&test_default_level.<locals>.<listcomp>r   )r   r   )r&   r'   r   rY   rr   r   rF   r
   r   r   ro   )rJ   r   r   rN   r   r   r   )rb   r    test_default_level  s    


r   c              C   s  t jd} xtjtjdftjtjdftjtj	dfg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rT|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 q8W d S )Nr   )r"   )r"   r"   )r"   r"   r"   r   gHz>)r1   r0   y              ?r   r?   c             S   s   g | ]}| tjqS r   )r6   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   )r6   r&   r   )r   r   r   r   r   r    
<dictcomp>  s   z0test_waverec_mixed_precision.<locals>.<dictcomp>)r&   r2   r3   r   r   r%   rY   rZ   rr   rs   r4   r6   r   r   r
   r9   float64r   
complex128r   r   r   )r:   funcZifuncro   r   Zcoeffs_realrW   r+   r   r   r    test_waverec_mixed_precision  s:    





r   __main__)qZ
__future__r   r   r   r   	itertoolsr   Znumpyr&   Znumpy.testingr   r   r   r	   r
   r   r   r   r   r   r   Zint8r   r   r   r   r   rG   rH   rV   rt   r5   Z
complex256r*   rS   removeZdel_listrJ   r   r   FutureWarning
isinstancer   r   appendZdel_indr!   r/   r>   rA   rB   rD   rP   rX   r[   r_   Zslowra   rc   rd   re   ri   rk   rp   rv   rx   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   r   __name__r   r   r   r    <module>   s   0















	,!'
