a
    
da                     @   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	 d dl
Zd dlZd dlmZmZmZmZmZmZ d dlZd dlm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 d	d
 Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(ej)j*d?ddZ+dd Z,d@ddZ-dd  Z.d!d" Z/ej)j*dAd#d$Z0d%d& Z1d'd( Z2d)d* Z3d+d, Z4d-d. Z5d/d0 Z6d1d2 Z7d3d4 Z8d5d6 Z9d7d8 Z:d9d: Z;d;d< Z<d=d> Z=dS )B    )divisionprint_functionabsolute_importN)deepcopy)combinationspermutations)assert_allcloseassert_assert_equalassert_raisesassert_array_equalassert_warns)swt_axisư>gvIh%<=c                  C   s<  g d} t d}t}t j| |dd\\}}\}}\}}g d}	t||	d|d g d}
t||
d|d g d	}t||t|d g d
}t||t|d dgd }t||d|d g d}t||d|d t j||ddd}|d \}}t||t|d t||t|d t | |}tt|dk tt t| d d S )N         r         r   db1r   level)MH@gVf@'e@g'e?r   r   r   gQyC3t@g:0yE>Zrtolatol)g'e^v@'eʪ H@gVfg'e?r   ev @)r   g      @r   g      @r   g      #@
   g      !@)r   g      @r   g            ?r   r$   gZo̙#@   )        gʪ Hg^vgev r&   r    r   r!   r   r   start_levelr   )pywtWavelet
tol_doubleswtr   r	   lenswt_max_level)xr   r   ZcA3ZcD3cA2cD2cA1cD1Zexpected_cA1Zexpected_cD1Zexpected_cA2Zexpected_cD2Zexpected_cA3Zexpected_cD3rescoeffs r6   \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pywt/tests/test_swt.pytest_swt_decomposition    s.    
"
r8   c                   C   s   t ttjd t , tdt ttdd W d    n1 sH0    Y  ttdd ttdd ttdd ttd	d d S )
N   ignorer      r         r   0   )r   UserWarningr)   r.   warningscatch_warningssimplefilterr
   r6   r6   r6   r7   test_swt_max_level@   s    
.rC   c                  C   s.  g d} t d}t j| |dd\\}}\}}dD ]}t| d}tj|fd dd	}|d
krpt|}n|dkrt|}t j||dd\\}}	\}
}||	|
|fD ]}t	|j
|j
k q|
D ]}t|| q|D ]}t|| q|D ]}t|| q|	D ]}t|| q t| d}tj|fd dd	}|d
krLt|}n|dkr`t|}t j||ddd\\}}	\}
}||	|
|fD ]}t	|j
|j
k q|
dD ]}t|| q|dD ]}t|| q|dD ]}t|| q|	dD ]}t|| q q2ttt j| |ddd d S )Nr   r   r;   r   )CF)r      r   )axisrD   rE   )rF   r   r   )r   rH   r   r   )r)   r*   r,   npasarrayreshapeconcatenateZascontiguousarrayZasfortranarrayr	   shaper   Z	transposer   
ValueError)r/   r   r0   r1   r2   r3   orderZx_2dZcA2_2dZcD2_2dZcA1_2dZcD1_2dcrowr6   r6   r7   test_swt_axisN   sR    






rS   c               
   C   s   d} t jdd}d|v r"|d |D ]}t |}tttt|j	|j
}d||  d  }t|}dD ]N}|r|jsqpdD ]8}t j||| ||d}	t j|	||d	}
t|
|d
dd qqpq&d S )Nr   discretekinddmeyr;   r   TFtrim_approxnormr[   h㈵>Hz>r   )r)   wavelistremover*   intrJ   ceillog2maxdec_lenrec_lenarange
orthogonalr,   iswtr   )	max_levelwaveletscurrent_wavelet_strcurrent_waveletinput_length_powerinput_lengthXr[   rZ   r5   Yr6   r6   r7   test_swt_iswt_integration   s*    






rr   c                  C   s   t d} tttD ]\}}d|}tjd|d}t j|| dd\\}}\}}t	|j
|j
  ko|j
  ko|j
  ko|kn  d|  tjd|d}t j|| d	dd
 \}	\}
}}t	|	j
|
j
  ko|j
  ko|j
  ko|kn  d|  qd S )Nhaarz"wrong dtype returned for {0} inputr%   )dtyper;   r   zswt: r%   r%   r   r   zswt2: )r)   r*   zip	dtypes_in
dtypes_outformatrJ   onesr,   r	   rt   swt2)waveletdt_indt_outerrmsgr/   r0   r1   r2   r3   ZcAZcHZcVZcDr6   r6   r7   test_swt_dtypes   s    

44r   c                  C   s   t jd} td}tttD ]\}}| d	|}tj
||dd}t||}t||ddd | d		|}tj||dd}t||}t||ddd q d S )
NrG   rs   )r%   r;   r   r   r^   r   ru   )rJ   randomRandomStater)   r*   rv   rw   rx   standard_normalastyper,   ri   r   r{   iswt2)rstater|   r}   r~   r/   rQ   Zxrr6   r6   r7   test_swt_roundtrip_dtypes   s    
r   c                  C   sJ   d} t d}dD ]2}tj|| d d|d}tt|t|j|  qd S )Ndb2)r%   r=       r   r   r;   r   r   r(   rH   )rJ   rz   r)   r,   r
   r-   r.   rN   )wavr/   rH   Zsdecr6   r6   r7   test_swt_default_level_by_axis   s
    
r   c                  C   sV   t d} t 0 tdt tttj	| ddd W d    n1 sH0    Y  d S )Nr%   r:   rs   r   r   )
rJ   rz   r@   rA   rB   FutureWarningr   rO   r)   r{   r/   r6   r6   r7   test_swt2_ndim_error   s    

r   c              
   C   s   d}| d u r*t jdd} d| v r*| d | D ]}t |}tttt|j	|j
}d|| d  }t|d ||}dD ]N}|r|jsqdD ]8}t j|||||d}	t j|	||d	}
t|
|d
d
d qqq.d S )Nr   rT   rU   rW   r;   r   rX   rY   r\   r]   r   )r)   r_   r`   r*   ra   rJ   rb   rc   rd   re   rf   rg   rL   rh   r{   r   r   )rk   rj   rl   rm   rn   ro   rp   r[   rZ   r5   rq   r6   r6   r7   test_swt2_iswt2_integration   s,    




r   c                   C   s   t dgd d S Nr   )rk   )r   r6   r6   r6   r7   test_swt2_iswt2_quick   s    r   c              	   C   s   dD ]~}t |d |d}d}t 8 tdt tj||dd}t	||}W d    n1 sh0    Y  t
||ttd qd S )N)r%   r=   r>   r   r   r:   r;   r   r   )rJ   rg   rL   r@   rA   rB   r   r)   r{   r   r   
tol_single)rk   Znrowsrp   rm   r5   rq   r6   r6   r7   test_swt2_iswt2_non_square  s    
*r   c                  C   s<  d} t d}tttt|j|j}d| }t	|d 
||}t j||ddd \}\}}}t j||dddd \}	\}
}}t||	| d	 t||| d	 t||
| d	 t||| d	 t ||||fg|}t||| d	 t j|	|
||fg|d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   rI   r   axesr   r   r   r   r   )r)   r*   ra   rJ   rb   rc   rd   re   rf   rg   rL   r{   r   r   r   rO   )r   rm   rn   ro   rp   r2   ZcH1ZcV1r3   r0   ZcH2ZcV2r1   Zr1Zr2r6   r6   r7   test_swt2_axes  s4    


r   c               	   C   sj  d} t d}tttt|j|j}d| }t	|d 
||}t j||dd dd }t j||dddd }t|d |d | d	 t|d
 |d | d	 t|d |d
 | d	 t|d |d | d	 t j||dd}t|g  ttt j||ddd ttt jtg |d ttt j||ddd ttt||ddd ttt|d dd d f |dddd d S )Nr   r   r;   r   r   r   rI   Zaar   addaddr   r   r   r'   rF   r   )r)   r*   ra   rJ   rb   rc   rd   re   rf   rg   rL   swtnr   r
   r   rO   rK   r   )r   rm   rn   ro   rp   r5   Zcoeffs2emptyr6   r6   r7   test_swtn_axes-  s6    


r   c                 C   s^  d}| d u r*t jdd} d| v r*| d tddD ]"}|d }tt||D ]}| D ]}t |}|jdkrtqZtt	t
t|j|j}d|| d  }t|| |f| }	dD ]Z}
|
r|jsqdD ]D}t j|	|||||
d	}t|}t j||||
d
}t||	ddd qqt||D ],\}}| D ]\}}t|| | q6q&qZqPq4d S )Nr   rT   rU   rW   r   r%   r;   rX   )r   rZ   r[   )r   r[   r]   r   )r)   r_   r`   ranger   r*   re   ra   rJ   rb   rc   rd   rf   rg   rL   rh   r   r   iswtnr   rv   itemsr   )rk   rj   Zndim_transformndimr   rl   r   rn   Nrp   r[   rZ   r5   Zcoeffs_copyrq   rQ   c2kvr6   r6   r7   test_swtn_iswtn_integrationS  s>    




r   c                   C   s   t dgd d S r   )r   r6   r6   r6   r7   test_swtn_iswtn_quick  s    r   c                  C   s   t dddd} d}d}td}tj| |||d}tttj||dd tttj||dd |d	 d
 d dd d f |d	 d
< tt	tj|||d d S )Ni   r%   r;   )r   r   r   r   r   r   r   r   rF   )
rJ   rg   rL   r)   r*   r   r   rO   r   RuntimeError)r/   rj   r   wr5   r6   r6   r7   test_iswtn_errors  s    
$r   c            	      C   sx   d} d}d}t jd}t| D ]R}dd t|D }||}tj||||d}tj|||d}t	||ddd	 q d S )
N)r   r>   r   sym2r   r   c                 S   s   g | ]\}}|d kr|qS )r   r6   ).0axsr6   r6   r7   
<listcomp>      z9test_swtn_iswtn_unique_shape_per_axis.<locals>.<listcomp>r   g|=r   )
rJ   r   r   r   	enumerater   r)   r   r   r   )	Z_shaper   rj   r   rN   r   r/   rQ   rr6   r6   r7   %test_swtn_iswtn_unique_shape_per_axis  s    
r   c                  C   s2  t jd} | ddd}d}tdddf}tj|||d}tt|||dd	 tj||d d
 |d}tt||d d
 |dd	 t	t
tj||d d | t	t
tj||d d  t X tdt |d }t||d d |}tt||d d |dd	 W d    n1 s$0    Y  d S )Ni  r=   r   rs   r   Zdb4r   r   r   r   r;   r:   ).r   )rJ   r   r   randnr)   r*   r   r   r   r   rO   r@   rA   rB   r   r{   r   )r   datar   rk   ZcoefsZdata2Zcoefs2r6   r6   r7   test_per_axis_wavelets  s    
r   c               	   C   s~   t d} ttjtjtjgtjtjtj	gD ]L\}}dt
dfD ]4}tt|| |dd || ddd}tt|||d qBq,d S )N)r=   r=   Zmorlr   )r|   r   r   r   )r|   )rJ   rz   rv   r)   r,   r{   r   ri   r   r   ZDiscreteContinuousWaveletr   rO   )r   Zdec_funcZrec_funcZcwaverQ   r6   r6   r7    test_error_on_continuous_wavelet  s    

r   c            	      C   s   t dt j} | d|   }d}t jt jft jt jft jt jft jt jft jt jffD ]\}}|t jt jfv r||}t j}n
| }t j}t	||d}|d d ||d d |g|d< t
||}t||j t||ddd qXd S )	Nr=                 ?r   r;   r   r   MbP?r   )rJ   rg   r   float64float32float16
complex128	complex64r)   r,   ri   r
   rt   r   )	x_real	x_complexr   dtype1dtype2r/   output_dtyper5   yr6   r6   r7   test_iswt_mixed_dtypes  s*    




r   c            	         s   t jd} | dd}|d|  }d}t jt jft jt jft jt jft jt jft jt jffD ]\} |t jt jfv r|}t j}n
|}t j}t	
||d}|d d |t fdd|d d D g|d< t	||}t||j t||d	d	d
 q^d S )Nr   r%   r   r   r;   c                    s   g | ]}|  qS r6   r   r   rQ   r   r6   r7   r     r   z+test_iswt2_mixed_dtypes.<locals>.<listcomp>r   r   r   )rJ   r   r   r   r   r   r   r   r   r)   r{   r   tupler   r
   rt   r   )	r   r   r   r   r   r/   r   r5   r   r6   r   r7   test_iswt2_mixed_dtypes  s,    




r   c            
         s  t jd} | ddd}|d|  }d}t jt jft jt jft jt jft jt jft jt jffD ]\} |t jt jfv r|}t j}n
|}t j}t	
||d}|d d|j }||} fdd|d  D |d< ||d d|j < t	||}	t||	j t|	|d	d	d
 q`d S )Nr   r%   r   r   r;   ac                    s   i | ]\}}||  qS r6   r   )r   r   rQ   r   r6   r7   
<dictcomp>  r   z+test_iswtn_mixed_dtypes.<locals>.<dictcomp>r   r   )rJ   r   r   r   r   r   r   r   r   r)   r   popr   r   r   r   r
   rt   r   )
r   r   r   r   r   r/   r   r5   r   r   r6   r   r7   test_iswtn_mixed_dtypes  s.    





r   c                  C   sD   t ttjg d tdddd d f } t ttj| dddd d S )Nr   )r   r   r   r   r   r   )r   rO   r)   r,   rJ   rz   r   r   r6   r6   r7   test_swt_zero_size_axes#  s    r   c                  C   s   d} t jd}|d}tj|| ddd}dd |D }tt |t | tt j	
|t j	
t | tttj|ddd	 d
S )zBVerify that the 1D SWT partitions variance among the coefficients.r   rG      TrY   c                 S   s   g | ]}t |qS r6   rJ   varr   r6   r6   r7   r   4  r   z=test_swt_variance_and_energy_preservation.<locals>.<listcomp>bior2.2r\   N)rJ   r   r   r   r)   r,   r   sumr   linalgr[   rM   r   r?   )r   r   r/   r5   	variancesr6   r6   r7   )test_swt_variance_and_energy_preservation,  s    
r   c                  C   s   d} t jd}|dd}tj|| dddd}|d  g}|dd	 D ]}|D ]}||  qRqJd
d |D }tt 	|t 
| tt j|t jt | tttj|dddd d	S )zBVerify that the 2D SWT partitions variance among the coefficients.r   rG   @   r   Tr   rZ   r[   r   r   Nc                 S   s   g | ]}t |qS r6   r   r   r   r6   r6   r7   r   K  r   z>test_swt2_variance_and_energy_preservation.<locals>.<listcomp>r   r   r[   )rJ   r   r   r   r)   r{   ravelappendr   r   r   r   r[   rM   r   r?   )r   r   r/   r5   
coeff_listdr   r   r6   r6   r7   *test_swt2_variance_and_energy_preservation?  s    r   c            	      C   s   d} t jd}|dd}tj|| dddd}|d  g}|dd	 D ]$}| D ]\}}||  qVqJd
d |D }t	t 
|t | t	t j|t jt | tttj|dddd d	S )zBVerify that the nD SWT partitions variance among the coefficients.r   rG   r   r   Tr   r   r   Nc                 S   s   g | ]}t |qS r6   r   r   r6   r6   r7   r   b  r   z>test_swtn_variance_and_energy_preservation.<locals>.<listcomp>r   r   )rJ   r   r   r   r)   r   r   r   r   r   r   r   r   r[   rM   r   r?   )	r   r   r/   r5   r   r   r   r   r   r6   r6   r7   *test_swtn_variance_and_energy_preservationV  s    r   c            
      C   s   dt jt jdfdt jt jdfdt jt jdffD ]`\} }}}td|  }||ddd	d
}t 	|\}}}t j
||||d}||d}	t||	 q.d S )Nr   r,   r;   r{   r   r   )r=   r   T)r   rZ   )Zoutput_format)r)   r,   ri   r{   r   r   r   rJ   rz   Zravel_coeffsZunravel_coeffsr   )
r   Z_swtZ_iswtZ
ravel_typer/   rQ   ZarrZslicesZshapesr   r6   r6   r7   test_swt_ravel_and_unravelm  s    
r   )N)N)N)>
__future__r   r   r   r@   copyr   	itertoolsr   r   numpyrJ   ZpytestZnumpy.testingr   r	   r
   r   r   r   r)   Zpywt._extensions._swtr   Zint8r   r   r   r   r   rw   rx   r   r+   r8   rC   rS   rr   r   r   r   r   markZslowr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   sZ     8!	#
&.	