
    sgEy                        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 ZyF)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                  V     G d dt               } t         | t                    dk(  sJ y )Nc                       e Zd Zd Zy)test_printmethod.<locals>.fabsc                 D    d|j                  | j                  d         z  S )Nzfabs(%s)r   )_printargs)selfprinters     N/var/www/html/venv/lib/python3.12/site-packages/sympy/printing/tests/test_c.py_ccodez%test_printmethod.<locals>.fabs._ccode#   s    tyy| <<<    N)__name__
__module____qualname__r{    r|   rz   fabsrt   "   s    	=r|   r   fabs(x))r   rq   x)r   s    rz   test_printmethodr   !   s&    =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 y )Nzsqrt(x)      ?)rq   r4   r   r   r|   rz   test_ccode_sqrtr   )   sD    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 y )$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
    cnn 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k7  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S&AaC.1AAaDHAqD))1a4!84567 7 7D>W$$$HQN"#'8888HQN"$AEYYYY4g>8%@BKAuk&:;}LLLC(<=NNNHRO#UK4HIM____02TU0%8:L Aul&;<	IIIAul&;<KKKRCAa 7eL9>@ ADPQ Q Qr|   c                  `    t        t        t        t        t        z        ddd      dk(  sJ y )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LPiiiir|   c                      t        t        d       } dD ]4  }t        | |      }|j                  d      |j                  d      k(  r4J  y )Nza[0:50])c89c99c11standard())r/   r   rq   count)big_mincurr_standardoutputs      rz   test_ccode_Min_performancer   L   sL    79%&G. 6w7||C FLL$55556r|   c                  N   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 y )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!!!9e$
222"u%4449
""""u%4444/2g===r|   c                     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 y )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`UfUfgiUj#jjjj	'	=b@QQR R R:"OR\RbRbceRf"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 y )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   sI   !Q I---!QtWo>+MMM"a!S(((!R!Z///!Rg?<OOO"b!"i///"b!w@KOOOXa^#$555Xa^#4/BoUUU!Q!"m333!Q!w@OSSSr|   c                  h    t        t        d            dk(  sJ t        t        d            dk(  sJ y )NC   67r   z-1)rq   r	   r   r|   rz   test_ccode_Integerr   s   s0    %%%%%%r|   c                  ^    t        t        t              t        t              z        dk(  sJ y )Nzpow(sin(x), cos(x)))rq   r2   r   r%   r   r|   rz   test_ccode_functionsr   x   s#    Q3q6!"&;;;;r|   c            	         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 y )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.1A1;%S&AaCK"89A	!:W]]2=NNO O OCACd+,AS&Aq1uIq1u,=">?A1Q4AaD)	  r|   c                  r   t        t        t              d      dk(  sJ t        t              5  t        t        t              d       d d d        t        t              5  t        t        t              dd       d d d        t        t        t              dd       y # 1 sw Y   XxY w# 1 sw Y   1xY w)NC99r   	tgamma(x)C89F)r   allow_unknown_functionsT)rq   r+   r   r@   rB   r   r|   rz   test_ccode_exceptionsr      s    qE*k999	.	/ (eAh'(	.	/ GeAhFG 
%(UDA( (G Gs   B!!B-!B*-B6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 y )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      s   	)))Q=I%%%q?k)))5t$DAqWQZ,- 2F F F FQ|+++WdT:FBR***Ra!_444Re,->>>#aU++,
:::3r2;=000Ra $5555TD1AaR,,,1"ooooq?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 |j                  d      dk(  sJ y )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47Mu6UV ,<=JJJQ(89YFFFQ(89XEEE#;DhF1c] =hq!nfqWot<= hx%8
9CC<<99X#%%%r|   c            
         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 y )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     sq   ;&   =F"""<7""">W$$$Q<8###Q<8###!9Q},,,Q},,,!a%1...!a%1000Q<3333!a%1!iiiiA9,,,Aq1ugam4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 y )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                      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kD  ft        t              t        d
kD  f       t	        t
         fd       y )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                  H    ddl m}   | t              }t        |      dk(  sJ y )Nr   )sincz)(((x != 0) ? (
   sin(x)/x
)
: (
   1
))))(sympy.functions.elementary.trigonometricr  r   rq   )r  r   s     rz   test_ccode_sincr    s)    =7D;  r|   c            	      v   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 y )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DA	 	 	 Q3q51a4<!Q$Aq3w<!CCc!fLqPD;   %     r|   c                  \    t        t        dk  t        t              } t	        |       dk(  sJ y )Nr   z((x < 1) ? (
   y
)
: (
   z
)))r:   r   r   r  rq   r
  s    rz   test_ccode_ITEr  1  s/    q1uaD;  r|   c                  &    t        t        d        y )Nc                  6    t        t        t              d      S )Ngarbage)method)rq   r2   r   r   r|   rz   r   z%test_ccode_settings.<locals>.<lambda>=  s    eCF9= 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               }
|
j	                  |      d
k(  sJ |
j	                  |      d||z  |z   z  k(  sJ |
j	                  |	      d||z  |z  ||z  z   |z   z  k(  sJ t        dd      ||f   }|
j	                  |      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 y )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1JAq!Q#qk3sA;C!qACACAACAq!AAA&(((A'QqSU"3333A'QqSU1Q3Yq["9999Cu%ad+AA'QqS1W"5555Cuc21a48A8w!ac'****CwAqA!Q$GA8''''aAYq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 y )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  \  so    d#$	111dD=>BTTTTd#$...g&'<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 y )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!%%15559EAq1u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 y )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3r|   c                      t        ddt              \  } }t        d      }t        d      }t        | |      } d| j                  j
                  |j
                  dz  }t        ||    ||          |k(  sJ y )	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    sw    5$E2DAqCACAAq	A	 77&&!--@	AH 11&(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 y )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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 y )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1JAq!QCACACACACACACA 78c!eAg!Ao!6Ka6OQRSTQTUVQVYZ[\Y\Q\_`Q`	b		  1a7AaAqjM)QqT:a???r|   c                     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 y )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    sf   D1JAq!QCACACACACACACACA AB!Aa!A#a%RSTURU@UXY@Y[\]^[^_`[`ab[befghehijej[jmnopmp[pst[tvwxyvyz{v{~  AB  B  wB  EF  wF	G		  !Aq!QJ-!Aq!QJ-/1a7;qtLPQQQQr|   c                     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(  s\|||z   |z   |d d z   k(  sJ|||z   |z   |d d z   k(  s8|||z   |z   |d d z   k(  s&|||z   |z   |d d z   k(  s|||z   |z   |d d z   k(  sJ y y y y y y )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    s   D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QAb23B''b23B''b23B''b23B''b23B''b23B'') (
 ( ( ( ( ( (r|   c                  z    t         t        z   t        t              z   t        z   } t	        | t        g      dk(  sJ y )Ndereferencezx + y + (*z) + sin((*z)))r   r   r2   r  rq   r
  s    rz   test_dereference_printingr[    s0    q53q6>ADA3'+EEEEr|   c            	      X   t        t        t        z  t        dt        z   t        dkD  ft        df      t	        t
              g      } t        ddd      }t        | |      dk(  sJ t        d|d   z  t        dkD  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 y )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93q6B
CCS!QAa=	   a$iQ'!D'49C$LH1T7RD;	 ! ! ! 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<!+Q/1 	2A A;		 	 	r|   c                      t        t              5  t        t        g dg             d d d        dt	        ddi      j                  t        g dg            v sJ y # 1 sw Y   6xY w)N)r   r   r   zNot supported in CstrictF)r@   rB   rq   ro   rC   doprintr   r|   rz   test_sparse_matrixre  ;  s]    	.	/ )lI;'()  >8U2C#D#L#L\[dZeMf#gggg) )s   AA&c                     t        d      \  } }t        t              5  t        |dz  dd       d d d        t        |dz        dk(  sJ t        | |dz  z  |g      dk(  sJ t        |dz  d	
      dk(  sJ y # 1 sw Y   KxY w)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M:>UUUU	< <s   A::Bc                  N   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 y )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s1v, C4Eq1uq!t|$q(1a4/1t4E<4	D 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 y )Nz
x = y + z;+zx += y + z;)rq   r?   r   r   r  r>   r   r|   rz   test_ccode_Assignmentru  V  s@    Aq1u%&,666AsAE*+}<<<r|   c            	          t        t        t        ddd      t        t        dt              g      } t        |       dk(  sJ y )Nr   
   r   *z*for (x = 0; x < 10; x += 2) {
   y *= x;
})r=   r   r9   r>   r   rq   )fs    rz   test_ccode_Forrz  [  s?    AuQAAsA!6 78A8    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 y )	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  sb    QU+/BBBBQU+|;;;Q47#e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 y )Nr   r   expm1(x)NANr   )rq   r`   r   r   floatr   r|   rz   test_ccode_standardr  h  sI    qE*j888u%...u.%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 y )NCr   voidtemplate)rC   languager   reserved_words)
c89printers    rz   test_C89CodePrinterr  n  sZ    !J#%%%%'''Z.....Z66666r|   c                     t               j                  t        t                    dk(  sJ t               j                  t	        t                    dk(  sJ t               j                  t        t                    dk(  sJ t               j                  t        t                    dk(  sJ t               j                  t        t        t        t                     dk(  sJ t               j                  t        t                    dk(  sJ t               j                  t        t                    dk(  sJ t               j                  t        t        t                    dk(  sJ t               j                  t        t                    d	k(  sJ t               j                  t        t        d
t        dz              dk(  sJ t               j                  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 y )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  s   ##E!H-;;;##E!H-;;;##DG,	999##DG,	999##C1qbM2oEEE##E!H-;;;##DG,	999##E!QK0MAAA##HQK0K???##C1adO48UUUU##C1I.,>>>!J#%%%%'''22222*33333r|   c                      t        dt        t        ii      } | j                  t	        t
        t        d      z               dk(  sJ y )Nr   z2.1zsinl(x + 2.1L))rD   rV   rY   rd  r2   r   r
   )f80_printers    rz   "test_C99CodePrinter__precision_f80r    s=     .4/!BCKs1uU|#3459I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      }|j                  t        t        dz               dk(  sJ |j                  t        t        dz               d	k(  sJ |j                  t        t        t        d
      z               dk(  sJ t        |||gg d      D ]c  \  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       f y )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                 p    j                  |       |j                  j                               k(  sJ y )N)r   r   )rd  formatupper)r   refry   suffixs     rz   checkz-test_C99CodePrinter__precision.<locals>.check  s-    ??4(CJJ6<<>J,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    sV   T"ATD1A .4/!BCK .4/!BCK .4/!BCKs1S5z*.>>>>s1S5z*.KKKKs1U5\>237GGGG[+FW /1	Sc!fhc!c'l12c!c'lCCL(*Z[c!C%j,-d1g|$eAcEl01c!Qi!c!A#'1Q37U35LMc!c'3!EFc!SUS[!#IJc!A#h34eAaCEl9:d1S5k./eAh&adN#c1f)*adN#af)*d1Q3i)*d1S5k01eAqk+,c"Q$)n9:c"Q$)n9:c"Q$)n9:d2a4"9o;<d2a4"9o;<d2a4"9o;<eBqD"Q$!?@d2a4"9o;<d2a4"9o;<d3q52: <=eBqD2I =>eBqD2I =>eBqD2I =>c#a%j-.d3q5k/0eAh'hqk>*ga"fo/0eAFm./c!Qm/0c!S!S&!#STc!Sk/0_/1r|   c                  j    t               } | t        d         dk(  sJ | dt        d      z     dk(  sJ y )Nr   r   r   	M_SQRT1_2)rE   r)   rh   )macross    rz   test_get_math_macrosr    s;    F#a&>U"""!DG)+++r|   c                     t        dd      } t        | t        j                  |             }t	        |      }t        |      dk(  sJ t        t        t        t        h      }t	        |      }t        |      dk(  sJ |j                  t              }t        |      d	k(  sJ t        t        t        d
            }t	        |      }t               }d|j                  vsJ |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 y )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ADNN1-.DtD;'!!!AGK=9DE<?***b)E<1111ADL)DtDGgoo---??4 H,,,'//)))$A??1]H$=>DtD;5555AtL)+?DE<////T[[$))RtzzBEE<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      }|j                  t              dk(  sJ |j                  rJ |j                  rJ |j                  rJ |j                  d      dk(  sJ |j                  rJ |j                  rJ |j                  d	hk(  sJ |j                  t        d
d            dk(  sJ |j                  t        t                    dk(  sJ |j                  t        dd            dk(  sJ |j                  t        dz        dk(  sJ t        t        | t         h      }t#        |      }t%        |      dk(  sJ t        t        | t&        t         h      }t#        |      }|j                  |      dk(  sJ t        t        | t)        j*                  d      t         h      }t#        |      }|j                  |      dt)        j*                  | j,                        z  k(  sJ y )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    s   [(..(..(--PDt"&#Vn&&%

 8
 D <<?c!!!||~~{{?<<&&&||~~;;>????<<A';666<<A<///<<B/0OCCC<<4 H,,,AtK=1DE<....Qb6EE<<"@@@@QGMM"$5k]KEE<<";gmmDL\L\>]"]]]]r|   c                      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   j                  || |z
        }t        |      d	k(  sJ y )
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8|#$#r|   c                  *   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 y )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V	)))T#a&\!"m333Qs1vX-///SV+++SW---R=J&&&RT?l***RT?l***QrT?l***QrT?l***QtBxZ $4444QtBxZ $4444T!W...T!W...QtAwY?222QtAwY?222r|   c                  ^    t        t        d            dk(  sJ t        t              dk(  sJ y )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kD  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j+                  g d      k(  sJ y )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s1vzJq#q$9#:;<	  
 .q!4567	  
 ./E"4%9:>UUUU#D&5'Jq!Q$<O;PQR	   	q!fg|G$a('?VaS!q	E <499 &    r|   c                     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 y )	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Q'!+,===AQ'/!a%*@@AEXXXXgD)GAq!
!a%
 Cs1S5z?D;,,,,r|   c                  H    t        g d      dk(  sJ t        d      dk(  sJ y )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 5 5 . E L L      
 ] \ \ ) 9 ) = = ,
'
1a''Q0j
6>gT&
<"BY*&*@&'',T	 :?=88N4*3B,@6R8,)^F
%PhV =
874& J J
91x,7@&^R
%3& 
%N	-)r|   