Ë
    7^(h&0  ã                   ó  — d dl mZ d dl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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+y)é    )ÚStringIO)ÚSÚsymbolsÚpiÚCatalanÚ
EulerGammaÚFunction)ÚEquality)Ú	Piecewise)ÚRustCodeGenÚ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_rsÚgetvalue)Úcode_genÚoutputÚsources      úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/utilities/tests/test_codegen_rust.pyÚtest_empty_rust_coder      sA   € Ü‹}€HÜ‹Z€FØ×Ñ�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Ú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+      s[   € Øœ!œa™%¤™Ð#€IÜ�i °¸UÔC�G€FØ�!‰9˜	Ò!Ð!Ð!Ø�A‰Y€Fð	ð ð �XÒÐÑr   c                  óð   — dt         t        z   t        z  f} t        | ddd¬«      \  }|d   dk(  sJ ‚|d   }d	t        j
                  z  }|j                  d
«      j                  «       }dd|iz  }||k(  sJ ‚y )Nr   r    TFr   r   r!   r"   úCode generated with SymPy %séL   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ÔB�G€FØ�!‰9˜	Ò!Ð!Ð!Ø�A‰Y€FØ0´5×3DÑ3DÑD€KØ×%Ñ% bÓ)×0Ñ0Ó2€Lð
	ð 
˜Ð&ñ'€Hð �XÒÐÑr   c                  ó€   — t        t        t        t        z   «      } d| f}t	        |ddd¬«      \  }|d   }d}||k(  sJ ‚y )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:   ;   sP   € Ü”AœœA™Ó€DØ˜�€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �XÒÐÑr   c                  óŒ   — dt         t        z  f} t        | ddd¬«      \  }|d   }dt        j                  d«      z  }||k(  sJ ‚y )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   sU   € ØœœW™Ð%€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ô
 	�‰�bÓñ€Hð �XÒÐÑr   c                  óÈ   — dt         t        z  t        gf} t        | dddd¬«      \  }|d   }dt        j                  d«      ›d	t        j                  d«      ›d
�}||k(  sJ ‚y )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   si   € ð œ"œg™+¤zÐ2Ð3€IÜ�i °Ø!¨$ô0�G€Fà�A‰Y�Fô 
�‰�rÕ	œJ×,Ñ,¨RÕ0ð2€Hð �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   Ú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   sp   € ÜŒq‰5€DÜ˜6 4¼A¼qÄ!¸9ÈvÔV€GÜ‹}€HÜ‹Z€FØ×Ñ�g�Y ¨°uÀEÐÔ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"   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_   € ä”‰U”A‰I€EÜ”‰U”A‰I€EØ˜% ˜Ð(€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �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"   z„fn 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Ó�G€A€qˆ!Ü�QœœQ™¤™	Ó"€EÜ�QœœQ™¤™	Ó"€EÜ�Q˜œ!™Ó€EØ˜% ¨Ð.Ð/€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �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 )NrN   rO   r   r    F©r   r   rE   r   r!   r"   z„fn 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Ó�G€A€qˆ!Ü�QœœQ™¤™	Ó"€EÜ�QœœQ™¤™	Ó"€EÜ�Q˜œ!™Ó€EØ˜% ¨Ð.Ð/€IÜ�Y ¨u¸EÜ()¬1¬a yô2€Fà�!‰9�Q‰<˜9Ò$Ð$Ð$Ø�A‰Y�q‰\€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.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´©E´A©I«Ó$7Ó 8Ó9Ó:Ó;Ó<Ó=ðð€Iô �Y ¨u¸EÔB€FØ�!‰9�Q‰<˜=Ò(Ð(Ð(Ø�A‰Y�q‰\€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   )r[   r\   ÚaÚfoorO   r    Fr   úfoo.rsr"   z¤fn 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Ø™˜Qœq™S›¤8¬A©s´1«vÓ#6¹¼A»ÄÈÉCÐPQÔRSÑPSËHÓ@UÐVÐW€IÜ�i °¸UÔC�G€FØ�!‰9˜Ò Ð Ð Ø�A‰Y€Fð	ð ð �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   éÿÿÿÿrO   r"   ©r"   TF)ÚevaluateÚpwtestr    r   zÂfn 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   à   su   € Ü	�A”q˜2‘v�;¤ A¡¤q¨A¡v ´!°°A±´q¸1±u°¸yÐSXÔ	Y€BØ˜2�€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �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   ri   rO   r"   rj   rl   r    FTr@   z�fn 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   ö   sy   € ô 
�A”q˜2‘v�;¤ A¡¤q¨A¡v ´!°°A±´q¸1±u°¸yÓ	I€BØ˜2�€IÜ�i °¸UØ!ô#�G€Fà�A‰Y€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}||k(  sJ ‚y )Nre   rO   r_   Úbaré   r    Fr   r   rf   r"   zÂ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'   s       r   Útest_multifcns_per_filerw     s{   € Ø˜1œQ™3 ¤!¡˜*Ð%¨´°1±°a¼±c¨{Ð';Ð=€IÜ�Y ¨u¸EÔB€FØ�!‰9�Q‰<˜8Ò#Ð#Ð#Ø�A‰Y�q‰\€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  }|j                  d«      j                  «       }dd|iz  }||k(  sJ ‚y )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°   € Ø˜1œQ™3 ¤!¡˜*Ð%¨´°1±°a¼±c¨{Ð';Ð=€IÜ�Y ¨t¸5ÔA€FØ�!‰9�Q‰<˜8Ò#Ð#Ð#Ø�A‰Y�q‰\€FØ0´5×3DÑ3DÑD€KØ×%Ñ% bÓ)×0Ñ0Ó2€Lð	ð" 
˜Ð&ñ%'€Hð& �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 )Nre   rO   r_   rt   ru   r    ÚbazF)Úprefixr   r   r   zbaz.rsrv   )r(   r)   s     r   Útest_filename_match_prefixr}   9  sW   € Ø˜1œQ™3 ¤!¡˜*Ð%¨´°1±°a¼±c¨{Ð';Ð=€IÜ�i °¸eØ ô"�G€Fà�!‰9˜Ò Ð Ñ r   c                  óx   — t        t        t        dz  «      } d| f}t        |ddd¬«      \  }|d   }d}||k(  sJ ‚y )NrO   Úmysqrr    Fr   r"   z9fn mysqr(x: f64) -> f64 {
    let x = x.powi(2);
    x
}
)r
   r$   r   r8   s        r   Útest_InOutArgumentr€   @  sP   € Ü”A”q˜!‘tÓ€DØ˜$�€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �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 )	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¯   € ä”A”q˜!‘tœa‘xÓ €DØ˜�€IÜ�i °Ø!´a¼°Uô<�G€Fà�A‰Y€Fð	ð ð �XÒÐÐä”A”q˜!‘tœa‘xÓ €DØ˜�€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �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"   z«fn 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  sa   € Ü�‹€AØ™!œA›$Ÿ)™)¤A›,¬×(9Ñ(9Ð:Ð;€IÜ�i °¸UÔC�G€FØ�A‰Y€Fð	ð ð �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"   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­   € Ü˜Ó#�J€A€qˆ!ˆQÜ�c˜1˜Q™3�Z °¸UØ"# ô'€Fà�A‰Y�q‰\€Fð	ð ð �XÒÐÐä�c˜1˜Q™3˜q™5�\ 6°%¸uØ()¨1 v¸A¸q¸6ôC€Fà�A‰Y�q‰\€Fð	ð ð �XÒÐÑ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Ý &Û ñ �'Ó
�€€1€aòòòò.òð ñó ðò$ò ò"ò(ò*ò0ò(ð, ñó ðò"ò(ò:!òòò8ó"r   