o
    7ήcU:                     @   s  d dl mZmZmZ d dlZd dlmZ d dl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zeejg7 Zeejg7 ZW n	 eyW   Y nw dd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd  Z%d!d" Z&d#d$ Z'd%d& Z(d'd( Z)d)d* Z*d+d, Z+d-d. Z,d/d0 Z-d1d2 Z.d3d4 Z/d5d6 Z0d7d8 Z1d9d: Z2dS );    )divisionprint_functionabsolute_importN)combinations)assert_allcloseassert_assert_raisesassert_equalc                  C   s:   t g dd t } ttt j| d ttt jdd d S )N)            haarr   )pywtdwtndictr   	TypeError
ValueError)data r   ?/tmp/pip-target-vg8gfxp4/lib/python/pywt/tests/test_multidim.pytest_dwtn_input   s   r   c                  C   s   t g dg dg dg dgg dg dg dg dgg} td	}tjjD ]}tj| ||d
}t| tj|||d
ddd q(d S )Nr   r   r
      r
   r   r   r      r   r   r
   r      r   !   r   	   r   r      r   r!   r
   r
   r   r
   r   r   r            4   r$   r   r   r%   r   r'   r&   r   r   r   r&   N   r%   r   r   modevIh%<=rtolatol)	nparrayr   WaveletModesmodesr   r   idwtn)r   waveletr,   dr   r   r   test_3D_reconstruct$   s&   

r9   c                  C   s   t jd} | dd}t }d|v r|d |D ]-}|dv r"qtt|tj	rHtj
jD ]}tj|||d}ttj|||d|ddd q/qd S )N     dmey)cmorshanfbspr+   Hz>r.   )r1   randomRandomStaterandnr   wavelistremove
isinstanceDiscreteContinuousWaveletr3   r4   r5   r   r   r6   )rstaterrD   r7   r,   coeffsr   r   r   test_dwdtn_idwtn_allwavelets6   s    
rK   c               	   C   s   t d} dD ]S}tjg dg dg dg|d}t jjD ]<}t || }tjd|jd}||d d dd d d	f< t |d d dd d d	f | }|	 D ]}t
|| ||  qMqqd S )
Nr   float32float64r   r   r   r&   r   r   r
   r    dtype)r   r%   r   )r   r3   r1   r2   r4   r5   r   onesrQ   keysr   )r7   rQ   r   r,   expectedstridedstrided_dwtnkeyr   r   r   test_strideH   s$   

 rY   c                  C   s   t d} dD ]S}tjg dg dg dg|d}t jjD ]<}t || }tjdtj|jdfd	|jj	fd
ddd}||d d < t |d | }|
 D ]}t|| ||  qMqqd S )Nr   rL   r   rO   r    rP   )r   r&   r   byte)r   padT)alignr   )r   r3   r1   r2   r4   r5   r   rS   rQ   itemsizerT   r   )r7   rQ   r   r,   rU   paddedpadded_dwtnrX   r   r   r   test_byte_offsetZ   s,   



r`   c                  C   s   t g dg dg dg dgg dg dg dg dgg} | d	 } td
}t| |}tdd | jD }t| t||| ddd d S )Nr   r   r   r    r"   r#   r(   r)                 ?r   c                 S   s   g | ]}t d |qS )N)slice).0sr   r   r   
<listcomp>}   s    z/test_3D_reconstruct_complex.<locals>.<listcomp>r-   r.   )	r1   r2   r   r3   r   tupleshaper   r6   )r   r7   r8   original_shaper   r   r   test_3D_reconstruct_complexm   s&   	

ri   c                  C   s   t g dg dg dg} td}t| |\}\}}}||||d}tjjD ]}ttj||||ff||dtj	|||dddd q)d S )	Nr   rO   r    r   aadaadddr+   +=r.   
r1   r2   r   r3   dwt2r4   r5   r   idwt2r6   r   r7   LLHLLHHHr8   r,   r   r   r   test_idwtn_idwt2   s   
rx   c                  C   s   t g dg dg dg} | d } td}t| |\}\}}}||||d}tjjD ]}ttj||||ff||dtj	|||dddd	 q-d S )
Nr   rO   r    ra   r   rj   r+   ro   r.   rp   rs   r   r   r   test_idwtn_idwt2_complex   s   
ry   c               	   C   s   t g dg dg dg} td}t| |}tdt|D ]D}t| |D ]:}|	 }|D ]}||= q1|
dd }|
dd }|
dd }	|
d	d }
tt|||	|
ff|t|dd
d q)q d S )Nr   rO   r    r   r
   rk   rl   rm   rn   gV瞯<r0   )r1   r2   r   r3   r   rangelenr   rT   copygetr   rr   r6   )r   r7   coefsnum_missingmissingmissing_coefsrX   rt   ru   rv   rw   r   r   r   test_idwtn_missing   s*   
r   c                  C   s$   t d d d d d} tttj| d d S )Nrj   r   )r   r   r   r   r6   )r   r   r   r   test_idwtn_all_coeffs_None   s   r   c                  C   s~   t g dg dg dg} td}t| |\}\}}}|||||d}tttj|| ||||d}tttj|| d S )Nr   rO   r    r   )rk   rl   rm   rn   ff)arl   rm   rn   r1   r2   r   r3   rq   r   r   r6   r   r7   rt   ru   rv   rw   r8   r   r   r   test_error_on_invalid_keys   s   
r   c                  C   s   t g dg dg dg} td}t| |\}\}}}|d d d df }|d d d df }|d d d df }||||d}tttj|| d S )Nr   rO   r    r   rR   rj   r   r   r   r   r   test_error_mismatched_size   s   
r   c            
      C   s   t d} tttD ]J\}}tjd|d}d|}t || \}\}}}t	|j
|j
  ko8|j
  ko8|j
kn  d|  t ||||ff| }	t	|	j
|kd|  q
d S )Nr   r   r   rP   "wrong dtype returned for {0} inputzdwt2: zidwt2: )r   r3   zip	dtypes_in
dtypes_outr1   rS   formatrq   r   rQ   rr   )
r7   dt_indt_outxerrmsgcAcHcVcDx_roundtripr   r   r   test_dwt2_idwt2_dtypes   s   

*r   c                  C   s   t g dg dg dg} | d|   } tj| ddd}ttdd	 | }t|d
 | ttdd	 | }t|d | tj| ddd}ttdd	 |}t|d | ttdd	 |}t|d | d S )Nr   r
   r   r   r
   r
   r
   r
   r
   r   r   r   ra   r   )r
   axesc                 S      t | dd S Nr   r   r   dwtr   r   r   r   <lambda>       z test_dwtn_axes.<locals>.<lambda>r   c                 S   r   Nr   r
   r   r   r   r   r   r     r   r8   r
   r
   c                 S   r   r   r   r   r   r   r   r     r   rk   c                 S   r   r   r   r   r   r   r   r     r   rm   )r1   r2   r   r   listmapr	   )r   r   
expected_a
expected_dexpected_aaexpected_adr   r   r   test_dwtn_axes   s   
r   c                  C   sV   t g dg dg dg} | d|   } tj| ddd}ttj|ddd| dd	 d S )
Nr   r   r   ra   r   r   r   ro   rz   )r1   r2   r   r   r   r6   r   r   r   r   r   test_idwtn_axes  s   
r   c                  C   s   t g dg dg dg} | d|   } tj| ddd\}\}}}t |}tj||||ffddd}d }tj||||ffddd}t|| d S )Nr   r   r   ra   r   r   r   )r1   r2   r   rq   
zeros_likerr   r	   )r   r   r   r   r   result_zerosresult_noner   r   r   test_idwt2_none_coeffs  s   

r   c                  C   s   t g dg dg dg} | d|   } tj| ddd}t |d |d< tj|ddd}d |d< tj|ddd}t|| d S )	Nr   r   r   ra   r   r   r   rn   )r1   r2   r   r   r   r6   r	   )r   r   r   r   r   r   r   test_idwtn_none_coeffs&  s   
r   c                  C   s^   t g dg dg dg} tj| ddd}ttj|ddd| dd tttj|dd	d d S )
Nr   r   r   r   r   r   ro   rz   r   r
   r
   )r1   r2   r   rq   r   rr   r   r   r   r   r   r   test_idwt2_axes7  s   
r   c                  C   P   t t jd} tddD ]}tj| d|d}ttj|d|d| dd qd S )N)r   r   r   )r   r
   r   r   r   r   ro   rz   )	r1   r2   rA   standard_normalr   r   rq   r   rr   r   r   r   r   r   r   test_idwt2_axes_subsetsB  
   r   c                  C   r   )N)r   r   r   r   r   r   r   r   ro   rz   )	r1   r2   rA   r   r   r   r   r   r6   r   r   r   r   test_idwtn_axes_subsetsJ  r   r   c                  C   st   t g dg dg dg} tj| ddd}tj| ddd}t|| tj|ddd}tj|ddd}t|| d S )Nr   r   r   r   r   r   )rR   rR   )r1   r2   r   r   r	   r6   )r   coefs1coefs2rec1rec2r   r   r   test_negative_axesR  s   

r   c            	      C   s   t d} tttD ]9\}}tjd|d}d|}t || }|	 D ]\}}t
|j|kd|  q$t || }t
|j|kd|  q
d S )Nr   r   rP   r   zdwtn: zidwtn: )r   r3   r   r   r   r1   rS   r   r   itemsr   rQ   r6   )	r7   r   r   r   r   rJ   kvr   r   r   r   test_dwtn_idwtn_dtypes_  s   

r   c                  C   s   t jd} | ddd}|d|  }t|d}t|d}t||dd |d|j  	t j
|d|j < t|d}t||ddd	 t|jt jk d S )
Nr   r   ra   db2g|=)r/   r   r@   r.   )r1   rA   rB   rC   r   r   r6   r   ndimastype	complex64r   rQ   
complex128)rH   r   rJ   r   x_roundtrip2r   r   r   test_idwtn_mixed_complex_dtypem  s    r   c                  C   s<   t d} t d } }}tttj| |||ffdd d S )N)r&   r&   )r   r   r   r7   )r1   zerosr   r   r   rr   )rt   rv   ru   rw   r   r   r   test_idwt2_size_mismatch_error}  s   
 r   c                  C   sF   t d} td}tttj| | t d}tttj||dd d S )Nr;   r   )r   r   r   r   )r1   rS   r   r3   r   r   rq   )r   r7   data2r   r   r   test_dwt2_dimension_error  s
   


r   c                  C   s  t jd} | ddd}tdddf}ddtjjjj	f}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	 d S )Nr:   r;   r   sym2db4	symmetricperiodizationro   rz   r
   r   r+   ).r   )r1   rA   rB   rC   r   r3   _extensions_pywtr4   reflectr   r   r6   r   r   rq   rr   )rH   r   waveletsr5   r   r   r   r   r   r    test_per_axis_wavelets_and_modes  s*   
   
r   c                  C   sp   t d} ttjtjgtjtjgD ]#\}}dtdfD ]}t	t
|| |d || d}t	t
|||d qqd S )N)r;   r;   morlr   db1)r1   rS   r   r   rq   r   rr   r6   rG   r   r   )r   dec_funrec_funcwavecr   r   r    test_error_on_continuous_wavelet  s   


r   )3
__future__r   r   r   numpyr1   	itertoolsr   numpy.testingr   r   r   r	   r   int8float16rM   rN   r   r   r   r   
complex256AttributeErrorr   r9   rK   rY   r`   ri   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sX   
	"