
    _Mh@                        d dl Z d dlZd dlZd dlmZmZmZmZ d dl	m
Z d dl	Z	d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d d	l m!Z! d
 Z"d Z#ddZ$d Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z) G d d          Z*d Z+d Z,d Z-d Z.e	j/        j0        d             Z1d Z2d Z3dS )     N)xp_assert_equalxp_assert_closeassert_almost_equalassert_array_almost_equal)raises)check_free_memory)RectBivariateSpline)make_splrep)splrepsplevbisplrepbisplevsprootsplprepsplintspaldesplder
splantiderinsertdblint)regrid_smth)dfitpack_intc                     t           j                            t           j                            t           j                            t
                              d|           S )Ndata)ospathjoinabspathdirname__file__)basenames    d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/interpolate/tests/test_fitpack.py	data_filer#      s=    7<<(A(ABB* * *    c                 Z    t          j        t          j        | j        |                     S N)npsqrtdotT)xs    r"   norm2r,      s    726!#q>>"""r$   c                     |dz  dk    rt          j        |           S |dz  dk    rt          j        |           S |dz  dk    rt          j        |            S |dz  dk    rt          j        |            S dS )z$Derivatives of sin->cos->-sin->-cos.   r            N)r'   sincos)r+   ds     r"   f1r5      sy    1uzzvayy1uzzvayy1uzzq		z1uzzq		z zr$   c           
          t          j        t          t          j        t          j        |           t          j        |                                        }|j        S )z7Helper function to create an array of pairs of x and y.)r'   arraylist	itertoolsproductasarrayr*   )r+   yxys      r"   	makepairsr>   *   s=    	$y(A
1FFGG	H	HB4Kr$   c                      e Zd ZdZddddej        z  dddfdZddddej        z  fdZd	 Ze	j
                            d
ddg          e	j
                            dddg          d                         Ze	j
                            dddg          e	j
                            d
ddg          d                         Ze	j
                            dddg          e	j
                            d
ddg          d                         Zd Ze	j
                            dddg          e	j
                            dg d          d                         Zd ZdS )TestSmokeTestszj
    Smoke tests (with a few asserts) for fitpack routines -- mostly
    check that they are runnable
    r   r0   FNc           
         ||}||}dt          j        ||dz             }|||z
  t          j        dt                    z  t          dz
            z  z   }	t	          |          }
fd}t          dd          D ];}t          ||
|||          }|r|d         ||          n|	}t          |dz             D ]c} |||          }t          t	          ||          t          |||          z
            t          t	          ||                    z  }||k     sJ d|st          ||
|||          }t          |j                  t          |d                   k    rNt          |j        |d         d	
           t          |j        |d         d |j        j                 d
           3|dk    sJ =d S )N   r/   dtypec                 J    dz  }d|d| |z
  z  z  z  }dk    r|dz  z  }|S )N      ?         ?r   g     j@ )kr4   htolNss       r"   err_estz'TestSmokeTests.check_1.<locals>.err_estB   s=    aAa#qs)n$C1uus1uJr$      rN   perrJ   xer   )rJ   rN   xbrS   V瞯<atolvIh%<=rG   )r'   linspacearangefloatr5   ranger   r,   r   r
   lentr   csize)selfrR   rN   abat_nodesrT   rS   r+   x1vrO   rJ   tckttr4   rL   errsplrM   s     `                @r"   check_1zTestSmokeTests.check_15   s   :B:BK1a!e$$!a%29Q7777%A,,FFqEE	 	 	 	 	 	 q! 	" 	"AAqR888C!)1Q1"rB1Q3ZZ ! !gammBr1IIb#q(9(99::U2b!99=M=MMSyyyyy  "!!Q!qRB???su::SV,,#CE3q6>>>>#CE3q6+35:++>UKKKKK6666!	" 	"r$   rB   c           	         ddt           j        z  dt           j        z  }}}t          j        ||dz             }t          j        |          }	fd}
g }t	          dd          D ]K}t          ||	d|||          }|                    t          |||          t          ||          g           Ld}|D ]F}d}|d         D ]4} |
||          }t          |t          ||          d|           |dz   }5|dz   }Gd S )	Nr   r0   皙?r/   c                 .    dz  }d|d| |z
  z  z  z  }|S )NrF   rG   rH   rI   )rJ   r4   rK   rL   rM   s       r"   rO   z'TestSmokeTests.check_2.<locals>.err_esta   s'    aAa#qs)n$CJr$   rP   rQ   rW   rtol)r'   pirY   r2   r\   r   appendr   r   r   r5   )ra   rR   rM   iaibrb   rc   dxr+   rf   rO   nkrJ   rg   rr4   drrL   s     `               r"   check_2zTestSmokeTests.check_2\   s9   ags25yb1K1ac""F1II	 	 	 	 	 q! 	> 	>AAqQ777CIIvb"c**F2sOO<==== 	 	AAd  gammBr1IIAC@@@@aC!AA	 	r$   c                     |                      d           |                      dt          j        z             |                      dt          j        z  dt          j        z  dd           d S )	Ngư>rN         ?)rc   r0   r/   皙?)rc   rS   rR   rN   )rk   r'   rq   ra   s    r"   test_smoke_splrep_splevz&TestSmokeTests.test_smoke_splrep_splevu   s\    ts25y!!!s25yQruW!t<<<<<r$   rR   r/   rd   Tc                 4    |                      ||           d S )N)rR   rd   )rk   )ra   rR   rd   s      r"   test_smoke_splrep_splev_2z(TestSmokeTests.test_smoke_splrep_splev_2z   s      	x00000r$   rM   2   c                 4    |                      ||           d S )N)rR   rM   )ry   ra   rM   rR   s      r"   test_smoke_splint_spaldez'TestSmokeTests.test_smoke_splint_spalde   s      	"""""r$   c                 f    |                      dt          j        z  t          j        ||           d S )Nrm   )rs   rt   rM   rR   )ry   r'   rq   r   s      r"   test_smoke_splint_spalde_iaibz,TestSmokeTests.test_smoke_splint_spalde_iaib   s,     	BE	beqc:::::r$   c           	      <   d\  }}t          j        ||d          }t          j        |          }dD ]R}t          ||dd||          }t	          t
                    5  t          |           d d d            n# 1 swxY w Y   Sd}t          ||dd          }t          |          }t          t          ||          t          j	        t          |                    dd	           t          |t           j        t          j        g d
          z  d           d S )N)r}      rB   )r/   r0   r.   rG   r   rQ   r1   )rN   rJ   绽|=ro   )r/   r0   r1   r.   gMbP?rp   )r'   rY   r2   r   assert_raises
ValueErrorr   r   r   zerosr]   rq   r7   )ra   rb   rc   r+   rf   rJ   rg   rootss           r"   test_smoke_sprootz TestSmokeTests.test_smoke_sproot   sM   1K1b!!F1II 	 	AAQ1555Cz**  s               QQ!$$$seS))28CJJ+?+?eRWXXXXrurx'='==DIIIIIIs   A99A=	 A=	rJ   r/   r0   r1   r.   rG   c                    ddt           j        z  dt           j        z  }}}t          j        |||dz             }t          j        |          }t	          ||gdd|d          \  }}	t          ||          }
t          |
d         t          j        |
d                   z
            }|dk     sJ t          ||dd|          }t          t          |
d         |          t          j        |
d                   z
            }|dk     sJ |d	k    r@t	          ||gdd|d          \  }}	t          d|dz             D ]}t          |||          }
d S d S )
Nr          @rm   r/   )rN   rR   rJ   nest{Gz?)rN   rR   rJ   r1   )	r'   rq   rY   r2   r   r   absr   r\   )ra   rM   rJ   rb   rc   ru   r+   rf   tckpuuverr1rg   err2r4   s                  r"   test_smoke_splprep_splrep_splevz.TestSmokeTests.test_smoke_splprep_splrep_splev   sX    bhBE	b1K1ac""F1II1a&A1;;;a2t__2a526"Q%==())d{{{{QQA+++5A$$rvbe}}455d{{{{ 66q!fqAB???GD!1ac]] ( (2tQ'' 6( (r$   c           	         ddt           j        z  }}ddt           j        z  }}d\  }}d\  }}d }	t          j        |||dz             }
t          j        |||dz             }t          |
|          }t	          |d         |d          |	|d         |d                   d||          }|d         ||          |d         ||          g}t          |d         |d                   }t          |d         |d         |          } |	|d         |d                   }t          |d                   t          |d                   f|_        t          t          j	        ||z
                      dk     sJ d S )	Nr   r   r1   r1   )rB   rB   c                 0    t          j        | |z             S r&   r'   r2   r+   r<   s     r"   f2z6TestSmokeTests.test_smoke_bisplrep_bisplev.<locals>.f2   s    6!A#;;r$   r/   rN   kxkyr   )
r'   rq   rY   r>   r   r   r]   shaper,   ravel)ra   rT   rS   ybyer   r   NxNyr   r+   r<   r=   rg   rh   t2v1v2s                     r"   test_smoke_bisplrep_bisplevz*TestSmokeTests.test_smoke_bisplrep_bisplev   sp   BruHBBruHBBB	 	 	 KBQ''KBQ''q!__r!ubeRR1r!u%5%5rbIII!fRVnc!fRVn-r!ube$$RUBqE3''R1r!ur!u::s2a5zz)RXb2g&&''$......r$   )__name__
__module____qualname____doc__r'   rq   rk   ry   r   pytestmarkparametrizer   r   r   r   r   r   rI   r$   r"   r@   r@   0   s         qA255D%" %" %" %"N raAbeG    2= = =
 [UQF++[Z$771 1 87 ,+1 [S2r(++[UQF++# # ,+ ,+# [S2r(++[UQF++; ; ,+ ,+;J J J" [S2r(++[S///22( ( 32 ,+((/ / / / /r$   r@   c                        e Zd Zd Zd Zd ZdS )	TestSplevc                     g d}g d}t          ||          }t          dg|          }|j        dk    sJ t          d|          }|j        dk    sJ d S )Nr   r.   rG   rP         r/   )r/   rI   )r   r   r   )ra   r+   r<   rg   zs        r"   test_1d_shapezTestSplev.test_1d_shape   s_    KKKKQll1#sOOw$!SMMw"}}}}}}r$   c                 *   g d}g d}t          ||          }t          j        g dg dg          }t          ||          }t          |d         |          }t          |d         |          }t	          |t          j        ||f                     d S )Nr   r   )rF   r|   r         @)      @g      @      @g      @r   r/   )r   r'   r7   r   r   vstack)ra   r+   r<   rg   r^   r   z0z1s           r"   test_2d_shapezTestSplev.test_2d_shape   s    OOOOQllH******, - -!SMM1Q41Q429b"X../////r$   c                     g d}g d}t          ||d          }ddgddgd ddgg}d	D ]*}t          t          ddg||
          ||                    +t          t          t          ddg|d
           d S )N)r/   r0   r1   )r   r0   r.   r/   )rJ   rP   r   r.   )r   r/   r1   )extr0   )r   r   r   r   r   )ra   r+   r<   rg   rstlr   s         r"   test_extrapolation_modesz"TestSplev.test_extrapolation_modes   s     GGGGQQQ!Q1v. 	N 	NC%eQFCS&A&A&A49MMMMj%!Q!<<<<<<r$   N)r   r   r   r   r   r   rI   r$   r"   r   r      sA          	0 	0 	0= = = = =r$   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	
TestSplderc                     t          j        ddd          dz  }t          j        d|z            }t          ||          | _        t          j        t          j        | j        d                             dk    sJ d S )Nr   r/   d   r1   rB   )r'   rY   r2   r   rj   ptpdiff)ra   r+   r<   s      r"   setup_methodzTestSplder.setup_method   sm    K1c""A%F26NN!Q<< vbgdhqk**++a//////r$   c                 *   t          d          D ]}t          | j        |          }t          ||          }t	          | j        d         |d                    t	          | j        d         |d                    | j        d         |d         k    sJ d S )NrG   r   r/   r0   )r\   r   rj   r   r   )ra   nspl2spl3s       r"   test_inversezTestSplder.test_inverse   s    q 	* 	*Adh**D$??DDHQKa111DHQKa1118A;$q')))))	* 	*r$   c                 P   t          d          D ]}t          j        ddd          }|dk    r||dk    |dk    z           }t          || j        |          }t          | j        |          }t          ||          }|dk    rt          ||d	           t          ||           d S )
Nr.   r   r0   i  r1   r   r/   g>r   )r\   r'   rY   r   rj   r   r   )ra   r   xxdyr   dy2s         r"   test_splder_vs_splevzTestSplder.test_splder_vs_splev   s     s 	) 	)ARD))BAvv qR1W-.r48Q''B$(A&&DD//CAvvCd33333C((((	) 	)r$   c                 D   t          | j                  }t          j        ddd          }|D ]r}|D ]m}t	          ||| j                  }t          ||          t          ||          z
  }t          t          j        |          t          j        |                     nsd S )Nr   r/   rB   )r   rj   r'   rY   r   r   r   r;   )ra   r   r   re   x2y1y2s          r"   test_splantider_vs_splintz$TestSplder.test_splantider_vs_splint  s    $(## [Ar"" 	@ 	@B @ @BDH--2t__uR6
2
2????@	@ 	@r$   c                 H    t          t          t          | j        d           d S )Nr.   )r   r   r   rj   r~   s    r"   test_order0_diffzTestSplder.test_order0_diff!  s    j&$(A66666r$   c                 x   t          d| j        d          }t          |d           t          t          t          |d           t          d| j        d          }t          |d           t          t          t          |d           t          d| j        d          }t          t          t          |d           d S )N      ?r0   )mr1   r/   r.   )r   rj   r   r   r   )ra   r   s     r"   	test_kinkzTestSplder.test_kink$  s     c48q)))tQj&$222c48q)))tQj&$222c48q)))j&$22222r$   c                 P   t          d          D ]}| j        \  }}}t          j        |||f         }t          j        ||f          }t          |||f|          }t          ||          }t          ||d                    t          ||d                    ||d         k    sJ d S )Nr1   r   r/   r0   )r\   rj   r'   c_dstackr   r   r   )ra   r   r^   r_   rJ   c2r   r   s           r"   test_multidimzTestSplder.test_multidim2  s    q 
	  
	 AhGAq!q!QwBB8$$Bq"aj!,,D$??DAtAw'''BQ(((Q<<<<<
	  
	 r$   N)
r   r   r   r   r   r   r   r   r   r   rI   r$   r"   r   r      s        0 0 0* * *) ) )&@ @ @7 7 73 3 3         r$   r   c                       e Zd Zd ZdS )
TestSplintc           	         d\  }}t          j        |          }|dz  }t          ||d          \  }}}t          |          t          |          cxk    r|d|dz
  z  z   k    sn J t	          dd|||f          }d}t          ||z
            d	k     sJ |                                }	t           j        |	t          |          |z
  dz
  d <   t	          dd||	|f          }
t          |
|z
            d	k     sJ t           j        |	d<   t          j        t	          dd||	|f                    sJ |d t          |          |z
  dz
           }t	          dd|||f          }||z
  d	k     sJ t          t          d
          5  t	          ddt          j        d          t          j        d          df           d d d            d S # 1 swxY w Y   d S )N)r   r1   r1   r   r{   r0   r/   rP   g     @t@rX   z>=n-k-1)match
   rG   )r'   rZ   r   r]   r   r   copynanisnanr   	Exceptionones)ra   r   rJ   r+   r<   r^   r_   resexpectedc0res0c1res1s                r"   
test_len_czTestSplint.test_len_cB  s7   1IaLLqDA###1a 1vvQ....1q!A#w;...... QAq!9%%3>""U**** VVXX f3q66A:>??aQAJ''4(?##e++++ 1xq!aQZ0011111 A
QaQAJ''x5((((
 9J777 	7 	71a"'"++rwqzz15666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   9G

GGN)r   r   r   r   rI   r$   r"   r   r   A  s#        !7 !7 !7 !7 !7r$   r   c                   v    e Zd Zd Zd Zej                            ee	j
        k    d          d             ZdS )TestBisplrepc                     ddl m} t          j        dk    rd}nd} |t	          j        d          |f          }t          t          t          ||||ddddd	           d S )
Nr   )
as_stridedr   l    d</i q rI   )r   r/   )wrT   rS   r   r   rN   )	numpy.lib.stride_tricksr  r   itemsizer'   r   r   OverflowErrorr   )ra   r  r`   r+   s       r"   test_overflowzTestBisplrep.test_overflowg  s    666666 A%%DDD Jrx||D7333mXq!Q!qQ1	3 	3 	3 	3 	3 	3r$   c           	          t          j        t          d                    5 }|d         }d d d            n# 1 swxY w Y   t          |d d df         |d d df         |d d df         dddd           d S )	Nzbug-1310.npzr   r   r/   r0   r1   T)r   r   rN   full_output)r'   loadr#   r   )ra   loaded_datar   s      r"   test_regression_1310z!TestBisplrep.test_regression_1310s  s    WY~..// 	';v&D	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	aaacD1ItAAAaCyQ1!	# 	# 	# 	# 	# 	#s   	7;;zneeds ilp64 fitpack)reasonc                 <   t          d           t          j        ddd          }t          j        ddd          }t          j        ||          \  }}t          j        |          }t          |||ddd          }t          t          dd|          d           d S )	Ni`m  r   r/   i  r1   r   r   rN   r           )r   r'   rY   meshgrid
zeros_liker   r   r   )ra   r+   r<   r   rg   s        r"   test_ilp64_bisplrepz TestBisplrep.test_ilp64_bisplrep  s    %   K1c""K1c""{1a  1M!q!Q1a000S#..44444r$   N)r   r   r   r  r  r   r   skipifr   r'   int64r  rI   r$   r"   r   r   f  sl        
3 
3 
3
# 
# 
# [09NOO5 5 PO5 5 5r$   r   c            	      \   t          j        dd          } t          j        dd          }t          j        | |          \  }}t          | |d|z  |z            }t	          |j                  }|                    |j                   t          t          dddd|          dz
            dk     sJ t          t          dddd|          dz
            dk     sJ t          t          dddd|          dz
            dk     sJ t          t          dd	dd	|          dz
            dk     sJ d S )
Nr   r/   r.   r   r   g      ?rH   ir   )
r'   rY   r  r	   r8   rg   extenddegreesr   r   )r+   r<   r   yyrectrg   s         r"   test_dblintr    s3    	AqA
AqA[AFBq!QVb[11D
tx..CJJt|vaAq#&&*++e3333vaaC((4/0058888vc1aC((4/0058888vdCsC001455======r$   c                  l   t          j        g d          t          j        g d          df} | \  }}}t          j        g d          }t          t          ||           |d         |d         |d         z
  |z  |d         z  z              t          t          || d          t          j        |          |d         |d         z
  z  |d         z             t           j                            d           t          j        t           j                            d                    }t           j                            d          }t          ||          \  }}}|d         d	z
  |d
         d	z   g}t          |||f|          }t          t          ||||f|          t          ||                     d S )N)r  r  r   r   )ggg~'	@r  r  r/   )r   r   r1   r   r0   i     rF   r   )
r'   r7   r   r   	ones_likerandomseedsortr   r   )rg   r^   r_   rJ   r+   r<   tck2s          r"   test_splev_der_kr$    s   
 8&&&''855566C GAq!
!!A E!SMM1Q41Q4!A$;!*;AaD*@#@AAAE!S!$$LOOqtad{3ad:  
 INN4
	  $$%%A
	AQllGAq!	
1AbEBJA1a)QDE!aAY**E!TNN;;;;;r$   c                  X   t          j        ddd          } t          j        dt           j        z  | z            }t          j        dt           j        z  | z            }t          ||gd          \  }}t          j        ddd           |d         }t          ||gd|	          \  }}d S )
Nr   g?r}   r0   r{   g)\(?r   r   )taskr^   )r'   rZ   r2   rq   r3   r   )r^   r+   r<   rg   r   uknotss         r"   test_splprep_segfaultr(    s     		!S#A
qwqyA
qwqyAaVq!!!FCIatVFaV"///FCr$   c                     t           j                            d           t          j        ddd          } | }t           j                            dd                                          }d}d}t          | ||d d d d ||d
  
        \  }}}}}	}
}|d |         |d |         |	d ||z
  dz
  ||z
  dz
  z           ||f}t          j        dg          }t          j        dg          }t          t          t          ft          |||           d S )Nr/   r      r  r  i  ( )r'   r   r!  rY   randnr   r   r   r   RuntimeErrorMemoryErrorr   )r+   r<   r   r   r   nxtxnytyr_   fpierrg   xpyps                  r"   test_bisplev_integer_overflowr6    s   INN1
Aq"A	A
	B%%''A	
B	
B!,	1atT4B2"> "> ">BBAr3crc7BssGQ=b1b1 ==>B
GC	7)		B	7)		B<-wBDDDDDr$   c            	      F   d} d\  }}d }t          j        dd|           }t          j        dd|           }t          ||          }t          |d         |d          ||d         |d                   d||	          }d
}t          j        |          |d<   t          j        |          dz  |d<   t          j        d          }	t          j        d          dz  }
t          j        t                    5  t          |	|
|dd           d d d            d S # 1 swxY w Y   d S )N   r   c                 0    t          j        | |z             S r&   r   r   s     r"   r   ztest_gh_1766.<locals>.f2  s    vac{{r$   r   r   r   i  r/   r   i  r.   r1   )	r'   rY   r>   r   rZ   r   r   r-  r   )r`   r   r   r   r+   r<   r=   rg   
tx_ty_sizett_0tt_1s              r"   test_gh_1766r=    sg    DFB   	Ar4  A
BT""A	1aB
2a5"Q%BqE2a5!1!1Q2"
E
E
EC JYz""CFYz""Q&CF9R==D9R==1D	{	#	# ' 'dCA&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   5DDDc                      t          j        dd          } | dz  }t          | |ddg          }t          t          j        d          |          }t          j        g d          }t          ||           d S )Nr   r   r1   rG   )rJ   r^   r/   )rF   r         @r?  )r'   rY   r   r   float64r7   r   )r+   r<   rg   r   dess        r"   test_spalde_scalar_inputrB    sw    
ArA	1A
Aqc
"
"
"C
A
$
$C
(###
$
$CS!!!!!r$   c                  R   t          j        g dd          g dt          j        g d          dt          f          } t          j        |           } t          j        fdt	          d          D                       }t          | |j        d	
           d S )N)      $      "                                                                    r  r   rF   r|   r   r   r   r         @r?  r[   rC   )rD  rD  rD  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  r  r   rF   r|   r   r   r   r   rQ  r?  r?  r?  r?  )rF   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   c                 8    g | ]}t          f|          S rI   )r   ).0nur_   rJ   r^   r+   s     r"   
<listcomp>z"test_spalde_nc.<locals>.<listcomp>  s+    GGGE!aAY33GGGr$   r.   rU   rV   )r'   r;   r   r   r\   r   r*   )r   	res_splevr_   rJ   r^   r+   s     @@@@r"   test_spalde_ncrW    s     	
 J J J!	# 	# 	#A	" 	" 	"A 	
 < < < 	= 	=A	A
Q1I

C
)C..C
GGGGGGGeAhhGGGHHIC5111111r$   )r   )4r9   r   numpyr'   scipy._lib._array_apir   r   r   r   r   r   r   scipy._lib._testutilsr   scipy.interpolater	   r
   scipy.interpolate._fitpack_pyr   r   r   r   r   r   r   r   r   r   r   r   scipy.interpolate._dfitpackr   scipy.interpolate._fitpack2r   r#   r,   r5   r>   r@   r   r   r   r   r  r$  r(  r6  r   xslowr=  rB  rW  rI   r$   r"   <module>r`     s'       				                + * * * * *  3 3 3 3 3 3 1 1 1 1 1 1 ) ) ) ) ) )J J J J J J J J J J J J J J J J J J J J J J J J J J J J 3 3 3 3 3 3 4 4 4 4 4 4* * *
# # #	 	 	 	  T/ T/ T/ T/ T/ T/ T/ T/n#= #= #= #= #= #= #= #=LQ  Q  Q  Q  Q  Q  Q  Q h"7 "7 "7 "7 "7 "7 "7 "7J!5 !5 !5 !5 !5 !5 !5 !5H> > > < < <8
0 
0 
0E E E& ' ' '," " "2 2 2 2 2r$   