
    \h&0                        S SK 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Jr  S SKJr  S SKr\" S5      u  rrrS	 rS
 rS rS rS r\S 5       rS rS rS rS r S r!S r"S r#\S 5       r$S r%S r&S r'S r(S r)S r*S r+g)    )StringIO)SsymbolspiCatalan
EulerGammaFunction)Equality)	Piecewise)RustCodeGencodegenmake_routine)XFAILNzx,y,zc                      [        5       n [        5       nU R                  / USSSS9  UR                  5       nUS:X  d   eg )NfileFheaderempty )r   r   dump_rsgetvalue)code_genoutputsources      _/var/www/auris/envauris/lib/python3.13/site-packages/sympy/utilities/tests/test_codegen_rust.pytest_empty_rust_coder      sA    }HZFRUC__FR<<    c                  ~    S[         [        -   [        -  4n [        U SSSS9u  nUS   S:X  d   eUS   nSnX#:X  d   eg )	NtestRustFr   r   test.rs   zNfn test(x: f64, y: f64, z: f64) -> f64 {
    let out1 = z*(x + y);
    out1
}
xyzr   	name_exprresultr   expecteds       r   test_simple_rust_coder+      sY    !a%#IiUCGF!9	!!!AYF	  r   c                      S[         [        -   [        -  4n [        U SSSS9u  nUS   S:X  d   eUS   nS	[        R
                  -  nUR                  S
5      R                  5       nSSU0-  nX%:X  d   eg )Nr   r    TFr   r   r!   r"   Code generated with SymPy %sL   z/*
 *%(version_line)s
 *
 *              See http://www.sympy.org/ for more information.
 *
 *                       This file is part of 'project'
 */
fn test(x: f64, y: f64, z: f64) -> f64 {
    let out1 = z*(x + y);
    out1
}
version_line)r$   r%   r&   r   sympy__version__centerrstripr(   r)   r   version_strr/   r*   s         r   test_simple_code_with_headerr6   $   s    !a%#IiEBGF!9	!!!AYF053D3DDK%%b)002L
	 
&'H r   c                  z    [        [        [        [        -   5      n SU 4n[	        USSSS9u  nUS   nSnX4:X  d   eg )Nr   r    Fr   r"   z<fn test(x: f64, y: f64) -> f64 {
    let z = x + y;
    z
}
)r
   r&   r$   r%   r   exprr(   r)   r   r*   s        r   test_simple_code_nameoutr:   ;   sN    AADIiUCGFAYF	  r   c                      S[         [        -  4n [        U SSSS9u  nUS   nS[        R                  " S5      -  nX#:X  d   eg )Nr   r    Fr   r"   z\fn test() -> f64 {
    const Catalan: f64 = %s;
    let out1 = PI.powf(Catalan);
    out1
}
   )r   r   r   evalfr'   s       r   test_numbersymbolr>   I   sS    W%IiUCGFAYF	
 	bH r   c                      S[         [        -  [        /4n [        U SSSSS9u  nUS   nS[        R                  " S5      < S	[        R                  " S5      < S
3nX#:X  d   eg )Nr   r    FTr   r   inliner"   z3fn test() -> (f64, f64) {
    const Catalan: f64 = r<   z;
    const EulerGamma: f64 = zR;
    let out1 = PI.powf(Catalan);
    let out2 = EulerGamma);
    (out1, out2)
}
)r   r   r   r   r=   r'   s       r   test_numbersymbol_inlinerB   W   sg     "g+z23Ii!$0GFAYF 
r	J,,R02H r   c                      [         [        -   n [        SU [        [         [        /SS9n[	        5       n[        5       nUR                  U/USSSS9  UR                  5       nSnXE:X  d   eg )Nr   rust)argument_sequencelanguageFr   zJfn test(z: f64, x: f64, y: f64) -> f64 {
    let out1 = x + y;
    out1
}
)r$   r%   r   r&   r   r   r   r   )r9   routiner   r   r   r*   s         r   test_argument_orderrH   j   sn    q5D64Aq!9vVG}HZFgYuEJ__F	  r   c                      [         [        -   [        -  n [         [        -
  [        -  nSX/4n[        USSSS9u  nUS   nSnXE:X  d   eg )Nr   r    Fr   r"   zwfn test(x: f64, y: f64, z: f64) -> (f64, f64) {
    let out1 = z*(x + y);
    let out2 = z*(x - y);
    (out1, out2)
}
r#   )expr1expr2r(   r)   r   r*   s         r   test_multiple_results_rustrL   z   s[    UAIEUAIE%(IiUCGFAYF	  r   c                     [        S5      u  pn[        U[        [        -   [        -  5      n[        U [        [        -
  [        -  5      n[        US[        -  5      nSX4U/4n[        USSSS9u  nUS   nSn	X:X  d   eg )	NA,B,C   r   r    Fr   r"   zfn test(x: f64, y: f64, z: f64) -> (f64, f64, f64) {
    let C = z*(x + y);
    let A = z*(x - y);
    let B = 2*x;
    (C, A, B)
}
r   r
   r$   r%   r&   r   
ABCrJ   rK   expr3r(   r)   r   r*   s
             r   test_results_named_unorderedrV      s    gGA!QQ	"EQQ	"EQ!E%./IiUCGFAYF	  r   c            	      @   [        S5      u  pn[        U[        [        -   [        -  5      n[        U [        [        -
  [        -  5      n[        US[        -  5      nSX4U/4n[        USSS[        [        [        4S9nUS   S   S:X  d   eUS   S	   nS
n	X:X  d   eg )NrN   rO   r   r    Fr   r   rE   r   r!   r"   zfn test(x: f64, z: f64, y: f64) -> (f64, f64, f64) {
    let C = z*(x + y);
    let A = z*(x - y);
    let B = 2*x;
    (C, A, B)
}
rP   rQ   s
             r   test_results_named_orderedrY      s    gGA!QQ	"EQQ	"EQ!E%./IYuE()1ay2F!9Q<9$$$AYq\F	  r   c                  h   SSK Jn JnJn  SU" [        5      U " [
        5      -   U" [        5      -   S-  R                  5       U " U " U " U " U " U " U " U " [        [
        -   [        -   5      5      5      5      5      5      5      5      /4n[        USSSS9nUS   S   S:X  d   eUS   S	   nS
nXV:X  d   eg )Nr   )cossintantestlong   r    Fr   ztestlong.rsr"   a  fn testlong(x: f64, y: f64, z: f64) -> (f64, f64) {
    let out1 = x.sin().powi(3) + 3*x.sin().powi(2)*y.cos() + 3*x.sin().powi(2)*z.tan() + 3*x.sin()*y.cos().powi(2) + 6*x.sin()*y.cos()*z.tan() + 3*x.sin()*z.tan().powi(2) + y.cos().powi(3) + 3*y.cos().powi(2)*z.tan() + 3*y.cos()*z.tan().powi(2) + z.tan().powi(3);
    let out2 = (x + y + z).cos().cos().cos().cos().cos().cos().cos().cos();
    (out1, out2)
}
)	(sympy.functions.elementary.trigonometricr[   r\   r]   r$   r%   r&   expandr   )r[   r\   r]   r(   r)   r   r*   s          r   test_complicated_rs_codegenrb      s    HHAQ#a&(1,446CCCAEAI$7 89:;<=I YuEBF!9Q<=(((AYq\F		  r   c                     SSK Jn Jn  [        S5      nSU " S[        -  5      [        [        U" [        5      5      U " [        5      [        X!" S[        -  5      5      /4n[        USSSS9u  nUS   S	:X  d   eUS
   nSnXV:X  d   eg )Nr   )r[   r\   afoorO   r    Fr   foo.rsr"   zfn foo(x: f64) -> (f64, f64, f64, f64) {
    let out1 = (2*x).cos();
    let y = x.sin();
    let out3 = x.cos();
    let a = (2*x).sin();
    (out1, y, out3, a)
}
)r`   r[   r\   r   r$   r
   r%   r   )r[   r\   rd   r(   r)   r   r*   s          r   test_output_arg_mixed_unorderedrg      s    CAQqS8As1v#6ACPQRSPSH@UVWIiUCGF!9   AYF	  r   c                      [        S[        S:  4[        S-  [        S:*  4[        * S-   [        S:  4SSS9n SU 4n[        US	SSS
9u  nUS   nSnX4:X  d   eg )Nr   rO   r"   r"   TF)evaluatepwtestr    r   zfn pwtest(x: f64) -> f64 {
    let out1 = if (x < -1.0) {
        0
    } else if (x <= 1.0) {
        x.powi(2)
    } else if (x > 1.0) {
        2 - x
    } else {
        1
    };
    out1
}
r   r$   r   pwr(   r)   r   r*   s        r   test_piecewise_rp      ss    	Aq2v;AqAv!Aq1uySX	YB2IiUCGFAYF	  r   c                      [        S[        S:  4[        S-  [        S:*  4[        * S-   [        S:  4S5      n SU 4n[        USSSS	S
9u  nUS   nSnX4:X  d   eg )Nr   ri   rO   r"   rj   rl   r    FTr@   zfn pwtest(x: f64) -> f64 {
    let out1 = if (x < -1) { 0 } else if (x <= 1) { x.powi(2) } else if (x > 1) { -x + 2 } else { 1 };
    out1
}
rm   rn   s        r   test_piecewise_inlinerr      sw     
Aq2v;AqAv!Aq1uy	IB2IiU!#GFAYF	  r   c                      SS[         -  S[        -  /4S[        S-  S[        -  /4/n [        U SSSS9nUS	   S	   S
:X  d   eUS	   S   nSnX#:X  d   eg )Nre   rO   r_   bar   r    Fr   r   rf   r"   zfn foo(x: f64, y: f64) -> (f64, f64) {
    let out1 = 2*x;
    let out2 = 3*y;
    (out1, out2)
}
fn bar(y: f64) -> (f64, f64) {
    let out1 = y.powi(2);
    let out2 = 4*y;
    (out1, out2)
}
r$   r%   r   r'   s       r   test_multifcns_per_filerw     sy    1Q3!*%1ac{';=IYuEBF!9Q<8###AYq\F		  r   c                     SS[         -  S[        -  /4S[        S-  S[        -  /4/n [        U SSSS	9nUS
   S
   S:X  d   eUS
   S   nS[        R                  -  nUR                  S5      R                  5       nSSU0-  nX%:X  d   eg )Nre   rO   r_   rt   ru   r    TFr   r   rf   r"   r-   r.   aZ  /*
 *%(version_line)s
 *
 *              See http://www.sympy.org/ for more information.
 *
 *                       This file is part of 'project'
 */
fn foo(x: f64, y: f64) -> (f64, f64) {
    let out1 = 2*x;
    let out2 = 3*y;
    (out1, out2)
}
fn bar(y: f64) -> (f64, f64) {
    let out1 = y.powi(2);
    let out2 = 4*y;
    (out1, out2)
}
r/   )r$   r%   r   r0   r1   r2   r3   r4   s         r    test_multifcns_per_file_w_headerry     s    1Q3!*%1ac{';=IYt5AF!9Q<8###AYq\F053D3DDK%%b)002L	" 
&%'H& r   c                      SS[         -  S[        -  /4S[        S-  S[        -  /4/n [        U SSSSS	9u  nUS
   S:X  d   eg )Nre   rO   r_   rt   ru   r    bazF)prefixr   r   r   zbaz.rsrv   )r(   r)   s     r   test_filename_match_prefixr}   9  sW    1Q3!*%1ac{';=Iie "GF!9   r   c                  r    [        [        [        S-  5      n SU 4n[        USSSS9u  nUS   nSnX4:X  d   eg )NrO   mysqrr    Fr   r"   z9fn mysqr(x: f64) -> f64 {
    let x = x.powi(2);
    x
}
)r
   r$   r   r8   s        r   test_InOutArgumentr   @  sN    Aq!tD$IiUCGFAYF	  r   c                     [        [        [        S-  [        -   5      n SU 4n[        USSS[        [        4S9u  nUS   nSnX4:X  d   e[        [        [        S-  [        -   5      n SU 4n[        USSSS9u  nUS   nSnX4:X  d   eg )	NrO   r   r    FrX   r"   zDfn test(x: f64, y: f64) -> f64 {
    let x = x.powi(2) + y;
    x
}
r   )r
   r$   r%   r   r8   s        r   test_InOutArgument_orderr   N  s    Aq!tax DIi!aU<GFAYF	  Aq!tax DIiUCGFAYF	  r   c                      [        S5      n SU " [        5      R                  [        5      [        R                  /4n[        USSSS9u  nUS   nSnX4:X  d   eg )Nfr   r    Fr   r"   zfn test(x: f64) -> (f64, f64) {
    // unsupported: Derivative(f(x), x)
    // unsupported: zoo
    let out1 = Derivative(f(x), x);
    let out2 = zoo;
    (out1, out2)
}
)r	   r$   diffr   ComplexInfinityr   )r   r(   r)   r   r*   s        r   test_not_supportedr   j  s_    A!A$))A,(9(9:;IiUCGFAYF	  r   c            	          [        S5      u  pp#[        SX-  4SSSU4S9nUS   S   nSnXV:X  d   e[        SX-  U-   4SSSX4X#4S	9nUS   S   nS
nXV:X  d   eg )Nzx y z tr   r    F)r   r   global_varsr   r"   z5fn f(x: f64) -> f64 {
    let out1 = x*y;
    out1
}
)r   r   rE   r   zAfn f(x: f64, y: f64) -> f64 {
    let out1 = x*y + z;
    out1
}
)r   r   )r$   r%   r&   tr)   r   r*   s          r   test_global_vars_rustr   {  s    #JA!c13ZU"#'FAYq\F	  c13q5\6%u()vA6CFAYq\F	  r   ),ior   
sympy.corer   r   r   r   r   r	   sympy.core.relationalr
   $sympy.functions.elementary.piecewiser   sympy.utilities.codegenr   r   r   sympy.testing.pytestr   r0   r$   r%   r&   r   r+   r6   r:   r>   rB   rH   rL   rV   rY   rb   rg   rp   rr   rw   ry   r}   r   r   r   r    r   r   <module>r      s     D D * : F F &  '
1a.  $ "(*0(,  "(:!8"r   