
    Rie>                     B   d dl mZ d dlmZ d dlmZ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 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% d d
l&m'Z'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZF  ed          \  ZGZHZI e;d          ZJd ZKd ZLd ZMd ZNd ZOd ZPd ZQd ZRd ZSd ZT G d  d!e          ZUd" ZVd# ZWd$ ZXd% ZYd& ZZd' Z[d( Z\d) Z]d* Z^d+ Z_d, Z`d- Zad.S )/    )
Assignment)none)expm1log1p)cosm1)MatrixSolve)
ExprModsymbolsEqLeGtzooooRationalPow)pi)S)acosKroneckerDelta	PiecewisesignsqrtMinMaxcotacschaseccoth)AndOr)SparseMatrixMatrixSymbolIdentity)MpmathPrinterPythonCodePrinterpycodeSymPyPrinter)TensorflowPrinter)NumPyPrinterSciPyPrinter)raisesskip)IndexedBaseIdx)ArraySymbolArrayDiagonalArrayContraction	ZeroArrayOneArray)import_module)loggammazx y zpc            
      	   t                      } | j        rJ |                     t          t          z            dk    sJ |                     t          t          d                    dk    sJ |                     t          t          t                               dk    sJ |                     t          t           t                              dk    sJ |                     t          t          t                              dk    sJ |                     t          t          t                              dk    sJ |                     dt          t          z   z            d	k    sJ | j        rJ |                     t                    d
k    sJ | j        ddhik    sJ |                     t          t          dd          z            dk    sJ |                     t          t                              dk    sJ | j        dddhik    sJ |                     t          t                              dk    sJ |                     t          t                              dk    sJ |                     t          t                              dk    sJ |                     t          t                              dk    sJ |                     t          t                              dk    sJ |                     t!          t          d                    dk    sJ |                     t#          dt%          t          d          fdt          dk    f                    dk    sJ |                     t#          dt'          t          d          fdt)          t          d          fd                    dk    sJ |                     t+          t                              dk    sJ |                     t,          d                   dk    sJ |                     t/          t          t                              dk    sJ |                     d           d!k    sJ |                     ddg          d"k    sJ |                     t1          t          t                              d#k    sJ |                     t3          t          t                              d$k    sJ d S )%Nzx**y   zx % 2z-(x % y)z(-x) % yzx and yzx or y   z	1/(x + y)zmath.pimathr   math.sqrt(x)r   zmath.acos(x)z1/math.tan(x)z9(math.exp(x) + math.exp(-x))/(math.exp(x) - math.exp(-x))zmath.acos(1/x)z&math.log(math.sqrt(1 + x**(-2)) + 1/x)zx = 2r      z/((1) if (x == 0) else (2) if (x > 6) else None)   Fevaluatez/((2) if (x <= 0) else (3) if (x > 0) else None)z((0.0 if x == 0 else math.copysign(1, x))r   r:   zp[0, 1]z(1 if x == y else 0)r9   r>   z(2, 3)z[2, 3]z	min(x, y)z	max(x, y))r&   module_importsdoprintxyr
   r    r!   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   prntrs    @lib/python3.11/site-packages/sympy/printing/tests/test_pycode.pytest_PythonCodePrinterrJ      sV   E####==A&((((==Q##w....==#a))$$
2222==aR$$
2222==Q##y0000==Aq""h....==AaC!![0000####==	))))FTF#33333==HQNN*++~======a!!^3333FT6N#;;;;;==a!!^3333==Q  O3333==a!!%`````==a!!%55555==q""&NNNNN==Aq))**g5555==Ar!Qxx=AaC" " # #&WX X X X==Ar!Qxx=Bq!HH7 7 7 8 8<UU U U U ==a!!%OOOOO==4!!Y....==!,,--1GGGGG==8++++==!A8++++==Q##{2222==Q##{222222    c                  h    t                      } | j        dk    sJ t          t          d            d S )Npython3c                  $    t          ddi          S )Nstandardpython4)r&    rK   rI   <lambda>z1test_PythonCodePrinter_standard.<locals>.<lambda>M   s    0*Y1GHH rK   )r&   rO   r,   
ValueErrorrG   s    rI   test_PythonCodePrinter_standardrT   H   s:    E>Y&&&&
:HHIIIIIrK   c                  .   t                      } |                     t          t                              dk    sJ |                     t	          dd                    dk    sJ |                     t
          j                  dk    sJ |                     t
          j                  dk    sJ |                     t
          j                  dk    sJ |                     t
          j	                  dk    sJ |                     t
          j
                  d	k    sJ |                     t
          j                  d
k    sJ |                     t
          j                  dk    sJ |                     t          t                              dk    sJ d S )Nzmpmath.sign(x)r:   r9   zmpmath.mpf(1)/mpmath.mpf(2)zmpmath.ez	mpmath.piz
mpmath.phizmpmath.eulerz
mpmath.nanz
mpmath.infzmpmath.ninfzmpmath.loggamma(x))r%   rD   r   rE   r   r   Exp1PiGoldenRatio
EulerGammaNaNInfinityNegativeInfinityr6   )r7   s    rI   test_MpmathPrinterr]   P   sW   A99T!WW!1111199Xa^^$$(EEEEE99QV
****99QT??k))))99Q]##|333399Q\""n444499QU|++++99QZ  L000099Q'((M999999Xa[[!!%9999999rK   c                  ~   ddl m}  ddlm} ddlm}m}m} ddlm	} ddl
m} ddlm} ddlm}m}	 dd	lm}
m} t)                      }|                    t-          t.                              d
k    sJ t1          ddd          }t1          ddd          }t1          ddd          }t1          ddd          }|                    |dz            dk    sJ |                    |dz            dk    sJ |                    t3          d                    dk    sJ t1          ddd          }t1          ddd          }|                    t5          ||                    dk    sJ |                    t5          ||          |z             dk    sJ |                     |	dd                    dk    sJ |                     |dd                    dk    sJ |                     |dd | |
|f|
|z                                 dk    sJ |                     |||                    dk    sJ |                     |||                    d k    sJ |                     ||                    d!k    sJ |                     ||                    d"k    sJ |                     ||                    d#k    sJ |                     ||                    d$k    sJ |                    t.          dz            d%k    sJ |                    t.          d&z            d'k    sJ t7          ddd()          }|                    |          d*k    sJ |                    t8          j                  d+k    sJ |                    t8          j                  d,k    sJ |                    t8          j                  d-k    sJ |                    t8          j                   d.k    sJ |                    t8          j!                  d/k    sJ |                    t8          j"                  d0k    sJ d S )1Nr   )Lambda)Adjoint)
DiagMatrixDiagonalMatrix
DiagonalOf)FunctionMatrix)HadamardProduct)KroneckerProduct)	OneMatrix
ZeroMatrix)abznumpy.sign(x)Ar9   BCr:      Dr>      znumpy.linalg.inv(A)znumpy.linalg.matrix_power(A, 5)znumpy.eye(3)rE   rF   znumpy.linalg.solve(A, x)znumpy.linalg.solve(A, x) + yznumpy.zeros((2, 3))znumpy.ones((2, 3))z.numpy.fromfunction(lambda a, b: a + b, (4, 5))znumpy.multiply(A, B)znumpy.kron(A, B)z#numpy.conjugate(numpy.transpose(A))z%numpy.reshape(numpy.diag(A), (-1, 1))znumpy.diagflat(C)z"numpy.multiply(D, numpy.eye(3, 4))z	x**(-1.0)z	x**(-2.0)Fr?   z	2**(-1.0)numpy.eznumpy.piznumpy.euler_gammaz	numpy.nanz
numpy.PINFz
numpy.NINF)#sympy.core.functionr_   "sympy.matrices.expressions.adjointr`   #sympy.matrices.expressions.diagonalra   rb   rc   %sympy.matrices.expressions.funcmatrixrd   #sympy.matrices.expressions.hadamardre   $sympy.matrices.expressions.kroneckerrf   "sympy.matrices.expressions.specialrg   rh   	sympy.abcri   rj   r*   rD   r   rE   r#   r$   r   r   r   rV   rW   rY   rZ   r[   r\   )r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   r7   rk   rl   rm   ro   uvexprs                       rI   test_NumPyPrinterr   _   s   ******::::::\\\\\\\\\\DDDDDDCCCCCCEEEEEEJJJJJJJJA99T!WW0000S!QAS!QAS!QAS!QA99QW!6666699QT???????99Xa[[!!^3333S!QAS!QA99[A&&''+EEEEE99[A&&*++/MMMMM99ZZ1%%&&*?????99YYq!__%%)=====99^^Aq&&!QQ*?*?@@AA89 9 9 999__Q**++/EEEEE99%%a++,,0BBBBB99WWQZZ  $IIIII99ZZ]]##'NNNNN99ZZ]]##':::::99^^A&&''+OOOOO 99QU{****99QU{****q"u%%%D99T??k))))99QV	))))99QT??j((((99Q\""&9999999QU{****99QZ  L000099Q'((L888888rK   c                  d   t          d          } | st          d           ddlm}m} ddlm}  |dt          z  dz   t          dz   d	t          z  dz             } |t          |d          } ||                     ddd                    g d
k    	                                sJ  |d          dk    sJ  |t          dz  t          dz            } |t          |d          } ||                     ddd                    g dk    	                                sJ  |d          dk    sJ d S )Nnumpyznumpy not installed.r   )r   r   )lambdifyg?r>   r:   g      ?)g      ?g      ?g      @rp   r9   rq   )r:   r   r:      @   )
r5   r-   (sympy.functions.elementary.miscellaneousr   r   sympy.utilities.lambdifyr   rE   linspaceall)r   r   r   r   expr1funcs         rI   test_issue_18770r      s[   '""E %#$$$CCCCCCCC111111CA	1q5#a%!),,E8Aug&&DD1a(())->->->>CCEEEEEDGGqLLLLC1adOOE8AeW%%DDAq))**lll:@@BBBBB477b======rK   c                  <   t                      } t          t                    }d| j        vsJ |                     |          dk    sJ d| j        v sJ t          d | j        D                       rJ t          ddddi          }|                     |          dk    sJ d	| j        v sJ |                     t          j                  d
k    sJ |                     t          j	                  dk    sJ |                     t          j
                  dk    sJ d S )Nr   znumpy.arccos(x)c              3   @   K   | ]}|                     d           V  dS )scipyN)
startswith).0ms     rI   	<genexpr>z$test_SciPyPrinter.<locals>.<genexpr>   s.      CCQ1<<((CCCCCCrK   r9   rn   rA   r>   z8scipy.sparse.coo_matrix(([3], ([0], [1])), shape=(2, 5))zscipy.sparsezscipy.constants.golden_ratiozscipy.constants.pirs   )r+   r   rE   rC   rD   anyr"   r   rX   rW   rV   )r7   r~   smats      rI   test_SciPyPrinterr      s4   A77D!*****99T??/////a&&&&&CC!2BCCCCCCCC1vqk**D99T??BC C C CQ-----99Q]##'EEEEE99QT??2222299QV	))))))rK   c                      t          d          \  t          t          fd           t          z             } | dv sJ d S )Nzif elsec                  ,    t           z   d          S )NT)error_on_reserved)r'   )s1s2s   rI   rR   z,test_pycode_reserved_words.<locals>.<lambda>   s    vb2gFFF rK   )zelse_ + if_zif_ + else_)r   r,   rS   r'   )py_strr   r   s    @@rI   test_pycode_reserved_wordsr      sY    YFB
:FFFFFGGGBG__F3333333rK   c                      t          d          \  } }}| |z  }t          |          dk    sJ ||z  }t          |          dk    sJ d S )Nza_{b} b a_{11}za_b*bza_11*b)r   r'   )a_brj   a_11r~   s       rI   test_issue_20762r      s\    +,,LCDq5D$<<7""""6D$<<8######rK   c                  (   t                      } |                     t          t                    d          dk    sJ |                     dt          t                    z  d          dk    sJ t          ddi          } |                     t          t                    d          d	k    sJ |                     dt          t                    z  d          d
k    sJ t	                      } |                     t          t                    d          dk    sJ |                     t          t                    d          dk    sJ t                      } |                     t          t                    d          dk    sJ |                     t          t                    d          d	k    sJ t                      } |                     t          t                    d          dk    sJ |                     t          t                    d          d	k    sJ t                      } |                     t          t                    d          dk    sJ |                     t          t                    d          d	k    sJ d S )NF)rationalr<   r:   z1/math.sqrt(x)rO   rM   Tzx**(1/2)z	x**(-1/2)zmpmath.sqrt(x)z x**(mpmath.mpf(1)/mpmath.mpf(2))znumpy.sqrt(x)zsympy.sqrt(x))r&   
_print_Powr   rE   r%   r*   r+   r(   rG   s    rI   	test_sqrtr      sV   EDGGe44FFFFAd1ggI66:JJJJJzI677EDGGd33zAAAAAd1ggI55DDDDOOEDGGe448HHHHHDGGd33*+ + + + NNEDGGe44GGGGDGGd33zAAAANNEDGGe44GGGGDGGd33zAAAANNEDGGe44GGGGDGGd33zAAAAAArK   c                     ddl m}   | t                    }t                      }|                    |          dk    sJ t                      }|                    |          dk    sJ t                      }|                    |          dk    sJ t                      }|                    |          dk    sJ t                      }|                    |          dk    sJ d S )Nr   )fracznumpy.mod(x, 1)zx % 1zmpmath.frac(x)z+sympy.functions.elementary.integers.frac(x))	#sympy.functions.elementary.integersr   rE   r*   rD   r+   r&   r%   r(   )r   r~   rH   s      rI   	test_fracr      s    888888477DNNE=="33333NNE=="33333E=='))))OOE=="22222NNE=="OOOOOOOrK   c                       e Zd Zd Zd ZdS )CustomPrintedObjectc                     dS )Nr   rQ   selfprinters     rI   
_numpycodezCustomPrintedObject._numpycode   s    wrK   c                     dS )NmpmathrQ   r   s     rI   _mpmathcodezCustomPrintedObject._mpmathcode   s    xrK   N)__name__
__module____qualname__r   r   rQ   rK   rI   r   r      s2              rK   r   c                      t                      } t                                          |           dk    sJ t                                          |           dk    sJ d S )Nr   r   )r   r*   rD   r%   )objs    rI   test_printmethodr      sY    


C>>!!#&&'1111??""3''8333333rK   c                  :    t          t                    dk    sJ d S )NNone)r'   r   rQ   rK   rI   test_codegen_ast_nodesr     s    $<<6!!!!!!rK   c                      t                      } |                     t                    dk    sJ |                     t                     dk    sJ d S )Nzmath.nanzfloat('-inf'))r&   rD   r   r   rG   s    rI   test_issue_14283r     sO    E==++++=="000000rK   c                  r    t                      } |                     t          d                    dk    sJ d S )Nr9   z(0, 1,))r*   
_print_seqrange)ns    rI   test_NumPyPrinter_print_seqr     s4    A<<a!!Y......rK   c                      ddl m} m} t          d          } | |t                    } ||t                    }t                      }|                    |          dk    sJ |                    |          dk    sJ t                      }d|                    |          v sJ d|                    |          v sJ t                      }d|                    |          v sJ d|                    |          v sJ d S )Nr   )
lowergamma
uppergammari   z3scipy.special.gamma(a)*scipy.special.gammainc(a, x)z4scipy.special.gamma(a)*scipy.special.gammaincc(a, x)Not supported)	'sympy.functions.special.gamma_functionsr   r   r   rE   r+   rD   r*   r&   )r   r   ri   r   expr2rH   s         rI   test_issue_16535_16536r     s   PPPPPPPPAJq!EJq!ENNE==#XXXXX==#YYYYYNNEemmE222222emmE222222EemmE222222emmE22222222rK   c                  P   ddl m}  ddlm}  | | t                     t          dt
          f          } |t          dz   | t          t          z            z  t          t           t          ft          dt          f          } |t          dz  t                     |t          dz  t          df          t                      	                    |          dk    sJ 	                    |          dk    sJ t          t          fd           t          t          fd	           t                      	                    |          d
k    sJ 	                    |          dk    sJ t          t          fd           t          t          fd           d S )Nr   )exp)Integralr9   r:   z?scipy.integrate.quad(lambda x: numpy.exp(-x), 0, numpy.PINF)[0]zMscipy.integrate.nquad(lambda x, y: x**2*numpy.exp(x*y), ((-z, z), (0, z)))[0]c                  .                                    S NrD   
indefiniterH   s   rI   rR   ztest_Integral.<locals>.<lambda>3      j(A(A rK   c                  .                                    S r   r   
evaluateatrH   s   rI   rR   ztest_Integral.<locals>.<lambda>4  r   rK   z6mpmath.quad(lambda x: mpmath.exp(-x), (0, mpmath.inf))z?mpmath.quad(lambda x, y: x**2*mpmath.exp(x*y), (-z, z), (0, z))c                  .                                    S r   r   r   s   rI   rR   ztest_Integral.<locals>.<lambda>9  r   rK   c                  .                                    S r   r   r   s   rI   rR   ztest_Integral.<locals>.<lambda>:  r   rK   )&sympy.functions.elementary.exponentialr   sympy.integrals.integralsr   rE   r   rF   zr+   rD   r,   NotImplementedErrorr%   )r   r   singledoubler   r   rH   s       @@@rI   test_Integralr   '  s   ::::::222222Xcc1"gg1bz**FXad33qs88ma!QZ!Q;;F!Q$""J!Q$A''JNNE==  $eeeee==  $sssss
 A A A A ABBB
 A A A A ABBBOOE==  $\\\\\==  $eeeee
 A A A A ABBB
 A A A A ABBBBBrK   c                  f   ddl m} m}  | t                    } |t                    }t	                      }|                    |          dk    sJ |                    |          dk    sJ t                      }d|                    |          v sJ d|                    |          v sJ t                      }d|                    |          v sJ d|                    |          v sJ t                      }|                    |          dk    sJ |                    |          dk    sJ d S )Nr   )fresnelcfresnelszscipy.special.fresnel(x)[1]zscipy.special.fresnel(x)[0]r   zmpmath.fresnelc(x)zmpmath.fresnels(x))	'sympy.functions.special.error_functionsr   r   rE   r+   rD   r*   r&   r%   )r   r   r   r   rH   s        rI   test_fresnel_integralsr   =  sL   LLLLLLLLHQKKEHQKKENNE==#@@@@@==#@@@@@NNEemmE222222emmE222222EemmE222222emmE222222OOE==#77777==#7777777rK   c                     ddl m}   | t          t                    }t	                      }|                    |          dk    sJ t                      }|                    |          dk    sJ t                      }|                    |          dk    sJ t          ddi          }|                    |          dk    sJ t                      }|                    |          dk    sJ d S )Nr   )betazscipy.special.beta(x, y)z-math.gamma(x)*math.gamma(y)/math.gamma(x + y)allow_unknown_functionsTzmpmath.beta(x, y))	&sympy.functions.special.beta_functionsr   rE   rF   r+   rD   r*   r&   r%   )r   r~   rH   s      rI   	test_betar   T  s    ;;;;;;41::DNNE=="<<<<<NNE=="QQQQQE=="QQQQQ8$?@@E=="QQQQQOOE==#6666666rK   c                     ddl m} m}  | t                    } |t                    }t	                      }|                    |          dk    sJ |                    |          dk    sJ t                      }d|                    |          v sJ d|                    |          v sJ t                      }d|                    |          v sJ d|                    |          v sJ d S )Nr   )airyaiairybizscipy.special.airy(x)[0]zscipy.special.airy(x)[2]r   )sympy.functions.special.besselr   r   rE   r+   rD   r*   r&   )r   r   r   r   rH   s        rI   	test_airyr   h  s   ????????F1IIEF1IIENNE==#=======#=====NNEemmE222222emmE222222EemmE222222emmE22222222rK   c                     ddl m} m}  | t                    } |t                    }t	                      }|                    |          dk    sJ |                    |          dk    sJ t                      }d|                    |          v sJ d|                    |          v sJ t                      }d|                    |          v sJ d|                    |          v sJ d S )Nr   )airyaiprimeairybiprimezscipy.special.airy(x)[1]zscipy.special.airy(x)[3]r   )r   r   r   rE   r+   rD   r*   r&   )r   r   r   r   rH   s        rI   test_airy_primer   z  s   IIIIIIIIKNNEKNNENNE==#=======#=====NNEemmE222222emmE222222EemmE222222emmE22222222rK   c                  0   t                      } |                     t          t                              dk    sJ |                     t	          t                              dk    sJ |                     t          t                              dk    sJ d S )Nznumpy.expm1(x)znumpy.log1p(x)zscipy.special.cosm1(x))r+   rD   r   rE   r   r   rG   s    rI   !test_numerical_accuracy_functionsr     s}    NNE==q""&66666==q""&66666==q""&>>>>>>>rK   c            	      4   t          dd          } t          d          }t          dd          t          dd          t          dd	          }}}t                      }|                    t          d
                    dk    sJ |                    t          d
                    dk    sJ |                    t          | ddg                    dk    sJ |                    |          dk    sJ |                    t          | g d                    dk    sJ |                    t          | ddgddg                    dk    sJ |                    t          | dgdg                    dk    sJ |                    t          ||||f         ||||f                             dk    sJ t                      }|                    t          d
                    dk    sJ |                    t          d
                    dk    sJ |                    t          | ddg                    dk    sJ |                    |          dk    sJ |                    t          | g d                    dk    sJ |                    t          | ddgddg                    dk    sJ |                    t          | dgdg                    dk    sJ |                    t          ||||f         ||||f                             dk    sJ d S )Nrk   )rp   rp   r=   r=   r=   IirA   jrB   k)rp   rn   rn   znumpy.zeros((5,))znumpy.ones((5,))r9   r>   znumpy.einsum("abccd->abd", A))r9   r>   rp   znumpy.einsum("abccc->abc", A)r   r:   znumpy.einsum("aabbc->cab", A)znumpy.einsum("abcde->abe", A)zI = Iztensorflow.zeros((5,))ztensorflow.ones((5,))z)tensorflow.linalg.einsum("abccd->abd", A)z)tensorflow.linalg.einsum("abccc->abc", A)z)tensorflow.linalg.einsum("aabbc->cab", A)z)tensorflow.linalg.einsum("abcde->abe", A))r0   r.   r/   r*   rD   r3   r4   r2   r1   r   r)   )rk   r   r   r   r   rH   s         rI   test_array_printerr     s   C%%ACAUOOSe__c#uooaANNE==1&&*=======!%%);;;;;==)!aU33448WWWWW==s""""==q'''22337VVVVV==q1Q%!A7788<[[[[[==)!aS1#6677;ZZZZZ==Aa!eHa!Ah7788GCCCCE==1&&*BBBBB==!%%)@@@@@==)!aU33448ccccc==s""""==q'''22337bbbbb==q1Q%!A7788<ggggg==)!aS1#6677;fffff==Aa!eHa!Ah7788GCCCCCCrK   N)bsympy.codegenr   sympy.codegen.astr   sympy.codegen.cfunctionsr   r   sympy.codegen.scipy_nodesr   sympy.codegen.matrix_nodesr   
sympy.corer	   r
   r   r   r   r   r   r   r   r   sympy.core.numbersr   sympy.core.singletonr   sympy.functionsr   r   r   r   r   r   r   r   r   r   r   sympy.logicr    r!   sympy.matricesr"   r#   r$   sympy.printing.pycoder%   r&   r'   r(   sympy.printing.tensorflowr)   sympy.printing.numpyr*   r+   sympy.testing.pytestr,   r-   sympy.tensorr.   r/   0sympy.tensor.array.expressions.array_expressionsr0   r1   r2   r3   r4   sympy.externalr5   r   r6   rE   rF   r   r7   rJ   rT   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   rK   rI   <module>r     s   $ $ $ $ $ $ " " " " " " 1 1 1 1 1 1 1 1 + + + + + + 2 2 2 2 2 2 M M M M M M M M M M M M M M M M M M M M M M M M ! ! ! ! ! ! " " " " " " i i i i i i i i i i i i i i i i i i i i i i i i i i         ? ? ? ? ? ? ? ? ? ?            8 7 7 7 7 7 ; ; ; ; ; ; ; ; - - - - - - - - ) ) ) ) ) ) ) ) ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ( ( ( ( ( ( < < < < < < ''

1aK)3 )3 )3XJ J J: : :/9 /9 /9d  &* * *"4 4 4$ $ $B B B6P P P(    $   4 4 4" " "1 1 1/ / /3 3 3(C C C,8 8 8.7 7 7(3 3 3$3 3 3&? ? ?D D D D DrK   