
    \h                        S SK Jr  S SKJr  S SKJrJrJr  S SKJ	r	  S SK
JrJrJr  S SKJrJrJrJrJrJr  S SKJr  S SKJr  S S	KJrJr  S S
KJr  S SKJrJ r   S SK!J"r"J#r#  S SK$J%r%  S SK&J'r'  S SK(J)r)J*r*J+r+  S SK,J-r-  S SK.J/r/  S SK0J1r1  S SK2J3r3J4r4J5r5  S SK6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrC  S SKJDrD  S SKJErE  S SKFJGrGJHrHJIrIJJrJJKrK  S SKLJMrMJNrN  S SKOJPrPJQrQ  S SKRJSrSJTrT  S SKUJVrVJWrW  S SKXJYrY  S SKZJ[r[  S r\S r]S  r^S! r_S" r`S# raS$ rbS% rcS& rdS' reS( rfS) rgS* rhS+ riS, rjS- rkS. rlS/ rmS0 rnS1 roS2 rpS3 rqS4 rrS5 rsS6 rtS7 ruS8 rvS9 rwS: rxS; ryS< rzS= r{S> r|S? r}S@ r~SA rSB rSC rSD rSE rSF rSG rSH rgI)J    )Add)Expr)FunctionLambdadiff)Mod)Catalan
EulerGammaGoldenRatio)EFloatIIntegerRationalpi)Eq)S)Dummysymbols)	factorial)	conjugatesign)explog)sqrt)	Piecewise)atan2cossin)gamma)Integral)Range)For
Assignment
aug_assign)DeclarationVariablefloat32float64value_constrealbool_WhileFunctionPrototypeFunctionDefinitionintegerReturnElement)UnevaluatedExpr)
Relational)AndOrNot
EquivalentXor)MatrixMatrixSymbol)fcodeFCodePrinter)IndexedBaseIdx)ArraySymbolArrayElement)implemented_function)raisesc                  h   [        SSS9u  pn[        X-   5      n[        [        X-   5      5      n[	        USS9S:X  d   e[        S5      u  pVn[        Xg-   5      n[        [        XX-   5      5      n	[	        U	SS	9S
   R                  5       S:X  d   e[	        U	SS0S9R                  5       S:X  d   eg )Nzp q rT)r+   freesource_formatzexp(p + (q + r))x y zFhuman   zexp(re(x) + re(y + z))rerealpartuser_functionsz"exp(realpart(x) + realpart(y + z)))r   r3   absr   r<   lstrip)
pqrq_rexprxyzy_zexpr2s
             Y/var/www/auris/envauris/lib/python3.13/site-packages/sympy/printing/tests/test_fortran.pytest_UnevaluatedExprr]   #   s    gD)GA!
!%
 Cs15z?DV,0BBBBgGA!
!%
 CAE
OEe$Q'..04LLLLj'9:AACGkkkk    c                  f    [        S5      n  " S S[        5      n[        U" U 5      5      S:X  d   eg )NrW   c                       \ rS rSrS rSrg)test_printmethod.<locals>.nint2   c                 D    SUR                  U R                  S   5      -  $ )Nznint(%s)r   )_printargs)selfprinters     r\   _fcode%test_printmethod.<locals>.nint._fcode3   s    tyy| <<<r^    N)__name__
__module____qualname____firstlineno__rh   __static_attributes__rj   r^   r\   nintra   2   s    	=r^   rp   z      nint(x))r   r   r<   )rW   rp   s     r\   test_printmethodrq   /   s/    A=x = a>_,,,r^   c                    ^ [        S5      m[        SSS9n [        SSS9n[        [        T5      SSS	9S
:X  d   e[        [        U 5      SSS	9S:X  d   e[        [        U5      SSS	9S:X  d   e[        [        U4S j5        g )NrW   rX   Tr0   rY   )complex_   rE   standardrG   z#merge(0d0, dsign(1d0, x), x == 0d0)zmerge(0, isign(1, y), y == 0)z/merge(cmplx(0d0, 0d0), z/abs(z), abs(z) == 0d0)c                  ,   > [        [        T 5      5      $ N)r<   r   rW   s   r\   <lambda>!test_fcode_sign.<locals>.<lambda>?   s    d1gr^   )r   r<   r   rC   NotImplementedError)rX   rY   rW   s     @r\   test_fcode_signr~   8   s    clAc4 Ac4 Aa2V<@eeeea2V<@____a2V<@qqqq
 67r^   c                  l   [        S5      u  p[        SSS9n[        U S-  5      S:X  d   e[        XS-  -  5      S:X  d   e[        S[        U 5      S	-  XU -  -
  -  -  U S
-  U-   -  5      S:X  d   e[        [        U 5      5      S:X  d   e[        [        U5      5      S:X  d   e[        U S-  5      S:X  d   e[        [        U 5      5      S:X  d   e[        [        S5      5      S:X  d   e[        U S-  5      S:X  d   e[        U S-  SSS9S:X  d   e[        U [	        SS5      -  5      S:X  d   eg )Nx,ynTrs      z
      x**3z      x**(y**3)   g      @rK   z,      (3.5d0*sin(x))**(-x + y**x)/(x**2 + y)z      sqrt(x)z      sqrt(dble(n))g      ?
   z      sqrt(10.0d0)g      z      1d0/xg       rX   rE   rF   zy = x**(-2.0d0)   z      x**(3.0d0/7.0d0))r   r<   r   r   r   )rW   rX   r   s      r\   test_fcode_Powr   B   sI   5>DAT"AA;,&&&T0000CF3J!d(++QTAX6767 7 7a>_,,,a>2222C=O+++a>_,,,b?2222D>]***D#V48IIIIHQN"#'????r^   c                  j   [        S5      n [        [        SS5      5      S:X  d   e[        [        SS5      5      S:X  d   e[        [        SS5      5      S	:X  d   e[        [        S
S5      5      S:X  d   e[        U [        SS5      -   5      S:X  d   e[        [        SS5      U -  5      S:X  d   eg )NrW   r   r   z      3.0d0/7.0d0   	   z      2iz      -3.0d0/7.0d0z      x + 3.0d0/7.0d0z      (3.0d0/7.0d0)*x)r   r<   r   rz   s    r\   test_fcode_Rationalr   T   s    A!Q $7777"a!Y...!R!%9999"b!"&9999Xa^#$(????!Q!"&====r^   c                  l    [        [        S5      5      S:X  d   e[        [        S5      5      S:X  d   eg )NC   z      67z      -1)r<   r   rj   r^   r\   test_fcode_Integerr   ^   s0    ++++++r^   c                  l    [        [        S5      5      S:X  d   e[        [        S5      5      S:X  d   eg )Ng      E@z      42.0000000000000d0g@xz      -1.00000000000000d+20)r<   r   rj   r^   r\   test_fcode_Floatr   c   s2    t!;;;;u"????r^   c                    ^^ [        S5      u  mm[        [        T5      [        T5      -  5      S:X  d   e[	        [
        UU4S j5        [	        [
        UU4S j5        [	        [
        UU4S j5        [	        [
        UU4S j5        S H0  n [        [        TT5      U S9S	:X  d   e[        TT-  U S9S	:X  a  M0   e   g )
Nr   z      sin(x)**cos(y)c                  ,   > [        [        T T5      SS9$ NB   rw   r<   r   rW   rX   s   r\   r{   &test_fcode_functions.<locals>.<lambda>k       c!Qi"(Er^   c                     > [        T T-  SS9$ r   r<   r   s   r\   r{   r   l       a!eb(Ar^   c                  ,   > [        [        T T5      SS9$ NM   r   r   r   s   r\   r{   r   m   r   r^   c                     > [        T T-  SS9$ r   r   r   s   r\   r{   r   n   r   r^   )Z   ru   i  i  r   z      modulo(x, y))r   r<   r   r   rC   r}   r   )rw   rW   rX   s    @@r\   test_fcode_functionsr   h   s    5>DAqQ3q6!"&<<<<
 EF
 AB
 EF
 AB(SAY26JJJJQUX.2FFFF )r^   c            	      (   [        5       n [        S5      u  pp4pVn[        [        U5      [	        X-  5      -   [        XW-  5      -   5      S:X  d   e[        [        U5      SU-  U-  U[        SS5      -  -  -   5      S:X  d   e[        [        U5      [	        X-  5      -   [        XW-  5      -   SS9S:X  d   e[        U[        U5      -
  SS9S	:X  d   eU R                  U[	        U5      -  U-   S
S9S:X  d   eU R                  U[	        U5      -  SS9S:X  d   eU R                  USS9S:X  d   e[        SSS9u  p[        S5      n
[        S5      n[        S5      n[        SU	5      n[        SU5      n[        XU4   X   -  XK   SS9S:X  d   eg )Nzx,x_,x__,y,X,X_,Yz&      exp(x_) + sin(x*y) + cos(X__*Y_)rK   r   z(      2*X_**(7.0d0/2.0d0)*Y*x + exp(x__)F)name_manglingz#      exp(x_) + sin(x*y) + cos(X*Y)z      x - cos(X)me	assign_toz      me = X*sin(x_) + x__muz      mu = X*sin(x_)adz      ad = x__n,mTrs   ArW   rX   ir   rE   r   rG   zndo i = 1, m
   y(i) = 0
end do
do i = 1, m
   do I_ = 1, n
      y(i) = A(i, I_)*x(I_) + y(i)
   end do
end do)
r=   r   r<   r   r   r   r   doprintr>   r?   )obrW   x_x__rX   XX_Yr   mr   r   r   s                r\   	test_caser   t   s   	B 34AqAR3qs8#c!#h./@A A ASAaCE"hq!n"4445BC C CR3qs8#c!#h.eD=> > >SV515GGGG::aAhmt:48TTTT::aAh$:/3IIII::bD:)-====5$'DACACACACACAa4VD-57 7 7r^   c            
         [        S5      n [        S5      R                  S5      nSn[        U [        S5      -  5      SU-  :X  d   e[        U [        S5      -  5      SU-  :X  d   e[        U [        [	        S5      5      -  5      SU-  :X  d   e[        [        [	        S5      5      5      SU-  :X  d   e[        [        S5      5      S[        S5      R                  S5      -  :X  d   e[        U [        [        S5      5      -  5      SU-  :X  d   e[        U [        [        [	        S5      5      5      -  5      SU-  :X  d   eg )NrW   r      z0.8340324452479558d0z      x*%sd0z
      %sd0z
      x*%s)r   r   evalfr<   r   r   )rW   log10_17loglog10_17s      r\   "test_fcode_functions_with_integersr      s   s|A2w}}R H(KSW(!::::SW(!::::S2Z NX$====QrUx 7777R>\CGMM",=====SR\!"l[&@@@@SQrU_$%)CCCCr^   c                     Sn [        5       n[        [        5      S[        R                  " U 5      -  :X  d   e[        [        5      S[        R                  " U 5      -  :X  d   e[        [
        5      S[
        R                  " U 5      -  :X  d   e[        [        5      S[        R                  " U 5      -  :X  d   e[        [        5      S[        R                  " U 5      -  :X  d   e[        [        SS9S[        R                  " S5      -  :X  d   e[        [        S	S
9[        UR                  [        R                  " U 5      5      41[        5       S4:X  d   e[        [        S	S
9[        UR                  [        R                  " U 5      5      41[        5       S4:X  d   e[        [
        S	S
9[
        UR                  [
        R                  " U 5      5      41[        5       S4:X  d   e[        [        S	S
9[        UR                  [        R                  " U 5      5      41[        5       S4:X  d   e[        [        S	S
9[        UR                  [        R                  " U 5      5      41[        5       S4:X  d   e[        [        SS	S9[        UR                  [        R                  " S5      5      41[        5       S4:X  d   eg )Nr   z.      parameter (Catalan = %sd0)
      Catalanz4      parameter (EulerGamma = %sd0)
      EulerGammaz"      parameter (E = %sd0)
      Ez6      parameter (GoldenRatio = %sd0)
      GoldenRatioz$      parameter (pi = %sd0)
      pi   )	precisionFrI   z      Catalanz      EulerGammaz      Ez      GoldenRatioz      pi)r   rJ   )
r=   r<   r	   r   r
   r   r   r   rd   set)precrR   s     r\   test_fcode_NumberSymbolr      s   DA>NQXQ^Q^_cQddddd WZdZjZjkoZp pppp8<qwwt}LLLL!Z]h]n]nos]t!tttt9?"((4.PPPP
aCbhhqkQR R R&	!((7==./0,2365/+K K K K5)
AHH=  0! /"#&5*<.> > > >% 
QXXaggdm$	%&y%: : : :E*ahh$?! 1" 0#$'E+>/@ @ @ @5!
ahhrxx~&	'(#%&= = = =q.
ahhrxx{#	$%suj3: : : :r^   c                     [        [        5      S:X  d   e[        S5      n [        S[        -  5      S:X  d   e[        SS[        -  -   5      S:X  d   e[        SS[        -  -   U -   5      S:X  d   e[        [        U -  5      S:X  d   e[        SS[        -  -   U -
  5      S	:X  d   e[        SS
S9n [        SU -  5      S:X  d   e[        [        U -  5      S:X  d   e[        SU -   5      S:X  d   eg )Nz      cmplx(0,1)rW      z      cmplx(0,4)r   z      cmplx(3,4)z      cmplx(3,4) + xz      cmplx(0,1)*xz      cmplx(3,4) - xT)	imaginaryr   z	      5*xz      x + 3)r<   r   r   rz   s    r\   test_fcode_complexr      s    8))))A1:++++QqS>////QqS1!77771:----QqS1!7777t$A1:$$$1:----Q<=(((r^   c                      [        S5      u  p[        [        U 5      5      S:X  d   e[        [        X5      5      S:X  d   e[        [	        U 5      5      S:X  d   eg )Nr   z      sin(x)z      atan2(x, y)z      conjg(x))r   r<   r   r   r   r   s     r\   test_implicitr      sS    5>DAQ=N***q!44441"2222r^   c                  b   [        S5      n [        S5      n[        [        5         [	        [        U 5      5        S S S 5        [	        [        [        U 5      5      SS9S:X  d   e[        [        5         [	        U" U 5      5        S S S 5        g ! , (       d  f       NZ= f! , (       d  f       g = f)NrW   gF)strictzHC     Not supported in Fortran:
C     Integral
      Integral(sin(x), x))r   r   rC   r}   r<   r    r!   r   )rW   r   s     r\   test_not_fortranr      s    AA	#	$eAh 
%#a&!%0  5A  A  A  A	#	$ad 
%	$ 
%	$ 
%	$s   B4B 
B 
B.c                  ,   [        S5      n [        [        U 5      SS0S9S:X  d   e[        S5      n [        [        U 5      SS0S9S:X  d   e[	        S	5      n[        U" U 5      S	S
0S9S:X  d   e[        SSS9n[        [        U5      SS0S9S:X  d   eg )NrW   r   zsinrN   z      zsin(x)r    mygammaz      mygamma(x)r   greatz      great(x)r   Trs   r   fctz      fct(n))r   r<   r   r    r   r   )rW   r   r   s      r\   test_user_functionsr      s    AQ8OKKKAa'9!57:LM M MA1sGn59IIIIT"A!k5%9;>LM M Mr^   c            	         [        S5      n [        S[        U SU -  5      5      n[        U" U 5      5      S:X  d   e[        S[        U S[        -  U -  5      5      n[        U" U 5      5      S[        R
                  " S5      -  :X  d   e[        S5      n[        S[        S	S
S95      n[        S[        X SU -   -  SU -   -  5      5      n[        U" X#   5      X#   S9S:X  d   eg )NrW   r   rK   z	      2*xz(      parameter (pi = %sd0)
      2*pi/xr   r   r   r   Trs   r   r   zI      do i = 1, n
         A(i) = (A(i) + 1)*(A(i) + 2)*A(i)
      end do)r   rB   r   r<   r   r   r>   r?   )rW   r   r   r   s       r\   test_inline_functionr      s    AS&AaC.1A1;+%%%S&AbDF"34A1;	
    	CACd+,AS&q1uIq1u,=">?A14AD)	  r^   c                  L    [        S5      n [        [        U 5      SS9S:X  d   eg )NrW   sr   z      s = sin(x))r   r<   r   rz   s    r\   test_assign_tor      s%    AQ3'+====r^   c                      [        S5      u  p[        X-   S-  R                  5       SS9S:X  d   e[        S5       Vs/ s H  o U-  PM	     nn[        [	        U6 5      S:X  d   eg s  snf )Nr   r   varr   z      var = x**10 + 10*x**9*y + 45*x**8*y**2 + 120*x**7*y**3 + 210*x**6*
     @ y**4 + 252*x**5*y**5 + 210*x**4*y**6 + 120*x**3*y**7 + 45*x**2*y
     @ **8 + 10*x*y**9 + y**10   zR      x**10 + x**9 + x**8 + x**7 + x**6 + x**5 + x**4 + x**3 + x**2 + x
     @ + 1)r   r<   expandranger   )rW   rX   r   es       r\   test_line_wrappingr      sz    5>DA152+%%'59	)  
 Ry!y!AyA!a>	   	"s   A&c                  $   [        S5      u  p[        [        X:  XS-   :  5      SS9S:X  d   e[        [        X:  XS-   :  5      SS9S:X  d   e[        [	        X:  XS-   :  SS9SS9S	:X  d   e[        [        X:  XS-   :  5      SS9S
:X  d   eg )Nx yr   rE   rF   zx < y .and. y < x + 1zx < y .or. y < x + 1Fevaluatezx < y .neqv. y < x + 1zx < y .eqv. y < x + 1)r   r<   r5   r6   r9   r8   r   s     r\   test_fcode_precedencer   
  s    5>DAQUAAI&f=     AE11u9%V<  QUAAI6!9: : :AE11u9-VD     r^   c            	      >   [        S5      u  pn[        [        U 5      SS9S:X  d   e[        [        X5      SS9S:X  d   e[        [        U [        U5      5      SS9S:X  d   e[        [        [        U 5      U5      SS9S:X  d   e[        [        [        U 5      [        U5      5      SS9S:X  d   e[        [        [        X5      S	S
9SS9S:X  d   e[        [	        X5      SS9S:X  d   e[        [	        U [        U5      5      SS9S:X  d   e[        [	        [        U 5      U5      SS9S:X  d   e[        [	        [        U 5      [        U5      5      SS9S:X  d   e[        [        [	        X5      S	S
9SS9S:X  d   e[        [        [	        X5      U 5      SS9S:X  d   e[        [        [	        X 5      U5      SS9S:X  d   e[        [        [	        X5      U5      SS9S:X  d   e[        [	        [        X5      U 5      SS9S:X  d   e[        [	        [        X 5      U5      SS9S:X  d   e[        [	        [        X5      U5      SS9S:X  d   e[        [        XU5      SS9S:X  d   e[        [        X[        U5      5      SS9S:X  d   e[        [        U [        U5      U5      SS9S:X  d   e[        [        [        U 5      X5      SS9S:X  d   e[        [        [        XU5      S	S
9SS9S:X  d   e[        [	        XU5      SS9S:X  d   e[        [	        X[        U5      5      SS9S:X  d   e[        [	        U [        U5      U5      SS9S:X  d   e[        [	        [        U 5      X5      SS9S:X  d   e[        [        [	        XU5      S	S
9SS9S :X  d   eg )!NrH   rE   rF   z.not. xz	x .and. yzx .and. .not. yzy .and. .not. xz.not. x .and. .not. yFr   z.not. (x .and. y)zx .or. yzx .or. .not. yzy .or. .not. xz.not. x .or. .not. yz.not. (x .or. y)zx .and. (y .or. z)zy .and. (x .or. z)zz .and. (x .or. y)zx .or. y .and. zzy .or. x .and. zzz .or. x .and. yzx .and. y .and. zzx .and. y .and. .not. zzx .and. z .and. .not. yzy .and. z .and. .not. xz.not. (x .and. y .and. z)zx .or. y .or. zzx .or. y .or. .not. zzx .or. z .or. .not. yzy .or. z .or. .not. xz.not. (x .or. y .or. z))r   r<   r7   r5   r6   rW   rX   rY   s      r\   test_fcode_Logicalr     s   gGA!Qv.);;;Q&1[@@@QAv6:KKKKSVQv6:KKKKSVSV$F;     SY/vF   A0J>>>As1vf59IIIICFAf59IIIICFCF#6:  RX.fE   RXq!8<PPPPRXq!8<PPPPRXq!8<PPPPCIq!8<NNNNCIq!8<NNNNCIq!8<NNNNQ1V48KKKKQ3q6"&9!" " "QA"&9!" " "SVQ"&9!" " "Sq\E2&I#$ $ $ A!F37HHHHA#a&!8     As1vq!8     CFA!8     Ra[51H!" " "r^   c            
         [        S5      u  pn[        [        XSS9SS9S:X  d   e[        [        U [        U5      SS9SS9S:X  d   e[        [        [        U 5      USS9SS9S:X  d   e[        [        [        U 5      [        U5      SS9SS9S	:X  d   e[        [        [        XSS9SS9SS9S
:X  d   e[        [	        X5      SS9S:X  d   e[        [	        U [        U5      5      SS9S:X  d   e[        [	        [        U 5      U5      SS9S:X  d   e[        [	        [        U 5      [        U5      5      SS9S:X  d   e[        [        [	        X5      SS9SS9S:X  d   e[        [	        [        X5      U 5      SS9S:X  d   e[        [	        [        X 5      U5      SS9S:X  d   e[        [	        [        X5      U5      SS9S:X  d   e[        [        [	        X5      U 5      SS9S:X  d   e[        [        [	        X 5      U5      SS9S:X  d   e[        [        [	        X5      U5      SS9S:X  d   e[        [	        [        X5      U 5      SS9S:X  d   e[        [	        [        X 5      U5      SS9S:X  d   e[        [	        [        X5      U5      SS9S:X  d   e[        [        [	        X5      U 5      SS9S:X  d   e[        [        [	        X 5      U5      SS9S:X  d   e[        [        [	        X5      U5      SS9S:X  d   e[        [	        [        XSS9U 5      SS9S:X  d   e[        [	        [        X SS9U5      SS9S:X  d   e[        [	        [        XSS9U5      SS9S:X  d   e[        [        [	        X5      U SS9SS9S:X  d   e[        [        [	        X 5      USS9SS9S :X  d   e[        [        [	        X5      USS9SS9S!:X  d   e[        [        [        X5      U SS9SS9S":X  d   e[        [        [        X 5      USS9SS9S#:X  d   e[        [        [        X5      USS9SS9S$:X  d   e[        [        [        XSS9U 5      SS9S%:X  d   e[        [        [        X SS9U5      SS9S&:X  d   e[        [        [        XSS9U5      SS9S':X  d   e[        [        [        X5      U SS9SS9S(:X  d   e[        [        [        X 5      USS9SS9S):X  d   e[        [        [        X5      USS9SS9S*:X  d   e[        [        [        XSS9U 5      SS9S+:X  d   e[        [        [        X SS9U5      SS9S,:X  d   e[        [        [        XSS9U5      SS9S-:X  d   e[        [        XUSS9SS9S.:X  d   e[        [        X[        U5      SS9SS9S/:X  d   e[        [        U [        U5      USS9SS9S0:X  d   e[        [        [        U 5      XSS9SS9S1:X  d   eg )2NrH   Fr   rE   rF   z
x .neqv. yzx .neqv. .not. yzy .neqv. .not. xz.not. x .neqv. .not. yz.not. (x .neqv. y)z	x .eqv. yzx .eqv. .not. yzy .eqv. .not. xz.not. x .eqv. .not. yz.not. (x .eqv. y)zx .eqv. y .and. zzy .eqv. x .and. zzz .eqv. x .and. yzx .and. (y .eqv. z)zy .and. (x .eqv. z)zz .and. (x .eqv. y)zx .eqv. y .or. zzy .eqv. x .or. zzz .eqv. x .or. yzx .or. (y .eqv. z)zy .or. (x .eqv. z)zz .or. (x .eqv. y)zx .eqv. (y .neqv. z)zy .eqv. (x .neqv. z)zz .eqv. (x .neqv. y)zx .neqv. (y .eqv. z)zy .neqv. (x .eqv. z)zz .neqv. (x .eqv. y)zx .neqv. y .and. zzy .neqv. x .and. zzz .neqv. x .and. yzx .and. (y .neqv. z)zy .and. (x .neqv. z)zz .and. (x .neqv. y)zx .neqv. y .or. zzy .neqv. x .or. zzz .neqv. x .or. yzx .or. (y .neqv. z)zy .or. (x .neqv. z)zz .or. (x .neqv. y)zx .neqv. y .neqv. zzx .neqv. y .neqv. .not. zzx .neqv. z .neqv. .not. yzy .neqv. z .neqv. .not. x)r   r<   r9   r7   r8   r5   r6   r   s      r\   test_fcode_Xlogicalr   G  s*   gGA!QE*&A  QA/vF  SVQ/vF  SVSVe4!9: : :S.?!56 6 6 A!8KGGGAs1v&f=  CFA&f=  CFCF+6B     Z%6!45 5 5 CIq)@  CIq)@  CIq)@  Z%q)@  Z%q)@  Z%q)@   BqHa(?  BqHa(?  BqHa(?  Jq$a(?  Jq$a(?  Jq$a(?   Cu5q9!78 8 8Cu5q9!78 8 8Cu5q9!78 8 8Z%q59!78 8 8Z%q59!78 8 8Z%q59!78 8 8 SYE2&I  SYE2&I  SYE2&I  S.2&I  S.2&I  S.2&I   RXq51H  RXq51H  RXq51H  Cu-q1H  Cu-q1H  Cu-q1H   Q1u-VD  Q3q6E2&I#$ $ $QAE2&I#$ $ $SVQE2&I#$ $ $r^   c                  V   [        S5      u  p[        [        XS5      SS9S:X  d   e[        [        XS5      SS9S:X  d   e[        [        XS5      SS9S	:X  d   e[        [        XS
5      SS9S:X  d   e[        [        XS5      SS9S:X  d   e[        [        XS5      SS9S:X  d   eg )Nr   z==rE   rF   zx == yz!=zx /= yz>=zx >= yz<=zx <= y>zx > y<zx < y)r   r<   r4   r   s     r\   test_fcode_Relationalr     s    5>DAA$'v>(JJJA$'v>(JJJA$'v>(JJJA$'v>(JJJA#&f=HHHA#&f=HHHr^   c            	        ^ [        S5      n [        X S:  4U S-  S45      m[        [        U4S j5        [	        TSS9nSnX:X  d   e[	        [        X S:  4U S-  S45      S	S
9S:X  d   e[        U 5      U -  n[        U 5      U -  n[        S5       H  n[        X05      n[        X@5      nM     Sn[	        [        X0S:  4US45      SS
9nX:X  d   e[	        [        X S:  4U S-  U S:  4[        U 5      S45      SS9nSnX:X  d   e[        X S:  4U S-  U S:  4[        U 5      U S:  45      m[        [        U4S j5        g )NrW   r   rK   Tc                     > [        T 5      $ ry   r   rV   s   r\   r{   &test_fcode_Piecewise.<locals>.<lambda>  s	    dr^   ru   r   z      merge(x, x**2, x < 1)r   r   zR      if (x < 1) then
         var = x
      else
         var = x**2
      end ifr   a/        if (x < 0) then
         weird_name = -cos(x)/x + 10*sin(x)/x**2 + 90*cos(x)/x**3 - 720*
     @ sin(x)/x**4 - 5040*cos(x)/x**5 + 30240*sin(x)/x**6 + 151200*cos(x
     @ )/x**7 - 604800*sin(x)/x**8 - 1814400*cos(x)/x**9 + 3628800*sin(x
     @ )/x**10 + 3628800*cos(x)/x**11
      else
         weird_name = -sin(x)/x - 10*cos(x)/x**2 + 90*sin(x)/x**3 + 720*
     @ cos(x)/x**4 - 5040*sin(x)/x**5 - 30240*cos(x)/x**6 + 151200*sin(x
     @ )/x**7 + 604800*cos(x)/x**8 - 1814400*sin(x)/x**9 - 3628800*cos(x
     @ )/x**10 + 3628800*sin(x)/x**11
      end ifr   
weird_namez1      merge(x, merge(x**2, sin(x), x > 1), x < 1)c                     > [        T 5      $ ry   r   r   s   r\   r{   r     s	    uT{r^   )
r   r   rC   r}   r<   r   r   r   r   
ValueError)rW   codeexpectedabr   rV   s         @r\   test_fcode_Piecewiser     sk   AaQZ!Q$.D
 34#D,HA1u:1d|4F	   	AqAAqA2YJJ 
	  A1u:4y1\JDA1u:1a!e}s1vtnEPRSDBHaQZ!Q$AQQ@D
:*+r^   c                      [        5       n / SQnU R                  U5      n/ SQnU H  n[        U5      S::  a  M   e   [        X#5       H  u  pVXV:X  a  M   e   [        U5      [        U5      :X  d   eg )N)zbC     This is a long comment on a single line that must be wrapped properly to produce nice outputzf      this = is + a + long + and + nasty + fortran + statement + that * must + be + wrapped + properlyzg      this = is + a + long + and + nasty + fortran + statement +  that * must + be + wrapped + properlyzh      this = is + a + long + and + nasty + fortran + statement +   that * must + be + wrapped + properlyzd      this = is + a + long + and + nasty + fortran + statement + that*must + be + wrapped + properlyzf      this = is + a + long + and + nasty + fortran + statement +   that*must + be + wrapped + properlyzg      this = is + a + long + and + nasty + fortran + statement +    that*must + be + wrapped + properlyzh      this = is + a + long + and + nasty + fortran + statement +     that*must + be + wrapped + properlyze      this = is + a + long + and + nasty + fortran + statement + that**must + be + wrapped + properlyzf      this = is + a + long + and + nasty + fortran + statement +  that**must + be + wrapped + properlyzg      this = is + a + long + and + nasty + fortran + statement +   that**must + be + wrapped + properlyzh      this = is + a + long + and + nasty + fortran + statement +    that**must + be + wrapped + properlyzi      this = is + a + long + and + nasty + fortran + statement +     that**must + be + wrapped + properlyzc      this = is + a + long + and + nasty + fortran + statement(that)/must + be + wrapped + properlyzg      this = is + a + long + and + nasty + fortran +     statement(that)/must + be + wrapped + properly)zBC     This is a long comment on a single line that must be wrappedz%C     properly to produce nice outputzG      this = is + a + long + and + nasty + fortran + statement + that *%     @ must + be + wrapped + properlyzH      this = is + a + long + and + nasty + fortran + statement +  that *r   G      this = is + a + long + and + nasty + fortran + statement +   thatz'     @ * must + be + wrapped + properlyzF      this = is + a + long + and + nasty + fortran + statement + that*r   zH      this = is + a + long + and + nasty + fortran + statement +   that*r   H      this = is + a + long + and + nasty + fortran + statement +    thatz&     @ *must + be + wrapped + properly@      this = is + a + long + and + nasty + fortran + statement +z*     @ that*must + be + wrapped + properlyzG      this = is + a + long + and + nasty + fortran + statement + that**r   zH      this = is + a + long + and + nasty + fortran + statement +  that**r   r   '     @ **must + be + wrapped + properlyr   r   r   z+     @ that**must + be + wrapped + properlyzE      this = is + a + long + and + nasty + fortran + statement(that)/r   zH      this = is + a + long + and + nasty + fortran +     statement(that)z&     @ /must + be + wrapped + properlyH   )r=   _wrap_fortranlenzip)rg   lineswrapped_linesexpected_lineslinewr   s          r\   test_wrap_fortranr	    sx    nGE" ))%0MN@ 4yB M2vv 3}^!4444r^   c                  V    [        5       n / SQn/ SQnU R                  U5      U:X  d   eg )N)H      this_variable_is_very_long_because_we_try_to_test_line_break=1.0d0zI      this_variable_is_very_long_because_we_try_to_test_line_break =1.0d0zK      this_variable_is_very_long_because_we_try_to_test_line_break  = 1.0d0zL      this_variable_is_very_long_because_we_try_to_test_line_break   = 1.0d0zM      this_variable_is_very_long_because_we_try_to_test_line_break    = 1.0d0zK      this_variable_is_very_long_because_we_try_to_test_line_break = 10.0d0)r  D      this_variable_is_very_long_because_we_try_to_test_line_break =     @ 1.0d0zE      this_variable_is_very_long_because_we_try_to_test_line_break  =r  zF      this_variable_is_very_long_because_we_try_to_test_line_break   =r  zG      this_variable_is_very_long_because_we_try_to_test_line_break    =r  r  z     @ 10.0d0r=   r  rg   r  r   s      r\   test_wrap_fortran_keep_d0r    s2    nGEH   '8333r^   c                  &    [        [        S 5        g )Nc                  (    [        [        S5      SS9$ )Nr   garbage)method)r<   r   rj   r^   r\   r{   test_settings.<locals>.<lambda>6  s    eAaD;r^   )rC   	TypeErrorrj   r^   r\   test_settingsr  5  s    
9;<r^   c                  h    [        S5      u  p[        [        U 5      [        U5      -   SS9S:X  d   eg )Nr   rE   rF   zsin(y) + cos(x))r   r<   r   r   r   s     r\   test_free_form_code_liner  9  s/    5>DAQ#a&7;LLLLr^   c                      [        S5      u  p[        [        U 5      [        U5      -   S-  R	                  5       SS9nSnX#:X  d   eg )Nr   r   rE   rF   zsin(y)**7 + 7*sin(y)**6*cos(x) + 21*sin(y)**5*cos(x)**2 + 35*sin(y)**4* &
      cos(x)**3 + 35*sin(y)**3*cos(x)**4 + 21*sin(y)**2*cos(x)**5 + 7* &
      sin(y)*cos(x)**6 + cos(x)**7)r   r<   r   r   r   )rW   rX   resultr   s       r\    test_free_form_continuation_liner  >  sK    5>DASVc!f_*224FKF	- 
 r^   c                  Z    [        SS05      n S/nSS/nU R                  U5      U:X  d   eg )NrG   rE   z^! This is a long comment on a single line that must be wrapped properly to produce nice outputzG! This is a long comment on a single line that must be wrapped properlyz! to produce nice outputr  r  s      r\   test_free_form_comment_liner  I  sA    OV45GnoEQ"$H   '8333r^   c                     [        SSS9u  p[        S5      n[        S5      n[        S5      n[        SU5      n[        SU 5      nS	n[        X%U4   X6   -  XE   S
S9nXSS0-  :X  d#  XSS0-  :X  d  XSS0-  :X  d  XSS0-  :X  d   eg g g g )Nr   Trs   r   rW   rX   r   jz_do i = 1, m
   y(i) = 0
end do
do i = 1, m
   do j = 1, n
      y(i) = %(rhs)s
   end do
end dorE   r   rhszy(i) + A(i, j)*x(j)zy(i) + x(j)*A(i, j)zx(j)*A(i, j) + y(i)zA(i, j)*x(j) + y(i))r   r>   r?   r<   )	r   r   r   rW   rX   r   r   r   r   s	            r\   
test_loopsr"  R  s    5$'DACACACACACA	  a4VDD'<==='<==='<==='<===? > > > > >r^   c                      [        SS[        S9u  p[        S5      n[        S5      n[        X5      n SU R                  R
                  UR
                  S.-  n[        X    X0   SS	9nXT:X  d   eg )
Nzi mT)r0   clsrW   rX   zMdo i_%(icount)i = 1, m_%(mcount)i
   y(i_%(icount)i) = x(i_%(icount)i)
end do)icountmcountrE   r   )r   r   r>   r?   labeldummy_indexr<   )r   r   rW   rX   r   r   s         r\   test_dummy_loopsr)  l  st    5$E2DACACAA	A	 77&&!--@	AH
 V<Dr^   c                  &   Sn [        SU 4S9n[        SU 4S9n[        SU S-
  4S9n[        SU S-
  5      n[        X4   XS-      X   -
  X$S-      X$   -
  -  5      n[        UR                  UR
                  SS	9nUR                  S
5      (       d   eg )Nr   rX   shaperW   Dyr   r   F)r   contract+Dy(i) = (y(i + 1) - y(i))/(x(i + 1) - x(i)))r>   r?   r   r<   r!  lhsendswith)len_yrX   rW   r-  r   r   code0s          r\   2test_fcode_Indexed_without_looking_for_contractionr4  {  s    ECx(ACx(A	T%'	,BCqAQ3q1vad{+,A!%%15559E>>GHHHHr^   c                    ^ Sn [        SU 4S9n[        SU 4S9n[        SU S-
  4S9n[        SU S-
  5      n[        X4   XS-      X   -
  X$S-      X$   -
  -  5      n[        [	        UR
                  UR                  5      5      nUR                  S5      (       d   e " S	 S
[        [        5      mUR                  U4S jUR                  [        5       5       5      n[        X4   XS-      X   -
  X$S-      X$   -
  -  5      n[        [	        UR
                  UR                  5      5      nUR                  S5      (       d   eg )Nr   rX   r+  rW   r-  r   r   r/  c                       \ rS rSrSrg).test_element_like_objects.<locals>.ElementExpri  rj   N)rk   rl   rm   rn   ro   rj   r^   r\   ElementExprr7    s    r^   r8  c              3   `   >#    U  H#  oT" UR                   UR                  5      4v   M%     g 7fry   )nameindices).0r   r8  s     r\   	<genexpr>,test_element_like_objects.<locals>.<genexpr>  s%     T<Qq;qvvqyy12<Qs   +.)r@   r?   r   r<   r$   r0  r!  r1  r2   r   subsatomsrA   )r2  rX   rW   r-  r   r   r3  r8  s          @r\   test_element_like_objectsrA    s'   ECx(ACx(A	T%'	,BCqAQ3q1vad{+,A*QUUAEE*+E>>GHHHHgt  	
TAGGL<QTTAQ3q1vad{+,A*QUUAEE*+E>>GHHHHr^   c                       " S S[         5      n U " 5       n[        S5      nUR                  [        U5      S5      S:X  d   eg )Nc                   H    \ rS rSr\R
                  R                  5       rSrg)1test_derived_classes.<locals>.MyFancyFCodePrinteri  rj   N)rk   rl   rm   rn   r=   _default_settingscopyro   rj   r^   r\   MyFancyFCodePrinterrD    s    (::??Ar^   rG  rW   borkz      bork = sin(x))r=   r   r   r   )rG  rg   rW   s      r\   test_derived_classesrI    sA    Bl B "#GA??3q66*.CCCCr^   c                  V    Sn Sn[        SS05      nUR                  U 5      nX1:X  d   eg )Nau  subroutine test(a)
integer :: a, i, j

do
do 
do j = 1, 5
if (a>b) then
if(b>0) then
a = 3
donot_indent_me = 2
do_not_indent_me_either = 2
ifIam_indented_something_went_wrong = 2
if_I_am_indented_something_went_wrong = 2
end should not be unindented here
end if
endif
end do
end do
enddo
end subroutine

subroutine test2(a)
integer :: a
do
a = a + 1
end do 
end subroutine
a  subroutine test(a)
integer :: a, i, j

do
   do 
      do j = 1, 5
         if (a>b) then
            if(b>0) then
               a = 3
               donot_indent_me = 2
               do_not_indent_me_either = 2
               ifIam_indented_something_went_wrong = 2
               if_I_am_indented_something_went_wrong = 2
               end should not be unindented here
            end if
         endif
      end do
   end do
enddo
end subroutine

subroutine test2(a)
integer :: a
do
   a = a + 1
end do 
end subroutine
rG   rE   )r=   indent_code)	codelinesr   rR   r  s       r\   test_indentrM    sA    	 <	 : 	ov./A]]9%Fr^   c            	      :   [        S5      u  pn[        X-  [        SU -   US:  4US45      [        U5      /5      n[	        SSS5      n[        X45      S:X  d   e[        SUS	   -  U S:  4US	   S45      [        US
   5      -   US   -   n[        USS9S:X  d   e[	        SSS5      n[	        SSS5      n[        [        US
   5      S[        US	   5      /US
   US	   -   US   S/SUS   -  US
   -  [        US   5      S-   S//5      n[        X5      S:X  d   eg )Nzx,y,zrK   r   Tr   r   r   z      A(1, 1) = x*y
      if (y > 0) then
         A(2, 1) = x + 2
      else
         A(2, 1) = y
      end if
      A(3, 1) = sin(z))rK   r   )r   r   r   r   ru   r   z?      merge(2*A(3, 1), A(3, 1), x > 0) + sin(A(2, 1)) + A(1, 1)rS   r   M)r   r   )r   r   r   z      M(1, 1) = sin(q(2, 1))
      M(2, 1) = q(2, 1) + q(3, 1)
      M(3, 1) = 2*q(5, 1)/q(2, 1)
      M(1, 2) = 0
      M(2, 2) = q(4, 1)
      M(3, 2) = sqrt(q(1, 1)) + 4
      M(1, 3) = cos(q(3, 1))
      M(2, 3) = 5
      M(3, 3) = 0)r   r:   r   r   r;   r<   r   r   )	rW   rX   rY   matr   rV   rS   rP  r   s	            r\   test_Matrix_printingrR    sh   gGA!
!#y!a%14y93q6B
CCS!QA=	!" " " a$iQ'!D'49C$LH1T7RD#IK K K 	S!QAS!QAQsVaQsV-	
3!C&!D'1%	
1T71S6	4#<!+Q/1 	2A ;		 	 	r^   c            	          [        S5      u  p[        U [        SSS5      [        XU-  5      /5      n[	        U5      nUS:X  d   eg )Nr   r   r   rK   z2      do x = 0, 9, 2
         y = x*y
      end do)r   r#   r"   r$   r<   )rW   rX   fsols       r\   test_fcode_ForrV    sO    5>DAAuQAA1u!5 67A
(C " # # #r^   c                     S n [        SSS9n[        R                  " U5      n[        U5      nU " US5        [        S5      u  pE[        U[        S[
        1S9n[        U5      nU " US	5        [        U[        S
9n[        U5      n	U " U	S5        U " [        S5        U " [        S5        U " [        S[        [        0S9  U " [        S[        [        0S9  g )Nc                 .    [        U 4SSS.UD6U:X  d   eg )Nru   rE   rv   r   )rV   refkwargss      r\   check%test_fcode_Declaration.<locals>.check  s!    TGBfGG3NNNr^   r   Trs   zinteger*4 :: ir   *   )valueattrszreal*4, parameter :: x = 42typezlogical :: yzreal*4zreal*8)type_aliases)	r   r'   deducedr&   r(   r*   r,   r)   r+   )
r[  r   var1dcl1rW   rX   var2dcl2bvar3dcl3s
             r\   test_fcode_Declarationrj    s    O 	T"AADtD	$ ! 5>DAAwb>DE	%./AE"DtD	$	'8	'8	$g7	$g7r^   c                      [        SSS5      n [        SSS5      n[        SSS5      n[        U S   5      S:X  d   e[        SU S   -  5      S:X  d   eUS   R                  X U-
  5      n[        U5      S	:X  d   eg )
Nr   r   r   BCrO  z      A(1, 1)z      3*A(1, 1)z      (A - B)(1, 1))r;   r<   r?  )r   rl  rm  Fs       r\   test_MatrixElement_printingro  '  s    S!QAS!QAS!QA4>_,-,QtW!2232	$QAA8,,-,r^   c                  P    [        S5      n [        [        U SS5      SS9S:X  d   eg )NrW   +r   rE   rF   z	x = x + 1)r   r<   r%   rz   s    r\   test_aug_assignrr  4  s)    AAsA&f=LLLr^   c            
      ~    [        S5      n [        [        [        U 5      S:  [	        U SS5      /5      SS9S:X  d   eg )NrW   r   -rE   rF   z)do while (abs(x) > 1)
   x = x - 1
end do)r   r<   r-   rP   r%   rz   s    r\   
test_Whileru  9  sD    As1vzJq#q$9#:;6R	  r^   c                     ^ [        S5      n [        SSS9n[        U [        S9n[        U[        S9n[	        [        SX#/5      m[        [        U4S j5        g )NrW   r   Trs   r`  powerc                     > [        T 5      $ ry   r   )fp1s   r\   r{   .test_FunctionPrototype_print.<locals>.<lambda>J  	    c
r^   )r   r'   r+   r0   r.   rC   r}   )rW   r   vxvnry  s       @r\   test_FunctionPrototype_printr~  B  sN    AT"A	!$	B	!'	"B
D'B8
4C  23r^   c                     ^ [        S5      n [        SSS9n[        U [        S9n[        U[        S9n[	        X U-  5      [        U 5      /n[        [        SX#/U5      m[        [        U4S j5        g )NrW   r   Trs   r`  rw  c                     > [        T 5      $ ry   r   )fd1s   r\   r{   /test_FunctionDefinition_print.<locals>.<lambda>V  r{  r^   )	r   r'   r+   r0   r$   r1   r/   rC   r}   )rW   r   r|  r}  bodyr  s        @r\   test_FunctionDefinition_printr  M  sg    AT"A	!$	B	!'	"BqQ$+D
T7RHd
;C  23r^   N)sympy.core.addr   sympy.core.exprr   sympy.core.functionr   r   r   sympy.core.modr   
sympy.corer	   r
   r   sympy.core.numbersr   r   r   r   r   r   sympy.core.relationalr   sympy.core.singletonr   sympy.core.symbolr   r   (sympy.functions.combinatorial.factorialsr   $sympy.functions.elementary.complexesr   r   &sympy.functions.elementary.exponentialr   r   (sympy.functions.elementary.miscellaneousr   $sympy.functions.elementary.piecewiser   (sympy.functions.elementary.trigonometricr   r   r   'sympy.functions.special.gamma_functionsr    sympy.integrals.integralsr!   sympy.sets.fancysetsr"   sympy.codegenr#   r$   r%   sympy.codegen.astr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   sympy.logic.boolalgr5   r6   r7   r8   r9   sympy.matricesr:   r;   sympy.printing.fortranr<   r=   sympy.tensorr>   r?   sympy.tensor.array.expressionsr@   rA   sympy.utilities.lambdifyrB   sympy.testing.pytestrC   r]   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  r  r  r"  r)  r4  rA  rI  rM  rR  rV  rj  ro  rr  ru  r~  r  rj   r^   r\   <module>r     sk      8 8  9 9 C C $ " . > B = 9 : F F 9 . & 5 5! ! ! ! , , = = / 6 ) D 9 '	l-8@$>,
@
	G7>
D:0)3
M&>
	 ."b`$FI(,V95x44=M
4?4II&D=~ F#82
.M
4	4r^   