
     eU:                        d dl mZmZmZ d dlZd dlmZ d dlm	Z	m
Z
mZmZ d dlZej        ej        ej        ej        ej        ej        gZej        ej        ej        ej        ej        ej        gZ	 eej        gz  Zeej        gz  Zn# e$ r Y nw xY wd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2dS )     )divisionprint_functionabsolute_importN)combinations)assert_allcloseassert_assert_raisesassert_equalc                      t          j        g dd           t                      } t          t          t           j        | d           t          t
          t           j        dd           d S )N)            haarr   )pywtdwtndictr	   	TypeError
ValueError)datas    8lib/python3.11/site-packages/pywt/tests/test_multidim.pytest_dwtn_inputr      sS    IlllF###66D)TYf555*diF33333    c            	      0   t          j        g dg dg dg dgg dg dg dg dgg          } t          j        d	          }t          j        j        D ]A}t          j        | ||
          }t          | t          j        |||
          dd           Bd S )Nr   r   r      r   r   r   r      r   r   r   r      r   !   r   	   r   r      r   r$   r   r   r   r   r   r   r            4   r'   r    r   r(   r   r*   r)   r    r   r   r)   N   r(   r   r   modevIh%<=rtolatol)	nparrayr   WaveletModesmodesr   r   idwtn)r   waveletr/   ds       r   test_3D_reconstructr<   $   s    8													 
												  ! !D l6""G
  0 0IdG$///djG$???"	0 	0 	0 	0 	00 0r   c            	         t           j                            d          } |                     dd          }t	          j                    }d|v r|                    d           |D ]}|dv rt          t	          j        |          t          j	                  rSt          j
        j        D ]A}t	          j        |||          }t          t	          j        |||          |dd           Bd S )N     dmey)cmorshanfbspr.   Hz>r1   )r4   randomRandomStaterandnr   wavelistremove
isinstanceDiscreteContinuousWaveletr6   r7   r8   r   r   r9   )rstaterrH   r:   r/   coeffss         r   test_dwdtn_idwtn_allwaveletsrO   6   s    Y""4((FRA}H 9 9...d4W==t|LL 	9
( 9 91gD999
67 F F F !49 9 9 9 99 9r   c            	         t          j        d          } dD ]}t          j        g dg dg dg|          }t           j        j        D ]}t          j        ||           }t          j        d|j                  }||d d dd d d	f<   t          j        |d d dd d d	f         |           }|	                                D ]}t          ||         ||                    d S )
Nr   float32float64r   r   r   r)   r   r   r   r#   dtype)r   r(   r   )r   r6   r4   r5   r7   r8   r   onesrV   keysr   )r:   rV   r   r/   expectedstridedstrided_dwtnkeys           r   test_strider^   H   s)   l6""G' B Bx++++++---/ $% % %
 J$ 	B 	BDyw//HggTZ888G!%GDDbD##A#I9WTTrT33Q3Y%7AAL}} B BS 18C=AAAAB	BB Br   c            
         t          j        d          } dD ]}t          j        g dg dg dg|          }t           j        j        D ]}t          j        ||           }t          j        dt          j        |j        dfd	|j        j	        fd
d                    }||d d <   t          j        |d         |           }|
                                D ]}t          ||         ||                    d S )Nr   rQ   r   rT   r#   rU   )r   r)   r   byte)r   padT)alignr   )r   r6   r4   r5   r7   r8   r   rX   rV   itemsizerY   r   )r:   rV   r   r/   rZ   paddedpadded_dwtnr]   s           r   test_byte_offsetrf   Z   sL   l6""G' A Ax++++++---/ $% % %
 J$ 	A 	ADyw//HWV28dj!_=CTZEX<Y5[ 5[:>,@ ,@ ,@ A A AF F111I)F6NG<<K}} A AC 0(3-@@@@A	AA Ar   c                  R   t          j        g dg dg dg dgg dg dg dg dgg          } | d	z   } t          j        d
          }t          j        | |          }t          d | j        D                       }t          | t          j        ||          |         dd           d S )Nr   r   r   r#   r%   r&   r+   r,                 ?r   c                 .    g | ]}t          d |          S )N)slice).0ss     r   
<listcomp>z/test_3D_reconstruct_complex.<locals>.<listcomp>}   s     ???qE$NN???r   r0   r1   )	r4   r5   r   r6   r   tupleshaper   r9   )r   r:   r;   original_shapes       r   test_3D_reconstruct_complexrq   m   s    8													 
												  ! !D "9Dl6""G	$  A??DJ???@@ND$*Q00@U, , , , , ,r   c            	      Z   t          j        g dg dg dg          } t          j        d          }t          j        | |          \  }\  }}}||||d}t          j        j        D ]D}t          t          j        ||||ff||          t          j	        |||          dd           Ed S )	Nr   rT   r#   r   aadaadddr.   +=r1   
r4   r5   r   r6   dwt2r7   r8   r   idwt2r9   r   r:   LLHLLHHHr;   r/   s           r   test_idwtn_idwt2r      s    8  D
 l6""Gyw//BR2R00A
  0 0
BR#5wTJJJ
1gD999"	0 	0 	0 	0 	00 0r   c            	      d   t          j        g dg dg dg          } | dz   } t          j        d          }t          j        | |          \  }\  }}}||||d}t          j        j        D ]D}t          t          j        ||||ff||          t          j	        |||          dd	           Ed S )
Nr   rT   r#   rh   r   rs   r.   rx   r1   ry   r|   s           r   test_idwtn_idwt2_complexr      s    8  D "9Dl6""Gyw//BR2R00A
  0 0
BR#5wTJJJ
1gD999"	0 	0 	0 	0 	00 0r   c            
      ~   t          j        g dg dg dg          } t          j        d          }t          j        | |          }t          dt          |                    D ]}t          |                                |          D ]}|	                                }|D ]}||= |
                    dd           }|
                    dd           }|
                    dd           }	|
                    d	d           }
t          t          j        |||	|
ff|          t          j        |d          d
           d S )Nr   rT   r#   r   r   rt   ru   rv   rw   gV瞯<r3   )r4   r5   r   r6   r   rangelenr   rY   copygetr   r{   r9   )r   r:   coefsnum_missingmissingmissing_coefsr]   r}   r~   r   r   s              r   test_idwtn_missingr      ss   8  D
 l6""GIdG$$E QE

++ K K#EJJLL+>> 
	K 
	KG!JJLLM ' '!#&&""4..B""4..B""4..B""4..BDJRRL'97CC J}f==EK K K K K
	KK Kr   c                  n    t          d d d d           } t          t          t          j        | d           d S )Nrs   r   )r   r	   r   r   r9   )r   s    r   test_idwtn_all_coeffs_Noner      s4    DTdt444E*dj%88888r   c                  B   t          j        g dg dg dg          } t          j        d          }t          j        | |          \  }\  }}}|||||d}t          t          t          j        ||           ||||d}t          t          t          j        ||           d S )Nr   rT   r#   r   )rt   ru   rv   rw   ff)aru   rv   rw   r4   r5   r   r6   rz   r	   r   r9   r   r:   r}   r~   r   r   r;   s          r   test_error_on_invalid_keysr      s    8  D
 l6""Gyw//BR 2Rr::A*dj!W555 "B//A*dj!W55555r   c                  D   t          j        g dg dg dg          } t          j        d          }t          j        | |          \  }\  }}}|d d d df         }|d d d df         }|d d d df         }||||d}t          t          t          j        ||           d S )Nr   rT   r#   r   rW   rs   r   r   s          r   test_error_mismatched_sizer      s    8  D
 l6""Gyw//BR 
AAAssFB	AAAssFB	AAAssFB2R00A*dj!W55555r   c                     t          j        d          } t          t          t                    D ]\  }}t          j        d|          }d                    |          }t          j        ||           \  }\  }}}t          |j
        |j
        cxk    o|j
        cxk    o
|j
        k    nc d|z              t          j        ||||ff|           }	t          |	j
        |k    d|z              d S )Nr   r   r   rU   "wrong dtype returned for {0} inputzdwt2: zidwt2: )r   r6   zip	dtypes_in
dtypes_outr4   rX   formatrz   r   rV   r{   )
r:   dt_indt_outxerrmsgcAcHcVcDx_roundtrips
             r   test_dwt2_idwt2_dtypesr      s   l6""GY
33 	A 	AvGF%(((5<<UCC9Q00LRRBH<<<<<<<<BH<<<<6!	# 	# 	# j"r2rl!3W==!V+Y-?@@@@	A 	Ar   c                  L   t          j        g dg dg dg          } | d| z  z   } t          j        | dd          }t	          t          d |                     }t          |d	         |           t	          t          d
 |                     }t          |d         |           t          j        | dd          }t	          t          d |                    }t          |d         |           t	          t          d |                    }t          |d         |           d S )Nr   r   r   r   r   r   r   r   r   r   r   r    rh   r   )r   axesc                 8    t          j        | d          d         S Nr   r   r   dwtr   s    r   <lambda>z test_dwtn_axes.<locals>.<lambda>       DHQ$7$7$: r   r   c                 8    t          j        | d          d         S Nr   r   r   r   s    r   r   z test_dwtn_axes.<locals>.<lambda>  r   r   r;   r   r   c                 8    t          j        | d          d         S r   r   r   s    r   r   z test_dwtn_axes.<locals>.<lambda>      TXa%8%8%; r   rt   c                 8    t          j        | d          d         S r   r   r   s    r   r   z test_dwtn_axes.<locals>.<lambda>  r   r   rv   )r4   r5   r   r   listmapr
   )r   r   
expected_a
expected_dexpected_aaexpected_ads         r   test_dwtn_axesr      s)   8\\\!\\!\\# $ $D "T'>DIdF...Ec::DAABBJsZ(((c::DAABBJsZ(((IdF000Es;;ZHHIIKtk***s;;ZHHIIKtk*****r   c                      t          j        g dg dg dg          } | d| z  z   } t          j        | dd          }t	          t          j        |dd          | d	           d S )
Nr   r   r   rh   r   r   r   rx   r   )r4   r5   r   r   r   r9   r   r   s     r   test_idwtn_axesr     s}    8\\\!\\!\\# $ $D "T'>DIdF000EDJuf6:::DuMMMMMMr   c                  H   t          j        g dg dg dg          } | d| z  z   } t          j        | dd          \  }\  }}}t          j        |          }t          j        ||||ffdd          }d }t          j        ||||ffdd          }t          ||           d S )Nr   r   r   rh   r   r   r   )r4   r5   r   rz   
zeros_liker{   r
   )r   r   r   r   r   result_zerosresult_nones          r   test_idwt2_none_coeffsr     s    8\\\!\\!\\# $ $D "T'>DyvF;;;BR 
r		B:rBB<0&vFFFL	B*b2r2,/fEEEK{+++++r   c                  >   t          j        g dg dg dg          } | d| z  z   } t          j        | dd          }t          j        |d                   |d<   t          j        |dd          }d |d<   t          j        |dd          }t          ||           d S )	Nr   r   r   rh   r   r   r   rw   )r4   r5   r   r   r   r9   r
   )r   r   r   r   s       r   test_idwtn_none_coeffsr   &  s    8\\\!\\!\\# $ $D "T'>DIdF000E -d,,E$K:eV&999LE$K*UF888K{+++++r   c                     t          j        g dg dg dg          } t          j        | dd          }t	          t          j        |dd          | d           t          t          t          j        |dd	           d S )
Nr   r   r   r   r   r   rx   r   r   r   r   )r4   r5   r   rz   r   r{   r	   r   r   s     r   test_idwt2_axesr   7  s    8\\\!\\!\\# $ $D IdF000EDJuf6:::DuMMMM *dj%iHHHHHHr   c                  
   t          j        t           j                            d                    } t	          dd          D ]@}t          j        | d|          }t          t          j        |d|          | d           Ad S )N)r   r   r   )r   r   r   r   r   r   rx   r   )	r4   r5   rE   standard_normalr   r   rz   r   r{   r   r   r   s      r   test_idwt2_axes_subsetsr   B  s    8BI--i8899DY** P P	$T222
5&t<<<dOOOOOP Pr   c                  
   t          j        t           j                            d                    } t	          dd          D ]@}t          j        | d|          }t          t          j        |d|          | d           Ad S )N)r   r   r   r   r   r   r   r   rx   r   )	r4   r5   rE   r   r   r   r   r   r9   r   s      r   test_idwtn_axes_subsetsr   J  s    8BI--l;;<<D\1-- P P	$T222
5&t<<<dOOOOOP Pr   c                  8   t          j        g dg dg dg          } t          j        | dd          }t          j        | dd          }t	          ||           t          j        |dd          }t          j        |dd          }t	          ||           d S )Nr   r   r   r   r   r   )rW   rW   )r4   r5   r   r   r
   r9   )r   coefs1coefs2rec1rec2s        r   test_negative_axesr   R  s    8\\\!\\!\\# $ $D YtV&111FYtV(333F   :ff6222D:ff8444Dtr   c                     t          j        d          } t          t          t                    D ]\  }}t          j        d|          }d                    |          }t          j        ||           }|	                                D ]!\  }}t          |j        |k    d|z              "t          j        ||           }t          |j        |k    d|z              d S )Nr   r   rU   r   zdwtn: zidwtn: )r   r6   r   r   r   r4   rX   r   r   itemsr   rV   r9   )	r:   r   r   r   r   rN   kvr   s	            r   test_dwtn_idwtn_dtypesr   _  s    l6""GY
33 	A 	AvGF%(((5<<UCC1g&&LLNN 	: 	:DAqAGv%x&'89999j11!V+Y-?@@@@	A 	Ar   c                     t           j                            d          } |                     ddd          }|d|z  z   }t	          j        |d          }t	          j        |d          }t          ||d           |d|j        z           	                    t           j
                  |d|j        z  <   t	          j        |d          }t          ||dd	           t          |j        t           j        k               d S )
Nr   r    rh   db2g|=)r2   r   rD   r1   )r4   rE   rF   rG   r   r   r9   r   ndimastype	complex64r   rV   
complex128)rL   r   rN   r   x_roundtrip2s        r   test_idwtn_mixed_complex_dtyper   m  s    Y""1%%FQ1A	BqDAYq%  F*VU++KK//// "#,/66r|DDF3<:fe,,LL!$T::::L"-/00000r   c                      t          j        d          } t          j        d          x}x}}t          t          t          j        | |||ffd           d S )N)r)   r)   )r   r   r   r:   )r4   zerosr	   r   r   r{   )r}   r   r~   r   s       r   test_idwt2_size_mismatch_errorr   }  sT    	&		B8F###B#b*dj2B|*<fMMMMMMr   c                     t          j        d          } t          j        d          }t	          t
          t          j        | |           t          j        d          }t	          t
          t          j        ||d           d S )Nr?   r   )r    r    r   r   )r4   rX   r   r6   r	   r   rz   )r   r:   data2s      r   test_dwt2_dimension_errorr     sf    72;;Dl6""G *diw777 GFOOE*diiHHHHHHr   c            	         t           j                            d          } |                     ddd          }t	          j        d          ddf}ddt          j        j        j        j	        f}t	          j
        |||          }t          t	          j        |||          |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	           d S )Nr>   r?   r   sym2db4	symmetricperiodizationrx   r   r   r   r.   ).r   )r4   rE   rF   rG   r   r6   _extensions_pywtr7   reflectr   r   r9   r	   r   rz   r{   )rL   r   waveletsr8   r   r   r   s          r    test_per_axis_wavelets_and_modesr     s   Y""4((F<<B##D V$$fe4H /#)13E IdHe,,EDJuh665IIIIIdHRaRL%00EDJuhrrlE::DuMMMMIdHeBQBi00EDJuhbqb	::DuMMMM *dix|<<<*dixeBQBiHHHH*dj%"1">>>*dj%bqb	JJJJ LEYuhrrlE"1"I66FDJvx|U2A2Y??           r   c                  \   t          j        d          } t          t          j        t          j        gt          j        t          j        g          D ]Z\  }}dt          j        d          fD ]>}t          t          || |            || d          }t          t          |||           ?[d S )N)r?   r?   morlr   db1)r4   rX   r   r   rz   r   r{   r9   rK   r	   r   )r   dec_funrec_funcwavecs        r    test_error_on_continuous_waveletr    s    78DDI 6!%TZ 8: : A Ad<VDDE 	A 	AE*gtUCCCCe$$A*gq%@@@@@		AA Ar   )3
__future__r   r   r   numpyr4   	itertoolsr   numpy.testingr   r   r	   r
   r   int8float16rR   rS   r   r   r   r   
complex256AttributeErrorr   r<   rO   r^   rf   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r     s   A @ @ @ @ @ @ @ @ @     " " " " " " O O O O O O O O O O O O  Wbj"*bj",]	j"*bj"*blm
	"-""I2=##JJ 	 	 	D	4 4 40 0 0$9 9 9$B B B$A A A&, , ,*0 0 0"0 0 0"K K K49 9 9
6 6 6&6 6 6,A A A+ + +$N N N, , ,", , ,"I I IP P PP P P
 
 
A A A1 1 1 N N N	I 	I 	I     D	A 	A 	A 	A 	As   2B	 	BB