
     eq                        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	 eej        gz  Zeej        gz  Zeej        efgz  Zn# e $ r Y nw xY w ej!                    Z!de!v re!"                    d           g Z#e!D ]nZ$ ej%                    5   ej&        de'            e( ej)        e$          ej*                  se#+                    e$           ddd           n# 1 swxY w Y   oe#D ]Z,e!"                    e,           d	 Z-d
 Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6e	j7        j8        d             Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd  ZFd! ZGd" ZHd# ZId$ ZJd% ZKe	j7        j8        d&             ZLd' ZMd( ZNd) ZOd* ZPd+ ZQd, ZRd- ZSd. ZTd/ ZUd0 ZVd1 ZWd2 ZXd3 ZYd4 ZZd5 Z[d6 Z\d7 Z]d8 Z^d9 Z_d: Z`d; Zad< Zbd= Zcd> Zdd? Zed@ ZfdA ZgdB ZhdC ZidD ZjdE ZkdF ZldG ZmdH ZndI ZodJ ZpdS )K    )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%<=dmeyignorec                  \   g d} t          j        d          }t          j        | |          \  }}}}t          |dg           t          |dg           t	          |ddg           t	          |g d           t          t          j        t          |           |          dk               d S )	N         r            db1ga{!@g'eֿg      @g      )g'er   gZo̙g'er   )pywtWaveletwavedecr   r   r	   dwt_max_levellen)xr   cA3cD3cD2cD1s         :lib/python3.11/site-packages/pywt/tests/test_multilevel.pytest_wavedecr'   <   s    !!!A
,u

Ca--Cc3j\***k]+++C"d$$$CCCCDDDDs1vvs++q011111    c                     t          t          t          j        t	          j        d          d           t          t          t          j        g d           g d} t          j        | d          }t          j        |          \  }}t          j        ||          }d}t          t          |t          j        |d           d S )N   haarr   r   "Unexpected detail coefficient type)
r   
ValueErrorr   waverecnponesr   coeffs_to_arrayarray_to_coeffsr   )r!   coeffsarrcoeff_slicescoeffs_from_arrmessages         r&   test_waverec_invalid_inputsr8   G   s    *dlBGAJJ??? *dlB777 	"!!A\!U##F,V44C*3==O2G
GT\?         r(   c                     t           j                            d          } |                     d          }t          D ]\  }}|                    |          }t          j        |          r8|d|                     d                              |j        j                  z  z  }t          j
        |d          }t          t          j        |d          |||           d S )N  r*                 ?r   atolrtol)r/   randomRandomStaterandndtypes_and_tolerancesastypeiscomplexobjrealdtyper   r   r   r.   rstatex0dttolr!   r3   s         r&   test_waverec_accuraciesrL   X   s    Y""4((F	aB( L LCIIbMM?1 	9FLLOO**16<8888Aa''VU33QSsKKKKKL Lr(   c                      g d} t          j        | d          }d |d<   d |d<   t          t          j        |d          j        t          |                      d S )Nr   r      r   )r   r   r	   r.   sizer    r!   r3   s     r&   test_waverec_nonerQ   c   s]    !!!A\!U##F F1IF1IDL'',c!ff55555r(   c                      g d} t          j        | d          }t          t          j        |d          | d           d S )N)r   r   r   r   r   r   r   -q=r>   )r   r   r   r.   rP   s     r&   test_waverec_odd_lengthrU   m   sE    A\!U##FDL//??????r(   c                      t          j        g d          } | dz   } t          j        | d          }t	          t          j        |d          | d           d S )Nr   r;   r   rS   rT   )r/   arrayr   r   r   r.   rP   s     r&   test_waverec_complexrX   s   sY    
***++A	BA\!U##FDL//??????r(   c                     t          j        d          } t          t          t                    D ]\  }}t          j        d|          }d                    |          }t          j        || d          }|D ]}t          |j
        |k    d|z              t          j        ||           }t          |j
        |k    d|z              d S )	Nr+   r*   rF   "wrong dtype returned for {0} inputrN   levelz	wavedec: z	waverec: )r   r   zip	dtypes_in
dtypes_outr/   r0   formatr   r	   rF   r.   )waveletdt_indt_outr!   errmsgr3   cx_roundtrips           r&   test_multilevel_dtypes_1drh   z   s    l6""GY
33 	C 	CvGAU###5<<UCCa222 	= 	=AAGv%{V';<<<<l6733!V+[6-ABBBB	C 	Cr(   c            	      <   t           j                            d          } |                     d          }t          D ]_}t
          j        j        D ]K}t          j        |||          }t          t          j
        |||          |t          t                     L`d S )Nr:   P   moder>   r=   )r/   r?   r@   rA   wavelistr   Modesmodesr   r   r.   
tol_singlerH   rrb   rl   r3   s        r&   test_waverec_all_wavelets_modesrt      s    Y""4((FRA A AJ$ 	A 	AD\!W4888FDLtDDDJZA A A A A	AA Ar(   c                     t           j                            d          } |                     dd          }t          D ]\  }}|                    |          }t          j        |          r9|d|                     dd                              |j        j                  z  z  }t          j
        |d          }t          t          |          dk               t          t          j        |d          |||           d S )Nr:   r   r;   r   r   r<   )r/   r?   r@   rA   rB   rC   rD   rE   rF   r   wavedec2r	   r    r   waverec2rG   s         r&   test_waverec2_accuraciesrx      s    Y""4((F	a		B( M MCIIbMM?1 	<FLLA&&--afl;;;;Aq%((Fq !!!fe44acLLLLLM Mr(   c                     t          j        d          } t          t          t                    D ]\  }}t          j        d|          }d                    |          }t          j        || d          \  }}}t          |j
        |k    d|z              |D ]}t          |j
        |k    d|z              |D ]}t          |j
        |k    d|z              t          j        |||g|           }	t          |	j
        |k    d|z              d S )	Nr+   r*   r*   rZ   r[   rN   r\   z
wavedec2: z
waverec2: )r   r   r^   r_   r`   r/   r0   ra   rv   r	   rF   rw   )
rb   rc   rd   r!   re   cAcoeffsD2coeffsD1rf   rg   s
             r&   test_multilevel_dtypes_2dr~      s0   l6""GY
33 D DvGF%(((5<<UCC!%q'!C!C!CHhF"L6$9::: 	> 	>AAGv%|f'<==== 	> 	>AAGv%|f'<====mR8$<gFF!V+\F-BCCCCD Dr(   c            	      >   t           j                            d          } |                     dd          }t          D ]_}t
          j        j        D ]K}t          j        |||          }t          t          j
        |||          |t          t                     L`d S Nr:   rj   `   rk   rm   )r/   r?   r@   rA   rn   r   ro   rp   rv   r   rw   rq   rr   s        r&    test_waverec2_all_wavelets_modesr           Y""4((FRA A AJ$ 	A 	AD]1gD999FDM&'EEEJZA A A A A	AA Ar(   c                      t          j        d          dz   } t          j        | d          }t	          t          |          dk               t          t          j        |d          | d           d S )Nr   r   r;   r   r   rS   rT   )r/   r0   r   rv   r	   r    r   rw   datar3   s     r&   test_wavedec2_complexr      se    76??RD]4''FCKK1DM&%00$UCCCCCCr(   c                  p    t          j        d          } t          t          t          j        | d           d S )Nr   r+   )r/   r0   r   r-   r   rv   r   s    r&   test_wavedec2_invalid_inputsr      s+    71::D*dmT6:::::r(   c                  h   t          t          t          j        t	          j        d          d           t          t          t          j        g d           t          j        t          j        fD ]D}  | t	          j        d          d          }d}t          t          |t          j        |d           Ed S Nrz   r+   r,   )	r   r-   r   rw   r/   r0   r   wavedecnr   dec_funcr3   r7   s      r&   test_waverec2_invalid_inputsr      s    *dmRWV__fEEE *dmR888 \4=1 $ $"'&//6226J"	$ 	$ 	$ 	$$ $r(   c                  "   t          j        d          } t          j        | d          }t	          |          }t	          |d                   |d<   t          j        d          |d         d<   t          t          t          j        |d           d S )Nrz   r   r   )   r   )	r/   r0   r   rv   listzerosr   r-   rw   rP   s     r&   "test_waverec2_coeff_shape_mismatchr      ss    
A]1e$$F &\\FVAYF1I8G$$F1IaL*dmVU;;;;;r(   c                      t          j        d          } t          j        | d          }t	          t          j        |d          | d           d S )N)
   r   r   rS   rT   )r/   r0   r   rv   r   rw   rP   s     r&   test_waverec2_odd_lengthr      sI    
A]1e$$FDM&%00!%@@@@@@r(   c                      t          j        d                              dd          } t          j        | d          }d|d<   t          | j        t          j        |d          j        k               d S )N   r   r   r   NNNr   )r/   arangereshaper   rv   r	   shaperw   rP   s     r&   test_waverec2_none_coeffsr      sc    
	"a##A]1e$$F"F1IAGt}VU3399:::::r(   c                  B   t           j                            d          } t          dd          D ]n} | j        d|z   }t          j        |d          }t          t          |          dk               t          t          j
        |d          |t                     od S )Nr:   r   r   )r   r   r   rT   )r/   r?   r@   rangerA   r   r   r	   r    r   waverecn
tol_double)rH   ndr!   r3   s       r&   test_waverecnr      s    Y""4((FAqkk J JFL%(#q%((Fq !!!fe44ajIIIII	J Jr(   c                     t          j        d          i i g} t          t          j        | d          j        d           t          t          j        | d          j        d           t          j        d          i dt          j        d          ig} t          j        d          i i dt          j        d          ig} t          t          j        | d          j        d           d S )NrN   rN   rN   r   r*   r*   r*   daar   r   r   )r   r   r   )r/   r0   r
   r   r   r   r3   s    r&   test_waverecn_empty_coeffr     s    gi  "b)Fvu--3Y???vu--3Y???gi  "ubgi.@.@&ABFgi  "b5"')2D2D*EFFvu--3\BBBBBr(   c                     d i g} t          t          t          j        | d           t	          j        d          i dd ig} t          t          t          j        | d           t	          j        d          t	          j        d          t	          j        d          dg} t          t          t          j        | d           t	          j        d          t	          j        d          t	          j        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/   r0   r   s    r&   test_waverecn_invalid_coeffsr     sS   BZF*dmVU;;; gi  "udm6F*dmVU;;; gi  "')*<*<*,')*<*<#> #> ?F*dmVU;;; gi  "')*<*<)+););#= #= >F*dmVU;;; wi3%	C5'SE7)LLMF*dmVU;;; *dmR88888r(   c                      t           j        t           j        fD ]D}  | t          j        d          d          }d}t          t          |t           j        |d           Ed S r   )r   r   rv   r/   r0   r   r-   r   r   s      r&   test_waverecn_invalid_inputsr   (  sh     \4=1 $ $"'&//6226J"	$ 	$ 	$ 	$$ $r(   c                  v    dggdggdggdggdg} t          t          j        | d          j        d           d S )Nr   r   r   r   )rN   rN   )r
   r   r   r   r   s    r&   test_waverecn_listsr   2  sK    ugugseWcUGDDEFvu--3V<<<<<r(   c                      t          j        d          dt          j        d          ig} t          t          t          j        | d           d S )Nr   adar   r   )r/   r0   r   r-   r   r   r   s    r&   test_waverecn_invalid_coeffs2r   8  s?    gi  5"'&//":;F*dmVU;;;;;r(   c                      t          j        d          } t          t          t          j        | d           t          j        d          } t          t          t          j        | dd           d S )Nr   r+   r   r\   )r/   rW   r   r-   r   r   r0   r   s    r&   test_wavedecn_invalid_inputsr   >  sU    8A;;D*dmT6::: 72;;D*dmT6DDDDDDr(   c            	      
   t          j        d                              dd          } d}t          j        t          j        t          j        g}t          j        t          j        t          j	        g}t          j                    5  t          j        dt                     t          ||          D ]:\  }}dD ]2} || d|d          } ||d|	          }t          | |||
           3;	 d d d            d S # 1 swxY w Y   d S )N@   r*   rS   r   )periodization	symmetricr+      rl   r]   rk   r<   )r/   r   r   r   r   rv   r   r.   rw   r   warningscatch_warningssimplefilterUserWarningr^   r   )	r   rK   	dec_funcs	rec_funcsr   rec_funcrl   r3   rs   s	            r&   test_wavedecn_many_levelsr   H  sg   9R==  A&&D
Ct}dm<It}dm<I		 	"	" A Ah444"%i";"; 	A 	AHh6 A A%XdFRHHHF d;;;A#D!#C@@@@@A	AA A A A A A A A A A A A A A A A A As   A&C88C<?C<c                     t           j                            d          } |                     ddd          }t          D ]\  }}|                    |          }t          j        |          r:|d|                     ddd                              |j        j                  z  z  }t          j
        |                    |          d          }t          t          j        |d          |||           d S )Nr:   r   r;   r   r<   )r/   r?   r@   rA   rB   rC   rD   rE   rF   r   r   r   r   rG   s         r&   test_waverecn_accuraciesr   W  s    Y""4((F	aA		B( M MCIIbMM?1 	?FLLAq))00>>>>Aqxx||U33fe44acLLLLLM Mr(   c                  v   t          j        d          } t          t          t                    D ]\  }}t          j        d|          }d                    |          }t          j        || d          \  }}}t          |j
        |k    d|z              |                                D ]!\  }}	t          |	j
        |k    d|z              "|                                D ]!\  }}	t          |	j
        |k    d|z              "t          j        |||g|           }
t          |
j
        |k    d|z              
d S )	Nr+   rz   rZ   r[   rN   r\   z
wavedecn: z
waverecn: )r   r   r^   r_   r`   r/   r0   ra   r   r	   rF   itemsr   )rb   rc   rd   r!   re   r{   r|   r}   keyrf   rg   s              r&   test_multilevel_dtypes_ndr   c  sL   l6""GY
33 D DvGF%(((5<<UCC!%q'!C!C!CHhF"L6$9:::nn&& 	> 	>FCAGv%|f'<====nn&& 	> 	>FCAGv%|f'<====mR8$<gFF!V+\F-BCCCCD Dr(   c                      t          j        d          dz   } t          j        | d          }t	          t          j        |d          | d           d S )Nr   r;   r   rS   rT   )r/   r0   r   r   r   r   r   s     r&   test_wavedecn_complexr   s  sN    79"D]4''FDM&%00$UCCCCCCr(   c                      t          j        d          } t          D ]S\  }}t          j        |                     |          d          }t          t          j        |d          | ||           Td S )Nr   r   r<   )r/   r0   rB   r   r   rC   r   r   )r!   rJ   rK   r3   s       r&   test_waverecn_dtypesr   y  ss    
	A( M MCqxx||U33fe44acLLLLLM Mr(   c            	      >   t           j                            d          } |                     dd          }t          D ]_}t
          j        j        D ]K}t          j        |||          }t          t          j
        |||          |t          t                     L`d S r   )r/   r?   r@   rA   rn   r   ro   rp   r   r   r   rq   rr   s        r&    test_waverecn_all_wavelets_modesr     r   r(   c                  ~   t          j        d                              dd          g} t          j        |           \  }}t          || d                    t          |||d                             t          t          t          j        g            t          t          t          j        | d         gdz             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          j        dg          t          t          j        dg          t          j        dg                    g}t          t          t          j        |           d S )Nr*   rN   r   r   r   )drf   )
r/   r   r   r   r1   r   r   r-   rW   dict)a_coeffsr4   
arr_slicesr3   s       r&   test_coeffs_to_arrayr     sw   	!$$Q**-H*844OCC!%%%CZ]+,,,*d2B777*d2Xa[Oa4GHHH*d2Xa[6>qk_5F G G G *d2TH===*d2X5G5I J J J *d2Xt4DEEE hsmmTBHaSMMRXqc]]CCCDF*d2F;;;;;r(   c            	         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         z   }t          j        j        D ]}t          D ]}t          j        |          }t          j        t          j        |j                  |j                  }|d	k    rN ||         d
         |||          }	t          j        |	          \  }
}t          j        |
||          } ||         d         |||          }t+          ||dd           ČΌd S )Nr:   r   r   decrecrN   r   r   rv   r      r   r   r   rk   output_formatr   -C6?rm   )r/   r?   r@   r   r   r.   rv   rw   r   r   rA   ro   rp   rn   r   r   minr   dec_lenr1   r2   r   )rngparamsNfx1rl   wavewmaxlevelr3   	coeff_arrr5   coeffs2x1rs                 r&    test_wavedecn_coeff_reshape_evenr     s    )


%
%C dlKK !$-NN !$-NNP PF 	A ? ?SY!vay~-/J$ 	? 	?D  ? ?L&&-bfRX.>.>	JJq==)5)"ad;;;*.*>v*F*F'	<.y,=>@ @ @&fQi&w===Cd>>>>>?	?? ?r(   c                  L   t           j                            d          } d}t          j        d          }d}d}dD ]} | j        |g|z   }t          j        ||||          }t          j        ||          \  }}	| t          t          t          j        |           t          t          t          j        |d	           t          t          t          j        |d
           t          j
        ||	          }
t          j        |
|||          }t          ||dd           d S )Nr:   r   db2r   r   ))r   r   r   r   r   r   rN   r   rN   Nrl   axesr   r   r   rN   r    r   rm   )r/   r?   r@   r   r   rA   r   r1   r   r-   r2   r   r   )r   rl   r   r   ndimr   r   r3   r   r5   r   r   s               r&   'test_wavedecn_coeff_reshape_axes_subsetr    s?    )


%
%CDUA
ADD 7 7SY!t%r14d;;;"&"6vD"I"I"I	<*d&:FCCC 	j$"6'	) 	) 	) 	)j$"6	 	 	 	 &y,??mGQT===Cd66666#7 7r(   c                  $   t           j                            d          } |                     dd          }d}t	          j        |d|          }t          t          t          j        |d            t	          j        |t           j	                  \  }}t          j
        t          j        |                    }t          |dk               t	          j        |d          \  }}t          t          j
        t          j        |                    dk               t          t          j
        |dk              |k               t	          j        |d|          }t	          j        |d           \  }}t          |j        |j                   d S )	Nr:       r   r   rk   )paddingr   r+   )r/   r?   r@   rA   r   r   r   r-   r1   nansumisnanr	   r
   r   )r   r   rl   r3   r   r5   npadcoeffs_haars           r&   test_coeffs_to_array_paddingr    sZ   
)


%
%C	2r		BD]2u4000F *d2FDIIII #2626JJJI|6"(9%%&&DD1H #261EEEI|BF28I&&''1,---BF9>""d*+++ -F666K"2;MMMI|"(+++++r(   c                  \   t           j                            d          } |                     dd          }t          j        j        D ]}dD ]}t	          j        |          }t	          j        t          j	        |j
                  |j                  }|dk    rNt	          j        |||          }t	          j        |          \  }}t	          j        ||          }	t	          j        |	||          }
|
t!          d |j
        D                                }
t#          ||
dd	           d S )
Nr:   #   !   r+   r   rk   c                 ,    g | ]}t          |          S r  slice.0ss     r&   
<listcomp>z3test_waverecn_coeff_reshape_odd.<locals>.<listcomp>      888!U1XX888r(   r   rm   )r/   r?   r@   rA   r   ro   rp   r   r   r   r   r   r   r1   r2   r   tupler   )r   r   rl   r   r   r   r3   r   r5   r   r   s              r&   test_waverecn_coeff_reshape_oddr    s)    )


%
%C	2r		B
  ; ; 	; 	;DT""A)"&*:*:AIFFH1}}]2qt444F&*&:6&B&B#I|*9lCCG-666Ce88rx88899:CB$T:::::	;; ;r(   c                     t          j        t          j        d          d          } t          j        |           \  }}t          t          t           j        |g            t          t          t           j        ||d           d S )NrN   r+   r   )r   r   r/   r0   r1   r   r-   r2   )r3   r4   r   s      r&   #test_array_to_coeffs_invalid_inputsr    si    ]271::v..F*622OC *d2C<<< *d2CUKKKKKr(   c            	         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         z   }t          j        j        D ]}t          D ]}t          j        |          }t          j        t          j        |j                  |j                  }|d	k    rN ||         d
         |||          }	t          j        |	          \  }
}}t          j        |
|||          } ||         d         |||          }t+          ||dd           ƌЌd S )Nr:   r   r   rN   r   r      r   r   r   rk   r   r   r   rm   )r/   r?   r@   r   r   r.   rv   rw   r   r   rA   ro   rp   rn   r   r   r   r   r   ravel_coeffsunravel_coeffsr   )r   r   r   r   r   rl   r   r   r   r3   r   slicesshapesr   r   s                  r&   test_wavedecn_coeff_ravelr%    s    )


%
%C dlKK !$-NN !$-NNP PF 	A ? ?SY!vay~-/J$ 	? 	?D  ? ?L&&-bfRX.>.>	JJq==)5)"ad;;;,0,=f,E,E)	66-i<=? ? ?&fQi&w===Cd>>>>>?	?? ?r(   c                  b   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         z   }t          j        j        D ]}t          j        d	          } ||         d
         |||d          }t          j        |          \  }}	}
t          j        ||	|
|          } ||         d         |||          }t!          ||dd           d S )Nr:   r   r   rN   r   r   r   r   r   r   r   r   r   r   rk   r   rm   )r/   r?   r@   r   r   r.   rv   rw   r   r   rA   ro   rp   r   r!  r"  r   )r   r   r   r   r   rl   r   r3   r   r#  r$  r   r   s                r&   $test_wavedecn_coeff_ravel_zero_levelr'  2  sP    )


%
%C dlKK !$-NN !$-NNP PF 	A ; ;SY!vay~-/J$ 		; 		;DU##A%VAYu%b!$a@@@F(,(9&(A(A%Ivv))VV89; ; ;G"&)E"7AD999CB$T:::::		;; ;r(   c                  `   t           j                            d          } |                     dd          }t          j        j        D ]}dD ]}t	          j        |          }t	          j        t          j	        |j
                  |j                  }|dk    rNt	          j        |||          }t	          j        |          \  }}}	t	          j        |||	          }
t	          j        |
||          }|t!          d |j
        D                                }t#          ||dd	           d S )
Nr:   r  r  r  r   rk   c                 ,    g | ]}t          |          S r  r  r  s     r&   r  z1test_waverecn_coeff_ravel_odd.<locals>.<listcomp>Y  r  r(   r   rm   )r/   r?   r@   rA   r   ro   rp   r   r   r   r   r   r   r!  r"  r   r  r   )r   r   rl   r   r   r   r3   r   r#  r$  r   r   s               r&   test_waverecn_coeff_ravel_oddr*  I  s-    )


%
%C	2r		B
  ; ; 	; 	;DT""A)"&*:*:AIFFH1}}]2qt444F(,(9&(A(A%Ivv))VVDDG-666Ce88rx88899:CB$T:::::	;; ;r(   c                     t          j        d          } t          j        d          }t          j        | |          }d |dd          D             |dd <   t          j        |          \  }}}t          j        |||d          }t          j        ||          }t          | |dd           d	 |dd          D             |dd <   t          t          t          j        |           d S )
Nrz   r+   c                 ,    g | ]}t          |          S r  r   r  rf   s     r&   r  z2test_ravel_wavedec2_with_lists.<locals>.<listcomp>c  s    ...a$q''...r(   r   rv   r   r   rm   c                 <    g | ]}t          |d d                   S )Nr   r-  r.  s     r&   r  z2test_ravel_wavedec2_with_lists.<locals>.<listcomp>k  s&    3331$q"v,,333r(   )r/   r0   r   r   rv   r!  r"  rw   r   r   r-   )r   wavr3   r   r#  r$  r   r   s           r&   test_ravel_wavedec2_with_listsr1  ]  s    	B
,v

C]2s##F /.6!"":...F122J $ 1& 9 9Ivv!)VV0:< < <G
-
%
%CB$T2222 43qrr
333F122J*d/88888r(   c                  r   t          j        t          j        d          d          } d | d<   t	          t
          t           j        |            t          j        t          j        d          d          } d| d<   t	          t
          t           j        |            g d| d<   t	          t
          t           j        |            d | d<   t	          t
          t           j        |            t          j        t          j        d          d          } d | d         d<   t	          t
          t           j        |            d S )Nr*   r+   r   rz   r   r   ddd)	r   r   r/   r0   r   r-   r!  rv   r   r   s    r&   test_ravel_invalid_inputr4  o  s    \"'!**f--FF1I*d/888 ]276??F33F"F1I*d/888"""F1I*d/888F1I*d/888 ]279--v66FF1Ie*d/88888r(   c                     t          j        t          j        d          d          } t          j        |           \  }}}t          t          t           j        ||g            t          t          t           j        |g |           t          t          t           j        ||d d         |           t          t          t           j        |||d           d S )NrN   r+   r   r   )r   r   r/   r0   r!  r   r-   r"  )r3   r4   r#  r$  s       r&   test_unravel_invalid_inputsr6    s    ]271::v..F+F33C *d13CCC*d13FCCC *d13ssVLLL *d13NNNNNr(   c            	         t          j        d          } dD ]C}dD ]<}t           j        j        D ]&}t          j        t          j        |          | ||          }t          j        || ||          }t          |d         j	        |d                    |d         j
        }t          dt          |                    D ]M}||                                         D ]0\  }}	||	j
        z  }t          ||         |         |	j	                   1Nt          j        |          }
t          |
|           t          j        |          }
t          |
|           (>Ed S )Nr   )r  )r   r  )r         Nr   r   r   r   r   )r   r   ro   rp   r   r/   r0   wavedecn_shapesr
   r   rO   r   r    r   wavedecn_size)r0  
data_shaper   rl   r3   r$  expected_sizer]   kvrO   s              r&   test_wavedecn_shapes_and_sizerB    s   
,u

C5 2 2
! 	2 	2D
( 2 2rwz':':C,0t= = = -j#37dD D D VAY_fQi888 &q	"1c&kk22 @ @E &u 3 3 5 5 @ @1%/$VE]1%5qw????@
 )&11T=111)&11T=1111)2	22 2r(   c                  >   t          j        d          dfD ]} dD ]}dD ]{}t           j        j        D ]g}t          j        t          j        |          | ||          }t          j        || |          }t          t          |dd                    |           h|d S )Nr   sym8r8  r;  r   r   )
r   r   ro   rp   r   r/   r0   dwtn_max_levelr
   r    )r0  r>  r   rl   r3   max_levs         r&   test_dwtn_max_levelrG    s    U##V, ; ;9 	; 	;J% ; ; J, ; ;D!]27:+>+>044A A AF"1*c4HHG VABBZ'::::	;;	;; ;r(   c                      t           j                            d          } |                     d          }dD ]B}t	          j        |d|          }t	          j        |d|          }t          ||d           Cd S )Nr   r   r   r   rN   r+   axis+=r=   r/   r?   r@   standard_normalr   r   r.   r   rH   r   rK  coefsr   s        r&   test_waverec_axes_subsetsrR    s    Y""1%%F!!),,D / /T6555l5&t444T...../ /r(   c                      t           j                            d          } |                     d          }dD ]B}t	          j        |d|          }t	          j        |d|          }t          ||d           Cd S )Nr   r   r   r   r   rJ  rL  rM  rN  rP  s        r&   test_waverec_axis_db2rU    s    Y""1%%F!!(++D / /T5t444l5%d333T...../ /r(   c                     t           j                            d          } |                     d          }t	          dd          D ]B}t          j        |d|          }t          j        |d|          }t          ||d           Cd S )	Nr   r   rI  rN   r+   r  rL  rM  )	r/   r?   r@   rO  r   r   rv   rw   r   rH   r   r   rQ  r   s        r&   test_waverec2_axes_subsetsrX    s    Y""1%%F!!),,DY** / /dF666mE6555T...../ /r(   c                     t           j                            d          } |                     d          }t	          dd          D ]B}t          j        |d|          }t          j        |d|          }t          ||d           Cd S )	Nr   )r*   r*   r*   r*   r  r   r+   r  rL  rM  )	r/   r?   r@   rO  r   r   r   r   r   rW  s        r&   test_waverecn_axes_subsetsrZ    s    Y""1%%F!!,//D\1-- / /dF666mE6555T...../ /r(   c                      t           j                            d          } |                     d          }dD ]B}t	          j        |d|          }t	          j        |d|          }t          ||d           Cd S )Nr   rz   r   r+   r  rL  rM  )r/   r?   r@   rO  r   r   r   r   rP  s        r&   test_waverecn_int_axisr\    s    Y""1%%F!!&))D / /dF666mE6555T...../ /r(   c                  t    t          j        d          } t          t          t          j        | dd           d S Nr   r+   r   rJ  )r/   r0   r   r-   r   r   r   s    r&   test_wavedec_axis_errorr_    s0    71::D*dlD&qAAAAAAr(   c                      t          j        t          j        d          d          } t	          t
          t           j        | dd           d S r^  r   r   r/   r0   r   r-   r.   rf   s    r&   test_waverec_axis_errorrc    s<    RWQZZ((A*dlAvA>>>>>>r(   c                      t          j        t          j        d          d          } | d         d d         | d<   t	          t
          t           j        | dd           d S )Nr   r+   r   r   r   rJ  ra  rb  s    r&   !test_waverec_shape_mismatch_errorre    sQ    RWR[[&))AQ49AaD*dlAvA>>>>>>r(   c                      t          j        d          } t          t          t          j        | dd           t          t          t          j        | dd           t          t          t          j        | dd           d S Nr   r+   r   r  )r   r   r   )r/   r0   r   	TypeErrorr   rv   r-   r   s    r&   test_wavedec2_axes_errorsri    sf    76??D)T]D&qAAAA*dmT6GGGG*dmT6GGGGGGr(   c                  *   t          j        d          } t          j        | d          }t	          t
          t          j        |dd           t	          t          t          j        |dd           t	          t          t          j        |dd           d S rg  )r/   r0   r   rv   r   rh  rw   r-   r   rf   s     r&   test_waverec2_axes_errorsrl  	  sw    76??DdF##A)T]AvA>>>>*dmQVDDDD*dmQVDDDDDDr(   c                      t          j        d          } t          t          t          j        | dd           t          t          t          j        | dd           d S Nr   r+   r   r   r  )r   r   r   )r/   r0   r   r-   r   r   r   s    r&   test_wavedecn_axes_errorsrp    sM    79D*dmT6GGGG*dmT6	JJJJJJr(   c                      t          j        d          } t          j        | d          }t	          t
          t          j        |dd           t	          t
          t          j        |dd           d S rn  )r/   r0   r   r   r   r-   r   rk  s     r&   test_waverecn_axes_errorsrr    s^    79DdF##A*dmQVDDDD*dmQYGGGGGGr(   c            	         t           j                            d          } |                     ddd          }t	          j        d          ddf}d t          |j        |          D             }dd	t          j        j	        j
        j        f}t	          j        |||          }t          t	          j        |||          |d
           t          t!          |          t#          |dd                               t	          j        ||d d         |          }t          t	          j        ||d d         |          |d
           t	          j        |||d d                   }t          t	          j        |||d d                   |d
           t%          t&          t          j        ||d d                    t%          t&          t          j        |||d d                    t%          t&          t          j        ||d d                    t%          t&          t          j        |||d d                    |d         }t	          j        ||d d         |d d                   }t          t	          j        ||d d         |d d                   |d
           t          t!          |d d                   t#          |dd                               d S )Nr:   r   r   r+   sym2r   c                 T    g | ]%\  }}t           j                            ||          &S r  )r   _dwtr   )r  r   nfs      r&   r  z4test_per_axis_wavelets_and_modes.<locals>.<listcomp>.  s:     - - -fb"$)))"b11 - - -r(   r   r   rL  rM  r   rN   rk   ).r   )r/   r?   r@   rA   r   r   r^   r   _extensions_pywtro   reflectr   r   r   r
   r   r    r   r-   rv   rw   )rH   r   wavelets
max_levelsrp   rQ  data2coefs2s           r&    test_per_axis_wavelets_and_modesr  %  s   Y""4((F<<B##D V$$fe4H- -dj(++- - -J /#)13E M$%00EDM%5994eLLLLZ#eABBi..111M$!e44EDM%"1"u==t        M$%)44EDM%5!9==t        *dmT8BQB<@@@*dmT8%)LLLL*dmUHRaRLAAA*dmUH5!9MMMM LE]5(2A2,bqb	::FDM&(2A2,bqb	BBE       Z^$$c&*oo66666r(   c            	      h   t           j                            d          } t          dd          D ] }t	          t
          t                    D ]\  }}dD ]}|                     d|z            }|                    |          }t          j
        |d|          }t          j        |          }|j        j        t           j        t           j        fv rt!          ||dd	           nt!          ||d
d
	           t#          |j        j        |k               t#          |j        |k               یd S )Nr   r   r   )r   Nr*   r+   levelsr   rm   rL  )r/   r?   r@   r   r^   r_   r`   rO  rC   r   
fswavedecn
fswaverecnrE   rF   float32float16r   r	   r3   )rH   r  rc   rd   r  r   Tr   s           r&   $test_fswavedecn_fswaverecn_roundtripr  Q  s5    Y""1%%Fa - - J77 	- 	-ME6# 
- 
---eDj99{{5))OD&@@@oa((9?rz2:&>>>#CDtDDDDD#CEFFFF&0111	V+,,,,
-	-- -r(   c                  "   t           j                            d          } d}|                     d|z            }t	          j        |dd          }t          |j        |           t	          j        |          }t          |j        |           d S )Nr   rN   r  r+   r  )	r/   r?   r@   rO  r   r  r   r3   r  rH   r  r   r  r   s        r&   &test_fswavedecn_fswaverecn_zero_levelsr  d  s    Y""1%%FD!!%*--DfQ///Aqx&&&
/!

Cqx%%%%%r(   c                  6   t           j                            d          } d}|                     d|z            }t	          j        |dd          }t	          j        |          }t          ||d           t          t          t          j        |dd	           t          t          t          j        |dd
           t          t          t          j        |dt          t          j        t          j        |j                                      dz              d S )Nr   r   r   r+   )r   rN   r   r  rL  rM  ro  )r   r   r   r   r   )r/   r?   r@   rO  r   r  r  r   r   r-   r   r   intlog2r   r   r  s        r&   *test_fswavedecn_fswaverecn_variable_levelsr  o  s    Y""1%%FD!!&+..DfY777A
/!

CCE**** *dotVFKKKK*dotVLQQQQ dotVBGBF4:$6$67788:< < < < < <r(   c            	      p   t           j                            d          } d}|                     d|z            }d}d}t	          j        |||          }t          |          D ]Q}t          t          |j	        |                   t	          j
        |j        |         ||                   dz              Rt	          j        |          }t          ||d	           t          t          t          j        ||d d
                    t          t          t          j        ||d         |d d
                    d S )Nr   r   r  )r+   r   sym3)periodicr   r   )rb   rl   r   rL  rM  rN   rk   )r/   r?   r@   rO  r   r  r   r
   r    r5   r   r   r  r   r   r-   )rH   r  r   r{  rp   r  axr   s           r&   6test_fswavedecn_fswaverecn_variable_wavelets_and_modesr    s*   Y""1%%FD!!&+..D&H6EhU;;;ADkk I IS+,,'
2EEaG	I 	I 	I 	I /!

CCE**** *dotXbqb\BBB *dotXa[uRaRyQQQQQQr(   c                  T   t           j                            d          } |                     d          }t	          dd          D ]?}t          j        |d|          }t          j        |          }t          ||d           @t          t          t
          j        |dd	           d
S )z.Fully separable DWT over only a subset of axesr   )r   r*   r   r  r  r   r+   r  rL  rM  )r   r   N)r/   r?   r@   rO  r   r   r  r  r   r   r-   )rH   r   r   r  r   s        r&   'test_fswavedecn_fswaverecn_axes_subsetsr    s    Y""1%%F!!.11D\1-- / /OD&t444oa  T..... *dotV&IIIIIIr(   c                     t          j        d          } d}t          j        | d|          }d| j        z  }t          ||         |j                   |                                }t          ||v           |D ]$}||         }t          |j        | j                   %t          j
        |          ||<   t          t          |j        |t          j        t          d |j        D                                            t#          t$          |j        |t          j
        |                              t           j                             t          |j        j        | j                   d S )N)r  r  r   rt  r  r   c                     g | ]}|d z   S r   r  r  s     r&   r  z)test_fswavedecnresult.<locals>.<listcomp>  s    $<$<$<qQU$<$<$<r(   )r/   r0   r   r  r  r   approxdetail_keysr	   r
   
zeros_liker   r-   __setitem__r   r  r   r   r   rC   r  r3   )r   r  result
approx_keydkeysr@  r   s          r&   test_fswavedecnresultr    sZ   78DF_T6&999F "Jvj)6=999  EJe#$$$  ( (1IQVTY'''' a  F1I *f0RXe$<$<AG$<$<$<==>>@ @ @ f0BM!$$++BJ779 9 9 #TY/////r(   c                     t          j        d          } t          t          j        t          j        t          j        gt          j        t          j        t          j	        g          D ]Z\  }}dt          j
        d          fD ]>}t          t          || |            || d          }t          t          |||           ?[d S )NrT  morl)rb   r   )r/   r0   r^   r   r   rv   r   r.   rw   r   DiscreteContinuousWaveletr   r-   )r   dec_funrec_funcwaverf   s        r&    test_error_on_continuous_waveletr    s    78Dt}dm L!%t}dm LN N A Ad<VDDE 	A 	AE*gtUCCCCe$$A*gq%@@@@@		AA Ar(   c            	         t          j        d          d} t          j        t          j        fD ]h}dD ]c} || |          }t          j        fdt          ||           D                       }t          t          |dd                    |           didD ]i}t          j        | |         |f          }t          t          |dd                    t          j	        j
        |         | |                              jd S )N)   r  r   )db8r   )r   )rN   r   r   r  c                 V    g | ]%\  }}t          j        j        |         |          &S r  )r   r   r   )r  r  r0  r   s      r&   r  z&test_default_level.<locals>.<listcomp>  sF     A A A")"c #0BEE A A Ar(   r   r   )r/   r0   r   rv   r   r   r^   r
   r    r   r   )rb   r   r   rf   rF  r  r   s         @r&   test_default_levelr    sD   7<  DG]DM2 . ., 	. 	.DwT222Af A A A A-0w-?-?A A A B BGQqrrUW----		.  F FM$2&999S122ZZ'
2DD	F 	F 	F 	FF Fr(   c                  f   t           j                            d          } t          j        t          j        dft          j        t          j        dft          j        t          j	        dffD ]E\  }}} | j
        | } ||d          }|d                             t           j                  |d<    ||d          }t          ||dd           t          |j        t           j                   |d|z  z   } ||d          }|d                             t           j                  |d<    ||d          }t          ||dd           t          |j        t           j                   |j        d	k    rP|d                             t           j                  |d<   |d	                             t           j                  |d	<   |j        d
k    rJ|d                             t           j                  |d<   t)          d |d	         D                       |d	<   |j        dk    rO|d                             t           j                  |d<   d |d	                                         D             |d	<    ||d          }t          ||dd           t          |j        t           j                   Gd S )Nr   r  rz   r   r   gHz>rm   r;   r   rN   c                 L    g | ]!}|                     t          j                  "S r  rC   r/   	complex64)r  rA  s     r&   r  z0test_waverec_mixed_precision.<locals>.<listcomp>  s&    III!qxx55IIIr(   r   c                 T    i | ]%\  }}||                     t          j                  &S r  r  )r  r@  rA  s      r&   
<dictcomp>z0test_waverec_mixed_precision.<locals>.<dictcomp>  s<     8 8 8!Q AHHR\22 8 8 8r(   )r/   r?   r@   r   r   r.   rv   rw   r   r   rA   rC   r  r   r
   rF   float64r  
complex128r  r  r   )rH   funcifuncr   r!   coeffs_realrs   r3   s           r&   test_waverec_mixed_precisionr    s   Y""1%%F $dlEB $t}fE $t}iHJ "- "-eU FL% d1enn %Q..rz::AE+u%%14d3333QWbj)))1Ha 1I$$R\22q	E&%  14d3333QWbm,,, 6Q;;q	((77F1Iq	((66F1I6Q;;q	((77F1IIIvayIIIJJF1I6Q;;q	((77F1I8 8%+AY__%6%68 8 8F1IE&%  14d3333QWbm,,,,E"- "-r(   )q
__future__r   r   r   r   	itertoolsr   numpyr/   pytestnumpy.testingr   r   r	   r
   r   r   r   r   r   int8r  r  r  r  r  r_   r`   rq   r   rB   
complex256AttributeErrorrn   removedel_listrb   r   r   FutureWarning
isinstancer  r   appenddel_indr'   r8   rL   rQ   rU   rX   rh   rt   rx   r~   markslowr   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*  r1  r4  r6  rB  rG  rR  rU  rX  rZ  r\  r_  rc  re  ri  rl  rp  rr  r  r  r  r  r  r  r  r  r  r  r  r(   r&   <module>r     s9   A @ @ @ @ @ @ @ @ @  " " " " " "     = = = = = = = = = = = = = = = = = = = =  Wbj"*bj",]	j"*bj"*blm
 

*j1BJ
3K*j1BGZ3H,
3-46 	"-""I2=##Jr}j9<< 	 	 	D	
 4=??	XOOF  % %G	 	 	"	" % %h666z8$8AA,( ( 	%OOG$$$	% % % % % % % % % % % % % % %
   GOOG2 2 2     "L L L6 6 6@ @ @@ @ @C C CA A A	M 	M 	MD D D  A A AD D D; ; ;$ $ $< < <A A A; ; ;J J JC C C9 9 96$ $ $= = =< < <E E EA A A	M 	M 	MD D D D D DM M M A A A< < <4? ? ?67 7 7:, , ,4; ; ;(L L L? ? ?6; ; ;.; ; ;(9 9 9$9 9 9*O O O2 2 26	; 	; 	;/ / // / // / // / // / /B B B? ? ?? ? ?H H HE E EK K KH H H'7 '7 '7X- - -&& & &< < <$R R R.J J J0 0 0B	A 	A 	AF F F"$- $- $- $- $-s%   8#C C$#C$$AE66E:	=E:	