
    bMh`                        d dl Z d dlmZ d dlmZmZ d dlZd dlZd dl	m
Z
mZmZmZmZmZ d dlZd dlmZ ej        ej        ej        ej        ej        ej        gZej        ej        ej        ej        ej        ej        gZdZdZd Zd	 Zd
 Zd Z d Z!d Z"d Z#d Z$ej%        j&        d#d            Z'd Z(d#dZ)d Z*d Z+ej%        j&        d#d            Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d  Z7d! Z8d" Z9dS )$    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           d S )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                    S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pywt/tests/test_swt.pytest_swt_decompositionr?   &   s   !!!A
,u

CD)-!S)B)B)B&JS#
cJS#D D DLCDt<<<<F F FLCDt<<<<444LCJTBBBB555LCJTBBBB>A%LCDt<<<<D D DLCDt<<<< (31!
4
4
4C1vHCCJTBBBBCJTBBBBXaFCKK1Ds1vv&&*****    c                  $   t          t          t          j        d           t	          j                    5  t	          j        dt                     t          t          j        d          d           d d d            n# 1 swxY w Y   t          t          j        d          d           t          t          j        d          d           t          t          j        d          d           t          t          j        d	          d           d S )
N   ignorer      r         r   0   )r   UserWarningr)   r.   warningscatch_warningssimplefilterr	    r@   r>   test_swt_max_levelrM   F   s   d0"555		 	"	" 0 0h444T'++Q///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 #A&&***#C((!,,,#B''+++#D))1-----s   =A==BBc                     g d} t          j        d          }t          j        | |d          \  \  }}\  }}dD ]p}t          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        |                               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                |
                    d          D ]}t          ||           |                    d          D ]}t          ||           |                    d          D ]}t          ||           |	                    d          D ]}t          ||           rt          t          t           j        | |dd           d S )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   sO   !!!A
,u

C!XaA666JS#
c  *) *)z!}}$$W--~thqjq111C<<'--DDc\\$T**D-1XdCq-I-I-I**66&&&1 	+ 	+AAGtz)**** 	) 	)CsC(((( 	) 	)CsC(((( 	) 	)CsC(((( 	) 	)CsC(((( z!}}$$W--~thqjq111C<<'--DDc\\$T**D-1XdCq;<.> .> .>**66 &&&1 	+ 	+AAGtz)****##F++ 	) 	)CsC((((##F++ 	) 	)CsC((((##F++ 	) 	)CsC((((##F++ 	) 	)CsC((((	) *dh3aa@@@@@@r@   c                     d} t          j        d          }d|v r|                    d           |D ]}t          j        |          }t	          t          j        t          j        t          |j	        |j
                                                }d|| z   dz
  z  }t          j        |          }dD ]T}|r|j        sdD ]E}t          j        ||| ||          }	t          j        |	||	          }
t          |
|d
d           FUd S )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% 2% *& *& "' "' ( ( -	9A=>Il##! 	< 	<D O6 , < <!_i.9F F FIfoDAAA14d;;;;;	<		<< <r@   c                  j   t          j        d          } t          t          t                    D ]\  }}d| d}t          j        d|          }t          j        || d          \  \  }}\  }}t          |j	        |j	        cxk    o|j	        cxk    o|j	        cxk    o|k    nc d|z              t          j        d	|          }t          j
        || d
          d         \  }	\  }
}}t          |	j	        |
j	        cxk    o|j	        cxk    o|j	        cxk    o|k    nc d|z              d S )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      sz   l6""GY
33 # #v:U::: GAU###!%!WA!>!>!>
cJS#	SYJJJJ#)JJJJsyJJJJFJJJJ& 	" 	" 	" GF%(((9Qq999!<LRRBHFFFFFFFFBHFFFFFFFF6!	# 	# 	# 	## #r@   c                  H   t           j                            d          } t          j        d          }t          t          t                    D ]\  }}|                     d          	                    |          }t          j
        ||d          }t          j        ||          }t          ||dd           |                     d	          	                    |          }t          j        ||d          }t          j        ||          }t          ||dd           d S )
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   Y""1%%Fl6""GY
33 5 5v""5))0077HQq)))Yq'""2Dt4444 ""6**11%88Ia***Z7##2Dt444445 5r@   c                      d} t          j        d          }dD ]U}t          j        || d d|          }t	          t          |          t          j        |j        |                              Vd S )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      sx    
C
"##A C Cx3dEEESYY 2174= A ABBBBC Cr@   c                      t          j        d          } t          j                    5  t          j        dt
                     t          t          t          j	        | dd           d d d            d S # 1 swxY w Y   d S )Nr%   rC   r   r   r   )
rU   r   rI   rJ   rK   FutureWarningr
   r]   r)   r   r/   s    r>   test_swt2_ndim_errorr      s    


A		 	"	" A Ah666j$)Qa@@@@A A A A A A A A A A A A A A A A A As   >A33A7:A7c                 L   d}| .t          j        d          } d| v r|                     d           | D ]}t          j        |          }t	          t          j        t          j        t          |j	        |j
                                                }d||z   dz
  z  }t          j        |dz                                ||          }dD ]T}|r|j        sdD ]E}t          j        |||||          }	t          j        |	||	          }
t!          |
|d
d
           FUd S )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      sw    I=j111XOOF###' < <,':;; ##2% 2% *& *& "' "' ( ( -	9A=>IlAo&&..|\JJ! 	< 	<D O6 , < <1oy/:G G GJvTBBB14d;;;;;	<		<< <r@   c                  (    t          dg           d S Nr   )r   )r   rL   r@   r>   test_swt2_iswt2_quickr         %333333r@   c                    dD ]}t          j        |dz                                |d          }d}t          j                    5  t          j        dt                     t          j        ||d          }t          j	        ||          }d d d            n# 1 swxY w Y   t          ||t          t                     d S )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    @ @IeBh''r22$&& 	4 	4!(M:::Yq/;;;F
6?33A	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	1:J?????@ @s   ABB	B	c            
         d} t          j        d          }t          t          j        t          j        t          |j        |j                                                }d|z  }t          j	        |dz            
                    ||          }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
           d S )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l5))ORWRWS.! .! &" &" # # $ $ )*L
	,/""**<FFA!Yq/CCCAFS/3S!Yq/,24 4 4457S/3SC4((((C4((((C4((((C4(((( 
S3S/*O	<	<BAr%%%%	S3S/*O&	I	I	IBAr%%%% *diOQ    *diOQUKKKKKKr@   c            
      l   d} t          j        d          }t          t          j        t          j        t          |j        |j                                                }d|z  }t          j	        |dz            
                    ||          }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           d S )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  s1   Dl5))ORWRWS.! .! &" &" # # $ $ )*L
	,/""**<FFAYq/>>>qAFi?!&AAA!DGF4L'$-d;;;;F4L'$-d;;;;F4L'$-d;;;;F4L'$-d;;;; Ia222E *diOQVLLLL *diB!LLL *diOq* * * * *h?!! ! ! ! *h#2#qqq&	?!a) ) ) ) ) )r@   c                    d}| .t          j        d          } d| v r|                     d           t          dd          D ]}|dz   }t	          t          |          |          D ]\}| D ]U}t          j        |          }|j        dk    r#t          t          j	        t          j
        t          |j        |j                                                }d||z   dz
  z  }t          j        ||z                                |f|z            }	dD ]e}
|
r|j        sdD ]V}t          j        |	|||||
	          }t#          |          }t          j        ||||

          }t'          ||	dd           Wft)          ||          D ]5\  }}|                                D ]\  }}t-          ||         |           6W^d S )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11XOOF###1++ 5 5! tn== 	5 	5D'/ 5 5#l#677;??%(KK:! :! 2" 2" *# *# &$ &$" *Y6:;Iag&&..uTz::) 	D 	DD !CN ! '4 D D!%1c947B"O "O "O&.v&6&6 JvsDIII'14dCCCCCD !55 5 5EAr !		 5 51*2a5!444455-5	55 5r@   c                  (    t          dg           d S r   )r   rL   r@   r>   test_swtn_iswtn_quickr     r   r@   c                     t          j        d                              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        |||           d S )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Yq!YT222F *dj&!)DDDD*dj&!&AAAAQiocrc111f-F1IdO,
FADAAAAAAr@   c                  T   d} d}d}t           j                            d          }t          |           D ]r}d t	          |          D             }|                    |          }t          j        ||||          }t          j        |||          }t          ||dd           sd S )	N)r   rG   r   sym2r   r   c                 $    g | ]\  }}|d k    |S )r   rL   ).0axss      r>   
<listcomp>z9test_swtn_iswtn_unique_shape_per_axis.<locals>.<listcomp>  s!    ;;;ur1AFFFFFr@   r   g|=r   )
rU   r   r   r   	enumerater   r)   r   r   r   )	_shaper   r~   r   r[   r   r/   rd   rs	            r>   %test_swtn_iswtn_unique_shape_per_axisr     s    F
CIY""1%%Ff%% 6 6;;	% 0 0;;;""5))Iaid333Jq#D)))15u555556 6r@   c            	         t           j                            d          } |                     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            d S # 1 swxY w Y   d S )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     s   Y""4((F<<B##DE V$$fe4HIdHE222EDJuh//EBBBB IdHRaRL666EDJuhrrl33TFFFF *dix|UCCC*dj%"1">>>		 	"	" M Mh666V5(2A2,66
68BQB<88%eLLLLM M M M M M M M M M M M M M M M M Ms   >A.F99F= F=c            	         t          j        d          } t          t          j        t          j        t          j        gt          j        t          j        t          j	        g          D ]]\  }}dt          j
        d          fD ]A}t          t          || |d            || dd          }t          t          |||           B^d S )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    78D!48TY	"B#'9dj$*"EG G B B(d<VDDE 	B 	BE*he !# # # # uA...A*h5AAAAA	BB Br@   c                     t          j        d                              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                             |          |d         d                             |          g|d<   t          j
        ||          }t          ||j                   t          ||dd           d S )	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
    sJ   Yr]]!!"*--FF"I
CJ
3J
3J
3M2<8L"-8	: 4 4 blBM222A=LLA:L!S!$$AYq\((00AYq\((002q	Ifc""\17+++14d33333'4 4r@   c                  &  	 t           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         d                             |          t          	fd|d         d         D                       g|d<   t          j        ||          }t          ||j                   t!          ||dd	           d S )
Nr   r%   r   r   rD   c                 :    g | ]}|                               S rL   r   )r   rd   r  s     r>   r   z+test_iswt2_mixed_dtypes.<locals>.<listcomp>  s%    CCCAHHV,,CCCr@   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	  r  s
            @r>   test_iswt2_mixed_dtypesr    sf   Y""1%%F\\!QFF"I
CJ
3J
3J
3M2<8L"-8	: 4 4 blBM222A=LLA:L1c1%%AYq\((00CCCCfQilCCCDDFq	Jvs##\17+++14d33333'4 4r@   c                  ~  
 t           j                            d          } |                     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                             d|j        z            }|                    |          }
fd|d                                         D             |d<   ||d         d|j        z  <   t          j        ||          }	t!          ||	j                   t%          |	|dd	           d S )
Nr   r%   r   r   rD   ac                 B    i | ]\  }}||                               S rL   r  )r   r   rd   r  s      r>   
<dictcomp>z+test_iswtn_mixed_dtypes.<locals>.<dictcomp>"  s+    GGGTQQ((GGGr@   r   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  s             @r>   test_iswtn_mixed_dtypesr    s   Y""1%%F\\!Q""FF"I
CJ
3J
3J
3M2<8L"-8	: 4 4 blBM222A=LLA:L1c1%%1IMM#,''HHVGGGGVAY__5F5FGGGq	"#q	#,Jvs##\17+++14d33333+4 4r@   c                      t          t          t          j        g d           t	          j        d          ddd d f         } t          t          t          j        | ddd           d S )Nr   )r   r   r   r   r   r   )r
   r]   r)   r,   rU   r   r   r   s    r>   test_swt_zero_size_axesr  )  s[    *dhE222 	!QQQA*diEFFFFFFr@   c                      d} t           j                            d          }|                    d          }t	          j        || dd          }d |D             }t          t          j        |          t          j        |                     t          t           j	        
                    |          t           j	        
                    t          j        |                               t          t          t          j        |dd           d	S )
zBVerify that the 1D SWT partitions variance among the coefficients.r   rR      Trm   c                 6    g | ]}t          j        |          S rL   rU   var)r   rd   s     r>   r   z=test_swt_variance_and_energy_preservation.<locals>.<listcomp>:  s     +++q+++r@   bior2.2rp   N)rU   r   r   r   r)   r,   r   sumr  linalgro   rX   r   rH   )r   r   r/   r=   	variancess        r>   )test_swt_variance_and_energy_preservationr!  2  s     CY""1%%FSAXa$T:::F++F+++IBF9%%rvayy111 BINN1%%INN2>&#9#9::< < < dh94@@@@@@r@   c                     d} t           j                            d          }|                    dd          }t	          j        || ddd          }|d                                         g}|dd	         D ].}|D ])}|                    |                                           */d
 |D             }t          t          j	        |          t          j
        |                     t          t           j                            |          t           j                            t          j        |                               t          t          t          j        |ddd           d	S )zBVerify that the 2D SWT partitions variance among the coefficients.r   rR   @   r   Tr   rn   ro   r   r   Nc                 6    g | ]}t          j        |          S rL   r  r   r   s     r>   r   z>test_swt2_variance_and_energy_preservation.<locals>.<listcomp>Q       ///q///r@   r  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  sG    CY""1%%FRAYq#QDtDDDF)//##$JABBZ ) ) 	) 	)Aaggii((((	)//J///IBF9%%rvayy111 BINN1%%INN2>*#=#=>>@ @ @ diIQTJJJJJJr@   c                     d} t           j                            d          }|                    dd          }t	          j        || ddd          }|d                                         g}|dd	         D ]C}|                                D ],\  }}|                    |                                           -Dd
 |D             }t          t          j
        |          t          j        |                     t          t           j                            |          t           j                            t          j        |                               t          t           t          j        |ddd           d	S )zBVerify that the nD SWT partitions variance among the coefficients.r   rR   r#  r   Tr$  r   r   Nc                 6    g | ]}t          j        |          S rL   r  r&  s     r>   r   z>test_swtn_variance_and_energy_preservation.<locals>.<listcomp>h  r'  r@   r  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_preservationr0  \  sS    CY""1%%FRAYq#QDtDDDF)//##$JABBZ ) )GGII 	) 	)DAqaggii((((	)//J///IBF9%%rvayy111 BINN1%%INN2>*#=#=>>@ @ @ diIQTJJJJJJr@   c                     dt           j        t           j        dfdt           j        t           j        dfdt           j        t           j        dffD ]y\  } }}}t          j        d| z            } ||ddd	
          }t          j	        |          \  }}}t          j
        ||||          } ||d          }	t          ||	           zd S )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: GFTM""DF!666"/22VVVV:NNNE!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-  r0  r;  rL   r@   r>   <module>rE     s	          0 0 0 0 0 0 0 0                      * * * * * * Wbj"*bj",]	j"*bj"*blm
 

+ + +@. . .5A 5A 5Ap< < <B# # #$5 5 5$C C CA A A  <  <  <  <F4 4 4@ @ @ @L L L>#) #) #)L +5 +5 +5 +5\4 4 4B B B 6 6 6M M M8
B 
B 
B4 4 464 4 484 4 4<G G GA A A&K K K.K K K.    r@   