
    sgoH                     p   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:y)*    )StringIO)SsymbolsEqpiCatalan
EulerGammaFunction)Equality)	Piecewise)MatrixMatrixSymbol)JuliaCodeGencodegenmake_routine)XFAILNzx,y,zc                      t               } t               }| j                  g |ddd       |j                         }|dk(  sJ y )NfileFheaderempty )r   r   dump_jlgetvalue)code_genoutputsources      [/var/www/html/venv/lib/python3.12/site-packages/sympy/utilities/tests/test_codegen_julia.pytest_empty_jl_coder      sA    ~HZFRU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 y )	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.      s[    !a%#Iie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 y )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   %   so    !a%#IiUCGF!9	!!!AYF(5+<+<< @ 	  Xr    c                      t        t        t        t        z         } d| f}t	        |ddd      \  }|d   }d}||k(  sJ y )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   sP    AADIieDGFAYF	  Xr    c                  `    dt         t        z  f} t        | ddd      \  }|d   }d}||k(  sJ y )Nr"   r#   Fr   r%   z<function test()
    out1 = pi ^ catalan
    return out1
end
)r   r   r   r*   s       r   test_jl_numbersymbolr9   F   sE    W%IieDGFAYF	  Xr    c                  n    dt         t        z  t        gf} t        | dddd      \  }|d   }d}||k(  sJ y )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   sQ     "g+z23Ii!%1GFAYF	  Xr    c                      t         t        z   } t        d| t        t         t        gd      }t	               }t               }|j                  |g|ddd       |j                         }d}||k(  sJ y )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   sp    q5D64Aq!9wWG~HZFgYuE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 y )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   s_    UAIEUAIE%(Iie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      \  }|d   }d}	||	k(  sJ y )	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DGFAYF	  Xr    c            	      H   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 y )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2F!9Q<9$$$AYq\F	  Xr    c                  l   ddl m} m}m} d |t               | t
              z    |t              z   dz  j                          |  |  |  |  |  |  |  | t        t
        z   t        z                                                   gf}t        |ddd      }|d   d   dk(  sJ |d   d	   }d
}||k(  sJ y )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AQ#a&(1,446CCCAEAI$7 89:;<=I YUCF!9Q<=(((AYq\F	  Xr    c                     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 y )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AQqS8As1v#6ACPQRSPSH@UVWIieDGF!9   AYF	  Xr    c                      t        dt        dk  ft        dz  t        dk  ft         dz   t        dkD  fdd      } d| f}t        |d	dd
      \  }|d   }d}||k(  sJ y )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      su    	Aq2v;AqAv!Aq1uySX	YB2IieDGFAYF	  Xr    c                      t        dt        dk  ft        dz  t        dk  ft         dz   t        dkD  fd      } d| f}t        |dddd	      \  }|d   }d
}||k(  sJ y )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      sy     
Aq2v;AqAv!Aq1uy	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 y )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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 y )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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 y )Nr`   rJ   rZ   rp   rq   r#   bazF)prefixr   r   r   zbaz.jlrr   )r+   r,   s     r   test_jl_filename_match_prefixry   /  sW    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 y )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DIYU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 y )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  ss    (Aq)F	!QqS"Q$ 	!B&"u=>IieDGFAYF	  Xr    c                      t        t        t        t        z   dgg      } d| f}t        |ddd      \  }|d   }d}||k(  sJ y )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  sV    AqsA;- DIieDGFAYF	  Xr    c                  (   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 y )	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DGFAYF	  Xr    c            	      B   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 y )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2GFAYF	  Xr    c            	         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 y )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1g."1a1g."1a1g.0 1I ie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 y )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"1a!QqSk24 5IieDGFAYF	  Xr    c            
          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 y )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"1a!SqSk24 5Iie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 y )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1vq1vq1vFGIie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 y y )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     s    
 .)5$'DAqCACACACACA~r!A$!Q$!'=>"%1GFAYF
	  h%q!)D!EEEh%q!)D!EEEG FE Fr    c                  2   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 y )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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Ie5:GFAYF	 " Xr    c                  x    t        t        t        dz        } d| f}t        |ddd      \  }|d   }d}||k(  sJ y )NrJ   mysqrr#   Fr   r%   z2function mysqr(x)
    x = x .^ 2
    return x
end
)r   r'   r   r5   s        r   test_jl_InOutArgumentr     sP    Aq!tD$Iie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 y )	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DGFAYF	  Xr    c                      t        d      } d | t              j                  t              t        j                  gf}t        |ddd      \  }|d   }d}||k(  sJ y )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  sa    A!A$))A,(9(9:;Iie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 y )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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 * : / G G &  '
1a&
  $ "(**(   0(2!***$$$GB F8"r    