
    goH                        d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d dlZ ed	          \  ZZZd
 Zd Zd Zd Zd Zed             Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'ed             Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d  Z1d! Z2d" Z3d# Z4d$ Z5d% Z6d& Z7d' Z8d( Z9d) Z:dS )*    )StringIO)SsymbolsEqpiCatalan
EulerGammaFunction)Equality)	Piecewise)MatrixMatrixSymbol)JuliaCodeGencodegenmake_routine)XFAILNzx,y,zc                      t                      } t                      }|                     g |ddd           |                                }|dk    sJ d S )NfileFheaderempty )r   r   dump_jlgetvalue)code_genoutputsources      d/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/utilities/tests/test_codegen_julia.pytest_empty_jl_coder      sS    ~~HZZFRUCCC__FR<<<<<<    c                      dt           t          z   t          z  f} t          | ddd          \  }|d         dk    sJ |d         }d}||k    sJ d S )	NtestJuliaFr   r   test.jl   zCfunction test(x, y, z)
    out1 = z .* (x + y)
    return out1
end
xyzr   	name_exprresultr   expecteds       r   test_jl_simple_coder.      sm    !a%#IieDDDGF!9	!!!!AYF	  Xr    c                      dt           t          z   t          z  f} t          | ddd          \  }|d         dk    sJ |d         }d	t          j        z   d
z   }||k    sJ d S )Nr"   r#   TFr   r   r$   r%   #   Code generated with SymPy z
#
#   See http://www.sympy.org/ for more information.
#
#   This file is part of 'project'
function test(x, y, z)
    out1 = z .* (x + y)
    return out1
end
)r'   r(   r)   r   sympy__version__r*   s       r   test_jl_simple_code_with_headerr3   %   s~    !a%#IiUCCCGF!9	!!!!AYF(5+<< @ 	  Xr    c                      t          t          t          t          z             } d| f}t	          |ddd          \  }|d         }d}||k    sJ d S )Nr"   r#   Fr   r%   z3function test(x, y)
    z = x + y
    return z
end
)r   r)   r'   r(   r   exprr+   r,   r   r-   s        r   test_jl_simple_code_nameoutr7   8   sb    AADIieDDDGFAYF	  Xr    c                  v    dt           t          z  f} t          | ddd          \  }|d         }d}||k    sJ d S )Nr"   r#   Fr   r%   z<function test()
    out1 = pi ^ catalan
    return out1
end
)r   r   r   r*   s       r   test_jl_numbersymbolr9   F   sT    W%IieDDDGFAYF	  Xr    c                      dt           t          z  t          gf} t          | dddd          \  }|d         }d}||k    sJ d S )Nr"   r#   Fr   r   inliner%   zfunction test()
    Catalan = 0.915965594177219
    EulerGamma = 0.5772156649015329
    out1 = pi ^ Catalan
    out2 = EulerGamma
    return out1, out2
end
)r   r   r	   r   r*   s       r   test_jl_numbersymbol_no_inliner=   S   sd     "g+z23Ii!%1 1 1GFAYF	  Xr    c                     t           t          z   } t          d| t          t           t          gd          }t	                      }t                      }|                    |g|ddd           |                                }d}||k    sJ d S )Nr"   julia)argument_sequencelanguageFr   z<function test(z, x, y)
    out1 = x + y
    return out1
end
)r'   r(   r   r)   r   r   r   r   )r6   routiner   r   r   r-   s         r   test_jl_code_argument_orderrC   f   s    q5D64Aq!9wWWWG~~HZZFgYuEJJJ__F	  Xr    c                      t           t          z   t          z  } t           t          z
  t          z  }d| |gf}t          |ddd          \  }|d         }d}||k    sJ d S )Nr"   r#   Fr   r%   zafunction test(x, y, z)
    out1 = z .* (x + y)
    out2 = z .* (x - y)
    return out1, out2
end
r&   )expr1expr2r+   r,   r   r-   s         r   test_multiple_results_mrG   v   sn    UAIEUAIE%(IieDDDGFAYF	  Xr    c                  L   t          d          \  } }}t          |t          t          z   t          z            }t          | t          t          z
  t          z            }t          |dt          z            }d|||gf}t          |ddd          \  }|d         }d}	||	k    sJ d S )	NA,B,C   r"   r#   Fr   r%   zffunction test(x, y, z)
    C = z .* (x + y)
    A = z .* (x - y)
    B = 2 * x
    return C, A, B
end
r   r   r'   r(   r)   r   
ABCrE   rF   expr3r+   r,   r   r-   s
             r   test_results_named_unorderedrQ      s    gGAq!QQ	""EQQ	""EQ!E%./IieDDDGFAYF	  Xr    c            	         t          d          \  } }}t          |t          t          z   t          z            }t          | t          t          z
  t          z            }t          |dt          z            }d|||gf}t          |dddt          t          t          f          }|d         d         dk    sJ |d         d	         }d
}	||	k    sJ d S )NrI   rJ   r"   r#   Fr   r   r@   r   r$   r%   zffunction test(x, z, y)
    C = z .* (x + y)
    A = z .* (x - y)
    B = 2 * x
    return C, A, B
end
rK   rL   s
             r   test_results_named_orderedrT      s    gGAq!QQ	""EQQ	""EQ!E%./IYU()1ay2 2 2F!9Q<9$$$$AYq\F	  Xr    c                     ddl m} m}m} d |t                     | t
                    z    |t                    z   dz                                   |  |  |  |  |  |  |  | t          t
          z   t          z                                                                                   gf}t          |ddd          }|d         d         dk    sJ |d         d	         }d
}||k    sJ d S )Nr   )cossintantestlong   r#   Fr   ztestlong.jlr%   an  function testlong(x, y, z)
    out1 = sin(x) .^ 3 + 3 * sin(x) .^ 2 .* cos(y) + 3 * sin(x) .^ 2 .* tan(z) + 3 * sin(x) .* cos(y) .^ 2 + 6 * sin(x) .* cos(y) .* tan(z) + 3 * sin(x) .* tan(z) .^ 2 + cos(y) .^ 3 + 3 * cos(y) .^ 2 .* tan(z) + 3 * cos(y) .* tan(z) .^ 2 + tan(z) .^ 3
    out2 = cos(cos(cos(cos(cos(cos(cos(cos(x + y + z))))))))
    return out1, out2
end
)	(sympy.functions.elementary.trigonometricrV   rW   rX   r'   r(   r)   expandr   )rV   rW   rX   r+   r,   r   r-   s          r   test_complicated_jl_codegenr]      s   HHHHHHHHHHAQ##a&&(1,4466CCCCCCCAEAI$7$7 8 899::;;<<==I YUCCCF!9Q<=((((AYq\F	  Xr    c                  l   ddl m} m} t          d          }d | dt          z            t          t           |t                               | t                    t          | |dt          z                      gf}t          |ddd          \  }|d         d	k    sJ |d
         }d}||k    sJ d S )Nr   )rV   rW   afoorJ   r#   Fr   foo.jlr%   zzfunction foo(x)
    out1 = cos(2 * x)
    y = sin(x)
    out3 = cos(x)
    a = sin(2 * x)
    return out1, y, out3, a
end
)r[   rV   rW   r   r'   r   r(   r   )rV   rW   r_   r+   r,   r   r-   s          r   "test_jl_output_arg_mixed_unorderedrb      s    CCCCCCCCAQqS8Ass1vv#6#6ACCPQRSPSHH@U@UVWIieDDDGF!9    AYF	  Xr    c                      t          dt          dk     ft          dz  t          dk    ft           dz   t          dk    fdd          } d| f}t          |d	dd
          \  }|d         }d}||k    sJ d S )Nr   rJ   r%   r%   TFevaluatepwtestr#   r   z{function pwtest(x)
    out1 = ((x < -1) ? (0) :
    (x <= 1) ? (x .^ 2) :
    (x > 1) ? (2 - x) : (1))
    return out1
end
r   r'   r   pwr+   r,   r   r-   s        r   test_jl_piecewise_rl      s    	Aq2v;AqAv!Aq1uySX	Y	Y	YB2IieDDDGFAYF	  Xr    c                      t          dt          dk     ft          dz  t          dk    ft           dz   t          dk    fd          } d| f}t          |dddd	          \  }|d         }d
}||k    sJ d S )Nr   rd   rJ   r%   re   rh   r#   Fr;   zfunction pwtest(x)
    if (x < -1)
        out1 = 0
    elseif (x <= 1)
        out1 = x .^ 2
    elseif (x > 1)
        out1 = -x + 2
    else
        out1 = 1
    end
    return out1
end
ri   rj   s        r   test_jl_piecewise_no_inlinern      s     
Aq2v;AqAv!Aq1uy	I	IB2Iie"$ $ $GFAYF	  Xr    c                      ddt           z  dt          z  gfdt          dz  dt          z  gfg} t          | ddd          }|d	         d	         d
k    sJ |d	         d         }d}||k    sJ d S )Nr`   rJ   rZ   bar   r#   Fr   r   ra   r%   zfunction foo(x, y)
    out1 = 2 * x
    out2 = 3 * y
    return out1, out2
end
function bar(y)
    out1 = y .^ 2
    out2 = 4 * y
    return out1, out2
end
r'   r(   r   r*   s       r   test_jl_multifcns_per_filers     s    1Q3!*%1ac{';=IYUCCCF!9Q<8####AYq\F		  Xr    c                      ddt           z  dt          z  gfdt          dz  dt          z  gfg} t          | ddd	          }|d
         d
         dk    sJ |d
         d         }dt          j        z   dz   }||k    sJ d S )Nr`   rJ   rZ   rp   rq   r#   TFr   r   ra   r%   r0   z
#
#   See http://www.sympy.org/ for more information.
#
#   This file is part of 'project'
function foo(x, y)
    out1 = 2 * x
    out2 = 3 * y
    return out1, out2
end
function bar(y)
    out1 = y .^ 2
    out2 = 4 * y
    return out1, out2
end
)r'   r(   r   r1   r2   r*   s       r   #test_jl_multifcns_per_file_w_headerru     s    1Q3!*%1ac{';=IYEBBBF!9Q<8####AYq\F(5+<< @ 	 " Xr    c                      ddt           z  dt          z  gfdt          dz  dt          z  gfg} t          | dddd	          \  }|d
         dk    sJ d S )Nr`   rJ   rZ   rp   rq   r#   bazF)prefixr   r   r   zbaz.jlrr   )r+   r,   s     r   test_jl_filename_match_prefixry   /  sj    1Q3!*%1ac{';=Iiu " " "GF!9      r    c                      t          t          dt          z  t          t          z  gg          } dt          t          ddd          |           f}t          |ddd          }|d	         d	         d
k    sJ |d	         d         }d}||k    sJ d S )NrJ   r"   myout1r%   rZ   r#   Fr   r   r$   Kfunction test(x, y, z)
    myout1 = [x 2 * y pi * z]
    return myout1
end
)r   r'   r(   r   r)   r   r   r   )e2r+   r,   r   r-   s        r   test_jl_matrix_namedr~   6  s    	!QqS"Q$ 	!	!B,xA">">CCDIYUCCCF!9Q<9$$$$AYq\F	  Xr    c                      t          ddd          } t          t          dt          z  t          t
          z  gg          }dt          | |d          f}t          |ddd	          \  }|d         }d
}||k    sJ d S )Nr{   r%   rZ   rJ   r"   Frf   r#   r   r|   )r   r   r'   r(   r   r)   r   r   )r{   r}   r+   r,   r   r-   s         r   test_jl_matrix_named_matsymr   E  s    (Aq))F	!QqS"Q$ 	!	!B&"u===>IieDDDGFAYF	  Xr    c                      t          t          t          t          z   dgg          } d| f}t          |ddd          \  }|d         }d}||k    sJ d S )NrZ   r"   r#   Fr   r%   z?function test(x, y)
    out1 = [x x + y 3]
    return out1
end
)r   r'   r(   r   r5   s        r   test_jl_matrix_output_autonamer   T  sh    AqsA;-  DIieDDDGFAYF	  Xr    c                  h   t           t          z   } t          dt           z  dt          z  dt          z  gg          }t          t           gt          gt          gg          }t          t           t          gt          dgg          }d| |||ff}t	          |ddd          \  }|d         }d}||k    sJ d S )	NrJ      r"   r#   Fr   r%   zfunction test(x, y, z)
    out1 = x + y
    out2 = [2 * x 2 * y 2 * z]
    out3 = [x, y, z]
    out4 = [x  y;
    z 16]
    return out1, out2, out3, out4
end
)r'   r(   r   r)   r   )e1r}   e3e4r+   r,   r   r-   s           r    test_jl_matrix_output_autoname_2r   b  s    
a%B	!A#qsAaC!	"	"B	!qcA3	 	 B	!Q!R!	"	"B"b"b)*IieDDDGFAYF	  Xr    c            	         t          d          \  } }t          ddd          }t          |t          t          z   t
          z            }t          |t          ddt          gg                    }t          | dt          z            }d|||gf}t          |dddt          t
          t          f	          \  }|d         }d
}	||	k    sJ d S )NzB,CrM   r%   rZ   rJ   r"   r#   FrS   zafunction test(x, z, y)
    C = z .* (x + y)
    A = [1 2 x]
    B = 2 * x
    return C, A, B
end
)r   r   r   r'   r(   r)   r   r   )
rN   rO   rM   rE   rF   rP   r+   r,   r   r-   s
             r   $test_jl_results_matrix_named_orderedr   w  s    5>>DAqS!QAQQ	""EQAq	{++,,EQ!E%./Iie()1ay2 2 2GFAYF	  Xr    c            	      z   t          ddd          } t          ddd          }t          ddd          }t          ddd          }dt          || d	d d f                   t          || dd d f                   t          || d d df                   gf}t          |d
dd          \  }|d         }d}||k    sJ d S )NrM   rJ   rZ   rN   r%   rO   Dr"   r   r#   Fr   zUfunction test(A)
    B = A[1,:]
    C = A[2,:]
    D = A[:,3]
    return B, C, D
end
r   r   r   )rM   rN   rO   r   r+   r,   r   r-   s           r   test_jl_matrixsymbol_slicer     s    S!QAS!QAS!QAS!QA(1a111g.."1a111g.."1a1g..0 1I ieDDDGFAYF	  Xr    c            	      .   t          ddd          } t          ddd          }t          ddd          }dt          || ddddf                   t          || ddd	df                   gf}t          |d
dd          \  }|d	         }d}||k    sJ d S )NrM   rZ   rq   rN   rJ   rO   r"   r   r%   r#   Fr   zKfunction test(A)
    B = A[1:2,1:2]
    C = A[1:2,2:3]
    return B, C
end
r   rM   rN   rO   r+   r,   r   r-   s          r   test_jl_matrixsymbol_slice2r     s    S!QAS!QAS!QA(1a!QqSk22"1a!QqSk224 5IieDDDGFAYF	  Xr    c            
      4   t          ddd          } t          ddd          }t          ddd          }dt          || d	d d
d df                   t          || d d dd d df                   gf}t          |ddd          \  }|d
         }d}||k    sJ d S )NrM         rN   rJ   rO   rq   r"      r%   rZ   r#   Fr   zYfunction test(A)
    B = A[7:end,2:3:end]
    C = A[1:2:end,1:3:end]
    return B, C
end
r   r   s          r   test_jl_matrixsymbol_slice3r     s    S!QAS!QAS!QA(1aADqDk22"1a!SSqSk224 5IieDDDGFAYF	  Xr    c                     t          ddd          } t          ddd          }dt          || dd d f                   | dd d f         | d d df         | d d df         gf}t          |dd	d	
          \  }|d         }d}||k    sJ d S )NrM   rJ   rZ   rN   r%   r"   r   r#   Fr   zyfunction test(A)
    B = A[1,:]
    out2 = A[2,:]
    out3 = A[:,1]
    out4 = A[:,2]
    return B, out2, out3, out4
end
r   )rM   rN   r+   r,   r   r-   s         r   #test_jl_matrixsymbol_slice_autonamer     s    S!QAS!QA(1a!!!f--q111vq1vq1vFGIieDDDGFAYF	  Xr    c            	         ddl m} m} ddlm}  |dd          \  }} | d          } | d          } | d	          } |d
|          } |d|          }	t          dt          ||         |||	f         ||	         z            fddd          \  }
|
d         }d}||dd|d|	diz  k    s||dd|d|	diz  k    sJ d S d S )Nr   IndexedBaseIdxr   zn mTintegerrM   r'   r(   ijmat_vec_multr#   Fr   r%   zfunction mat_vec_mult(y, A, m, n, x)
    for i = 1:m
        y[i] = 0
    end
    for i = 1:m
        for j = 1:n
            y[i] = %(rhs)s + y[i]
        end
    end
    return y
end
rhszA[,z	] .* x[j]z
x[j] .* A[]sympy.tensorr   r   sympy.core.symbolr   r   r   )r   r   r   nmrM   r'   r(   r   r   r,   r   r-   s                r   test_jl_loopsr     sE   
 .-------))))))75$'''DAqCACACACACA~r!A$!Q$!'='=>"%1 1 1GFAYF
	  h%%qqq!!!)D!EEEEh%%qqq!!!)D!EEEEEE FEEEr    c                     ddl m} m} ddlm}  |dd          \  }}}} | d          } | d          } | d	          }	 |d
|          }
 |d|          } |d|          } |d|          }t          dt          |	|
         ||||f         ||
|||f         z            fddd          \  }|d         }d}||k    sJ d S )Nr   r   r   zn m o pTr   rM   rN   r(   r   r   kltensorthingr#   Fr   r%   a-  function tensorthing(y, A, B, m, n, o, p)
    for i = 1:m
        y[i] = 0
    end
    for i = 1:m
        for j = 1:n
            for k = 1:o
                for l = 1:p
                    y[i] = A[i,j,k,l] .* B[j,k,l] + y[i]
                end
            end
        end
    end
    return y
end
r   )r   r   r   r   r   oprM   rN   r(   r   r   r   r   r,   r   r-   s                    r   *test_jl_tensor_loops_multiple_contractionsr     s*   --------))))))D111JAq!QCACACACACACACA}b1qAqz!Aq!QJ-/G&H&HIe5: : :GFAYF	 " Xr    c                      t          t          t          dz            } d| f}t          |ddd          \  }|d         }d}||k    sJ d S )NrJ   mysqrr#   Fr   r%   z2function mysqr(x)
    x = x .^ 2
    return x
end
)r   r'   r   r5   s        r   test_jl_InOutArgumentr     sb    Aq!tD$IieDDDGFAYF	  Xr    c                  `   t          t          t          dz  t          z             } d| f}t          |dddt          t          f          \  }|d         }d}||k    sJ t          t          t          dz  t          z             } d| f}t          |ddd          \  }|d         }d}||k    sJ d S )	NrJ   r"   r#   FrS   r%   z8function test(x, y)
    x = x .^ 2 + y
    return x
end
r   )r   r'   r(   r   r5   s        r   test_jl_InOutArgument_orderr   )  s    Aq!tax  DIi!aU< < <GFAYF	  XAq!tax  DIieDDDGFAYF	  Xr    c                      t          d          } d | t                                        t                    t          j        gf}t          |ddd          \  }|d         }d}||k    sJ d S )Nfr"   r#   Fr   r%   zfunction test(x)
    # unsupported: Derivative(f(x), x)
    # unsupported: zoo
    out1 = Derivative(f(x), x)
    out2 = zoo
    return out1, out2
end
)r
   r'   diffr   ComplexInfinityr   )r   r+   r,   r   r-   s        r   test_jl_not_supportedr   E  su    A!!A$$))A,,(9:;IieDDDGFAYF	  Xr    c            	         t          d          \  } }}}t          d| |z  fddd|f          }|d         d         }d}||k    sJ t          d| |z  |z   fddd| |f||f	          }|d         d         }d
}||k    sJ d S )Nzx y z tr   r#   F)r   r   global_varsr   r%   z4function f(x)
    out1 = x .* y
    return out1
end
)r   r   r@   r   z;function f(x, y)
    out1 = x .* y + z
    return out1
end
)r   r   )r'   r(   r)   tr,   r   r-   s          r   test_global_vars_octaver   V  s    ##JAq!Qc1Q3Ze"#' ' 'FAYq\F	  Xc1Q3q5\75()1vAq6C C CFAYq\F	  Xr    );ior   
sympy.corer   r   r   r   r   r	   r
   sympy.core.relationalr   $sympy.functions.elementary.piecewiser   sympy.matricesr   r   sympy.utilities.codegenr   r   r   sympy.testing.pytestr   r1   r'   r(   r)   r   r.   r3   r7   r9   r=   rC   rG   rQ   rT   r]   rb   rl   rn   rs   ru   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r   <module>r      s         H H H H H H H H H H H H H H H H H H * * * * * * : : : : : : / / / / / / / / G G G G G G G G G G & & & & & &  ''

1a      &  
 
 
   $     "  (  *  *  (      0  (  2! ! !        *  *  *  $  $  $G G GB     F    8  "    r    