
    gEy                        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mZmZmZmZmZmZmZ d dlmZmZmZmZmZ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'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@mAZAmBZB d dlCmDZDmEZE d dlFmGZG d d	lHmIZImJZJmKZK d d
lLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZf d dlgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZp d dlqmrZr d dlsmtZt d dlumvZvmwZw d dlxmyZymzZzm{Z{ d dlFm|Z|  ed          \  Z}Z~Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zd# Zd$ Zd% Zd& Zd' Zd( Zd) Zd* Zd+ Zd, Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: ZeEd;             Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdFS )G    )SpiooSymbolsymbolsRationalIntegerFloatFunctionModGoldenRatio
EulerGammaCatalanLambdaDummynanMulPowUnevaluatedExpr)EqGeGtLeLtNe)Absacosacoshasinasinhatanatanhatan2ceilingcoscosherferfcexpfloorgammalogloggammaMaxMin	Piecewisesignsinsinhsqrttantanh	fibonaccilucas)Range)ITEImplies
Equivalent)For
aug_assign
Assignment)raisesXFAIL)PrintMethodNotImplementedError)C89CodePrinterC99CodePrinterget_math_macros)AddAugmentedAssignmentElementType	FloatTypeDeclarationPointerVariablevalue_constpointer_constWhileScopePrintFunctionPrototypeFunctionDefinitionFunctionCallReturnrealfloat32float64float80float128intcComment	CodeBlockstderrQuotedString)	expm1log1pexp2log2fmalog10CbrthypotSqrt)restrict)implemented_function)IndexedBaseIdx)MatrixMatrixSymbolSparseMatrixccodezx,y,zc                  r     G d dt                     } t           | t                              dk    sJ d S )Nc                       e Zd Zd ZdS )test_printmethod.<locals>.fabsc                 H    d|                     | j        d                   z  S )Nzfabs(%s)r   )_printargs)selfprinters     W/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/printing/tests/test_c.py_ccodez%test_printmethod.<locals>.fabs._ccode#   s    ty| < <<<    N)__name__
__module____qualname__r{    r|   rz   fabsrt   "   s#        	= 	= 	= 	= 	=r|   r   fabs(x))r   rq   x)r   s    rz   test_printmethodr   !   sS    = = = = =s = = = a>>Y&&&&&&r|   c                      t          t          t                              dk    sJ t          t          dz            dk    sJ t          t          t                              dk    sJ d S )Nzsqrt(x)      ?)rq   r4   r   r   r|   rz   test_ccode_sqrtr   )   s]    a>>Y&&&&C==I%%%%a>>Y&&&&&&r|   c                     t          t          dz            dk    sJ t          t          t          dz  z            dk    sJ t          dt	          t          dt          z                      } t          d | t                    dz  t          t          t          z  z
  z  z  t          dz  t          z   z            dk    sJ t          t          d	z            d
k    sJ t          t          t          dd          z            dk    sJ t          t          t          dd          z  t          t          i          dk    sJ d dfd dfg}t          t          dz  d|i          dk    sJ t          t          dz  d|i          dk    sJ t          t          t          dd          z  d|i          dk    sJ d d fd dfg}t          dt          z  d|i          dk    sJ t          t          dz  d|i          dk    sJ t          t          dt          t          t          t          t          d !          d"d !          d !                    d#k    sJ d S )$N   z	pow(x, 3)zpow(x, pow(y, 3))g      g      @z,pow(3.5*2*x, -x + pow(y, x))/(pow(x, 2) + y)      z1.0/xzpow(x, 2.0/3.0)type_aliaseszpowl(x, 2.0L/3.0L)c                     |j         S N
is_integerbaser)   s     rz   <lambda>z test_ccode_Pow.<locals>.<lambda>8   s    cn r|   dpowic                     |j          S r   r   r   s     rz   r   z test_ccode_Pow.<locals>.<lambda>9   s    #.&8 r|   powr   user_functionszdpowi(x, 3)r   zpow(x, 0.5)      zpow(x, 16.0/5.0)c                     | dk    S Nr   r   r   s     rz   r   z test_ccode_Pow.<locals>.<lambda>=   
    tqy r|   c                     d|z  S )Nzexp2(%s)r   r   s     rz   r   z test_ccode_Pow.<locals>.<lambda>=   s    JQTDT r|   c                     | dk    S r   r   r   s     rz   r   z test_ccode_Pow.<locals>.<lambda>>   r   r|   exp2(x)z	pow(x, 2)Fevaluatez
-2*x/(y*y))
rq   r   yrj   r   r   rV   rY   r   r   )r   _cond_cfunc_cond_cfunc2s      rz   test_ccode_Powr   /   s   A;;+%%%%QT22222S&AaC..11AAAaDDHAqD))1a4!845567 7 7 7D>>W$$$$HQNN"##'88888HQNN"$AAAEYYYYY44g>88%@BKAuk&:;;;}LLLLC(<===NNNNHROO#UK4HIIIM_____002T2TU00%8:L Aul&;<<<	IIIIAul&;<<<KKKKRCAa 7 7 7eLLL9>@ @ @ A ADPQ Q Q Q Q Qr|   c                  z    t          t          t          t          t          z            ddd          dk    sJ d S )Nmy_maxmy_pow)r.   r   r   zmy_max(x, my_pow(x, 2)))rq   r.   r   r   r|   rz   test_ccode_Maxr   G   s;    Qqs((+K+KLLLPiiiiiiir|   c                      t          t          d           } dD ]A}t          | |          }|                    d          |                    d          k    sJ Bd S )Nza[0:50])c89c99c11standard())r/   r   rq   count)big_mincurr_standardoutputs      rz   test_ccode_Min_performancer   L   sk    79%%&G. 6 6w777||C  FLL$5$5555556 6r|   c                     t          t          d                    dk    sJ t          t                    dk    sJ t          t          d          dk    sJ t          t           d          dk    sJ t          t                    dk    sJ t          t           d	          d
k    sJ t          t          t          t
          i          dk    sJ d S )Nr   M_EM_PIr   r   HUGE_VALz	-HUGE_VALINFINITYr   z	-INFINITYr   M_PIl)rq   r)   r   r   rV   rY   r   r|   rz   test_ccode_constants_mathhr   T   s    Q==E!!!!99e$$$
2222"u%%%444499
"""""u%%%44444/222g======r|   c                  2   t          dt          z            dt          j        d          z  k    sJ t          dt          z            dt          j        d          z  k    sJ t          dt          z            dt	          j        d          z  k    sJ d S )Nr   z,const double GoldenRatio = %s;
2*GoldenRatio   z$const double Catalan = %s;
2*Catalanz*const double EulerGamma = %s;
2*EulerGamma)rq   r   evalfr   r   r   r|   rz   test_ccode_constants_otherr   ^   s    ;#RU`UfgiUjUj#jjjjj	'	 =b@Q@QQR R R R:"OR\RbceRfRf"fffffffr|   c                     t          t          dd                    dk    sJ t          t          dd          t          t          i          dk    sJ t          t          dd                    dk    sJ t          t          dd	                    d
k    sJ t          t          dd	          t          t          i          dk    sJ t          t          dd	                    dk    sJ t          t          dd	          t          t          i          dk    sJ t          t          t          dd          z             dk    sJ t          t          t          dd          z   t          t          i          dk    sJ t          t          dd          t          z            dk    sJ t          t          dd          t          z  t          t          i          dk    sJ d S )Nr      z3.0/7.0r   z	3.0L/7.0L   	   2z-3.0/7.0z
-3.0L/7.0Lzx + 3.0/7.0zx + 3.0L/7.0Lz(3.0/7.0)*xz(3.0L/7.0L)*x)rq   r   rV   rY   r   r   r|   rz   test_ccode_Rationalr   e   s   !Q  I----!QtWo>>>+MMMM"a!!S((((!R!!Z////!Rg???<OOOO"b!!""i////"b!!w@@@KOOOOXa^^#$$5555Xa^^#4/BBBoUUUU!Q!""m3333!Q!w@@@OSSSSSSr|   c                      t          t          d                    dk    sJ t          t          d                    dk    sJ d S )NC   67r   z-1)rq   r	   r   r|   rz   test_ccode_Integerr   s   sF    %%%%%%%%%%r|   c                  ~    t          t          t                    t          t                    z            dk    sJ d S )Nzpow(sin(x), cos(x)))rq   r2   r   r%   r   r|   rz   test_ccode_functionsr   x   s3    Q3q66!""&;;;;;;;r|   c            	      b   t          d          } t          dt          | d| z                      }t           ||                     dk    sJ t          dt          | d| z  t          z                      }t           ||                     dt	          j        d          z  k    sJ t          d          }t          dt          d	d
                    }t          dt          | | d| z   z  d| z   z                      }t           |||                   ||                   dk    sJ d S )Nr   r   r   z2*xz&const double Catalan = %s;
2*x/Catalanr   AinTintegerr   	assign_toz@for (int i=0; i<n; i++){
   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];
})r   rj   r   rq   r   r   rk   rl   )r   r   r   r   s       rz   test_ccode_inline_functionr   |   s@   AS&AaC..11A1;;%S&AaCK"8"899A	! :W]2=N=NNO O O OCACd+++,,AS&Aq1uIq1u,=">">??A1Q4AaD)))	     r|   c                     t          t          t                    d          dk    sJ t          t                    5  t          t          t                    d           d d d            n# 1 swxY w Y   t          t                    5  t          t          t                    dd           d d d            n# 1 swxY w Y   t          t          t                    dd           d S )NC99r   	tgamma(x)C89F)r   allow_unknown_functionsT)rq   r+   r   r@   rB   r   r|   rz   test_ccode_exceptionsr      sV   qE***k9999	.	/	/ ( (eAhh''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	.	/	/ G GeAhhFFFFG G G G G G G G G G G G G G G 
%((UDAAAAAAs#   $A..A25A2%B>>CCc                     t          t          t                              dk    sJ t          t          t                              dk    sJ t          t	          t                              dk    sJ t          dd          \  } }t          t          t          |           t          |                              dk    sJ t          t          | |                    dk    sJ t          d	dd
          \  }}t          t          ||                    dk    sJ t          t          ||dz                       dk    sJ t          t          ddd                    dk    sJ t          t          ddd                     dk    sJ t          | t          ||          z            dk    sJ t          t          ||          |z            dk    sJ t          ddd          }t          t          | |                    dk    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ d S )Nceil(x)r   r   zr,sTrV   z)((ceil(r) % ceil(s)) + ceil(s)) % ceil(s)z
fmod(r, s)zp1 p2r   positivezp1 % p2r   zp1 % (p2 + 3)r   r   Fr   z(-3) % (-7)r   z-(3 % 7)zr*(p1 % p2)zpow(p1 % p2, s)r   )r   negativez	(-n) % p2zK((1.0/5.0)*pow(2, -n)*sqrt(5)*(-pow(1 - sqrt(5), n) + pow(1 + sqrt(5), n)))z8(pow(2, -n)*(pow(1 - sqrt(5), n) + pow(1 + sqrt(5), n))))	rq   r$   r   r   r+   r   r   r7   r8   )rsp1p2r   s        rz   test_ccode_functions2r      sH   	))))Q==I%%%%q??k))))5t$$$DAqWQZZ,,-- 2F F F F FQ|++++WdT:::FBR****Ra!!_4444Re,,,-->>>>#aU++++,,
::::3r2;;=0000Ra  $55555TD111AaR,,,,1"oooooq??XXXXXXXr|   c                  \   t          dd          } t          dd          }dd dfd	 d
fgd}t          t          |           |          dk    sJ t          t          |           |          dk    sJ t          t          |          |          dk    sJ t	          d          }t          d          }t          dd          D ]-} |t          dd          t	          d|           |          }.t          |ddi          }d|v sJ |                    d          dk    sJ d S )Nr   Fr   r   Tceilc                     | j          S r   r   r   s    rz   r   z+test_ccode_user_functions.<locals>.<lambda>   s    q|+ r|   r   c                     | j         S r   r   r   s    rz   r   z+test_ccode_user_functions.<locals>.<lambda>   s     r|   abs)r$   r   r   r   r   abs(n)amuladdr   d   r   r   a99)	r   rq   r$   r   r   r   ranger   r   )r   r   custom_functionsexprr   r   outs          rz   test_ccode_user_functionsr      s_   U###AT"""A++V47M7Mu6UV  ,<===JJJJQ(8999YFFFFQ(8999XEEEE#;;DhF1c]] = =vhq!nnfWWWoot<<
hx%8
9
9
9CC<<<<99X#%%%%%%r|   c            
      r   t          d          dk    sJ t          t          j                  dk    sJ t          d          dk    sJ t          t          j                  dk    sJ t          t          t
          z            dk    sJ t          t          t
          z            dk    sJ t          t                     dk    sJ t          t          t
          z  t          z            dk    sJ t          t          t
          z  t          z            d	k    sJ t          t          t
          z  t          z            d
k    sJ t          t          t
          z  t          z            dk    sJ t          t          t
          z            dk    sJ t          t          t
          z  t          z            dk    sJ t          t          t          t
                              dk    sJ t          t          t          t          t
          z  t          t          t                                        dk    sJ d S )NTtrueFfalsezx && yzx || yz!xzx && y && zzx || y || zzz || x && yzz && (x || y)z(x || y) && (!x || !y)zF(x || y || z) && (x || !y || !z) && (y || !x || !z) && (z || !x || !y)zy || !xzD(x || (y || !z) && (z || !y)) && (z && !x || (y || z) && (!y || !z)))	rq   r   r  r  r   r   zr;   r<   r   r|   rz   test_ccode_booleanr     s   ;;&    ==F""""<<7"""">>W$$$$Q<<8####Q<<8####!99Q},,,,Q},,,,!a%1....!a%10000Q<<33333!a%1!iiiiiA9,,,,Aq1ugamm44559r|   c                  "   t          t          t          t                              dk    sJ t          t	          t          t                              dk    sJ t          t          t          t                              dk    sJ t          t          t          t                              dk    sJ t          t          t          t                              dk    sJ t          t          t          t                              dk    sJ d S )Nzx == yzx != yzx <= yzx < yzx > yzx >= y)	rq   r   r   r   r   r   r   r   r   r   r|   rz   test_ccode_Relationalr     s    Aq??h&&&&Aq??h&&&&Aq??h&&&&Aq??g%%%%Aq??g%%%%Aq??h&&&&&&r|   c                  Z    t          t          t          dk     ft          dz  df           t                     dk    sJ t           d          dk    sJ t          t          t          dk     ft          dz   t          dk     ft          dz  df           t                     dk    sJ t           d          d	k    sJ t          t          t          dk     ft          dz  t          dk    ft          t                    t          d
k    f           t	          t
           fd           d S )Nr   r   Tz'((x < 1) ? (
   x
)
: (
   pow(x, 2)
))cr   z3if (x < 1) {
   c = x;
}
else {
   c = pow(x, 2);
}zB((x < 1) ? (
   x
)
: ((x < 2) ? (
   x + 1
)
: (
   pow(x, 2)
)))zUif (x < 1) {
   c = x;
}
else if (x < 2) {
   c = x + 1;
}
else {
   c = pow(x, 2);
}r   c                  "    t                     S r   rp   r   s   rz   r   z&test_ccode_Piecewise.<locals>.<lambda>  s    uT{{ r|   )r0   r   rq   r2   r@   
ValueErrorr
  s   @rz   test_ccode_Piecewiser     s@   aQZ!Q$..D;;    %%%    aQZ!a%Q!Q$>>D;;	 	 	 	 %%%	 	 	 	 aQZ!Q$AQQ@@D
:****+++++r|   c                  \    ddl m}   | t                    }t          |          dk    sJ d S )Nr   )sincz)(((x != 0) ? (
   sin(x)/x
)
: (
   1
))))(sympy.functions.elementary.trigonometricr  r   rq   )r  r   s     rz   test_ccode_sincr    sM    ======477D;;     r|   c            	         t          dt          t          t          dk     ft          dz   t          dk     ft          dz  df          z            } | dk    sJ t          t          z  t          z  t          dz  z   t          dz  z   t          dt          dk     fd          z   t          t                    z   dz
  }t          |          dk    sJ t          |d	
          dk    sJ d S )Nr   r   TzD2*((x < 1) ? (
   x
)
: ((x < 2) ? (
   x + 1
)
: (
   pow(x, 2)
)))r   r   )r   TzNpow(x, 2) + x*y*z + pow(y, 2) + ((x < 0.5) ? (
   0
)
: (
   1
)) + cos(z) - 1r  r   zSc = pow(x, 2) + x*y*z + pow(y, 2) + ((x < 0.5) ? (
   0
)
: (
   1
)) + cos(z) - 1;)rq   r0   r   r   r  r%   )pr   s     rz   test_ccode_Piecewise_deepr    s    a	1a!e*q1ua!enq!tTlCCCDDA	 	 	 	 Q3q51a4<!Q$Aq3w<!C!CCc!ffLqPD;;    %%%           r|   c                  x    t          t          dk     t          t                    } t	          |           dk    sJ d S )Nr   z((x < 1) ? (
   y
)
: (
   z
)))r:   r   r   r  rq   r
  s    rz   test_ccode_ITEr  1  sC    q1uaD;;     r|   c                  2    t          t          d            d S )Nc                  H    t          t          t                    d          S )Ngarbage)method)rq   r2   r   r   r|   rz   r   z%test_ccode_settings.<locals>.<lambda>=  s    eCFF9=== r|   )r@   	TypeErrorr   r|   rz   test_ccode_settingsr  <  s    
9==>>>>>r|   c                     t          dd          \  } }}}t          d|          t          d|          t          d|          }}}t          d          |         }t          d          ||f         }t          d	          |||f         }	t                      }
|
                    |          d
k    sJ |
                    |          d||z  |z   z  k    sJ |
                    |	          d||z  |z  ||z  z   |z   z  k    sJ t          dd          ||f         }|
                    |          dd|z  |z   z  k    sJ t          ddd          ||f         }t          |          d|d|z  z   z  k    sJ t          ddd| f|          ||f         }t          |          dk    sJ t          d| ||f|          }t          ||||f                   dk    sJ t          |dd|f                   dk    sJ d S )Nzs n m oTr   r   jkr   r   Bzx[j]zA[%s]zB[%s])r   r   shaper   F)r!  stridesr   )   r$  r   )r!  r#  offsetzA[o + s*j + i]r#  r%  zA[m*j + n*k + o + s*i]r   zA[3*m + n*k + o + 2*s])r   rl   rk   rD   _print_Indexedrq   )r   r   mor   r  r  r   r   r  r  Abases               rz   test_ccode_Indexedr+  @  s:   D111JAq!Q#qkk3sA;;C!qACACAACAq!AAA&((((A'QqSU"33333A'QqSU1Q3Yq["99999Cu%%%ad+AA'QqS1W"55555Cuc2221a48A88w!ac'*****CwAqAAA!Q$GA88'''''aAYq999Eq!Qw  $<<<<<q!Qw  $<<<<<<<r|   c                  $   t          t          dd                    dk    sJ t          t          dddd                    dk    sJ t          t          dd                    d	k    sJ t          t          dd
                    dk    sJ d S )Nr   ijzx[i][j]klr)  r&  zx[i*k + j*l + o])r   zx[3])r      r   z
x[3][4][5])rq   rG   r   r|   rz   test_Elementr0  \  s    d##$$	1111dD===>>BTTTTTd##$$....g&&''<777777r|   c                  ~   d} t          d| f          }t          d| f          }t          d| dz
  f          }t          d| dz
            }t          ||         ||dz            ||         z
  ||dz            ||         z
  z            }t          |j        |j        d	          }|d
|dz   d|dz   dk    sJ d S )Nr   r   r   r   Dyr   r   F)r   contractzDy[i] = (y[z] - y[i])/(x[z
] - x[i]);)rk   rl   r   rq   rhslhs)len_yr   r   r2  r   ecode0s          rz   2test_ccode_Indexed_without_looking_for_contractionr9  c  s    ECx(((ACx(((A	T%'	,	,	,BCqA
2a51QqS6!A$;1Q3!-..A!%155999E5Aq1uuuMMMMMMMr|   c                  @   t          dd          \  } }t          d          }t          d          }t          d          }t          d|          }t          d|           }d	|| z  |z   z  d
z   }t          |||f         ||         z  ||                   |k    sJ d S )Nn mTr   r   r   r   r   r  z}for (int i=0; i<m; i++){
   y[i] = 0;
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      y[i] = A[%s]*x[j] + y[i];
   }
}r   r   rk   rl   rq   )r   r(  r   r   r   r   r  r   s           rz   test_ccode_loops_matrix_vectorr>  n  s    5$'''DAqCACACACACA	,
 01sQw	8		  1a411...!333333r|   c                  
   t          ddt                    \  } }t          d          }t          d          }t          | |          } d| j        j        |j        dz  }t          ||          ||                    |k    sJ d S )	Nzi mT)r   clsr   r   zlfor (int i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){
   y[i_%(icount)i] = x[i_%(icount)i];
})icountmcountr   )r   r   rk   rl   labeldummy_indexrq   )r   r(  r   r   expecteds        rz   test_dummy_loopsrF    s    5$E222DAqCACAAq		A	 7&!-@@	AH 11&&&(222222r|   c                     t          dd          \  } }t          d          }t          d          }t          d          }t          d          }t          d|          }t          d	|           }d
|| z  |z   z  dz   }t          |||f         ||         z  ||         z   ||         z   ||                   |k    sJ d S )Nr;  Tr   r   r   r   r  r   r  zfor (int i=0; i<m; i++){
   y[i] = x[i] + z[i];
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      y[i] = A[%s]*x[j] + y[i];
r<  r   r=  )	r   r(  r   r   r   r  r   r  r   s	            rz   test_ccode_loops_addrH    s    5$'''DAqCACACACACACA	,
 01sQw	8		  1a41!$qt+qt<<<AAAAAAr|   c                     t          dd          \  } }}}t          d          }t          d          }t          d          }t          d|          }t          d|           }t          d	|          }	t          d
|          }
d|| z  |z  |z  ||z  |z  z   |	|z  z   |
z   d||z  |z  |	|z  z   |
z   ddz   }t          |||	|
f         ||||	|
f         z  ||                   |k    sJ d S )Nn m o pTr   r   br   r   r  r  lzfor (int i=0; i<m; i++){
   y[i] = 0;
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      for (int k=0; k<o; k++){
         for (int l=0; l<p; l++){
            y[i] = a[z]*b[
] + y[i];
         }
      }
   }
}r   r=  )r   r(  r)  r  r   rK  r   r   r  r  rL  r   s               rz   &test_ccode_loops_multiple_contractionsrO    s+   D111JAq!QCACACACACACACAA 78c!eAg!Ao!6Ka6O6O6OQRSTQTUVQVYZ[\Y\Q\_`Q`Q`Q`	b		  1a7AaAqjM)QqT:::a??????r|   c                  R   t          dd          \  } }}}t          d          }t          d          }t          d          }t          d          }t          d|          }t          d	|           }	t          d
|          }
t          d|          }d|| z  |z  |z  |	|z  |z  z   |
|z  z   |z   d|| z  |z  |z  |	|z  |z  z   |
|z  z   |z   d|	|z  |z  |
|z  z   |z   ddz   }t          |||	|
|f         |||	|
|f         z   ||	|
|f         z  ||                   |k    sJ d S )NrJ  Tr   r   rK  r  r   r   r  r  rL  zfor (int i=0; i<m; i++){
   y[i] = 0;
}
for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      for (int k=0; k<o; k++){
         for (int l=0; l<p; l++){
            y[i] = (a[z] + b[z])*c[rM  rN  r   r=  )r   r(  r)  r  r   rK  r  r   r   r  r  rL  r   s                rz   test_ccode_loops_addfactorrQ    s   D111JAq!QCACACACACACACACAA AB!Aa!A#a%RSTURU@UXY@Y@Y@Y[\]^[^_`[`ab[befghehijej[jmnopmp[pst[t[t[tvwxyvyz{v{~  AB  B  wB  EF  wF  wF  wF	G		  !Aq!QJ-!Aq!QJ-/1a7;qtLLLPQQQQQQQr|   c                  T   t          dd          \  } }}}t          d          }t          d          }t          d          }t          d          }t          d|          }t          d	|           }	t          d
|          }
d}d|| z  |z  |	|z  z   |
z   z  dz   }d||z  |
z   z  dz   }d|| z  |	z   z  dz   }t          ||	         |||	f         z  ||
         |||
f         z  z   ||	         ||
         z  |||	|
f         z  z   ||                   }|||z   |z   |d d         z   k    su|||z   |z   |d d         z   k    s`|||z   |z   |d d         z   k    sK|||z   |z   |d d         z   k    s6|||z   |z   |d d         z   k    s!|||z   |z   |d d         z   k    sJ d S d S d S d S d S d S )NrJ  Tr   r   rK  r  r   r   r  r  z(for (int i=0; i<m; i++){
   y[i] = 0;
}
z|for (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      for (int k=0; k<o; k++){
         y[i] = b[j]*b[k]*c[%s] + y[i];
z      }
   }
}
zUfor (int i=0; i<m; i++){
   for (int k=0; k<o; k++){
      y[i] = a[%s]*b[k] + y[i];
z   }
}
zUfor (int i=0; i<m; i++){
   for (int j=0; j<n; j++){
      y[i] = a[%s]*b[j] + y[i];
r   r   r=  )r   r(  r)  r  r   rK  r  r   r   r  r  s0s1s2s3s                  rz   test_ccode_loops_multiple_termsrW    sE   D111JAq!QCACACACACACACA	 	4 89s1uqs{Q	H			 	,/0sQw	8		 	,/0sQw	8		  	ad1QT7lQqT!AqD'\)AaD1Ia1aj,@@AaDQQQAb23B3'''b23B3'''b23B3'''b23B3'''b23B3'''b23B3''''' ('''''''''''r|   c                      t           t          z   t          t                    z   t          z   } t	          | t          g          dk    sJ d S )Ndereferencezx + y + (*z) + sin((*z)))r   r   r2   r  rq   r
  s    rz   test_dereference_printingr[    sA    q53q66>ADA3'''+EEEEEEEr|   c            	      2   t          t          t          z  t          dt          z   t          dk    ft          df          t	          t
                    g          } t          ddd          }t          | |          dk    sJ t          d|d         z  t          dk    f|d         df          t	          |d	                   z   |d
         z   }t          |          dk    sJ t          ddd          }t          ddd          }t          t	          |d	                   dt          |d                   g|d	         |d         z   |d         dgd|d         z  |d	         z  t          |d
                   dz   dgg          }t          ||          dk    sJ d S )Nr   r   Tr   r   r   zPA[0] = x*y;
if (y > 0) {
   A[1] = x + 2;
}
else {
   A[1] = y;
}
A[2] = sin(z);)r   r   )r   r   r   r   z:((x > 0) ? (
   2*A[2]
)
: (
   A[2]
)) + sin(A[1]) + A[0]qr   M)r   r   )r/  r   r/  zM[0] = sin(q[1]);
M[1] = 0;
M[2] = cos(q[2]);
M[3] = q[1] + q[2];
M[4] = q[3];
M[5] = 5;
M[6] = 2*q[4]/q[1];
M[7] = sqrt(q[0]) + 4;
M[8] = 0;)
rm   r   r   r0   r2   r  rn   rq   r%   r4   )matr   r   r^  r_  r(  s         rz   test_Matrix_printingra    s   
!A#y!a%14y993q66B
C
CCS!QAa==	    a$iQ'!D'499C$LLH1T7RD;;	 ! ! ! ! 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<<!+Q/1 	2 	2A A;;		 	 	 	 	 	r|   c                     t          t                    5  t          t          g dg                     d d d            n# 1 swxY w Y   dt	          ddi                              t          g dg                    v sJ d S )N)r   r   r   zNot supported in CstrictF)r@   rB   rq   ro   rC   doprintr   r|   rz   test_sparse_matrixre  ;  s    	.	/	/ ) )lIII;''((() ) ) ) ) ) ) ) ) ) ) ) ) ) )  >8U2C#D#D#L#L\[d[d[dZeMfMf#g#gggggggs    AAAc                  L   t          d          \  } }t          t                    5  t          |dz  dd           d d d            n# 1 swxY w Y   t          |dz            dk    sJ t          | |dz  z  |g          dk    sJ t          |dz  d	
          dk    sJ d S )Nzx, ifr   Tr   )error_on_reservedr   zpow(if_, 2)rY  zpow((*if_), 2)*x_unreserved)reserved_word_suffixzpow(if_unreserved, 2))r   r@   r  rq   )r   r   s     rz   test_ccode_reserved_wordsrj  D  s    7DAq	
		 < <addU;;;;< < < < < < < < < < < < < < <A;;-''''QTs+++/AAAAAAM:::>UUUUUUUs   A		AAc                     t          t                    t          z  d}} t          t          t                              d}}t          dt          z  t          dz  z             t          z  t          dz  z   d}}t	          |           |k    sJ t	          | d          d|z  k    sJ t	          |          |k    sJ t	          |          |k    sJ d S )Nzy*(((x) > 0) - ((x) < 0))z!(((cos(x)) > 0) - ((cos(x)) < 0))r   zApow(x, 2) + x*(((pow(x, 2) + 2*x) > 0) - ((pow(x, 2) + 2*x) < 0))r  zz = %s;)r1   r   r   r%   rq   )expr1ref1expr2ref2expr3ref3s         rz   test_ccode_signrr  M  s    q''A+:4Es1vv,, C4Eq1uq!t|$$q(1a4/1t4E<<4	D 00000<<4<<4r|   c                      t          t          t          t          t          z                       dk    sJ t          t          t          dt          t          z                       dk    sJ d S )Nz
x = y + z;+zx += y + z;)rq   r?   r   r   r  r>   r   r|   rz   test_ccode_Assignmentru  V  sX    Aq1u%%&&,6666AsAE**++}<<<<<<r|   c            	          t          t          t          ddd          t          t          dt                    g          } t          |           dk    sJ d S )Nr   
   r   *z*for (x = 0; x < 10; x += 2) {
   y *= x;
})r=   r   r9   r>   r   rq   )fs    rz   test_ccode_Forrz  [  sX    AuQAAsA!6!6 788A88       r|   c            	      (   t          t          t          d          d          dk    sJ t          t          t          d          d          dk    sJ t          t          t          dt	          t                              d          dk    sJ d S )	Nr   r   r   z((0 > x) ? 0 : x)r   z
fmax(0, x)r   zI((0 < ((x < sqrt(x)) ? x : sqrt(x))) ? 0 : ((x < sqrt(x)) ? x : sqrt(x))))rq   r.   r   r/   r4   r   r|   rz   test_ccode_Max_Minr|  a  s    QU+++/BBBBBQU+++|;;;;Q477##e444S     r|   c                      t          t          t                    d          dk    sJ t          t          d          dk    sJ t          t	          d          d          dk    sJ d S )Nr   r   expm1(x)NANr   )rq   r`   r   r   floatr   r|   rz   test_ccode_standardr  h  sn    qE***j8888u%%%....u...%777777r|   c                      t                      } | j        dk    sJ | j        dk    sJ d| j        v sJ d| j        vsJ d S )NCr   voidtemplate)rC   languager   reserved_words)
c89printers    rz   test_C89CodePrinterr  n  sc    !!J#%%%%%''''Z.....Z6666666r|   c                     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 t                                          t          t          t          t                               dk    sJ t                                          t          t                              dk    sJ t                                          t          t                              dk    sJ t                                          t          t          t                              dk    sJ t                                          t          t                              d	k    sJ t                                          t          t          d
t          dz                      dk    sJ t                                          t          t          d
                    dk    sJ t                      } | j        dk    sJ | j        dk    sJ d| j        v sJ d| j        vsJ d S )Nr~  zlog1p(x)r   zlog2(x)zfma(x, y, -z)zlog10(x)zcbrt(x)zhypot(x, y)z	lgamma(x)r   r   zfmax(3, fmax(x, pow(x, 2)))z
fmin(3, x)r  r   ri   using)rD   rd  r`   r   ra   rb   rc   rd   r   r  re   rf   rg   r-   r.   r/   r  r   r  )
c99printers    rz   test_C99CodePrinterr  v  sO   ##E!HH--;;;;##E!HH--;;;;##DGG,,	9999##DGG,,	9999##C1qbMM22oEEEE##E!HH--;;;;##DGG,,	9999##E!QKK00MAAAA##HQKK00K????##C1adOO448UUUUU##C1II..,>>>>!!J#%%%%%''''22222*3333333r|   c                      t          dt          t          ii          } |                     t	          t
          t          d          z                       dk    sJ d S )Nr   z2.1zsinl(x + 2.1L))rD   rV   rY   rd  r2   r   r
   )f80_printers    rz   "test_C99CodePrinter__precision_f80r    sQ     .4/!BCCKs1uU||#344559IIIIIIIr|   c            	         t          dd          } t          ddd          }t          dt          t          ii          }t          dt          t          ii          }t          dt          t
          ii          }|                    t          t          dz                       dk    sJ |                    t          t          dz                       d	k    sJ |                    t          t          t          d
          z                       dk    sJ t          |||gg d          D ]\  fd} |t          |           d            |t          t          dz             d            |t          t          dz             t          t          dz
            z  d            |t          t          dz            d            |t          t                    d            |t          t          dz            d            |t!          |d          d            |t!          d|z  dz   d|z  dz   d          d            |t!          t          dz   d          d            |t!          t          dt          z  dz             d             |t#          t          dz            d!            |t%          dt          z  dz            d"            |t'          t          dz            d#            |t)          t                    d$            |dt          z  d%            |dt          z  d&            |t          dz  d'            |t          dz  d(            |t+          dt          z             d)            |t-          t          dz
            d*            |t/          t          t0                    d+            |t          dt          z  dz             d,            |t          dt          z  d-z
            d.            |t3          dt0          z  dz             d/            |t5          dt          z  dz             d0            |t7          dt          z  dz             d1            |t9          dt          z  dz             d2            |t;          dt          z  dt0          z            d3            |t=          dt          z  dz             d4            |t?          dt          z  d-z
            d5            |tA          dt0          z  dz             d6            |tC          dt          z  dz             d7            |tE          dt          z  dz             d8            |tG          dt          z  dz             d9            |tI          d:t          z            d;            |tK          d:t          z            d<            |tM          t                    d=            |tO          t                    d>            |tQ          t          dz             d?            |tS          t          dz             d@            |tU          t          t0          tV                     dA            |tY          t          dt          dz            dB            |t[          t          d          dC           d S )DNr   Tr   r  r   r   g @zsinf(x + 2.1F)zsin(x + 2.1000000000000001)z2.0zsinl(x + 2.0L))ry   rL  c                                          |           |                                                              k    sJ d S )N)r   r   )rd  formatupper)r   refry   suffixs     rz   checkz-test_C99CodePrinter__precision.<locals>.check  s>    ??4((CJJ6<<>>J,R,RRRRRRRr|   r          @zfabs{s}(x + 2.0{S})g      @z.pow{s}(sin{s}(x + 4.0{S}), cos{s}(x - 2.0{S}))g       @zexp{s}(8.0{S}*x)z
exp2{s}(x)zexpm1{s}(4.0{S}*x)r   zp % 2r   r   Fr   z(2*p + 3) % (3*p + 5)g      @z"fmod{s}(1.0{S}*x + 2.0{S}, 3.0{S})z$fmod{s}(1.0{S}*x, 2.0{S}*x + 3.0{S})zlog{s}((1.0{S}/2.0{S})*x)zlog10{s}((3.0{S}/2.0{S})*x)zlog2{s}(8.0{S}*x)zlog1p{s}(x)zpow{s}(2, x)zpow{s}(2.0{S}, x)zpow{s}(x, 3)zpow{s}(x, 4.0{S})zsqrt{s}(x + 3)zcbrt{s}(x - 2.0{S})zhypot{s}(x, y)zsin{s}(3.0{S}*x + 2.0{S})g      ?zcos{s}(3.0{S}*x - 1.0{S})ztan{s}(4.0{S}*y + 2.0{S})zasin{s}(3.0{S}*x + 2.0{S})zacos{s}(3.0{S}*x + 2.0{S})zatan{s}(3.0{S}*x + 2.0{S})zatan2{s}(3.0{S}*x, 2.0{S}*y)zsinh{s}(3.0{S}*x + 2.0{S})zcosh{s}(3.0{S}*x - 1.0{S})ztanh{s}(4.0{S}*y + 2.0{S})zasinh{s}(3.0{S}*x + 2.0{S})zacosh{s}(3.0{S}*x + 2.0{S})zatanh{s}(3.0{S}*x + 2.0{S})g      E@zerf{s}(42.0{S}*x)zerfc{s}(42.0{S}*x)ztgamma{s}(x)zlgamma{s}(x)zceil{s}(x) + 2zfloor{s}(x) + 2zfma{s}(x, y, -z)z.fmax{s}(8.0{S}, fmax{s}(x, pow{s}(x, 4.0{S})))zfmin{s}(2.0{S}, x)).r   rD   rV   rW   rX   rY   rd  r2   r   r
   zipr   r%   r)   rb   r`   r   r,   re   rc   ra   r4   rf   rg   r   r5   r   r   r!   r#   r3   r&   r6   r    r   r"   r'   r(   r+   r-   r$   r*   rd   r  r.   r/   )r   r  f32_printerf64_printerr  r  ry   r  s         @@rz   test_C99CodePrinter__precisionr    sm   T"""ATD111A .4/!BCCK .4/!BCCK .4/!BCCKs1S5zz**.>>>>>s1S5zz**.KKKKKs1U5\\>22337GGGGG[+FWW /1 /1	S 	S 	S 	S 	S 	Sc!ffhc!c'll1222c!c'llCCLL(*Z[[[c!C%jj,---d1gg|$$$eAcEll0111c!Qii!!!c!A#'1Q37U3335LMMMc!c'3!EFFFc!SUS[!!#IJJJc!A#hh3444eAaCEll9:::d1S5kk.///eAhh&&&adN###c1f)***adN###af)***d1Q3ii)***d1S5kk0111eAqkk+,,,c"Q$)nn9:::c"Q$)nn9:::c"Q$)nn9:::d2a4"9oo;<<<d2a4"9oo;<<<d2a4"9oo;<<<eBqD"Q$!?@@@d2a4"9oo;<<<d2a4"9oo;<<<d3q52: <===eBqD2I =>>>eBqD2I =>>>eBqD2I =>>>c#a%jj-...d3q5kk/000eAhh'''hqkk>***ga"foo/000eAFmm.///c!Qmm/000c!S!S&!!#STTTc!Skk/0000_/1 /1r|   c                      t                      } | t          d                   dk    sJ | dt          d          z           dk    sJ d S )Nr   r   r   	M_SQRT1_2)rE   r)   rh   )macross    rz   test_get_math_macrosr    sN    F#a&&>U""""!DGG)++++++r|   c                  d   t          dd          } t          | t          j        |                     }t	          |          }t          |          dk    sJ t          t          t          t          h          }t	          |          }t          |          dk    sJ |	                    t                    }t          |          d	k    sJ t          t          t          d
                    }t	          |          }t                      }d|j        vsJ |                    |          dk    sJ d|j        v sJ t          dd          }	t          j        |	t"          t$          h          }
t	          |
          }t          |          dk    sJ t          t          t          d          t          h          }t	          |          }t          |          dk    sJ t          |j        |j        t          |j                  }t	          |          }t          |          dk    sJ d S )Nr   Tr   typezint i)r  attrszconst float x)valuezconst float x = M_PIboolz	stdbool.hzbool yur   r  zdouble * const restrict u
__float128zconst __float128 xzconst __float128 x = M_PI)r   rL   rH   	from_exprrJ   rq   r   rW   rM   as_Declarationr   r   rC   headersrd  rK   deducedrN   ri   symbolr  r  )r   var1dcl1var2dcl2adcl2bvar3dcl3ry   r  ptr4dcl4var5dcl5avar5bdcl5bs                   rz   test_ccode_Declarationr    s	   T"""AADN1--...DtD;;'!!!!AGK=999DE<<?****b))E<<11111ADLL)))DtDGgo----??4  H,,,,'/))))$A?1]H$=>>>DtD;;55555AtL))+???DE<</////T[$)RtzBBBEE<<6666666r|   c            	         t          dt          j        t          j        t          j                  } t          t          | i| di| dit          d| di| did          }|                    t                    dk    sJ |j	        rJ |j
        rJ |j        rJ |                    d          dk    sJ |j	        rJ |j
        rJ |j        d	hk    sJ |                    t          d
d                    dk    sJ |                    t          t                              dk    sJ |                    t          dd                    dk    sJ |                    t          dz            dk    sJ t          t          | t           h          }t#          |          }t%          |          dk    sJ t          t          | t&          t           h          }t#          |          }|                    |          dk    sJ t          t          | t)          j        d          t           h          }t#          |          }|                    |          dt)          j        | j                  z  k    sJ d S )N	_Float128Qf128)!__STDC_WANT_IEC_60559_TYPES_EXT__)r   type_literal_suffixestype_func_suffixestype_math_macro_suffixestype_macrosr   r  z2.0Qr  r   r   z	1.0Q/2.0Qz
sinf128(x)Fr   zcosf128(2.0Q)r   z1.0Q/xr  zconst _Float128 xzconst _Float128 x = M_PIf128&   )r  r  zconst _Float128 x = %sQ)rI   rZ   nbitsnmantnexprD   rV   rd  r   r  	librariesr  r   r2   r%   rL   rM   rJ   rq   r   r   r   decimal_dig)r  p128r  r  r  r  dcl5cs          rz   test_C99CodePrinter_custom_typer    sr   [(.(.(-PPDt"&#Vn&&%

 8
   D <<??c!!!!|~{<<&&&&|~;>?????<<A'';6666<<A<////<<B///00OCCCC<<4  H,,,,AtK=111DE<<.....Qb666EE<<"@@@@@QGM"$5$5k]KKKEE<<";gmDL\>]>]"]]]]]]]r|   c                  F   t          ddd          } t          ddd          }t          ddd          }t          | d                   dk    sJ t          d| d         z            dk    sJ |d                             || |z
            }t          |          d	k    sJ d S )
Nr   r   r   r  r  r]  zA[0]z3*A[0]z
(A - B)[0])rn   rq   subs)r   r  r  r"  s       rz   test_MatrixElement_printingr    s    S!QAS!QAS!QA4>>V####QtW))))	$QAA88|######r|   c                  Z   t          t          t          d          z             dk    sJ t          t          t          t          d                    z             dk    sJ t          t          dt	          d          z  z             dk    sJ t          t          t	          d          z             dk    sJ t          t          t	          d          z             dk    sJ t          t          t
          z             dk    sJ t          t          t
          dz  z             d	k    sJ t          t          t
          d
z  z             dk    sJ t          t          dt
          z  z             dk    sJ t          t          dt
          z  z             dk    sJ t          t          dt          t
                    z  z             dk    sJ t          t          dt          t
                    z  z             dk    sJ t          t          t          d          z             dk    sJ t          t          t          d          z             dk    sJ t          t          dt          d          z  z             dk    sJ t          t          dt          d          z  z             dk    sJ d S )Nr   zz + M_Ezz + M_LOG2Er   z	z + M_LN2rw  z
z + M_LN10zz + M_PIz
z + M_PI_2r/  z
z + M_PI_4z
z + M_1_PIz
z + M_2_PIzz + M_2_SQRTPIzz + M_SQRT2zz + M_SQRT1_2)rq   r  r)   rc   r,   r   r4   rh   r   r|   rz   test_ccode_math_macrosr  &  s=   SVV	))))T#a&&\\!""m3333Qs1vvX-////SVV++++SWW----R==J&&&&RT??l****RT??l****QrT??l****QrT??l****QtBxxZ  $44444QtBxxZ  $44444T!WW....T!WW....QtAwwY?2222QtAwwY?222222r|   c                  ~    t          t          d                    dk    sJ t          t                    dk    sJ d S )Nr  int)rq   rH   r[   r   r|   rz   test_ccode_Typer  9  s>    g7****;;%r|   c                     t          t          d                    dk    sJ t          t          t          t                    dk    t          t          dd          g                    dk    sJ t          t          t          t          d          g                    dk    sJ t          t          t          t                              } t          t          t          d| g                    d	k    sJ t          t          t          d| gt          t          t          d
z            g                    dk    sJ t          t          t          t          t           gd          t          t#          d          t           gdt$                    t'          dt          g          t)          t                              }t          |          d                    g d          k    sJ d S )Nzthis is a commentz/* this is a comment */r   -z"while (fabs(x) > 1) {
   x -= 1;
}z{
   x += 1;
}r  pwerzdouble pwer(double x)r   z*double pwer(double x){
   x = pow(x, 2);
}z%d %dhelloz%s %d)file
)zx;zprintf("%d %d", x, y);z%fprintf(stderr, "%s %d", "hello", y);zpwer(x);z	return x;)rq   r\   rO   r   r   r>   rP   rF   rJ   rL   rV   rR   rS   r?   r]   rQ   r   r_   r^   rT   rU   join)inp_xblocks     rz   test_ccode_codegen_astr  >  s    ,--..2KKKKKs1vvzJq#q$9$9#:;;<<	   
 .q!4456677	   
 ...//E"4%99::>UUUUU#D&5'Jq!Q$<O<O;PQQRR	    	q!fg|G$$a('???VaS!!q		 E <<499 & & &        r|   c                  D   t          t          t          t          z            t          z             dk    sJ t          t          t          t          z             t          z             dk    sJ t          d          } t          t          t          t          z             t          t          | z             z             dk    sJ t          dd          \  }}}t          ||z             }t          t          ||z                       }t          |          dk    sJ d S )	Nzz + x*yzz + (x + y)wz(w + z) + (x + y)zp q rTr   zexp(p + (q + r)))rq   r   r   r   r  r   r   r)   )r  r  r^  r   q_rr   s         rz   test_ccode_UnevaluatedExprr  e  s    Q''!+,,	9999Q''!+,,====AQ''/!a%*@*@@AAEXXXXXgD)))GAq!
!a%
 
 Cs1S5zz??D;;,,,,,,,r|   c                  ^    t          g d          dk    sJ t          d          dk    sJ d S )N)r   r   r/  z	{2, 3, 4}rp   r   r|   rz    test_ccode_array_like_containersr  q  s:    >>[((((>>[((((((r|   N)
sympy.corer   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   sympy.core.relationalr   r   r   r   r   r   sympy.functionsr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   
sympy.setsr9   sympy.logicr:   r;   r<   sympy.codegenr=   r>   r?   sympy.testing.pytestr@   rA   sympy.printing.codeprinterrB   sympy.printing.crC   rD   rE   sympy.codegen.astrF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   sympy.codegen.cfunctionsr`   ra   rb   rc   rd   re   rf   rg   rh   sympy.codegen.cnodesri   sympy.utilities.lambdifyrj   sympy.tensorrk   rl   sympy.matricesrm   rn   ro   rq   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r+  r0  r9  r>  rF  rH  rO  rQ  rW  r[  ra  re  rj  rr  ru  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r|   rz   <module>r     s                                            ; : : : : : : : : : : : : : : :                                                             
       0 0 0 0 0 0 0 0 0 0 5 5 5 5 5 5 5 5 5 5 . . . . . . . . E E E E E E L L L L L L L L L L                                                       
 ] \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ) ) ) ) ) ) 9 9 9 9 9 9 ) ) ) ) ) ) ) ) = = = = = = = = = = , , , , , ,
''

1a' ' '' ' 'Q Q Q0j j j
6 6 6> > >g g gT T T& & &
< < <  "B B BY Y Y*& & &*@ @ @&' ' '', ', ',T	 	 	     :  ? ? ?= = =88 8 8N N N4 4 4*3 3 3B B B,@ @ @6R R R8,) ,) ,)^F F F
% % %Ph h hV V V     = = =
    8 8 87 7 74 4 4& J J J
91 91 91x, , ,7 7 7@&^ &^ &^R
% 
% 
%3 3 3&     
% % %N	- 	- 	-) ) ) ) )r|   