
    i`                        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j0                  gZej,                  ej*                  ej*                  ej,                  ej.                  ej0                  gZdZdZd Zd	 Zd
 Zd Z d Z!d Z"d Z#d Z$ejJ                  jL                  d#d       Z'd Z(d#dZ)d Z*d Z+ejJ                  jL                  d#d       Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d  Z7d! Z8d" Z9y)$    N)deepcopy)combinationspermutations)assert_assert_allcloseassert_array_equalassert_equalassert_raisesassert_warns)swt_axisư>gvIh%<=c                     g d} t        j                  d      }t        }t        j                  | |d      \  \  }}\  }}\  }}g d}	t	        ||	d|       g d}
t	        ||
d|       g d	}t	        ||t        |       g d
}t	        ||t        |       dgdz  }t	        ||d|       g d}t	        ||d|       t        j                  ||dd      }|d   \  }}t	        ||t        |       t	        ||t        |       t        j                  | |      }t        t        |      dk(         t        t        j                  t        |             d       y )N         r         r   db1r   level)MH@gVf@'e@g'e?r   r   r   gQyC3t@g:0yE>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   cA3cD3cA2cD2cA1cD1expected_cA1expected_cD1expected_cA2expected_cD2expected_cA3expected_cD3rescoeffss                    O/var/www/html/BatchJob/venv/lib/python3.12/site-packages/pywt/tests/test_swt.pytest_swt_decompositionr?   &   s:   !A
,,u
CD)-!S)B&JS#
cJS#DLCDt<FLCDt<4LCJTB5LCJTB>A%LCDt<DLCDt< ((31!
4C1vHCCJTBCJTBXXaFCK1Ds1v&*    c                     t        t        t        j                  d       t	        j
                         5  t	        j                  dt               t        t        j                  d      d       d d d        t        t        j                  d      d       t        t        j                  d      d       t        t        j                  d      d       t        t        j                  d	      d       y # 1 sw Y   xY w)
N   ignorer      r         r   0   )r   UserWarningr)   r.   warningscatch_warningssimplefilterr	    r@   r>   test_swt_max_levelrM   F   s    d00"5		 	 	" 0h4T''+Q/0
 ##A&*##C(!,##B'+##D)1-0 0s   :C33C<c                     g d} t        j                  d      }t        j                  | |d      \  \  }}\  }}dD ]\  }t        j                  |       j                  d      }t        j                  |fdz  d	      }|d
k(  rt        j                  |      }n|dk(  rt        j                  |      }t        j                  ||d      \  \  }}	\  }
}||	|
|fD ]$  }t        |j                  |j                  k(         & |
D ]  }t        ||        |D ]  }t        ||        |D ]  }t        ||        |	D ]  }t        ||        t        j                  |       j                  d      }t        j                  |fdz  d	      }|d
k(  rt        j                  |      }n|dk(  rt        j                  |      }t        j                  ||dd      \  \  }}	\  }
}||	|
|fD ]$  }t        |j                  |j                  k(         & |
j                  d      D ]  }t        ||        |j                  d      D ]  }t        ||        |j                  d      D ]  }t        ||        |	j                  d      D ]  }t        ||        _ t        t        t         j                  | |dd       y )Nr   r   rD   r   )CF)r      r   )axisrO   rP   )rQ   r   r   )r   rS   r   r   )r)   r*   r,   npasarrayreshapeconcatenateascontiguousarrayasfortranarrayr   shaper   	transposer
   
ValueError)r/   r   r2   r3   r4   r5   orderx_2dcA2_2dcD2_2dcA1_2dcD1_2dcrows                 r>   test_swt_axisrf   T   s   !A
,,u
C!XXaA6JS#
c  *)zz!}$$W-~~thqjq1C<''-Dc\$$T*D-1XXdCq-I**66&&&1 	+AAGGtzz)*	+  	)CsC(	) 	)CsC(	) 	)CsC(	) 	)CsC(	) zz!}$$W-~~thqjq1C<''-Dc\$$T*D-1XXdCq;<.>**66 &&&1 	+AAGGtzz)*	+ ##F+ 	)CsC(	)##F+ 	)CsC(	)##F+ 	)CsC(	)##F+ 	)CsC(	)S*)Z *dhh3aa@r@   c                  0   d} t        j                  d      }d|v r|j                  d       |D ]  }t        j                  |      }t	        t        j                  t        j                  t        |j                  |j                                          }d|| z   dz
  z  }t        j                  |      }dD ]Y  }|r|j                  sdD ]C  }t        j                  ||| ||      }	t        j                  |	||	      }
t        |
|d
d       E [  y )Nr   discretekinddmeyrD   r   TFtrim_approxnormro   h㈵>Hz>r   )r)   wavelistremover*   intrU   ceillog2maxdec_lenrec_lenarange
orthogonalr,   iswtr   )	max_levelwaveletscurrent_wavelet_strcurrent_waveletinput_length_powerinput_lengthXro   rn   r=   Ys              r>   test_swt_iswt_integrationr      s    I}}*-H' <,,':; ####2% *& "' ( -	9A=>IIl#! 	<DO66, <!_i.9FIIfoDA14d;	<		<<r@   c                     t        j                  d      } t        t        t              D ]'  \  }}d| d}t        j                  d|      }t        j                  || d      \  \  }}\  }}t        |j                  |j                  cxk(  xr) |j                  cxk(  xr |j                  cxk(  xr |k(  nc d|z          t        j                  d	|      }t        j                  || d
      d   \  }	\  }
}}t        |	j                  |
j                  cxk(  xr) |j                  cxk(  xr |j                  cxk(  xr |k(  nc d|z          * y )Nhaarzwrong dtype returned for z inputr%   )dtyperD   r   zswt: r%   r%   r   r   zswt2: )r)   r*   zip	dtypes_in
dtypes_outrU   onesr,   r   r   swt2)waveletdt_indt_outerrmsgr/   r2   r3   r4   r5   cAcHcVcDs                r>   test_swt_dtypesr      s	   ll6"GY
3 #v,UG6: GGAU#!%!WA!>
cJS#		SYYJ#))JsyyJFJ& 	" GGF%(99Qq9!<LRRBHHFFBHHFF6!	##r@   c                     t         j                  j                  d      } t        j                  d      }t        t        t              D ]  \  }}| j                  d      j                  |      }t        j                  ||d      }t        j                  ||      }t        ||dd       | j                  d	      j                  |      }t        j                  ||d      }t        j                  ||      }t        ||dd        y )
NrR   r   )r%   rD   r   r   rr   r   r   )rU   randomRandomStater)   r*   r   r   r   standard_normalastyper,   r}   r   r   iswt2)rstater   r   r   r/   rd   xrs          r>   test_swt_roundtrip_dtypesr      s    YY""1%Fll6"GY
3 5v""5)007HHQq)YYq'"2Dt4 ""6*11%8IIa*ZZ7#2Dt45r@   c                      d} t        j                  d      }dD ]Q  }t        j                  || d d|      }t	        t        |      t        j                  |j                  |                S y )Ndb2)r%   rF       r   r   rD   r   r   r(   rS   )rU   r   r)   r,   r	   r-   r.   r[   )wavr/   rS   sdecs       r>   test_swt_default_level_by_axisr      s^    
C
"#A Cxx3dESY 2 21774= ABCr@   c                      t        j                  d      } t        j                         5  t        j                  dt
               t        t        t        j                  | dd       d d d        y # 1 sw Y   y xY w)Nr%   rC   r   r   r   )
rU   r   rI   rJ   rK   FutureWarningr
   r]   r)   r   r/   s    r>   test_swt2_ndim_errorr      sX    

A		 	 	" Ah6j$))Qa@A A As   =A00A9c                 Z   d}| +t        j                  d      } d| v r| j                  d       | D ]  }t        j                  |      }t	        t        j                  t        j                  t        |j                  |j                                          }d||z   dz
  z  }t        j                  |dz        j                  ||      }dD ]Y  }|r|j                  sdD ]C  }t        j                  |||||      }	t        j                  |	||	      }
t!        |
|d
d
       E [  y )Nr   rh   ri   rk   rD   r   rl   rm   rp   rq   r   )r)   rs   rt   r*   ru   rU   rv   rw   rx   ry   rz   r{   rW   r|   r   r   r   )r   r~   r   r   r   r   r   ro   rn   r=   r   s              r>   test_swt2_iswt2_integrationr      s&    I==j1XOOF#' <,,':; ####2% *& "' ( -	9A=>IIlAo&..|\J! 	<DO66, <1oy/:GJJvTB14d;	<		<<r@   c                      t        dg       y Nr   )r   )r   rL   r@   r>   test_swt2_iswt2_quickr         %3r@   c                 v   dD ]  }t        j                  |dz        j                  |d      }d}t        j                         5  t        j
                  dt               t        j                  ||d      }t        j                  ||      }d d d        t        |t        t                y # 1 sw Y   #xY w)N)r%   rF   rG   r   r   rC   rD   r   r   )rU   r{   rW   rI   rJ   rK   r   r)   r   r   r   
tol_single)r   nrowsr   r   r=   r   s         r>   test_swt2_iswt2_non_squarer   	  s     @IIeBh''r2$$& 	4!!(M:YYq/;F

6?3A	4 	1:J?@	4 	4s   A	B//B8	c            
      X   d} t        j                  d      }t        t        j                  t        j
                  t        |j                  |j                                          }d|z  }t        j                  |dz        j                  ||      }t        j                  ||d      d   \  }\  }}}t        j                  ||dd      d   \  }	\  }
}}t        ||	| 	       t        ||| 	       t        ||
| 	       t        ||| 	       t        j                  ||||fg|      }t        ||| 	       t        j                  |	|
||fg|d
      }t        ||| 	       t        t        t         j                  ||dd
       t        t        t         j                  ||dd
       y )N+=r   rD   r   r   r   rT   r   axesr   r   r   r   r   )r)   r*   ru   rU   rv   rw   rx   ry   rz   r{   rW   r   r   r   r
   r]   )r   r   r   r   r   r4   cH1cV1r5   r2   cH2cV2r3   r1r2s                  r>   test_swt2_axesr     s|   Dll5)ORWWRWWS.! &" # $ )*L
		,/"**<FA!YYq/CAFS/3S!YYq/,24457S/3SC4(C4(C4(C4( 
S3S/*O	<BAr%	S3S/*O&	IBAr% *diiOQ *diiOQUKr@   c            
         d} t        j                  d      }t        t        j                  t        j
                  t        |j                  |j                                          }d|z  }t        j                  |dz        j                  ||      }t        j                  ||dd       d   }t        j                  ||dd      d   }t        |d   |d   | 	       t        |d
   |d   | 	       t        |d   |d
   | 	       t        |d   |d   | 	       t        j                  ||d      }t        |g        t        t        t         j                  ||dd       t        t        t         j                  t        j                   g       |d       t        t        t         j                  ||dd       t        t        t"        ||dd       t        t        t"        |d dd d f   |ddd       y )Nr   r   rD   r   r   r   rT   aar   addaddr   r   r   r'   rQ   r   )r)   r*   ru   rU   rv   rw   rx   ry   rz   r{   rW   swtnr   r	   r
   r]   rV   r   )r   r   r   r   r   r=   coeffs2emptys           r>   test_swtn_axesr   3  s   Dll5)ORWWRWWS.! &" # $ )*L
		,/"**<FAYYq/>qAFii?!&A!DGF4L'$-d;F4L'$-d;F4L'$-d;F4L'$-d; IIa2E *diiOQVL *diiB!L *diiOq* *h?!! *h#2#q&	?!a)r@   c                 |   d}| +t        j                  d      } d| v r| j                  d       t        dd      D ]}  }|dz   }t	        t        |      |      D ]\  }| D ]S  }t        j
                  |      }|j                  dkD  r)t        t        j                  t        j                  t        |j                  |j                                          }d||z   dz
  z  }t        j                  ||z        j                  |f|z        }	dD ]f  }
|
r|j                  sdD ]P  }t        j                   |	|||||
	      }t#        |      }t        j$                  ||||

      }t'        ||	dd       R h t)              D ],  \  }}|j+                         D ]  \  }}t-        ||   |        . V _  y )Nr   rh   ri   rk   r   r%   rD   rl   )r   rn   ro   )r   ro   rq   r   )r)   rs   rt   ranger   r*   ry   ru   rU   rv   rw   rx   rz   r{   rW   r|   r   r   iswtnr   r   itemsr   )r   r~   ndim_transformndimr   r   r   r   Nr   ro   rn   r=   coeffs_copyr   rd   c2kvs                      r>   test_swtn_iswtn_integrationr   Y  s    I==j1XOOF#1+ 5! tn= 	5D'/ 5#ll#67;;?%(KKKK:! 2" *# &$" *Y6:;IIag&..uTz:) 	DDCNN '4 D!%1c947B"O&.v&6 JJvsDI'14dCD		D !5 5EAr !	 51*2a5!455-5	55r@   c                      t        dg       y r   )r   rL   r@   r>   test_swtn_iswtn_quickr     r   r@   c                     t        j                  d      j                  ddd      } d}d}t        j                  d      }t        j
                  | |||      }t        t        t        j                  ||d       t        t        t        j                  ||d       |d	   d
   d dd d f   |d	   d
<   t        t        t        j                  |||       y )Ni   r%   rD   )r   r   r   r   r   r   r   r   rQ   )
rU   r{   rW   r)   r*   r   r
   r]   r   RuntimeError)r/   r~   r   wr=   s        r>   test_iswtn_errorsr     s    
		$1a(AIDUAYYq!YT2F *djj&!)D*djj&!&AQiocrc1f-F1IdO,

FADAr@   c                  b   d} d}d}t         j                  j                  d      }t        |       D ]v  }t	        |      D cg c]  \  }}|dk7  s| }}}|j                  |      }t        j                  ||||      }	t        j                  |	||      }
t        ||
dd       x y c c}}w )	N)r   rG   r   sym2r   r   r   r   g|=r   )
rU   r   r   r   	enumerater   r)   r   r   r   )_shaper   r~   r   r[   axsr   r/   rd   rs              r>   %test_swtn_iswtn_unique_shape_per_axisr     s    F
CIYY""1%Ff% 6 )% 0;ur1AF;;""5)IIaid3JJq#D)15u56;s   B+B+c            	      ,   t         j                  j                  d      } | j                  ddd      }d}t	        j
                  d      ddf}t	        j                  |||      }t        t	        j                  ||      |d	       t	        j                  ||d d
 |      }t        t	        j                  ||d d
       |d	       t        t        t        j                  ||d d |       t        t        t        j                  ||d d        t        j                         5  t        j                  dt               |d   }t	        j                  ||d d |      }t        t	        j                   ||d d       |d	       d d d        y # 1 sw Y   y xY w)Ni  rF   r   r   r   db4r   r   r   r   rD   rC   ).r   )rU   r   r   randnr)   r*   r   r   r   r
   r]   rI   rJ   rK   r   r   r   )r   datar   r   coefsdata2coefs2s          r>   test_per_axis_waveletsr     sK   YY""4(F<<B#DE V$fe4HIIdHE2EDJJuh/EB IIdHRaL6EDJJuhrl3TF *diix|UC*djj%"1>		 	 	" Mh6V5(2A,6

68BQ<8%eLM M Ms   "AF

Fc            	         t        j                  d      } t        t        j                  t        j
                  t        j                  gt        j                  t        j                  t        j                  g      D ]S  \  }}dt        j                  d      fD ]4  }t        t        || |d        || dd      }t        t        |||       6 U y )N)rF   rF   morlr   )r   r   r   r   )r   )rU   r   r   r)   r,   r   r   r}   r   r   DiscreteContinuousWaveletr
   r]   )r   dec_funcrec_funccwaverd   s        r>    test_error_on_continuous_waveletr     s    778D!488TYY		"B#'99djj$**"EG B(d<<VDE 	BE*he !# uA.A*h5A	BBr@   c                  Z   t        j                  d      j                  t         j                        } | d| z  z   }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        j                  ||d      }|d   d   j                  |      |d   d   j                  |      g|d<   t        j                  ||      }t        ||j                         t        ||dd        y )	NrF                 ?r   rD   r   r   MbP?r   )rU   r{   r   float64float32float16
complex128	complex64r)   r,   r}   r	   r   r   )	x_real	x_complexr   dtype1dtype2r/   output_dtyper=   ys	            r>   test_iswt_mixed_dtypesr    s>   YYr]!!"**-FF"I
CJJ

3JJ

3JJ

3MM2<<8LL"--8	: 4 bllBMM22A==LA::L!S!$AYq\((0AYq\((02q	IIfc"\177+14d3'4r@   c            
         t         j                  j                  d      } | j                  dd      }|d|z  z   }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        j                  ||d      }|d   d   j                  |      t        |d   d   D 	cg c]  }	|	j                  |       c}	      g|d<   t        j                  ||      }
t        ||
j                         t!        |
|dd        y c c}	w )	Nr   r%   r   r   rD   r   r   r   )rU   r   r   r   r   r   r   r   r   r)   r   r   tupler   r	   r   r   )r   r  r  r   r  r  r/   r  r=   rd   r  s              r>   test_iswt2_mixed_dtypesr
    s[   YY""1%F\\!QFF"I
CJJ

3JJ

3JJ

3MM2<<8LL"--8	: 4 bllBMM22A==LA::L1c1%AYq\((0fQilCAHHV,CDFq	JJvs#\177+14d3'4  Ds   "Gc            	         t         j                  j                  d      } | j                  ddd      }|d|z  z   }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        j                  ||d      }|d   j                  d|j                  z        }	|	j                  |      }	|d   j                         D 
ci c]  \  }
}|
|j                  |       c}}
|d<   |	|d   d|j                  z  <   t        j                  ||      }t!        ||j"                         t%        ||dd       " y c c}}
w )	Nr   r%   r   r   rD   ar   r   )rU   r   r   r   r   r   r   r   r   r)   r   popr   r   r   r   r	   r   r   )r   r  r  r   r  r  r/   r  r=   r  r   rd   r  s                r>   test_iswtn_mixed_dtypesr    s   YY""1%F\\!Q"FF"I
CJJ

3JJ

3JJ

3MM2<<8LL"--8	: 4 bllBMM22A==LA::L1c1%1IMM#,'HHV5;AY__5FGTQQ((Gq	"#q	#,JJvs#\177+14d3+4" Hs   G>c                      t        t        t        j                  g d       t	        j
                  d      ddd d f   } t        t        t        j                  | ddd       y )Nr   )r   r   r   r   r   r   )r
   r]   r)   r,   rU   r   r   r   s    r>   test_swt_zero_size_axesr  )  sF    *dhhE2 	!QA*diiEFr@   c                  B   d} t         j                  j                  d      }|j                  d      }t	        j
                  || dd      }|D cg c]  }t        j                  |       }}t        t        j                  |      t        j                  |             t        t         j                  j                  |      t         j                  j                  t        j                  |                   t        t        t        j
                  |dd       yc c}w )	zBVerify that the 1D SWT partitions variance among the coefficients.r   rR      Trm   bior2.2rp   N)rU   r   r   r   r)   r,   varr   sumlinalgro   rX   r   rH   )r   r   r/   r=   rd   	variancess         r>   )test_swt_variance_and_energy_preservationr  2  s     CYY""1%FSAXXa$T:F$*+q+I+BFF9%rvvay1 BIINN1%IINN2>>&#9:< dhh94@ ,s   Dc                     d} t         j                  j                  d      }|j                  dd      }t	        j
                  || ddd      }|d   j                         g}|dd	 D ](  }|D ]!  }|j                  |j                                # * |D cg c]  }t        j                  |       }}t        t        j                  |      t        j                  |             t        t         j                  j                  |      t         j                  j                  t        j                  |                   t        t        t        j
                  |d
dd       y	c c}w )zBVerify that the 2D SWT partitions variance among the coefficients.r   rR   @   r   Tr   rn   ro   r   r   Nr  r   ro   )rU   r   r   r   r)   r   ravelappendr  r   r  r  ro   rX   r   rH   )r   r   r/   r=   
coeff_listdr   r  s           r>   *test_swt2_variance_and_energy_preservationr!  E  s    CYY""1%FRAYYq#QDtDF)//#$JABZ ) 	)Aaggi(	)) %//q/I/BFF9%rvvay1 BIINN1%IINN2>>*#=>@ diiIQTJ 0s   E#c                     d} t         j                  j                  d      }|j                  dd      }t	        j
                  || ddd      }|d   j                         g}|dd	 D ]9  }|j                         D ]$  \  }}|j                  |j                                & ; |D cg c]  }t        j                  |       }}t        t        j                  |      t        j                  |             t        t         j                  j                  |      t         j                  j                  t        j                  |                   t        t         t        j
                  |d
dd       y	c c}w )zBVerify that the nD SWT partitions variance among the coefficients.r   rR   r  r   Tr  r   r   Nr  r  )rU   r   r   r   r)   r   r  r   r  r  r   r  r  ro   rX   r   rH   )	r   r   r/   r=   r  r   r   r   r  s	            r>   *test_swtn_variance_and_energy_preservationr#  \  s     CYY""1%FRAYYq#QDtDF)//#$JABZ )GGI 	)DAqaggi(	)) %//q/I/BFF9%rvvay1 BIINN1%IINN2>>*#=>@ diiIQTJ 0s   'E4c                     dt         j                  t         j                  dfdt         j                  t         j                  dfdt         j
                  t         j                  dffD ]r  \  } }}}t        j                  d| z        } ||ddd	
      }t        j                  |      \  }}}t        j                  ||||      } ||d      }	t        ||	       t y )Nr   r,   rD   r   r   r   )rF   r   T)r   rn   )output_format)r)   r,   r}   r   r   r   r   rU   r   ravel_coeffsunravel_coeffsr   )
r   _swt_iswt
ravel_typer/   rd   arrslicesshapesr   s
             r>   test_swt_ravel_and_unravelr.  s  s     $))U+		4::v.		4::v.*0 	%dE: GGFTM"F!6"//2VVVV:N!V1	r@   )N):rI   copyr   	itertoolsr   r   numpyrU   pytestnumpy.testingr   r   r   r	   r
   r   r)   pywt._extensions._swtr   int8r   r   r   r   r   r   r   r   r+   r?   rM   rf   r   r   r   r   r   markslowr   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r!  r#  r.  rL   r@   r>   <module>r8     s[     0     * WWbjj"**bjj",,]]	jj"**bjj"**bllmm
 

+@.5Ap<B#$5$CA  <  <F4@L>#)L +5 +5\4B 6M8
B46484<GA&K.K.r@   